| From e9cdd343a5e42c43bcda01e609fa23089e026470 Mon Sep 17 00:00:00 2001 |
| From: Boris Ostrovsky <ostr@amd64.org> |
| Date: Thu, 26 May 2011 11:19:52 -0400 |
| Subject: x86, amd: Do not enable ARAT feature on AMD processors below |
| family 0x12 |
| |
| From: Boris Ostrovsky <ostr@amd64.org> |
| |
| commit e9cdd343a5e42c43bcda01e609fa23089e026470 upstream. |
| |
| Commit b87cf80af3ba4b4c008b4face3c68d604e1715c6 added support for |
| ARAT (Always Running APIC timer) on AMD processors that are not |
| affected by erratum 400. This erratum is present on certain processor |
| families and prevents APIC timer from waking up the CPU when it |
| is in a deep C state, including C1E state. |
| |
| Determining whether a processor is affected by this erratum may |
| have some corner cases and handling these cases is somewhat |
| complicated. In the interest of simplicity we won't claim ARAT |
| support on processor families below 0x12 and will go back to |
| broadcasting timer when going idle. |
| |
| Signed-off-by: Boris Ostrovsky <ostr@amd64.org> |
| Link: http://lkml.kernel.org/r/1306423192-19774-1-git-send-email-ostr@amd64.org |
| Tested-by: Boris Petkov <borislav.petkov@amd.com> |
| Cc: Hans Rosenfeld <Hans.Rosenfeld@amd.com> |
| Cc: Andreas Herrmann <Andreas.Herrmann3@amd.com> |
| Cc: Chuck Ebbert <cebbert@redhat.com> |
| Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/cpu/amd.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| --- a/arch/x86/kernel/cpu/amd.c |
| +++ b/arch/x86/kernel/cpu/amd.c |
| @@ -565,8 +565,11 @@ static void __cpuinit init_amd(struct cp |
| } |
| #endif |
| |
| - /* As a rule processors have APIC timer running in deep C states */ |
| - if (c->x86 > 0xf && !cpu_has_amd_erratum(amd_erratum_400)) |
| + /* |
| + * Family 0x12 and above processors have APIC timer |
| + * running in deep C states. |
| + */ |
| + if (c->x86 > 0x11) |
| set_cpu_cap(c, X86_FEATURE_ARAT); |
| |
| /* |