|
@@ -580,6 +580,24 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /* re-enable TopologyExtensions if switched off by BIOS */
|
|
|
+ if ((c->x86 == 0x15) &&
|
|
|
+ (c->x86_model >= 0x10) && (c->x86_model <= 0x1f) &&
|
|
|
+ !cpu_has(c, X86_FEATURE_TOPOEXT)) {
|
|
|
+ u64 val;
|
|
|
+
|
|
|
+ if (!rdmsrl_amd_safe(0xc0011005, &val)) {
|
|
|
+ val |= 1ULL << 54;
|
|
|
+ wrmsrl_amd_safe(0xc0011005, val);
|
|
|
+ rdmsrl(0xc0011005, val);
|
|
|
+ if (val & (1ULL << 54)) {
|
|
|
+ set_cpu_cap(c, X86_FEATURE_TOPOEXT);
|
|
|
+ printk(KERN_INFO FW_INFO "CPU: Re-enabling "
|
|
|
+ "disabled Topology Extensions Support\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
cpu_detect_cache_sizes(c);
|
|
|
|
|
|
/* Multi core CPU? */
|