diff options
author | Stefan Roese <sr@denx.de> | 2008-02-23 16:07:41 -0500 |
---|---|---|
committer | Josh Boyer <jwboyer@linux.vnet.ibm.com> | 2008-03-26 08:19:16 -0400 |
commit | 464076a4b328946528998513c4ef799fd60de588 (patch) | |
tree | 5531bbf03e91426a89060c5317498789b57b4c69 /arch | |
parent | ecc6cd73b7ccfa10c1f07d017fc7f62fe78eaab5 (diff) |
[POWERPC] 4xx: Add AMCC 460EX/460GT support to cputable.c & cpu_setup_44x.S
This patch adds basic support for the AMCC 460EX/460GT PPC's to arch/powerpc.
Currently those PPC's are still based on a 440 core and *not* a 460 core.
Here some basic features of those SoC's:
460EX:
- Up to 1.2GHz, 32kB L1 I-cache and D-cache, 256kB L2-cache, FPU
- 1 * PCI (max 66MHz), 2 * PCIe (one 4-lane, one 1-lane)
- 2 * GBit Ethernet with TCP/IP acceleration
- USB 2.0 Host/Device OTG and Host interface
- SATA controller
- Optional security feature
460GT (only changes to 460EX):
- 4 * GBit Ethernet with TCP/IP acceleration
- RapidIO
- No SATA
- No USB
Signed-off-by: Stefan Roese <sr@denx.de>
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/kernel/cpu_setup_44x.S | 5 | ||||
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 28 |
2 files changed, 31 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/cpu_setup_44x.S b/arch/powerpc/kernel/cpu_setup_44x.S index 6250443ab9c9..5465e8de0e61 100644 --- a/arch/powerpc/kernel/cpu_setup_44x.S +++ b/arch/powerpc/kernel/cpu_setup_44x.S | |||
@@ -3,7 +3,7 @@ | |||
3 | * Valentine Barshak <vbarshak@ru.mvista.com> | 3 | * Valentine Barshak <vbarshak@ru.mvista.com> |
4 | * MontaVista Software, Inc (c) 2007 | 4 | * MontaVista Software, Inc (c) 2007 |
5 | * | 5 | * |
6 | * Based on cpu_setup_6xx code by | 6 | * Based on cpu_setup_6xx code by |
7 | * Benjamin Herrenschmidt <benh@kernel.crashing.org> | 7 | * Benjamin Herrenschmidt <benh@kernel.crashing.org> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or | 9 | * This program is free software; you can redistribute it and/or |
@@ -32,6 +32,9 @@ _GLOBAL(__setup_cpu_440grx) | |||
32 | bl __fixup_440A_mcheck | 32 | bl __fixup_440A_mcheck |
33 | mtlr r4 | 33 | mtlr r4 |
34 | blr | 34 | blr |
35 | _GLOBAL(__setup_cpu_460ex) | ||
36 | _GLOBAL(__setup_cpu_460gt) | ||
37 | b __init_fpu_44x | ||
35 | _GLOBAL(__setup_cpu_440gx) | 38 | _GLOBAL(__setup_cpu_440gx) |
36 | _GLOBAL(__setup_cpu_440spe) | 39 | _GLOBAL(__setup_cpu_440spe) |
37 | b __fixup_440A_mcheck | 40 | b __fixup_440A_mcheck |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 2a8f5cc5184f..26ffb44e2701 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -36,6 +36,8 @@ extern void __setup_cpu_440epx(unsigned long offset, struct cpu_spec* spec); | |||
36 | extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec); | 36 | extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec); |
37 | extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); | 37 | extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec); |
38 | extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); | 38 | extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); |
39 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); | ||
40 | extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); | ||
39 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); | 41 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); |
40 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); | 42 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); |
41 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); | 43 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); |
@@ -1397,6 +1399,30 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1397 | .machine_check = machine_check_440A, | 1399 | .machine_check = machine_check_440A, |
1398 | .platform = "ppc440", | 1400 | .platform = "ppc440", |
1399 | }, | 1401 | }, |
1402 | { /* 460EX */ | ||
1403 | .pvr_mask = 0xffff0002, | ||
1404 | .pvr_value = 0x13020002, | ||
1405 | .cpu_name = "460EX", | ||
1406 | .cpu_features = CPU_FTRS_44X, | ||
1407 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, | ||
1408 | .icache_bsize = 32, | ||
1409 | .dcache_bsize = 32, | ||
1410 | .cpu_setup = __setup_cpu_460ex, | ||
1411 | .machine_check = machine_check_440A, | ||
1412 | .platform = "ppc440", | ||
1413 | }, | ||
1414 | { /* 460GT */ | ||
1415 | .pvr_mask = 0xffff0002, | ||
1416 | .pvr_value = 0x13020000, | ||
1417 | .cpu_name = "460GT", | ||
1418 | .cpu_features = CPU_FTRS_44X, | ||
1419 | .cpu_user_features = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU, | ||
1420 | .icache_bsize = 32, | ||
1421 | .dcache_bsize = 32, | ||
1422 | .cpu_setup = __setup_cpu_460gt, | ||
1423 | .machine_check = machine_check_440A, | ||
1424 | .platform = "ppc440", | ||
1425 | }, | ||
1400 | #endif /* CONFIG_44x */ | 1426 | #endif /* CONFIG_44x */ |
1401 | #ifdef CONFIG_FSL_BOOKE | 1427 | #ifdef CONFIG_FSL_BOOKE |
1402 | #ifdef CONFIG_E200 | 1428 | #ifdef CONFIG_E200 |
@@ -1512,7 +1538,7 @@ struct cpu_spec * __init identify_cpu(unsigned long offset, unsigned int pvr) | |||
1512 | *t = *s; | 1538 | *t = *s; |
1513 | *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec; | 1539 | *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec; |
1514 | #if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE) | 1540 | #if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE) |
1515 | /* ppc64 and booke expect identify_cpu to also call | 1541 | /* ppc64 and booke expect identify_cpu to also call |
1516 | * setup_cpu for that processor. I will consolidate | 1542 | * setup_cpu for that processor. I will consolidate |
1517 | * that at a later time, for now, just use #ifdef. | 1543 | * that at a later time, for now, just use #ifdef. |
1518 | * we also don't need to PTRRELOC the function pointer | 1544 | * we also don't need to PTRRELOC the function pointer |