The machine check architecture for Hygon Dhyana CPU is similar to the
AMD family 17h one. Add vendor checking for Hygon Dhyana to share the
code path of AMD family 17h.
Signed-off-by: Pu Wen <puwen@hygon.cn>
Acked-by: Jan Beulich <jbeulich@suse.com>
[Rebase over
0cd074144cb "x86/cpu: Renumber X86_VENDOR_* to form a bitmap"]
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
hap_paddr_bits = PADDR_BITS;
}
- if (c->x86_vendor != X86_VENDOR_AMD)
+ if (!(c->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON)))
park_offline_cpus = opt_mce;
initialize_cpu_data(0);
void __init amd_nonfatal_mcheck_init(struct cpuinfo_x86 *c)
{
- if (c->x86_vendor != X86_VENDOR_AMD)
+ if (!(c->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON)))
return;
- /* Assume we are on K8 or newer AMD CPU here */
+ /* Assume we are on K8 or newer AMD or Hygon CPU here */
/* The threshold bitfields in MSR_IA32_MC4_MISC has
* been introduced along with the SVME feature bit. */
switch ( c->x86_vendor )
{
case X86_VENDOR_AMD:
+ case X86_VENDOR_HYGON:
inited = amd_mcheck_init(c);
break;
/* MSRs that the HV will take care of */
case MSR_K8_HWCR:
- if ( c->x86_vendor == X86_VENDOR_AMD )
+ if ( c->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON) )
reason = "HV will operate HWCR";
else
- reason = "only supported on AMD";
+ reason = "only supported on AMD or Hygon";
break;
default:
amd_mcheck_init(struct cpuinfo_x86 *ci)
{
uint32_t i;
- enum mcequirk_amd_flags quirkflag = mcequirk_lookup_amd_quirkdata(ci);
+ enum mcequirk_amd_flags quirkflag = 0;
+
+ if ( ci->x86_vendor != X86_VENDOR_HYGON )
+ quirkflag = mcequirk_lookup_amd_quirkdata(ci);
/* Assume that machine check support is available.
* The minimum provided support is at least the K8. */
*/
switch (c->x86_vendor) {
case X86_VENDOR_AMD:
- /* Assume we are on K8 or newer AMD CPU here */
+ case X86_VENDOR_HYGON:
+ /* Assume we are on K8 or newer AMD or Hygon CPU here */
amd_nonfatal_mcheck_init(c);
break;
break;
case X86_VENDOR_AMD:
+ case X86_VENDOR_HYGON:
ret = vmce_amd_rdmsr(v, msr, val);
break;
break;
case X86_VENDOR_AMD:
+ case X86_VENDOR_HYGON:
ret = vmce_amd_wrmsr(v, msr, val);
break;