diff options
author | Rabin Vincent <rabin.vincent@stericsson.com> | 2010-02-28 23:05:56 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-03-19 14:29:45 -0400 |
commit | 75a36ee01e860be693220f1c40e2c04fb6cc69ba (patch) | |
tree | 7a4dc1f66d6d4621ac82dceb8829503c6118c283 /arch/arm/mach-ux500 | |
parent | cc2c13342508d52cf08ea81f639b5de69607fd5d (diff) |
ARM: 5963/1: ux500: add support for u8500 v1 revision
Add cpu_is_u8500{ed/v1}() functions to determine the variant based on
the CPU id, add the changed peripheral addresses, and fixup the MTU
address.
Acked-by: Linus Walleij <linus.walleij@stericsson.com>
Acked-by: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-ux500')
-rw-r--r-- | arch/arm/mach-ux500/cpu-u8500.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-ux500/include/mach/hardware.h | 29 |
2 files changed, 41 insertions, 7 deletions
diff --git a/arch/arm/mach-ux500/cpu-u8500.c b/arch/arm/mach-ux500/cpu-u8500.c index 588b0596a635..f368504d2af7 100644 --- a/arch/arm/mach-ux500/cpu-u8500.c +++ b/arch/arm/mach-ux500/cpu-u8500.c | |||
@@ -40,15 +40,27 @@ static struct map_desc u8500_io_desc[] __initdata = { | |||
40 | __IO_DEV_DESC(U8500_UART2_BASE, SZ_4K), | 40 | __IO_DEV_DESC(U8500_UART2_BASE, SZ_4K), |
41 | __IO_DEV_DESC(U8500_GIC_CPU_BASE, SZ_4K), | 41 | __IO_DEV_DESC(U8500_GIC_CPU_BASE, SZ_4K), |
42 | __IO_DEV_DESC(U8500_GIC_DIST_BASE, SZ_4K), | 42 | __IO_DEV_DESC(U8500_GIC_DIST_BASE, SZ_4K), |
43 | __IO_DEV_DESC(U8500_MTU0_BASE, SZ_4K), | ||
44 | __IO_DEV_DESC(U8500_TWD_BASE, SZ_4K), | 43 | __IO_DEV_DESC(U8500_TWD_BASE, SZ_4K), |
45 | __IO_DEV_DESC(U8500_SCU_BASE, SZ_4K), | 44 | __IO_DEV_DESC(U8500_SCU_BASE, SZ_4K), |
46 | __IO_DEV_DESC(U8500_BACKUPRAM0_BASE, SZ_8K), | 45 | __IO_DEV_DESC(U8500_BACKUPRAM0_BASE, SZ_8K), |
47 | }; | 46 | }; |
48 | 47 | ||
48 | static struct map_desc u8500ed_io_desc[] __initdata = { | ||
49 | __IO_DEV_DESC(U8500_MTU0_BASE_ED, SZ_4K), | ||
50 | }; | ||
51 | |||
52 | static struct map_desc u8500v1_io_desc[] __initdata = { | ||
53 | __IO_DEV_DESC(U8500_MTU0_BASE_V1, SZ_4K), | ||
54 | }; | ||
55 | |||
49 | void __init u8500_map_io(void) | 56 | void __init u8500_map_io(void) |
50 | { | 57 | { |
51 | iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc)); | 58 | iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc)); |
59 | |||
60 | if (cpu_is_u8500ed()) | ||
61 | iotable_init(u8500ed_io_desc, ARRAY_SIZE(u8500ed_io_desc)); | ||
62 | else | ||
63 | iotable_init(u8500v1_io_desc, ARRAY_SIZE(u8500v1_io_desc)); | ||
52 | } | 64 | } |
53 | 65 | ||
54 | void __init u8500_init_irq(void) | 66 | void __init u8500_init_irq(void) |
@@ -75,7 +87,10 @@ static void __init u8500_timer_init(void) | |||
75 | twd_base = __io_address(U8500_TWD_BASE); | 87 | twd_base = __io_address(U8500_TWD_BASE); |
76 | #endif | 88 | #endif |
77 | /* Setup the MTU base */ | 89 | /* Setup the MTU base */ |
78 | mtu_base = __io_address(U8500_MTU0_BASE); | 90 | if (cpu_is_u8500ed()) |
91 | mtu_base = __io_address(U8500_MTU0_BASE_ED); | ||
92 | else | ||
93 | mtu_base = __io_address(U8500_MTU0_BASE_V1); | ||
79 | 94 | ||
80 | nmdk_timer_init(); | 95 | nmdk_timer_init(); |
81 | } | 96 | } |
diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h index 04ea836969b3..f29a43d9d45a 100644 --- a/arch/arm/mach-ux500/include/mach/hardware.h +++ b/arch/arm/mach-ux500/include/mach/hardware.h | |||
@@ -56,16 +56,19 @@ | |||
56 | #define U8500_TWD_SIZE 0x100 | 56 | #define U8500_TWD_SIZE 0x100 |
57 | 57 | ||
58 | /* per7 base addressess */ | 58 | /* per7 base addressess */ |
59 | #define U8500_CR_BASE (U8500_PER7_BASE + 0x8000) | 59 | #define U8500_CR_BASE_ED (U8500_PER7_BASE + 0x8000) |
60 | #define U8500_MTU0_BASE (U8500_PER7_BASE + 0xa000) | 60 | #define U8500_MTU0_BASE_ED (U8500_PER7_BASE + 0xa000) |
61 | #define U8500_MTU1_BASE (U8500_PER7_BASE + 0xb000) | 61 | #define U8500_MTU1_BASE_ED (U8500_PER7_BASE + 0xb000) |
62 | #define U8500_TZPC0_BASE (U8500_PER7_BASE + 0xc000) | 62 | #define U8500_TZPC0_BASE_ED (U8500_PER7_BASE + 0xc000) |
63 | #define U8500_CLKRST7_BASE (U8500_PER7_BASE + 0xf000) | 63 | #define U8500_CLKRST7_BASE_ED (U8500_PER7_BASE + 0xf000) |
64 | 64 | ||
65 | /* per6 base addressess */ | 65 | /* per6 base addressess */ |
66 | #define U8500_RNG_BASE (U8500_PER6_BASE + 0x0000) | 66 | #define U8500_RNG_BASE (U8500_PER6_BASE + 0x0000) |
67 | #define U8500_PKA_BASE (U8500_PER6_BASE + 0x1000) | 67 | #define U8500_PKA_BASE (U8500_PER6_BASE + 0x1000) |
68 | #define U8500_PKAM_BASE (U8500_PER6_BASE + 0x2000) | 68 | #define U8500_PKAM_BASE (U8500_PER6_BASE + 0x2000) |
69 | #define U8500_MTU0_BASE_V1 (U8500_PER6_BASE + 0x6000) | ||
70 | #define U8500_MTU1_BASE_V1 (U8500_PER6_BASE + 0x7000) | ||
71 | #define U8500_CR_BASE_V1 (U8500_PER6_BASE + 0x8000) | ||
69 | #define U8500_CRYPTO0_BASE (U8500_PER6_BASE + 0xa000) | 72 | #define U8500_CRYPTO0_BASE (U8500_PER6_BASE + 0xa000) |
70 | #define U8500_CRYPTO1_BASE (U8500_PER6_BASE + 0xb000) | 73 | #define U8500_CRYPTO1_BASE (U8500_PER6_BASE + 0xb000) |
71 | #define U8500_CLKRST6_BASE (U8500_PER6_BASE + 0xf000) | 74 | #define U8500_CLKRST6_BASE (U8500_PER6_BASE + 0xf000) |
@@ -128,4 +131,20 @@ | |||
128 | /* ST-Ericsson modified pl022 id */ | 131 | /* ST-Ericsson modified pl022 id */ |
129 | #define SSP_PER_ID 0x01080022 | 132 | #define SSP_PER_ID 0x01080022 |
130 | 133 | ||
134 | #ifndef __ASSEMBLY__ | ||
135 | |||
136 | #include <asm/cputype.h> | ||
137 | |||
138 | static inline bool cpu_is_u8500ed(void) | ||
139 | { | ||
140 | return (read_cpuid_id() & 15) == 0; | ||
141 | } | ||
142 | |||
143 | static inline bool cpu_is_u8500v1(void) | ||
144 | { | ||
145 | return (read_cpuid_id() & 15) == 1; | ||
146 | } | ||
147 | |||
148 | #endif | ||
149 | |||
131 | #endif /* __MACH_HARDWARE_H */ | 150 | #endif /* __MACH_HARDWARE_H */ |