diff options
Diffstat (limited to 'xen/arch/x86/cpu/mcheck/mce_amd_quirks.c')
-rw-r--r-- | xen/arch/x86/cpu/mcheck/mce_amd_quirks.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/xen/arch/x86/cpu/mcheck/mce_amd_quirks.c b/xen/arch/x86/cpu/mcheck/mce_amd_quirks.c index 2067c7cda6..7da525c10f 100644 --- a/xen/arch/x86/cpu/mcheck/mce_amd_quirks.c +++ b/xen/arch/x86/cpu/mcheck/mce_amd_quirks.c @@ -29,6 +29,8 @@ static const struct mce_quirkdata mce_amd_quirks[] = { MCEQUIRK_K7_BANK0 }, { 0xf /* cpu family */, ANY /* all models */, ANY /* all steppings */, MCEQUIRK_K8_GART }, + { 0x10 /* cpu family */, ANY /* all models */, ANY /* all steppings */, + MCEQUIRK_F10_GART }, }; enum mcequirk_amd_flags @@ -54,6 +56,8 @@ mcequirk_lookup_amd_quirkdata(struct cpuinfo_x86 *c) int mcequirk_amd_apply(enum mcequirk_amd_flags flags) { + u64 val; + switch (flags) { case MCEQUIRK_K7_BANK0: return 1; /* first bank */ @@ -67,6 +71,10 @@ int mcequirk_amd_apply(enum mcequirk_amd_flags flags) wrmsrl(MSR_IA32_MC4_CTL, ~(1ULL << 10)); wrmsrl(MSR_IA32_MC4_STATUS, 0ULL); break; + case MCEQUIRK_F10_GART: + if (rdmsr_safe(MSR_AMD64_MCx_MASK(4), val) == 0) + wrmsr_safe(MSR_AMD64_MCx_MASK(4), val | (1 << 10)); + break; } return 0; |