diff options
-rw-r--r-- | arch/arm/mach-realview/Kconfig | 10 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_eb.c | 4 | ||||
-rw-r--r-- | arch/arm/mm/proc-v6.S | 8 | ||||
-rw-r--r-- | include/asm-arm/arch-realview/hardware.h | 2 | ||||
-rw-r--r-- | include/asm-arm/arch-realview/platform.h | 10 | ||||
-rw-r--r-- | include/asm-arm/arch-realview/scu.h | 8 | ||||
-rw-r--r-- | include/asm-arm/hardware/arm_scu.h | 2 |
7 files changed, 38 insertions, 6 deletions
diff --git a/arch/arm/mach-realview/Kconfig b/arch/arm/mach-realview/Kconfig index 17f5f4439fe7..68bc6b226ec7 100644 --- a/arch/arm/mach-realview/Kconfig +++ b/arch/arm/mach-realview/Kconfig | |||
@@ -16,4 +16,14 @@ config REALVIEW_MPCORE | |||
16 | kernel built with this option enabled is not compatible with | 16 | kernel built with this option enabled is not compatible with |
17 | other tiles. | 17 | other tiles. |
18 | 18 | ||
19 | config REALVIEW_MPCORE_REVB | ||
20 | bool "Support MPcore RevB tile" | ||
21 | depends on REALVIEW_MPCORE | ||
22 | default n | ||
23 | help | ||
24 | Enable support for the MPCore RevB tile on the Realview platform. | ||
25 | Since there are device address differences, a | ||
26 | kernel built with this option enabled is not compatible with | ||
27 | other tiles. | ||
28 | |||
19 | endmenu | 29 | endmenu |
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index 00139143dcc1..effe243454e0 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c | |||
@@ -152,9 +152,9 @@ static void __init gic_init_irq(void) | |||
152 | #ifdef CONFIG_REALVIEW_MPCORE | 152 | #ifdef CONFIG_REALVIEW_MPCORE |
153 | unsigned int pldctrl; | 153 | unsigned int pldctrl; |
154 | writel(0x0000a05f, __io_address(REALVIEW_SYS_LOCK)); | 154 | writel(0x0000a05f, __io_address(REALVIEW_SYS_LOCK)); |
155 | pldctrl = readl(__io_address(REALVIEW_SYS_BASE) + 0xd8); | 155 | pldctrl = readl(__io_address(REALVIEW_SYS_BASE) + REALVIEW_MPCORE_SYS_PLD_CTRL1); |
156 | pldctrl |= 0x00800000; /* New irq mode */ | 156 | pldctrl |= 0x00800000; /* New irq mode */ |
157 | writel(pldctrl, __io_address(REALVIEW_SYS_BASE) + 0xd8); | 157 | writel(pldctrl, __io_address(REALVIEW_SYS_BASE) + REALVIEW_MPCORE_SYS_PLD_CTRL1); |
158 | writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); | 158 | writel(0x00000000, __io_address(REALVIEW_SYS_LOCK)); |
159 | #endif | 159 | #endif |
160 | gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29); | 160 | gic_dist_init(0, __io_address(REALVIEW_GIC_DIST_BASE), 29); |
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 7b1843befb9c..f27d9eb64803 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
@@ -14,10 +14,13 @@ | |||
14 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
15 | #include <asm/asm-offsets.h> | 15 | #include <asm/asm-offsets.h> |
16 | #include <asm/elf.h> | 16 | #include <asm/elf.h> |
17 | #include <asm/hardware/arm_scu.h> | ||
18 | #include <asm/pgtable-hwdef.h> | 17 | #include <asm/pgtable-hwdef.h> |
19 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
20 | 19 | ||
20 | #ifdef CONFIG_SMP | ||
21 | #include <asm/hardware/arm_scu.h> | ||
22 | #endif | ||
23 | |||
21 | #include "proc-macros.S" | 24 | #include "proc-macros.S" |
22 | 25 | ||
23 | #define D_CACHE_LINE_SIZE 32 | 26 | #define D_CACHE_LINE_SIZE 32 |
@@ -183,8 +186,7 @@ __v6_setup: | |||
183 | /* Set up the SCU on core 0 only */ | 186 | /* Set up the SCU on core 0 only */ |
184 | mrc p15, 0, r0, c0, c0, 5 @ CPU core number | 187 | mrc p15, 0, r0, c0, c0, 5 @ CPU core number |
185 | ands r0, r0, #15 | 188 | ands r0, r0, #15 |
186 | moveq r0, #0x10000000 @ SCU_BASE | 189 | ldreq r0, =SCU_BASE |
187 | orreq r0, r0, #0x00100000 | ||
188 | ldreq r5, [r0, #SCU_CTRL] | 190 | ldreq r5, [r0, #SCU_CTRL] |
189 | orreq r5, r5, #1 | 191 | orreq r5, r5, #1 |
190 | streq r5, [r0, #SCU_CTRL] | 192 | streq r5, [r0, #SCU_CTRL] |
diff --git a/include/asm-arm/arch-realview/hardware.h b/include/asm-arm/arch-realview/hardware.h index 9ca76dc3a7af..aa78fe087ab2 100644 --- a/include/asm-arm/arch-realview/hardware.h +++ b/include/asm-arm/arch-realview/hardware.h | |||
@@ -26,7 +26,7 @@ | |||
26 | #include <asm/arch/platform.h> | 26 | #include <asm/arch/platform.h> |
27 | 27 | ||
28 | /* macro to get at IO space when running virtually */ | 28 | /* macro to get at IO space when running virtually */ |
29 | #define IO_ADDRESS(x) (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + 0xf0000000) | 29 | #define IO_ADDRESS(x) ((((x) & 0x0effffff) | (((x) >> 4) & 0x0f000000)) + 0xf0000000) |
30 | #define __io_address(n) __io(IO_ADDRESS(n)) | 30 | #define __io_address(n) __io(IO_ADDRESS(n)) |
31 | 31 | ||
32 | #endif | 32 | #endif |
diff --git a/include/asm-arm/arch-realview/platform.h b/include/asm-arm/arch-realview/platform.h index bf52ca752a75..87acd9c191e6 100644 --- a/include/asm-arm/arch-realview/platform.h +++ b/include/asm-arm/arch-realview/platform.h | |||
@@ -207,11 +207,21 @@ | |||
207 | #define REALVIEW_GIC_CPU_BASE 0x10040000 /* Generic interrupt controller CPU interface */ | 207 | #define REALVIEW_GIC_CPU_BASE 0x10040000 /* Generic interrupt controller CPU interface */ |
208 | #define REALVIEW_GIC_DIST_BASE 0x10041000 /* Generic interrupt controller distributor */ | 208 | #define REALVIEW_GIC_DIST_BASE 0x10041000 /* Generic interrupt controller distributor */ |
209 | #else | 209 | #else |
210 | #ifdef CONFIG_REALVIEW_MPCORE_REVB | ||
210 | #define REALVIEW_MPCORE_SCU_BASE 0x10100000 /* SCU registers */ | 211 | #define REALVIEW_MPCORE_SCU_BASE 0x10100000 /* SCU registers */ |
211 | #define REALVIEW_GIC_CPU_BASE 0x10100100 /* Generic interrupt controller CPU interface */ | 212 | #define REALVIEW_GIC_CPU_BASE 0x10100100 /* Generic interrupt controller CPU interface */ |
212 | #define REALVIEW_TWD_BASE 0x10100700 | 213 | #define REALVIEW_TWD_BASE 0x10100700 |
213 | #define REALVIEW_TWD_SIZE 0x00000100 | 214 | #define REALVIEW_TWD_SIZE 0x00000100 |
214 | #define REALVIEW_GIC_DIST_BASE 0x10101000 /* Generic interrupt controller distributor */ | 215 | #define REALVIEW_GIC_DIST_BASE 0x10101000 /* Generic interrupt controller distributor */ |
216 | #define REALVIEW_MPCORE_SYS_PLD_CTRL1 0xD8 /* Register offset for MPCore sysctl */ | ||
217 | #else | ||
218 | #define REALVIEW_MPCORE_SCU_BASE 0x1F000000 /* SCU registers */ | ||
219 | #define REALVIEW_GIC_CPU_BASE 0x1F000100 /* Generic interrupt controller CPU interface */ | ||
220 | #define REALVIEW_TWD_BASE 0x1F000700 | ||
221 | #define REALVIEW_TWD_SIZE 0x00000100 | ||
222 | #define REALVIEW_GIC_DIST_BASE 0x1F001000 /* Generic interrupt controller distributor */ | ||
223 | #define REALVIEW_MPCORE_SYS_PLD_CTRL1 0x74 /* Register offset for MPCore sysctl */ | ||
224 | #endif | ||
215 | #define REALVIEW_GIC1_CPU_BASE 0x10040000 /* Generic interrupt controller CPU interface */ | 225 | #define REALVIEW_GIC1_CPU_BASE 0x10040000 /* Generic interrupt controller CPU interface */ |
216 | #define REALVIEW_GIC1_DIST_BASE 0x10041000 /* Generic interrupt controller distributor */ | 226 | #define REALVIEW_GIC1_DIST_BASE 0x10041000 /* Generic interrupt controller distributor */ |
217 | #endif | 227 | #endif |
diff --git a/include/asm-arm/arch-realview/scu.h b/include/asm-arm/arch-realview/scu.h new file mode 100644 index 000000000000..cc293640178e --- /dev/null +++ b/include/asm-arm/arch-realview/scu.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef __ASMARM_ARCH_SCU_H | ||
2 | #define __ASMARM_ARCH_SCU_H | ||
3 | |||
4 | #include <asm/arch/platform.h> | ||
5 | |||
6 | #define SCU_BASE REALVIEW_MPCORE_SCU_BASE | ||
7 | |||
8 | #endif | ||
diff --git a/include/asm-arm/hardware/arm_scu.h b/include/asm-arm/hardware/arm_scu.h index 9903f60c84b7..7d28eb5a1758 100644 --- a/include/asm-arm/hardware/arm_scu.h +++ b/include/asm-arm/hardware/arm_scu.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef ASMARM_HARDWARE_ARM_SCU_H | 1 | #ifndef ASMARM_HARDWARE_ARM_SCU_H |
2 | #define ASMARM_HARDWARE_ARM_SCU_H | 2 | #define ASMARM_HARDWARE_ARM_SCU_H |
3 | 3 | ||
4 | #include <asm/arch/scu.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * SCU registers | 7 | * SCU registers |
6 | */ | 8 | */ |