|
@@ -831,8 +831,6 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-#define HWCR 0xc0010015
|
|
|
-
|
|
|
static int __init init_amd(struct cpuinfo_x86 *c)
|
|
|
{
|
|
|
int r;
|
|
@@ -841,14 +839,18 @@ static int __init init_amd(struct cpuinfo_x86 *c)
|
|
|
#ifdef CONFIG_SMP
|
|
|
unsigned long value;
|
|
|
|
|
|
- // Disable TLB flush filter by setting HWCR.FFDIS:
|
|
|
- // bit 6 of msr C001_0015
|
|
|
- //
|
|
|
- // Errata 63 for SH-B3 steppings
|
|
|
- // Errata 122 for all(?) steppings
|
|
|
- rdmsrl(HWCR, value);
|
|
|
- value |= 1 << 6;
|
|
|
- wrmsrl(HWCR, value);
|
|
|
+ /*
|
|
|
+ * Disable TLB flush filter by setting HWCR.FFDIS on K8
|
|
|
+ * bit 6 of msr C001_0015
|
|
|
+ *
|
|
|
+ * Errata 63 for SH-B3 steppings
|
|
|
+ * Errata 122 for all steppings (F+ have it disabled by default)
|
|
|
+ */
|
|
|
+ if (c->x86 == 15) {
|
|
|
+ rdmsrl(MSR_K8_HWCR, value);
|
|
|
+ value |= 1 << 6;
|
|
|
+ wrmsrl(MSR_K8_HWCR, value);
|
|
|
+ }
|
|
|
#endif
|
|
|
|
|
|
/* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
|