diff options
author | Tony Lindgren <tony@atomide.com> | 2011-10-04 21:17:41 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2011-10-19 19:34:11 -0400 |
commit | 4c3cf90117f1f4906d5975aeccc5ffd414807fd2 (patch) | |
tree | 97ffb9d131b69b694229bd8c2f7f27303ee6d4d0 /arch | |
parent | a66cb3454f220f49f900646ebdc76cb943319eb7 (diff) |
ARM: OMAP: Move set_globals initialization to happen in init_early
Otherwise we can't do generic map_io as we currently rely on
static mappings that work only because of arch_ioremap.
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-omap2/board-ti8168evm.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/common.c | 50 | ||||
-rw-r--r-- | arch/arm/mach-omap2/control.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-omap2/io.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap-smp.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-omap2/prcm.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-omap2/sdrc.c | 13 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/common.h | 14 |
8 files changed, 62 insertions, 70 deletions
diff --git a/arch/arm/mach-omap2/board-ti8168evm.c b/arch/arm/mach-omap2/board-ti8168evm.c index 981ca00d6e29..b0a16d2f2388 100644 --- a/arch/arm/mach-omap2/board-ti8168evm.c +++ b/arch/arm/mach-omap2/board-ti8168evm.c | |||
@@ -37,7 +37,6 @@ static void __init ti8168_evm_init(void) | |||
37 | 37 | ||
38 | static void __init ti8168_evm_map_io(void) | 38 | static void __init ti8168_evm_map_io(void) |
39 | { | 39 | { |
40 | omap2_set_globals_ti816x(); | ||
41 | omapti816x_map_common_io(); | 40 | omapti816x_map_common_io(); |
42 | } | 41 | } |
43 | 42 | ||
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c index de61f15c48e2..110e5b9db145 100644 --- a/arch/arm/mach-omap2/common.c +++ b/arch/arm/mach-omap2/common.c | |||
@@ -45,11 +45,11 @@ static void __init __omap2_set_globals(struct omap_globals *omap2_globals) | |||
45 | static struct omap_globals omap242x_globals = { | 45 | static struct omap_globals omap242x_globals = { |
46 | .class = OMAP242X_CLASS, | 46 | .class = OMAP242X_CLASS, |
47 | .tap = OMAP2_L4_IO_ADDRESS(0x48014000), | 47 | .tap = OMAP2_L4_IO_ADDRESS(0x48014000), |
48 | .sdrc = OMAP2420_SDRC_BASE, | 48 | .sdrc = OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE), |
49 | .sms = OMAP2420_SMS_BASE, | 49 | .sms = OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE), |
50 | .ctrl = OMAP242X_CTRL_BASE, | 50 | .ctrl = OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE), |
51 | .prm = OMAP2420_PRM_BASE, | 51 | .prm = OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE), |
52 | .cm = OMAP2420_CM_BASE, | 52 | .cm = OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE), |
53 | }; | 53 | }; |
54 | 54 | ||
55 | void __init omap2_set_globals_242x(void) | 55 | void __init omap2_set_globals_242x(void) |
@@ -59,7 +59,6 @@ void __init omap2_set_globals_242x(void) | |||
59 | 59 | ||
60 | void __init omap242x_map_io(void) | 60 | void __init omap242x_map_io(void) |
61 | { | 61 | { |
62 | omap2_set_globals_242x(); | ||
63 | omap242x_map_common_io(); | 62 | omap242x_map_common_io(); |
64 | } | 63 | } |
65 | #endif | 64 | #endif |
@@ -69,11 +68,11 @@ void __init omap242x_map_io(void) | |||
69 | static struct omap_globals omap243x_globals = { | 68 | static struct omap_globals omap243x_globals = { |
70 | .class = OMAP243X_CLASS, | 69 | .class = OMAP243X_CLASS, |
71 | .tap = OMAP2_L4_IO_ADDRESS(0x4900a000), | 70 | .tap = OMAP2_L4_IO_ADDRESS(0x4900a000), |
72 | .sdrc = OMAP243X_SDRC_BASE, | 71 | .sdrc = OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE), |
73 | .sms = OMAP243X_SMS_BASE, | 72 | .sms = OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE), |
74 | .ctrl = OMAP243X_CTRL_BASE, | 73 | .ctrl = OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE), |
75 | .prm = OMAP2430_PRM_BASE, | 74 | .prm = OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE), |
76 | .cm = OMAP2430_CM_BASE, | 75 | .cm = OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE), |
77 | }; | 76 | }; |
78 | 77 | ||
79 | void __init omap2_set_globals_243x(void) | 78 | void __init omap2_set_globals_243x(void) |
@@ -83,7 +82,6 @@ void __init omap2_set_globals_243x(void) | |||
83 | 82 | ||
84 | void __init omap243x_map_io(void) | 83 | void __init omap243x_map_io(void) |
85 | { | 84 | { |
86 | omap2_set_globals_243x(); | ||
87 | omap243x_map_common_io(); | 85 | omap243x_map_common_io(); |
88 | } | 86 | } |
89 | #endif | 87 | #endif |
@@ -93,11 +91,11 @@ void __init omap243x_map_io(void) | |||
93 | static struct omap_globals omap3_globals = { | 91 | static struct omap_globals omap3_globals = { |
94 | .class = OMAP343X_CLASS, | 92 | .class = OMAP343X_CLASS, |
95 | .tap = OMAP2_L4_IO_ADDRESS(0x4830A000), | 93 | .tap = OMAP2_L4_IO_ADDRESS(0x4830A000), |
96 | .sdrc = OMAP343X_SDRC_BASE, | 94 | .sdrc = OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE), |
97 | .sms = OMAP343X_SMS_BASE, | 95 | .sms = OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE), |
98 | .ctrl = OMAP343X_CTRL_BASE, | 96 | .ctrl = OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE), |
99 | .prm = OMAP3430_PRM_BASE, | 97 | .prm = OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE), |
100 | .cm = OMAP3430_CM_BASE, | 98 | .cm = OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE), |
101 | }; | 99 | }; |
102 | 100 | ||
103 | void __init omap2_set_globals_3xxx(void) | 101 | void __init omap2_set_globals_3xxx(void) |
@@ -107,7 +105,6 @@ void __init omap2_set_globals_3xxx(void) | |||
107 | 105 | ||
108 | void __init omap3_map_io(void) | 106 | void __init omap3_map_io(void) |
109 | { | 107 | { |
110 | omap2_set_globals_3xxx(); | ||
111 | omap34xx_map_common_io(); | 108 | omap34xx_map_common_io(); |
112 | } | 109 | } |
113 | 110 | ||
@@ -122,9 +119,9 @@ void __init omap3_map_io(void) | |||
122 | static struct omap_globals ti816x_globals = { | 119 | static struct omap_globals ti816x_globals = { |
123 | .class = OMAP343X_CLASS, | 120 | .class = OMAP343X_CLASS, |
124 | .tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE), | 121 | .tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE), |
125 | .ctrl = TI816X_CTRL_BASE, | 122 | .ctrl = OMAP2_L4_IO_ADDRESS(TI816X_CTRL_BASE), |
126 | .prm = TI816X_PRCM_BASE, | 123 | .prm = OMAP2_L4_IO_ADDRESS(TI816X_PRCM_BASE), |
127 | .cm = TI816X_PRCM_BASE, | 124 | .cm = OMAP2_L4_IO_ADDRESS(TI816X_PRCM_BASE), |
128 | }; | 125 | }; |
129 | 126 | ||
130 | void __init omap2_set_globals_ti816x(void) | 127 | void __init omap2_set_globals_ti816x(void) |
@@ -137,11 +134,11 @@ void __init omap2_set_globals_ti816x(void) | |||
137 | static struct omap_globals omap4_globals = { | 134 | static struct omap_globals omap4_globals = { |
138 | .class = OMAP443X_CLASS, | 135 | .class = OMAP443X_CLASS, |
139 | .tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), | 136 | .tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), |
140 | .ctrl = OMAP443X_SCM_BASE, | 137 | .ctrl = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), |
141 | .ctrl_pad = OMAP443X_CTRL_BASE, | 138 | .ctrl_pad = OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE), |
142 | .prm = OMAP4430_PRM_BASE, | 139 | .prm = OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE), |
143 | .cm = OMAP4430_CM_BASE, | 140 | .cm = OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE), |
144 | .cm2 = OMAP4430_CM2_BASE, | 141 | .cm2 = OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE), |
145 | }; | 142 | }; |
146 | 143 | ||
147 | void __init omap2_set_globals_443x(void) | 144 | void __init omap2_set_globals_443x(void) |
@@ -153,7 +150,6 @@ void __init omap2_set_globals_443x(void) | |||
153 | 150 | ||
154 | void __init omap4_map_io(void) | 151 | void __init omap4_map_io(void) |
155 | { | 152 | { |
156 | omap2_set_globals_443x(); | ||
157 | omap44xx_map_common_io(); | 153 | omap44xx_map_common_io(); |
158 | } | 154 | } |
159 | #endif | 155 | #endif |
diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c index aab884fecc55..e34d27f8c49c 100644 --- a/arch/arm/mach-omap2/control.c +++ b/arch/arm/mach-omap2/control.c | |||
@@ -149,17 +149,11 @@ static struct omap3_control_regs control_context; | |||
149 | 149 | ||
150 | void __init omap2_set_globals_control(struct omap_globals *omap2_globals) | 150 | void __init omap2_set_globals_control(struct omap_globals *omap2_globals) |
151 | { | 151 | { |
152 | /* Static mapping, never released */ | 152 | if (omap2_globals->ctrl) |
153 | if (omap2_globals->ctrl) { | 153 | omap2_ctrl_base = omap2_globals->ctrl; |
154 | omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K); | ||
155 | WARN_ON(!omap2_ctrl_base); | ||
156 | } | ||
157 | 154 | ||
158 | /* Static mapping, never released */ | 155 | if (omap2_globals->ctrl_pad) |
159 | if (omap2_globals->ctrl_pad) { | 156 | omap4_ctrl_pad_base = omap2_globals->ctrl_pad; |
160 | omap4_ctrl_pad_base = ioremap(omap2_globals->ctrl_pad, SZ_4K); | ||
161 | WARN_ON(!omap4_ctrl_pad_base); | ||
162 | } | ||
163 | } | 157 | } |
164 | 158 | ||
165 | void __iomem *omap_ctrl_base_get(void) | 159 | void __iomem *omap_ctrl_base_get(void) |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index b42bbb8f252d..d5caac3698dd 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include "clockdomain.h" | 44 | #include "clockdomain.h" |
45 | #include <plat/omap_hwmod.h> | 45 | #include <plat/omap_hwmod.h> |
46 | #include <plat/multi.h> | 46 | #include <plat/multi.h> |
47 | #include <plat/common.h> | ||
47 | 48 | ||
48 | /* | 49 | /* |
49 | * The machine specific code may provide the extra mapping besides the | 50 | * The machine specific code may provide the extra mapping besides the |
@@ -359,6 +360,7 @@ static void __init omap_hwmod_init_postsetup(void) | |||
359 | 360 | ||
360 | void __init omap2420_init_early(void) | 361 | void __init omap2420_init_early(void) |
361 | { | 362 | { |
363 | omap2_set_globals_242x(); | ||
362 | omap_common_init_early(); | 364 | omap_common_init_early(); |
363 | omap2xxx_voltagedomains_init(); | 365 | omap2xxx_voltagedomains_init(); |
364 | omap242x_powerdomains_init(); | 366 | omap242x_powerdomains_init(); |
@@ -370,6 +372,7 @@ void __init omap2420_init_early(void) | |||
370 | 372 | ||
371 | void __init omap2430_init_early(void) | 373 | void __init omap2430_init_early(void) |
372 | { | 374 | { |
375 | omap2_set_globals_243x(); | ||
373 | omap_common_init_early(); | 376 | omap_common_init_early(); |
374 | omap2xxx_voltagedomains_init(); | 377 | omap2xxx_voltagedomains_init(); |
375 | omap243x_powerdomains_init(); | 378 | omap243x_powerdomains_init(); |
@@ -385,6 +388,7 @@ void __init omap2430_init_early(void) | |||
385 | */ | 388 | */ |
386 | void __init omap3_init_early(void) | 389 | void __init omap3_init_early(void) |
387 | { | 390 | { |
391 | omap2_set_globals_3xxx(); | ||
388 | omap_common_init_early(); | 392 | omap_common_init_early(); |
389 | omap3xxx_voltagedomains_init(); | 393 | omap3xxx_voltagedomains_init(); |
390 | omap3xxx_powerdomains_init(); | 394 | omap3xxx_powerdomains_init(); |
@@ -416,11 +420,19 @@ void __init am35xx_init_early(void) | |||
416 | 420 | ||
417 | void __init ti816x_init_early(void) | 421 | void __init ti816x_init_early(void) |
418 | { | 422 | { |
419 | omap3_init_early(); | 423 | omap2_set_globals_ti816x(); |
424 | omap_common_init_early(); | ||
425 | omap3xxx_voltagedomains_init(); | ||
426 | omap3xxx_powerdomains_init(); | ||
427 | omap3xxx_clockdomains_init(); | ||
428 | omap3xxx_hwmod_init(); | ||
429 | omap_hwmod_init_postsetup(); | ||
430 | omap3xxx_clk_init(); | ||
420 | } | 431 | } |
421 | 432 | ||
422 | void __init omap4430_init_early(void) | 433 | void __init omap4430_init_early(void) |
423 | { | 434 | { |
435 | omap2_set_globals_443x(); | ||
424 | omap_common_init_early(); | 436 | omap_common_init_early(); |
425 | omap44xx_voltagedomains_init(); | 437 | omap44xx_voltagedomains_init(); |
426 | omap44xx_powerdomains_init(); | 438 | omap44xx_powerdomains_init(); |
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index ce65e9329c7b..11e25a4c4bd5 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c | |||
@@ -102,8 +102,11 @@ void __init smp_init_cpus(void) | |||
102 | { | 102 | { |
103 | unsigned int i, ncores; | 103 | unsigned int i, ncores; |
104 | 104 | ||
105 | /* Never released */ | 105 | /* |
106 | scu_base = ioremap(OMAP44XX_SCU_BASE, SZ_256); | 106 | * Currently we can't call ioremap here because |
107 | * SoC detection won't work until after init_early. | ||
108 | */ | ||
109 | scu_base = OMAP2_L4_IO_ADDRESS(OMAP44XX_SCU_BASE); | ||
107 | BUG_ON(!scu_base); | 110 | BUG_ON(!scu_base); |
108 | 111 | ||
109 | ncores = scu_get_core_count(scu_base); | 112 | ncores = scu_get_core_count(scu_base); |
diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c index 2e40a5cf0163..8db5f035eb0a 100644 --- a/arch/arm/mach-omap2/prcm.c +++ b/arch/arm/mach-omap2/prcm.c | |||
@@ -151,17 +151,10 @@ int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest, | |||
151 | 151 | ||
152 | void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals) | 152 | void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals) |
153 | { | 153 | { |
154 | /* Static mapping, never released */ | 154 | if (omap2_globals->prm) |
155 | if (omap2_globals->prm) { | 155 | prm_base = omap2_globals->prm; |
156 | prm_base = ioremap(omap2_globals->prm, SZ_8K); | 156 | if (omap2_globals->cm) |
157 | WARN_ON(!prm_base); | 157 | cm_base = omap2_globals->cm; |
158 | } | 158 | if (omap2_globals->cm2) |
159 | if (omap2_globals->cm) { | 159 | cm2_base = omap2_globals->cm2; |
160 | cm_base = ioremap(omap2_globals->cm, SZ_8K); | ||
161 | WARN_ON(!cm_base); | ||
162 | } | ||
163 | if (omap2_globals->cm2) { | ||
164 | cm2_base = ioremap(omap2_globals->cm2, SZ_8K); | ||
165 | WARN_ON(!cm2_base); | ||
166 | } | ||
167 | } | 160 | } |
diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c index da6f3a63b5d5..8f2782874771 100644 --- a/arch/arm/mach-omap2/sdrc.c +++ b/arch/arm/mach-omap2/sdrc.c | |||
@@ -117,15 +117,10 @@ int omap2_sdrc_get_params(unsigned long r, | |||
117 | 117 | ||
118 | void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals) | 118 | void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals) |
119 | { | 119 | { |
120 | /* Static mapping, never released */ | 120 | if (omap2_globals->sdrc) |
121 | if (omap2_globals->sdrc) { | 121 | omap2_sdrc_base = omap2_globals->sdrc; |
122 | omap2_sdrc_base = ioremap(omap2_globals->sdrc, SZ_64K); | 122 | if (omap2_globals->sms) |
123 | WARN_ON(!omap2_sdrc_base); | 123 | omap2_sms_base = omap2_globals->sms; |
124 | } | ||
125 | if (omap2_globals->sms) { | ||
126 | omap2_sms_base = ioremap(omap2_globals->sms, SZ_64K); | ||
127 | WARN_ON(!omap2_sms_base); | ||
128 | } | ||
129 | } | 124 | } |
130 | 125 | ||
131 | /** | 126 | /** |
diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h index ed85720c59c7..c50df4814f6f 100644 --- a/arch/arm/plat-omap/include/plat/common.h +++ b/arch/arm/plat-omap/include/plat/common.h | |||
@@ -65,13 +65,13 @@ void omap_sram_init(void); | |||
65 | struct omap_globals { | 65 | struct omap_globals { |
66 | u32 class; /* OMAP class to detect */ | 66 | u32 class; /* OMAP class to detect */ |
67 | void __iomem *tap; /* Control module ID code */ | 67 | void __iomem *tap; /* Control module ID code */ |
68 | unsigned long sdrc; /* SDRAM Controller */ | 68 | void __iomem *sdrc; /* SDRAM Controller */ |
69 | unsigned long sms; /* SDRAM Memory Scheduler */ | 69 | void __iomem *sms; /* SDRAM Memory Scheduler */ |
70 | unsigned long ctrl; /* System Control Module */ | 70 | void __iomem *ctrl; /* System Control Module */ |
71 | unsigned long ctrl_pad; /* PAD Control Module */ | 71 | void __iomem *ctrl_pad; /* PAD Control Module */ |
72 | unsigned long prm; /* Power and Reset Management */ | 72 | void __iomem *prm; /* Power and Reset Management */ |
73 | unsigned long cm; /* Clock Management */ | 73 | void __iomem *cm; /* Clock Management */ |
74 | unsigned long cm2; | 74 | void __iomem *cm2; |
75 | }; | 75 | }; |
76 | 76 | ||
77 | void omap2_set_globals_242x(void); | 77 | void omap2_set_globals_242x(void); |