aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/amd/pi/00730F01/model_16_init.c
diff options
context:
space:
mode:
authorMichał Żygowski <michal.zygowski@3mdeb.com>2018-10-25 15:48:54 +0200
committerPatrick Georgi <pgeorgi@google.com>2019-06-21 09:18:21 +0000
commit319f0370bfe99ce47ea8b883696ad89d19b7c4b9 (patch)
tree9a8a994ca2f1fd220e91e4ec62b54d89730899ca /src/cpu/amd/pi/00730F01/model_16_init.c
parent1a86cda6dbacfbae285fa3d44b3f67bea95367e3 (diff)
src/cpu/amd/pi/00730F01: Add microcode update infrastructure for fam16h PI
Code is based on microcode update procedure from fam10-15h with necessary microcode blob structure updates for fam16h. Currently updating microcode in romstage seem to be impossible. AGESA is overriding the microcode patch regardles of the current microcode revision patched on CPU. Use ramstage CPU init procedures to update microcode easily. Tested with microcode blob 07030106 released 2018-02-09 from platomav/CPUMicrocodes GitHub repository on apu2 platform. TEST=boot Linux kernel 4.14.50 on PC Engines apu2 and run dmesg to see patch_level=0x07030106 on all cores Change-Id: Ic15cba06f3cd9cfbc538b6764b158fa699f0ecf6 Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/29272 Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/cpu/amd/pi/00730F01/model_16_init.c')
-rw-r--r--src/cpu/amd/pi/00730F01/model_16_init.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/cpu/amd/pi/00730F01/model_16_init.c b/src/cpu/amd/pi/00730F01/model_16_init.c
index fe828900fc..b0449a73b2 100644
--- a/src/cpu/amd/pi/00730F01/model_16_init.c
+++ b/src/cpu/amd/pi/00730F01/model_16_init.c
@@ -14,6 +14,7 @@
*/
#include <console/console.h>
+#include <cpu/amd/microcode.h>
#include <cpu/x86/msr.h>
#include <cpu/amd/msr.h>
#include <cpu/x86/mtrr.h>
@@ -98,6 +99,8 @@ static void model_16_init(struct device *dev)
msr = rdmsr(HWCR_MSR);
msr.lo |= (1 << 0);
wrmsr(HWCR_MSR, msr);
+
+ update_microcode(cpuid_eax(1));
}
static struct device_operations cpu_dev_ops = {