| From a6bfe1f8ed4e76699f9b18ebf04e4c6eb13388a9 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Christian=20S=C3=BCnkenberg?= |
| <christian.suenkenberg@student.kit.edu> |
| Date: Sun, 4 Jun 2017 19:18:39 +0200 |
| Subject: x86/cpu/cyrix: Add alternative Device ID of Geode GX1 SoC |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| [ Upstream commit ae1d557d8f30cb097b4d1f2ab04fa294588ee1cf ] |
| |
| A SoC variant of Geode GX1, notably NSC branded SC1100, seems to |
| report an inverted Device ID in its DIR0 configuration register, |
| specifically 0xb instead of the expected 0x4. |
| |
| Catch this presumably quirky version so it's properly recognized |
| as GX1 and has its cache switched to write-back mode, which provides |
| a significant performance boost in most workloads. |
| |
| SC1100's datasheet "Geode™ SC1100 Information Appliance On a Chip", |
| states in section 1.1.7.1 "Device ID" that device identification |
| values are specified in SC1100's device errata. These, however, |
| seem to not have been publicly released. |
| |
| Wading through a number of boot logs and /proc/cpuinfo dumps found on |
| pastebin and blogs, this patch should mostly be relevant for a number |
| of now admittedly aging Soekris NET4801 and PC Engines WRAP devices, |
| the latter being the platform this issue was discovered on. |
| Performance impact was verified using "openssl speed", with |
| write-back caching scaling throughput between -3% and +41%. |
| |
| Signed-off-by: Christian Sünkenberg <christian.suenkenberg@student.kit.edu> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Link: http://lkml.kernel.org/r/1496596719.26725.14.camel@student.kit.edu |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/kernel/cpu/cyrix.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c |
| index 455d8ada9b9a..d39cfb2c6b63 100644 |
| --- a/arch/x86/kernel/cpu/cyrix.c |
| +++ b/arch/x86/kernel/cpu/cyrix.c |
| @@ -253,6 +253,7 @@ static void init_cyrix(struct cpuinfo_x86 *c) |
| break; |
| |
| case 4: /* MediaGX/GXm or Geode GXM/GXLV/GX1 */ |
| + case 11: /* GX1 with inverted Device ID */ |
| #ifdef CONFIG_PCI |
| { |
| u32 vendor, device; |
| -- |
| 2.17.1 |
| |