diff options
author | Jordan Crouse <jordan.crouse@amd.com> | 2006-01-06 03:12:14 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:33:38 -0500 |
commit | f90b8116032f4216d260e31f966a3585319387ac (patch) | |
tree | c7234671ff0ee152e40dc0175fe46a0d7147641d /arch/i386 | |
parent | 6b7f430ee0a269464aa29159eb464e647ca313d3 (diff) |
[PATCH] Base support for AMD Geode GX/LX processors
Provide basic support for the AMD Geode GX and LX processors.
Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/Kconfig.cpu | 14 | ||||
-rw-r--r-- | arch/i386/kernel/cpu/amd.c | 7 | ||||
-rw-r--r-- | arch/i386/kernel/cpu/cyrix.c | 27 |
3 files changed, 42 insertions, 6 deletions
diff --git a/arch/i386/Kconfig.cpu b/arch/i386/Kconfig.cpu index 53bbb3c008ee..79603b3471f9 100644 --- a/arch/i386/Kconfig.cpu +++ b/arch/i386/Kconfig.cpu | |||
@@ -39,6 +39,7 @@ config M386 | |||
39 | - "Winchip-2" for IDT Winchip 2. | 39 | - "Winchip-2" for IDT Winchip 2. |
40 | - "Winchip-2A" for IDT Winchips with 3dNow! capabilities. | 40 | - "Winchip-2A" for IDT Winchips with 3dNow! capabilities. |
41 | - "GeodeGX1" for Geode GX1 (Cyrix MediaGX). | 41 | - "GeodeGX1" for Geode GX1 (Cyrix MediaGX). |
42 | - "Geode GX/LX" For AMD Geode GX and LX processors. | ||
42 | - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3. | 43 | - "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3. |
43 | - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above). | 44 | - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above). |
44 | 45 | ||
@@ -171,6 +172,11 @@ config MGEODEGX1 | |||
171 | help | 172 | help |
172 | Select this for a Geode GX1 (Cyrix MediaGX) chip. | 173 | Select this for a Geode GX1 (Cyrix MediaGX) chip. |
173 | 174 | ||
175 | config MGEODE_LX | ||
176 | bool "Geode GX/LX" | ||
177 | help | ||
178 | Select this for AMD Geode GX and LX processors. | ||
179 | |||
174 | config MCYRIXIII | 180 | config MCYRIXIII |
175 | bool "CyrixIII/VIA-C3" | 181 | bool "CyrixIII/VIA-C3" |
176 | help | 182 | help |
@@ -220,8 +226,8 @@ config X86_XADD | |||
220 | config X86_L1_CACHE_SHIFT | 226 | config X86_L1_CACHE_SHIFT |
221 | int | 227 | int |
222 | default "7" if MPENTIUM4 || X86_GENERIC | 228 | default "7" if MPENTIUM4 || X86_GENERIC |
223 | default "4" if X86_ELAN || M486 || M386 | 229 | default "4" if X86_ELAN || M486 || M386 || MGEODEGX1 |
224 | default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODEGX1 | 230 | default "5" if MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX |
225 | default "6" if MK7 || MK8 || MPENTIUMM | 231 | default "6" if MK7 || MK8 || MPENTIUMM |
226 | 232 | ||
227 | config RWSEM_GENERIC_SPINLOCK | 233 | config RWSEM_GENERIC_SPINLOCK |
@@ -290,12 +296,12 @@ config X86_INTEL_USERCOPY | |||
290 | 296 | ||
291 | config X86_USE_PPRO_CHECKSUM | 297 | config X86_USE_PPRO_CHECKSUM |
292 | bool | 298 | bool |
293 | depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MEFFICEON | 299 | depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MEFFICEON || MGEODE_LX |
294 | default y | 300 | default y |
295 | 301 | ||
296 | config X86_USE_3DNOW | 302 | config X86_USE_3DNOW |
297 | bool | 303 | bool |
298 | depends on MCYRIXIII || MK7 | 304 | depends on MCYRIXIII || MK7 || MGEODE_LX |
299 | default y | 305 | default y |
300 | 306 | ||
301 | config X86_OOSTORE | 307 | config X86_OOSTORE |
diff --git a/arch/i386/kernel/cpu/amd.c b/arch/i386/kernel/cpu/amd.c index e344ef88cfcd..e7697e077f6b 100644 --- a/arch/i386/kernel/cpu/amd.c +++ b/arch/i386/kernel/cpu/amd.c | |||
@@ -161,8 +161,13 @@ static void __init init_amd(struct cpuinfo_x86 *c) | |||
161 | set_bit(X86_FEATURE_K6_MTRR, c->x86_capability); | 161 | set_bit(X86_FEATURE_K6_MTRR, c->x86_capability); |
162 | break; | 162 | break; |
163 | } | 163 | } |
164 | break; | ||
165 | 164 | ||
165 | if (c->x86_model == 10) { | ||
166 | /* AMD Geode LX is model 10 */ | ||
167 | /* placeholder for any needed mods */ | ||
168 | break; | ||
169 | } | ||
170 | break; | ||
166 | case 6: /* An Athlon/Duron */ | 171 | case 6: /* An Athlon/Duron */ |
167 | 172 | ||
168 | /* Bit 15 of Athlon specific MSR 15, needs to be 0 | 173 | /* Bit 15 of Athlon specific MSR 15, needs to be 0 |
diff --git a/arch/i386/kernel/cpu/cyrix.c b/arch/i386/kernel/cpu/cyrix.c index ff87cc22b323..75015975d038 100644 --- a/arch/i386/kernel/cpu/cyrix.c +++ b/arch/i386/kernel/cpu/cyrix.c | |||
@@ -343,6 +343,31 @@ static void __init init_cyrix(struct cpuinfo_x86 *c) | |||
343 | } | 343 | } |
344 | 344 | ||
345 | /* | 345 | /* |
346 | * Handle National Semiconductor branded processors | ||
347 | */ | ||
348 | static void __devinit init_nsc(struct cpuinfo_x86 *c) | ||
349 | { | ||
350 | /* There may be GX1 processors in the wild that are branded | ||
351 | * NSC and not Cyrix. | ||
352 | * | ||
353 | * This function only handles the GX processor, and kicks every | ||
354 | * thing else to the Cyrix init function above - that should | ||
355 | * cover any processors that might have been branded differently | ||
356 | * after NSC aquired Cyrix. | ||
357 | * | ||
358 | * If this breaks your GX1 horribly, please e-mail | ||
359 | * info-linux@ldcmail.amd.com to tell us. | ||
360 | */ | ||
361 | |||
362 | /* Handle the GX (Formally known as the GX2) */ | ||
363 | |||
364 | if (c->x86 == 5 && c->x86_model == 5) | ||
365 | display_cacheinfo(c); | ||
366 | else | ||
367 | init_cyrix(c); | ||
368 | } | ||
369 | |||
370 | /* | ||
346 | * Cyrix CPUs without cpuid or with cpuid not yet enabled can be detected | 371 | * Cyrix CPUs without cpuid or with cpuid not yet enabled can be detected |
347 | * by the fact that they preserve the flags across the division of 5/2. | 372 | * by the fact that they preserve the flags across the division of 5/2. |
348 | * PII and PPro exhibit this behavior too, but they have cpuid available. | 373 | * PII and PPro exhibit this behavior too, but they have cpuid available. |
@@ -422,7 +447,7 @@ int __init cyrix_init_cpu(void) | |||
422 | static struct cpu_dev nsc_cpu_dev __initdata = { | 447 | static struct cpu_dev nsc_cpu_dev __initdata = { |
423 | .c_vendor = "NSC", | 448 | .c_vendor = "NSC", |
424 | .c_ident = { "Geode by NSC" }, | 449 | .c_ident = { "Geode by NSC" }, |
425 | .c_init = init_cyrix, | 450 | .c_init = init_nsc, |
426 | .c_identify = generic_identify, | 451 | .c_identify = generic_identify, |
427 | }; | 452 | }; |
428 | 453 | ||