cpu/intel/microcode: Create helper function to load microcode patch

This patch refactors the microcode loading and reloading API with a
helper function that perform the actual MSR write operation after
taking the microcode pointer from the caller function.

Also, convert the microcode loading failure msg type from `BIOS_INFO`
to `BIOS_ERR` to catch the error in proper.

TEST=Able to perform microcode loading on google/kano.

Signed-off-by: Subrata Banik <subratabanik@google.com>
Change-Id: I9a7cdc2d2c9211f1e0c7921015126f7a1be87761
Reviewed-on: https://review.coreboot.org/c/coreboot/+/65249
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/cpu/intel/microcode/microcode.c b/src/cpu/intel/microcode/microcode.c
index 5ed6190..4c85a56 100644
--- a/src/cpu/intel/microcode/microcode.c
+++ b/src/cpu/intel/microcode/microcode.c
@@ -68,10 +68,30 @@
 
 #define MICROCODE_CBFS_FILE "cpu_microcode_blob.bin"
 
-void intel_microcode_load_unlocked(const void *microcode_patch)
+static int load_microcode(const struct microcode *ucode_patch)
 {
 	u32 current_rev;
 	msr_t msr;
+
+	msr.lo = (unsigned long)ucode_patch + sizeof(struct microcode);
+	msr.hi = 0;
+	wrmsr(IA32_BIOS_UPDT_TRIG, msr);
+
+	current_rev = read_microcode_rev();
+	if (current_rev == ucode_patch->rev) {
+		printk(BIOS_INFO, "microcode: updated to revision "
+		    "0x%x date=%04x-%02x-%02x\n", read_microcode_rev(),
+		    ucode_patch->date & 0xffff, (ucode_patch->date >> 24) & 0xff,
+		    (ucode_patch->date >> 16) & 0xff);
+		return 0;
+	}
+
+	return -1;
+}
+
+void intel_microcode_load_unlocked(const void *microcode_patch)
+{
+	u32 current_rev;
 	const struct microcode *m = microcode_patch;
 
 	if (!m)
@@ -93,20 +113,9 @@
 	}
 #endif
 
-	msr.lo = (unsigned long)m + sizeof(struct microcode);
-	msr.hi = 0;
-	wrmsr(IA32_BIOS_UPDT_TRIG, msr);
-
-	current_rev = read_microcode_rev();
-	if (current_rev == m->rev) {
-		printk(BIOS_INFO, "microcode: updated to revision "
-		    "0x%x date=%04x-%02x-%02x\n", read_microcode_rev(),
-		    m->date & 0xffff, (m->date >> 24) & 0xff,
-		    (m->date >> 16) & 0xff);
-		return;
-	}
-
-	printk(BIOS_INFO, "microcode: Update failed\n");
+	printk(BIOS_INFO, "microcode: load microcode patch\n");
+	if (load_microcode(m) < 0)
+		printk(BIOS_ERR, "microcode: Update failed\n");
 }
 
 uint32_t get_current_microcode_rev(void)
@@ -255,8 +264,6 @@
 	if (!CONFIG(RELOAD_MICROCODE_PATCH))
 		return;
 
-	u32 current_rev;
-	msr_t msr;
 	const struct microcode *m = intel_microcode_find();
 
 	if (!m) {
@@ -266,20 +273,8 @@
 
 	printk(BIOS_INFO, "microcode: Re-load microcode patch\n");
 
-	msr.lo = (unsigned long)m + sizeof(struct microcode);
-	msr.hi = 0;
-	wrmsr(IA32_BIOS_UPDT_TRIG, msr);
-
-	current_rev = read_microcode_rev();
-	if (current_rev == m->rev) {
-		printk(BIOS_INFO, "microcode: updated to revision "
-		    "0x%x date=%04x-%02x-%02x\n", read_microcode_rev(),
-		    m->date & 0xffff, (m->date >> 24) & 0xff,
-		    (m->date >> 16) & 0xff);
-		return;
-	}
-
-	printk(BIOS_ERR, "microcode: Re-load failed\n");
+	if (load_microcode(m) < 0)
+		printk(BIOS_ERR, "microcode: Re-load failed\n");
 }
 
 #if ENV_RAMSTAGE