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 | |
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>
-rw-r--r-- | MAINTAINERS | 7 | ||||
-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 | ||||
-rw-r--r-- | include/asm-i386/module.h | 4 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 10 |
6 files changed, 62 insertions, 7 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index e9db0d6b928a..cb536bbed9ff 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -258,6 +258,13 @@ P: Ivan Kokshaysky | |||
258 | M: ink@jurassic.park.msu.ru | 258 | M: ink@jurassic.park.msu.ru |
259 | S: Maintained for 2.4; PCI support for 2.6. | 259 | S: Maintained for 2.4; PCI support for 2.6. |
260 | 260 | ||
261 | AMD GEODE PROCESSOR/CHIPSET SUPPORT | ||
262 | P: Jordan Crouse | ||
263 | M: info-linux@geode.amd.com | ||
264 | L: info-linux@geode.amd.com | ||
265 | W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html | ||
266 | S: Supported | ||
267 | |||
261 | APM DRIVER | 268 | APM DRIVER |
262 | P: Stephen Rothwell | 269 | P: Stephen Rothwell |
263 | M: sfr@canb.auug.org.au | 270 | M: sfr@canb.auug.org.au |
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 | ||
diff --git a/include/asm-i386/module.h b/include/asm-i386/module.h index eb7f2b4234aa..424661d25bd3 100644 --- a/include/asm-i386/module.h +++ b/include/asm-i386/module.h | |||
@@ -52,8 +52,10 @@ struct mod_arch_specific | |||
52 | #define MODULE_PROC_FAMILY "CYRIXIII " | 52 | #define MODULE_PROC_FAMILY "CYRIXIII " |
53 | #elif defined CONFIG_MVIAC3_2 | 53 | #elif defined CONFIG_MVIAC3_2 |
54 | #define MODULE_PROC_FAMILY "VIAC3-2 " | 54 | #define MODULE_PROC_FAMILY "VIAC3-2 " |
55 | #elif CONFIG_MGEODEGX1 | 55 | #elif defined CONFIG_MGEODEGX1 |
56 | #define MODULE_PROC_FAMILY "GEODEGX1 " | 56 | #define MODULE_PROC_FAMILY "GEODEGX1 " |
57 | #elif defined CONFIG_MGEODE_LX | ||
58 | #define MODULE_PROC_FAMILY "GEODE " | ||
57 | #else | 59 | #else |
58 | #error unknown processor family | 60 | #error unknown processor family |
59 | #endif | 61 | #endif |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 4f01710485cd..24db7248301a 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -394,6 +394,13 @@ | |||
394 | #define PCI_DEVICE_ID_NS_87410 0xd001 | 394 | #define PCI_DEVICE_ID_NS_87410 0xd001 |
395 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d | 395 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d |
396 | 396 | ||
397 | #define PCI_DEVICE_ID_NS_CS5535_HOST_BRIDGE 0x0028 | ||
398 | #define PCI_DEVICE_ID_NS_CS5535_ISA_BRIDGE 0x002b | ||
399 | #define PCI_DEVICE_ID_NS_CS5535_IDE 0x002d | ||
400 | #define PCI_DEVICE_ID_NS_CS5535_AUDIO 0x002e | ||
401 | #define PCI_DEVICE_ID_NS_CS5535_USB 0x002f | ||
402 | #define PCI_DEVICE_ID_NS_CS5535_VIDEO 0x0030 | ||
403 | |||
397 | #define PCI_VENDOR_ID_TSENG 0x100c | 404 | #define PCI_VENDOR_ID_TSENG 0x100c |
398 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 | 405 | #define PCI_DEVICE_ID_TSENG_W32P_2 0x3202 |
399 | #define PCI_DEVICE_ID_TSENG_W32P_b 0x3205 | 406 | #define PCI_DEVICE_ID_TSENG_W32P_b 0x3205 |
@@ -496,6 +503,9 @@ | |||
496 | 503 | ||
497 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A | 504 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A |
498 | 505 | ||
506 | #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 | ||
507 | #define PCI_DEVICE_ID_AMD_LX_AES 0x2082 | ||
508 | |||
499 | #define PCI_VENDOR_ID_TRIDENT 0x1023 | 509 | #define PCI_VENDOR_ID_TRIDENT 0x1023 |
500 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 | 510 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 |
501 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_NX 0x2001 | 511 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_NX 0x2001 |