diff options
Diffstat (limited to 'arch/arm/mach-integrator')
-rw-r--r-- | arch/arm/mach-integrator/integrator_cp.c | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 9194a4f3339c..72202108bd71 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c | |||
@@ -52,11 +52,13 @@ | |||
52 | 52 | ||
53 | #include "common.h" | 53 | #include "common.h" |
54 | 54 | ||
55 | /* Base address to the CP controller */ | ||
56 | static void __iomem *intcp_con_base; | ||
57 | |||
55 | #define INTCP_PA_FLASH_BASE 0x24000000 | 58 | #define INTCP_PA_FLASH_BASE 0x24000000 |
56 | 59 | ||
57 | #define INTCP_PA_CLCD_BASE 0xc0000000 | 60 | #define INTCP_PA_CLCD_BASE 0xc0000000 |
58 | 61 | ||
59 | #define INTCP_VA_CTRL_BASE __io_address(INTEGRATOR_CP_CTL_BASE) | ||
60 | #define INTCP_FLASHPROG 0x04 | 62 | #define INTCP_FLASHPROG 0x04 |
61 | #define CINTEGRATOR_FLASHPROG_FLVPPEN (1 << 0) | 63 | #define CINTEGRATOR_FLASHPROG_FLVPPEN (1 << 0) |
62 | #define CINTEGRATOR_FLASHPROG_FLWREN (1 << 1) | 64 | #define CINTEGRATOR_FLASHPROG_FLWREN (1 << 1) |
@@ -127,11 +129,6 @@ static struct map_desc intcp_io_desc[] __initdata = { | |||
127 | .pfn = __phys_to_pfn(INTEGRATOR_CP_SIC_BASE), | 129 | .pfn = __phys_to_pfn(INTEGRATOR_CP_SIC_BASE), |
128 | .length = SZ_4K, | 130 | .length = SZ_4K, |
129 | .type = MT_DEVICE | 131 | .type = MT_DEVICE |
130 | }, { | ||
131 | .virtual = IO_ADDRESS(INTEGRATOR_CP_CTL_BASE), | ||
132 | .pfn = __phys_to_pfn(INTEGRATOR_CP_CTL_BASE), | ||
133 | .length = SZ_4K, | ||
134 | .type = MT_DEVICE | ||
135 | } | 132 | } |
136 | }; | 133 | }; |
137 | 134 | ||
@@ -147,9 +144,9 @@ static int intcp_flash_init(struct platform_device *dev) | |||
147 | { | 144 | { |
148 | u32 val; | 145 | u32 val; |
149 | 146 | ||
150 | val = readl(INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); | 147 | val = readl(intcp_con_base + INTCP_FLASHPROG); |
151 | val |= CINTEGRATOR_FLASHPROG_FLWREN; | 148 | val |= CINTEGRATOR_FLASHPROG_FLWREN; |
152 | writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); | 149 | writel(val, intcp_con_base + INTCP_FLASHPROG); |
153 | 150 | ||
154 | return 0; | 151 | return 0; |
155 | } | 152 | } |
@@ -158,21 +155,21 @@ static void intcp_flash_exit(struct platform_device *dev) | |||
158 | { | 155 | { |
159 | u32 val; | 156 | u32 val; |
160 | 157 | ||
161 | val = readl(INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); | 158 | val = readl(intcp_con_base + INTCP_FLASHPROG); |
162 | val &= ~(CINTEGRATOR_FLASHPROG_FLVPPEN|CINTEGRATOR_FLASHPROG_FLWREN); | 159 | val &= ~(CINTEGRATOR_FLASHPROG_FLVPPEN|CINTEGRATOR_FLASHPROG_FLWREN); |
163 | writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); | 160 | writel(val, intcp_con_base + INTCP_FLASHPROG); |
164 | } | 161 | } |
165 | 162 | ||
166 | static void intcp_flash_set_vpp(struct platform_device *pdev, int on) | 163 | static void intcp_flash_set_vpp(struct platform_device *pdev, int on) |
167 | { | 164 | { |
168 | u32 val; | 165 | u32 val; |
169 | 166 | ||
170 | val = readl(INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); | 167 | val = readl(intcp_con_base + INTCP_FLASHPROG); |
171 | if (on) | 168 | if (on) |
172 | val |= CINTEGRATOR_FLASHPROG_FLVPPEN; | 169 | val |= CINTEGRATOR_FLASHPROG_FLVPPEN; |
173 | else | 170 | else |
174 | val &= ~CINTEGRATOR_FLASHPROG_FLVPPEN; | 171 | val &= ~CINTEGRATOR_FLASHPROG_FLVPPEN; |
175 | writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); | 172 | writel(val, intcp_con_base + INTCP_FLASHPROG); |
176 | } | 173 | } |
177 | 174 | ||
178 | static struct physmap_flash_data intcp_flash_data = { | 175 | static struct physmap_flash_data intcp_flash_data = { |
@@ -191,7 +188,7 @@ static struct physmap_flash_data intcp_flash_data = { | |||
191 | static unsigned int mmc_status(struct device *dev) | 188 | static unsigned int mmc_status(struct device *dev) |
192 | { | 189 | { |
193 | unsigned int status = readl(__io_address(0xca000000 + 4)); | 190 | unsigned int status = readl(__io_address(0xca000000 + 4)); |
194 | writel(8, __io_address(INTEGRATOR_CP_CTL_BASE + 8)); | 191 | writel(8, intcp_con_base + 8); |
195 | 192 | ||
196 | return status & 8; | 193 | return status & 8; |
197 | } | 194 | } |
@@ -337,9 +334,6 @@ static struct of_dev_auxdata intcp_auxdata_lookup[] __initdata = { | |||
337 | { /* sentinel */ }, | 334 | { /* sentinel */ }, |
338 | }; | 335 | }; |
339 | 336 | ||
340 | /* Base address to the CP controller */ | ||
341 | static void __iomem *intcp_con_base; | ||
342 | |||
343 | static void __init intcp_init_of(void) | 337 | static void __init intcp_init_of(void) |
344 | { | 338 | { |
345 | struct device_node *root; | 339 | struct device_node *root; |
@@ -418,6 +412,28 @@ MACHINE_END | |||
418 | #ifdef CONFIG_ATAGS | 412 | #ifdef CONFIG_ATAGS |
419 | 413 | ||
420 | /* | 414 | /* |
415 | * For the ATAG boot some static mappings are needed. This will | ||
416 | * go away with the ATAG support down the road. | ||
417 | */ | ||
418 | |||
419 | static struct map_desc intcp_io_desc_atag[] __initdata = { | ||
420 | { | ||
421 | .virtual = IO_ADDRESS(INTEGRATOR_CP_CTL_BASE), | ||
422 | .pfn = __phys_to_pfn(INTEGRATOR_CP_CTL_BASE), | ||
423 | .length = SZ_4K, | ||
424 | .type = MT_DEVICE | ||
425 | }, | ||
426 | }; | ||
427 | |||
428 | static void __init intcp_map_io_atag(void) | ||
429 | { | ||
430 | iotable_init(intcp_io_desc_atag, ARRAY_SIZE(intcp_io_desc_atag)); | ||
431 | intcp_con_base = __io_address(INTEGRATOR_CP_CTL_BASE); | ||
432 | intcp_map_io(); | ||
433 | } | ||
434 | |||
435 | |||
436 | /* | ||
421 | * This is where non-devicetree initialization code is collected and stashed | 437 | * This is where non-devicetree initialization code is collected and stashed |
422 | * for eventual deletion. | 438 | * for eventual deletion. |
423 | */ | 439 | */ |
@@ -556,7 +572,7 @@ MACHINE_START(CINTEGRATOR, "ARM-IntegratorCP") | |||
556 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ | 572 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ |
557 | .atag_offset = 0x100, | 573 | .atag_offset = 0x100, |
558 | .reserve = integrator_reserve, | 574 | .reserve = integrator_reserve, |
559 | .map_io = intcp_map_io, | 575 | .map_io = intcp_map_io_atag, |
560 | .nr_irqs = NR_IRQS_INTEGRATOR_CP, | 576 | .nr_irqs = NR_IRQS_INTEGRATOR_CP, |
561 | .init_early = intcp_init_early, | 577 | .init_early = intcp_init_early, |
562 | .init_irq = intcp_init_irq, | 578 | .init_irq = intcp_init_irq, |