Message ID | 1339684856-11033-1-git-send-email-tim.gardner@canonical.com |
---|---|
State | New |
Headers | show |
On 06/14/2012 07:40 AM, Tim Gardner wrote: > From: Andreas Herrmann <andreas.herrmann3@amd.com> > > BugLink: http://bugs.launchpad.net/bugs/1009087 > > BIOS will switch off the corresponding feature flag on family > 15h models 10h-1fh non-desktop CPUs. > > The topology extension CPUID leafs are required to detect which > cores belong to the same compute unit. (thread siblings mask is > set accordingly and also correct information about L1i and L2 > cache sharing depends on this). > > W/o this patch we wouldn't see which cores belong to the same > compute unit and also cache sharing information for L1i and L2 > would be incorrect on such systems. > > Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> > Signed-off-by: Ingo Molnar <mingo@kernel.org> > (cherry picked from commit f7f286a910221ae18b21c18d9d0f4cd88965829f) > > Signed-off-by: Tim Gardner <tim.gardner@canonical.com> > --- > arch/x86/kernel/cpu/amd.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c > index b6e3e87..ddcf1a9 100644 > --- a/arch/x86/kernel/cpu/amd.c > +++ b/arch/x86/kernel/cpu/amd.c > @@ -567,6 +567,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? */
Applied to Oneiric master-next
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index b6e3e87..ddcf1a9 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -567,6 +567,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? */