diff options
author | R Sricharan <r.sricharan@ti.com> | 2012-06-05 06:51:32 -0400 |
---|---|---|
committer | Santosh Shilimkar <santosh.shilimkar@ti.com> | 2012-07-09 09:44:39 -0400 |
commit | 05e152c76a1efaa3165afecf5acf535c8283f386 (patch) | |
tree | b8f78f3fb8612bc007855964823ddca2490911bc | |
parent | b13e80a8bfe442406495a2fc9e7cbb79d33df48a (diff) |
ARM: OMAP5: Add minimal support for OMAP5430 SOC
OMAP5430 is Texas Instrument's SOC based on ARM Cortex-A15 SMP
architecture. It's a dual core SOC with GIC used for interrupt
handling and with an integrated L2 cache controller.
OMAP5432 is another variant of OMAP5430, with a
memory controller supporting DDR3 and SATA.
Patch includes:
- The machine specific headers and sources updates.
- Platform header updates.
- Minimum initialisation support for serial.
- IO table init
Signed-off-by: R Sricharan <r.sricharan@ti.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
-rw-r--r-- | arch/arm/mach-omap2/Makefile | 23 | ||||
-rw-r--r-- | arch/arm/mach-omap2/common.c | 24 | ||||
-rw-r--r-- | arch/arm/mach-omap2/common.h | 11 | ||||
-rw-r--r-- | arch/arm/mach-omap2/include/mach/debug-macro.S | 8 | ||||
-rw-r--r-- | arch/arm/mach-omap2/io.c | 44 | ||||
-rw-r--r-- | arch/arm/mach-omap2/iomap.h | 27 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/prcm-common.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/prcm.c | 2 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/hardware.h | 1 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/multi.h | 9 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/omap54xx.h | 32 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/serial.h | 10 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/uncompress.h | 6 | ||||
-rw-r--r-- | arch/arm/plat-omap/sram.c | 11 |
15 files changed, 198 insertions, 14 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 240f1969f2a..085e17175ef 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -17,6 +17,7 @@ obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common) | |||
17 | obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common) | 17 | obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common) |
18 | obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common) | 18 | obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common) |
19 | obj-$(CONFIG_SOC_AM33XX) += irq.o $(hwmod-common) | 19 | obj-$(CONFIG_SOC_AM33XX) += irq.o $(hwmod-common) |
20 | obj-$(CONFIG_SOC_OMAP5) += prm44xx.o $(hwmod-common) $(secure-common) | ||
20 | 21 | ||
21 | ifneq ($(CONFIG_SND_OMAP_SOC_MCBSP),) | 22 | ifneq ($(CONFIG_SND_OMAP_SOC_MCBSP),) |
22 | obj-y += mcbsp.o | 23 | obj-y += mcbsp.o |
@@ -29,8 +30,10 @@ obj-$(CONFIG_SOC_HAS_OMAP2_SDRC) += sdrc.o | |||
29 | 30 | ||
30 | obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o | 31 | obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o |
31 | obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o | 32 | obj-$(CONFIG_HOTPLUG_CPU) += omap-hotplug.o |
32 | obj-$(CONFIG_ARCH_OMAP4) += omap4-common.o omap-wakeupgen.o | 33 | omap-4-5-common = omap4-common.o omap-wakeupgen.o \ |
33 | obj-$(CONFIG_ARCH_OMAP4) += sleep44xx.o | 34 | sleep44xx.o |
35 | obj-$(CONFIG_ARCH_OMAP4) += $(omap-4-5-common) | ||
36 | obj-$(CONFIG_SOC_OMAP5) += $(omap-4-5-common) | ||
34 | 37 | ||
35 | plus_sec := $(call as-instr,.arch_extension sec,+sec) | 38 | plus_sec := $(call as-instr,.arch_extension sec,+sec) |
36 | AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec) | 39 | AFLAGS_omap-headsmp.o :=-Wa,-march=armv7-a$(plus_sec) |
@@ -70,6 +73,7 @@ obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o | |||
70 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o | 73 | obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o |
71 | obj-$(CONFIG_ARCH_OMAP3) += cpuidle34xx.o | 74 | obj-$(CONFIG_ARCH_OMAP3) += cpuidle34xx.o |
72 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o | 75 | obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o |
76 | obj-$(CONFIG_SOC_OMAP5) += omap-mpuss-lowpower.o | ||
73 | obj-$(CONFIG_ARCH_OMAP4) += cpuidle44xx.o | 77 | obj-$(CONFIG_ARCH_OMAP4) += cpuidle44xx.o |
74 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o | 78 | obj-$(CONFIG_PM_DEBUG) += pm-debug.o |
75 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o | 79 | obj-$(CONFIG_OMAP_SMARTREFLEX) += sr_device.o smartreflex.o |
@@ -85,14 +89,16 @@ endif | |||
85 | endif | 89 | endif |
86 | 90 | ||
87 | # PRCM | 91 | # PRCM |
92 | omap-prcm-4-5-common = prcm.o cminst44xx.o cm44xx.o \ | ||
93 | prcm_mpu44xx.o prminst44xx.o \ | ||
94 | vc44xx_data.o vp44xx_data.o | ||
88 | obj-y += prm_common.o | 95 | obj-y += prm_common.o |
89 | obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o | 96 | obj-$(CONFIG_ARCH_OMAP2) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o |
90 | obj-$(CONFIG_ARCH_OMAP3) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o | 97 | obj-$(CONFIG_ARCH_OMAP3) += prcm.o cm2xxx_3xxx.o prm2xxx_3xxx.o |
91 | obj-$(CONFIG_ARCH_OMAP3) += vc3xxx_data.o vp3xxx_data.o | 98 | obj-$(CONFIG_ARCH_OMAP3) += vc3xxx_data.o vp3xxx_data.o |
92 | obj-$(CONFIG_ARCH_OMAP4) += prcm.o cminst44xx.o cm44xx.o | ||
93 | obj-$(CONFIG_ARCH_OMAP4) += prcm_mpu44xx.o prminst44xx.o | ||
94 | obj-$(CONFIG_ARCH_OMAP4) += vc44xx_data.o vp44xx_data.o prm44xx.o | ||
95 | obj-$(CONFIG_SOC_AM33XX) += prcm.o prm33xx.o cm33xx.o | 99 | obj-$(CONFIG_SOC_AM33XX) += prcm.o prm33xx.o cm33xx.o |
100 | obj-$(CONFIG_ARCH_OMAP4) += $(omap-prcm-4-5-common) prm44xx.o | ||
101 | obj-$(CONFIG_SOC_OMAP5) += $(omap-prcm-4-5-common) | ||
96 | 102 | ||
97 | # OMAP voltage domains | 103 | # OMAP voltage domains |
98 | voltagedomain-common := voltage.o vc.o vp.o | 104 | voltagedomain-common := voltage.o vc.o vp.o |
@@ -104,6 +110,7 @@ obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common) | |||
104 | obj-$(CONFIG_ARCH_OMAP4) += voltagedomains44xx_data.o | 110 | obj-$(CONFIG_ARCH_OMAP4) += voltagedomains44xx_data.o |
105 | obj-$(CONFIG_SOC_AM33XX) += $(voltagedomain-common) | 111 | obj-$(CONFIG_SOC_AM33XX) += $(voltagedomain-common) |
106 | obj-$(CONFIG_SOC_AM33XX) += voltagedomains33xx_data.o | 112 | obj-$(CONFIG_SOC_AM33XX) += voltagedomains33xx_data.o |
113 | obj-$(CONFIG_SOC_OMAP5) += $(voltagedomain-common) | ||
107 | 114 | ||
108 | # OMAP powerdomain framework | 115 | # OMAP powerdomain framework |
109 | powerdomain-common += powerdomain.o powerdomain-common.o | 116 | powerdomain-common += powerdomain.o powerdomain-common.o |
@@ -121,6 +128,8 @@ obj-$(CONFIG_ARCH_OMAP4) += powerdomains44xx_data.o | |||
121 | obj-$(CONFIG_SOC_AM33XX) += $(powerdomain-common) | 128 | obj-$(CONFIG_SOC_AM33XX) += $(powerdomain-common) |
122 | obj-$(CONFIG_SOC_AM33XX) += powerdomain33xx.o | 129 | obj-$(CONFIG_SOC_AM33XX) += powerdomain33xx.o |
123 | obj-$(CONFIG_SOC_AM33XX) += powerdomains33xx_data.o | 130 | obj-$(CONFIG_SOC_AM33XX) += powerdomains33xx_data.o |
131 | obj-$(CONFIG_SOC_OMAP5) += $(powerdomain-common) | ||
132 | obj-$(CONFIG_SOC_OMAP5) += powerdomain44xx.o | ||
124 | 133 | ||
125 | # PRCM clockdomain control | 134 | # PRCM clockdomain control |
126 | clockdomain-common += clockdomain.o | 135 | clockdomain-common += clockdomain.o |
@@ -139,6 +148,8 @@ obj-$(CONFIG_ARCH_OMAP4) += clockdomains44xx_data.o | |||
139 | obj-$(CONFIG_SOC_AM33XX) += $(clockdomain-common) | 148 | obj-$(CONFIG_SOC_AM33XX) += $(clockdomain-common) |
140 | obj-$(CONFIG_SOC_AM33XX) += clockdomain33xx.o | 149 | obj-$(CONFIG_SOC_AM33XX) += clockdomain33xx.o |
141 | obj-$(CONFIG_SOC_AM33XX) += clockdomains33xx_data.o | 150 | obj-$(CONFIG_SOC_AM33XX) += clockdomains33xx_data.o |
151 | obj-$(CONFIG_SOC_OMAP5) += $(clockdomain-common) | ||
152 | obj-$(CONFIG_SOC_OMAP5) += clockdomain44xx.o | ||
142 | 153 | ||
143 | # Clock framework | 154 | # Clock framework |
144 | obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o | 155 | obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) clock2xxx.o |
@@ -157,6 +168,8 @@ obj-$(CONFIG_ARCH_OMAP3) += clkt_iclk.o | |||
157 | obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o | 168 | obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o |
158 | obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o dpll44xx.o | 169 | obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o dpll44xx.o |
159 | obj-$(CONFIG_SOC_AM33XX) += $(clock-common) dpll3xxx.o | 170 | obj-$(CONFIG_SOC_AM33XX) += $(clock-common) dpll3xxx.o |
171 | obj-$(CONFIG_SOC_OMAP5) += $(clock-common) | ||
172 | obj-$(CONFIG_SOC_OMAP5) += dpll3xxx.o dpll44xx.o | ||
160 | 173 | ||
161 | # OMAP2 clock rate set data (old "OPP" data) | 174 | # OMAP2 clock rate set data (old "OPP" data) |
162 | obj-$(CONFIG_SOC_OMAP2420) += opp2420_data.o | 175 | obj-$(CONFIG_SOC_OMAP2420) += opp2420_data.o |
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c index 73d2a0b9ca0..069f9725b1c 100644 --- a/arch/arm/mach-omap2/common.c +++ b/arch/arm/mach-omap2/common.c | |||
@@ -178,3 +178,27 @@ void __init omap4_map_io(void) | |||
178 | } | 178 | } |
179 | #endif | 179 | #endif |
180 | 180 | ||
181 | #if defined(CONFIG_SOC_OMAP5) | ||
182 | static struct omap_globals omap5_globals = { | ||
183 | .class = OMAP54XX_CLASS, | ||
184 | .tap = OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE), | ||
185 | .ctrl = OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE), | ||
186 | .ctrl_pad = OMAP2_L4_IO_ADDRESS(OMAP54XX_CTRL_BASE), | ||
187 | .prm = OMAP2_L4_IO_ADDRESS(OMAP54XX_PRM_BASE), | ||
188 | .cm = OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_AON_BASE), | ||
189 | .cm2 = OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE), | ||
190 | .prcm_mpu = OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE), | ||
191 | }; | ||
192 | |||
193 | void __init omap2_set_globals_5xxx(void) | ||
194 | { | ||
195 | omap2_set_globals_tap(&omap5_globals); | ||
196 | omap2_set_globals_control(&omap5_globals); | ||
197 | omap2_set_globals_prcm(&omap5_globals); | ||
198 | } | ||
199 | |||
200 | void __init omap5_map_io(void) | ||
201 | { | ||
202 | omap5_map_common_io(); | ||
203 | } | ||
204 | #endif | ||
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 404f172d95a..399e5bb1383 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h | |||
@@ -115,6 +115,14 @@ static inline int omap_mux_late_init(void) | |||
115 | } | 115 | } |
116 | #endif | 116 | #endif |
117 | 117 | ||
118 | #ifdef CONFIG_SOC_OMAP5 | ||
119 | extern void omap5_map_common_io(void); | ||
120 | #else | ||
121 | static inline void omap5_map_common_io(void) | ||
122 | { | ||
123 | } | ||
124 | #endif | ||
125 | |||
118 | extern void omap2_init_common_infrastructure(void); | 126 | extern void omap2_init_common_infrastructure(void); |
119 | 127 | ||
120 | extern struct sys_timer omap2_timer; | 128 | extern struct sys_timer omap2_timer; |
@@ -134,6 +142,7 @@ void am35xx_init_early(void); | |||
134 | void ti81xx_init_early(void); | 142 | void ti81xx_init_early(void); |
135 | void am33xx_init_early(void); | 143 | void am33xx_init_early(void); |
136 | void omap4430_init_early(void); | 144 | void omap4430_init_early(void); |
145 | void omap5_init_early(void); | ||
137 | void omap3_init_late(void); /* Do not use this one */ | 146 | void omap3_init_late(void); /* Do not use this one */ |
138 | void omap4430_init_late(void); | 147 | void omap4430_init_late(void); |
139 | void omap2420_init_late(void); | 148 | void omap2420_init_late(void); |
@@ -169,6 +178,7 @@ void omap2_set_globals_242x(void); | |||
169 | void omap2_set_globals_243x(void); | 178 | void omap2_set_globals_243x(void); |
170 | void omap2_set_globals_3xxx(void); | 179 | void omap2_set_globals_3xxx(void); |
171 | void omap2_set_globals_443x(void); | 180 | void omap2_set_globals_443x(void); |
181 | void omap2_set_globals_5xxx(void); | ||
172 | void omap2_set_globals_ti81xx(void); | 182 | void omap2_set_globals_ti81xx(void); |
173 | void omap2_set_globals_am33xx(void); | 183 | void omap2_set_globals_am33xx(void); |
174 | 184 | ||
@@ -188,6 +198,7 @@ void omap243x_map_io(void); | |||
188 | void omap3_map_io(void); | 198 | void omap3_map_io(void); |
189 | void am33xx_map_io(void); | 199 | void am33xx_map_io(void); |
190 | void omap4_map_io(void); | 200 | void omap4_map_io(void); |
201 | void omap5_map_io(void); | ||
191 | void ti81xx_map_io(void); | 202 | void ti81xx_map_io(void); |
192 | void omap_barriers_init(void); | 203 | void omap_barriers_init(void); |
193 | 204 | ||
diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/mach-omap2/include/mach/debug-macro.S index d7f844a99a7..93d10de7129 100644 --- a/arch/arm/mach-omap2/include/mach/debug-macro.S +++ b/arch/arm/mach-omap2/include/mach/debug-macro.S | |||
@@ -60,12 +60,12 @@ omap_uart_lsr: .word 0 | |||
60 | beq 23f @ configure OMAP2UART3 | 60 | beq 23f @ configure OMAP2UART3 |
61 | cmp \rp, #OMAP3UART3 @ only on 34xx | 61 | cmp \rp, #OMAP3UART3 @ only on 34xx |
62 | beq 33f @ configure OMAP3UART3 | 62 | beq 33f @ configure OMAP3UART3 |
63 | cmp \rp, #OMAP4UART3 @ only on 44xx | 63 | cmp \rp, #OMAP4UART3 @ only on 44xx/54xx |
64 | beq 43f @ configure OMAP4UART3 | 64 | beq 43f @ configure OMAP4/5UART3 |
65 | cmp \rp, #OMAP3UART4 @ only on 36xx | 65 | cmp \rp, #OMAP3UART4 @ only on 36xx |
66 | beq 34f @ configure OMAP3UART4 | 66 | beq 34f @ configure OMAP3UART4 |
67 | cmp \rp, #OMAP4UART4 @ only on 44xx | 67 | cmp \rp, #OMAP4UART4 @ only on 44xx/54xx |
68 | beq 44f @ configure OMAP4UART4 | 68 | beq 44f @ configure OMAP4/5UART4 |
69 | cmp \rp, #TI81XXUART1 @ ti81Xx UART offsets different | 69 | cmp \rp, #TI81XXUART1 @ ti81Xx UART offsets different |
70 | beq 81f @ configure UART1 | 70 | beq 81f @ configure UART1 |
71 | cmp \rp, #TI81XXUART2 @ ti81Xx UART offsets different | 71 | cmp \rp, #TI81XXUART2 @ ti81Xx UART offsets different |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index cb6c11cd8df..8976be90c8e 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -233,6 +233,35 @@ static struct map_desc omap44xx_io_desc[] __initdata = { | |||
233 | }; | 233 | }; |
234 | #endif | 234 | #endif |
235 | 235 | ||
236 | #ifdef CONFIG_SOC_OMAP5 | ||
237 | static struct map_desc omap54xx_io_desc[] __initdata = { | ||
238 | { | ||
239 | .virtual = L3_54XX_VIRT, | ||
240 | .pfn = __phys_to_pfn(L3_54XX_PHYS), | ||
241 | .length = L3_54XX_SIZE, | ||
242 | .type = MT_DEVICE, | ||
243 | }, | ||
244 | { | ||
245 | .virtual = L4_54XX_VIRT, | ||
246 | .pfn = __phys_to_pfn(L4_54XX_PHYS), | ||
247 | .length = L4_54XX_SIZE, | ||
248 | .type = MT_DEVICE, | ||
249 | }, | ||
250 | { | ||
251 | .virtual = L4_WK_54XX_VIRT, | ||
252 | .pfn = __phys_to_pfn(L4_WK_54XX_PHYS), | ||
253 | .length = L4_WK_54XX_SIZE, | ||
254 | .type = MT_DEVICE, | ||
255 | }, | ||
256 | { | ||
257 | .virtual = L4_PER_54XX_VIRT, | ||
258 | .pfn = __phys_to_pfn(L4_PER_54XX_PHYS), | ||
259 | .length = L4_PER_54XX_SIZE, | ||
260 | .type = MT_DEVICE, | ||
261 | }, | ||
262 | }; | ||
263 | #endif | ||
264 | |||
236 | #ifdef CONFIG_SOC_OMAP2420 | 265 | #ifdef CONFIG_SOC_OMAP2420 |
237 | void __init omap242x_map_common_io(void) | 266 | void __init omap242x_map_common_io(void) |
238 | { | 267 | { |
@@ -278,6 +307,12 @@ void __init omap44xx_map_common_io(void) | |||
278 | } | 307 | } |
279 | #endif | 308 | #endif |
280 | 309 | ||
310 | #ifdef CONFIG_SOC_OMAP5 | ||
311 | void __init omap5_map_common_io(void) | ||
312 | { | ||
313 | iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc)); | ||
314 | } | ||
315 | #endif | ||
281 | /* | 316 | /* |
282 | * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters | 317 | * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters |
283 | * | 318 | * |
@@ -513,6 +548,15 @@ void __init omap4430_init_late(void) | |||
513 | } | 548 | } |
514 | #endif | 549 | #endif |
515 | 550 | ||
551 | #ifdef CONFIG_SOC_OMAP5 | ||
552 | void __init omap5_init_early(void) | ||
553 | { | ||
554 | omap2_set_globals_5xxx(); | ||
555 | omap5xxx_check_revision(); | ||
556 | omap_common_init_early(); | ||
557 | } | ||
558 | #endif | ||
559 | |||
516 | void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, | 560 | void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, |
517 | struct omap_sdrc_params *sdrc_cs1) | 561 | struct omap_sdrc_params *sdrc_cs1) |
518 | { | 562 | { |
diff --git a/arch/arm/mach-omap2/iomap.h b/arch/arm/mach-omap2/iomap.h index 80b88921fab..cce2b65039f 100644 --- a/arch/arm/mach-omap2/iomap.h +++ b/arch/arm/mach-omap2/iomap.h | |||
@@ -1,6 +1,14 @@ | |||
1 | /* | 1 | /* |
2 | * IO mappings for OMAP2+ | 2 | * IO mappings for OMAP2+ |
3 | * | 3 | * |
4 | * IO definitions for TI OMAP processors and boards | ||
5 | * | ||
6 | * Copied from arch/arm/mach-sa1100/include/mach/io.h | ||
7 | * Copyright (C) 1997-1999 Russell King | ||
8 | * | ||
9 | * Copyright (C) 2009-2012 Texas Instruments | ||
10 | * Added OMAP4/5 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
11 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | 12 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms of the GNU General Public License as published by the | 13 | * under the terms of the GNU General Public License as published by the |
6 | * Free Software Foundation; either version 2 of the License, or (at your | 14 | * Free Software Foundation; either version 2 of the License, or (at your |
@@ -166,4 +174,23 @@ | |||
166 | /* 0x49000000 --> 0xfb000000 */ | 174 | /* 0x49000000 --> 0xfb000000 */ |
167 | #define L4_ABE_44XX_VIRT (L4_ABE_44XX_PHYS + OMAP2_L4_IO_OFFSET) | 175 | #define L4_ABE_44XX_VIRT (L4_ABE_44XX_PHYS + OMAP2_L4_IO_OFFSET) |
168 | #define L4_ABE_44XX_SIZE SZ_1M | 176 | #define L4_ABE_44XX_SIZE SZ_1M |
177 | /* | ||
178 | * ---------------------------------------------------------------------------- | ||
179 | * Omap5 specific IO mapping | ||
180 | * ---------------------------------------------------------------------------- | ||
181 | */ | ||
182 | #define L3_54XX_PHYS L3_54XX_BASE /* 0x44000000 --> 0xf8000000 */ | ||
183 | #define L3_54XX_VIRT (L3_54XX_PHYS + OMAP4_L3_IO_OFFSET) | ||
184 | #define L3_54XX_SIZE SZ_1M | ||
185 | |||
186 | #define L4_54XX_PHYS L4_54XX_BASE /* 0x4a000000 --> 0xfc000000 */ | ||
187 | #define L4_54XX_VIRT (L4_54XX_PHYS + OMAP2_L4_IO_OFFSET) | ||
188 | #define L4_54XX_SIZE SZ_4M | ||
189 | |||
190 | #define L4_WK_54XX_PHYS L4_WK_54XX_BASE /* 0x4ae00000 --> 0xfce00000 */ | ||
191 | #define L4_WK_54XX_VIRT (L4_WK_54XX_PHYS + OMAP2_L4_IO_OFFSET) | ||
192 | #define L4_WK_54XX_SIZE SZ_2M | ||
169 | 193 | ||
194 | #define L4_PER_54XX_PHYS L4_PER_54XX_BASE /* 0x48000000 --> 0xfa000000 */ | ||
195 | #define L4_PER_54XX_VIRT (L4_PER_54XX_PHYS + OMAP2_L4_IO_OFFSET) | ||
196 | #define L4_PER_54XX_SIZE SZ_4M | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index ff76ef1d723..2ada3642c67 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -3619,7 +3619,7 @@ void __init omap_hwmod_init(void) | |||
3619 | soc_ops.assert_hardreset = _omap2_assert_hardreset; | 3619 | soc_ops.assert_hardreset = _omap2_assert_hardreset; |
3620 | soc_ops.deassert_hardreset = _omap2_deassert_hardreset; | 3620 | soc_ops.deassert_hardreset = _omap2_deassert_hardreset; |
3621 | soc_ops.is_hardreset_asserted = _omap2_is_hardreset_asserted; | 3621 | soc_ops.is_hardreset_asserted = _omap2_is_hardreset_asserted; |
3622 | } else if (cpu_is_omap44xx()) { | 3622 | } else if (cpu_is_omap44xx() || soc_is_omap54xx()) { |
3623 | soc_ops.enable_module = _omap4_enable_module; | 3623 | soc_ops.enable_module = _omap4_enable_module; |
3624 | soc_ops.disable_module = _omap4_disable_module; | 3624 | soc_ops.disable_module = _omap4_disable_module; |
3625 | soc_ops.wait_target_ready = _omap4_wait_target_ready; | 3625 | soc_ops.wait_target_ready = _omap4_wait_target_ready; |
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index 6da3ba483ad..44485a8f255 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h | |||
@@ -416,7 +416,7 @@ extern void __iomem *cm_base; | |||
416 | extern void __iomem *cm2_base; | 416 | extern void __iomem *cm2_base; |
417 | extern void __iomem *prcm_mpu_base; | 417 | extern void __iomem *prcm_mpu_base; |
418 | 418 | ||
419 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_ARCH_OMAP5) | 419 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) |
420 | extern void omap_prm_base_init(void); | 420 | extern void omap_prm_base_init(void); |
421 | extern void omap_cm_base_init(void); | 421 | extern void omap_cm_base_init(void); |
422 | #else | 422 | #else |
diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c index 28cbfb2b573..053e24ed3c4 100644 --- a/arch/arm/mach-omap2/prcm.c +++ b/arch/arm/mach-omap2/prcm.c | |||
@@ -160,7 +160,7 @@ void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals) | |||
160 | if (omap2_globals->prcm_mpu) | 160 | if (omap2_globals->prcm_mpu) |
161 | prcm_mpu_base = omap2_globals->prcm_mpu; | 161 | prcm_mpu_base = omap2_globals->prcm_mpu; |
162 | 162 | ||
163 | if (cpu_is_omap44xx()) { | 163 | if (cpu_is_omap44xx() || soc_is_omap54xx()) { |
164 | omap_prm_base_init(); | 164 | omap_prm_base_init(); |
165 | omap_cm_base_init(); | 165 | omap_cm_base_init(); |
166 | } | 166 | } |
diff --git a/arch/arm/plat-omap/include/plat/hardware.h b/arch/arm/plat-omap/include/plat/hardware.h index e897978371c..ddbde38e1e3 100644 --- a/arch/arm/plat-omap/include/plat/hardware.h +++ b/arch/arm/plat-omap/include/plat/hardware.h | |||
@@ -288,5 +288,6 @@ | |||
288 | #include <plat/omap44xx.h> | 288 | #include <plat/omap44xx.h> |
289 | #include <plat/ti81xx.h> | 289 | #include <plat/ti81xx.h> |
290 | #include <plat/am33xx.h> | 290 | #include <plat/am33xx.h> |
291 | #include <plat/omap54xx.h> | ||
291 | 292 | ||
292 | #endif /* __ASM_ARCH_OMAP_HARDWARE_H */ | 293 | #endif /* __ASM_ARCH_OMAP_HARDWARE_H */ |
diff --git a/arch/arm/plat-omap/include/plat/multi.h b/arch/arm/plat-omap/include/plat/multi.h index 999ffba2690..045e320f106 100644 --- a/arch/arm/plat-omap/include/plat/multi.h +++ b/arch/arm/plat-omap/include/plat/multi.h | |||
@@ -99,4 +99,13 @@ | |||
99 | # endif | 99 | # endif |
100 | #endif | 100 | #endif |
101 | 101 | ||
102 | #ifdef CONFIG_SOC_OMAP5 | ||
103 | # ifdef OMAP_NAME | ||
104 | # undef MULTI_OMAP2 | ||
105 | # define MULTI_OMAP2 | ||
106 | # else | ||
107 | # define OMAP_NAME omap5 | ||
108 | # endif | ||
109 | #endif | ||
110 | |||
102 | #endif /* __PLAT_OMAP_MULTI_H */ | 111 | #endif /* __PLAT_OMAP_MULTI_H */ |
diff --git a/arch/arm/plat-omap/include/plat/omap54xx.h b/arch/arm/plat-omap/include/plat/omap54xx.h new file mode 100644 index 00000000000..a2582bb3cab --- /dev/null +++ b/arch/arm/plat-omap/include/plat/omap54xx.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /*: | ||
2 | * Address mappings and base address for OMAP5 interconnects | ||
3 | * and peripherals. | ||
4 | * | ||
5 | * Copyright (C) 2012 Texas Instruments | ||
6 | * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
7 | * Sricharan <r.sricharan@ti.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | #ifndef __ASM_SOC_OMAP54XX_H | ||
14 | #define __ASM_SOC_OMAP54XX_H | ||
15 | |||
16 | /* | ||
17 | * Please place only base defines here and put the rest in device | ||
18 | * specific headers. | ||
19 | */ | ||
20 | #define L4_54XX_BASE 0x4a000000 | ||
21 | #define L4_WK_54XX_BASE 0x4ae00000 | ||
22 | #define L4_PER_54XX_BASE 0x48000000 | ||
23 | #define L3_54XX_BASE 0x44000000 | ||
24 | #define OMAP54XX_32KSYNCT_BASE 0x4ae04000 | ||
25 | #define OMAP54XX_CM_CORE_AON_BASE 0x4a004000 | ||
26 | #define OMAP54XX_CM_CORE_BASE 0x4a008000 | ||
27 | #define OMAP54XX_PRM_BASE 0x4ae06000 | ||
28 | #define OMAP54XX_PRCM_MPU_BASE 0x48243000 | ||
29 | #define OMAP54XX_SCM_BASE 0x4a002000 | ||
30 | #define OMAP54XX_CTRL_BASE 0x4a002800 | ||
31 | |||
32 | #endif /* __ASM_SOC_OMAP555554XX_H */ | ||
diff --git a/arch/arm/plat-omap/include/plat/serial.h b/arch/arm/plat-omap/include/plat/serial.h index 28e2d250c2f..65fce44dce3 100644 --- a/arch/arm/plat-omap/include/plat/serial.h +++ b/arch/arm/plat-omap/include/plat/serial.h | |||
@@ -63,6 +63,14 @@ | |||
63 | /* AM33XX serial port */ | 63 | /* AM33XX serial port */ |
64 | #define AM33XX_UART1_BASE 0x44E09000 | 64 | #define AM33XX_UART1_BASE 0x44E09000 |
65 | 65 | ||
66 | /* OMAP5 serial ports */ | ||
67 | #define OMAP5_UART1_BASE OMAP2_UART1_BASE | ||
68 | #define OMAP5_UART2_BASE OMAP2_UART2_BASE | ||
69 | #define OMAP5_UART3_BASE OMAP4_UART3_BASE | ||
70 | #define OMAP5_UART4_BASE OMAP4_UART4_BASE | ||
71 | #define OMAP5_UART5_BASE 0x48066000 | ||
72 | #define OMAP5_UART6_BASE 0x48068000 | ||
73 | |||
66 | /* External port on Zoom2/3 */ | 74 | /* External port on Zoom2/3 */ |
67 | #define ZOOM_UART_BASE 0x10000000 | 75 | #define ZOOM_UART_BASE 0x10000000 |
68 | #define ZOOM_UART_VIRT 0xfa400000 | 76 | #define ZOOM_UART_VIRT 0xfa400000 |
@@ -97,6 +105,8 @@ | |||
97 | #define TI81XXUART2 82 | 105 | #define TI81XXUART2 82 |
98 | #define TI81XXUART3 83 | 106 | #define TI81XXUART3 83 |
99 | #define AM33XXUART1 84 | 107 | #define AM33XXUART1 84 |
108 | #define OMAP5UART3 OMAP4UART3 | ||
109 | #define OMAP5UART4 OMAP4UART4 | ||
100 | #define ZOOM_UART 95 /* Only on zoom2/3 */ | 110 | #define ZOOM_UART 95 /* Only on zoom2/3 */ |
101 | 111 | ||
102 | /* This is only used by 8250.c for omap1510 */ | 112 | /* This is only used by 8250.c for omap1510 */ |
diff --git a/arch/arm/plat-omap/include/plat/uncompress.h b/arch/arm/plat-omap/include/plat/uncompress.h index ac432339021..b8d19a13678 100644 --- a/arch/arm/plat-omap/include/plat/uncompress.h +++ b/arch/arm/plat-omap/include/plat/uncompress.h | |||
@@ -95,6 +95,9 @@ static inline void flush(void) | |||
95 | _DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT, \ | 95 | _DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT, \ |
96 | OMAP4UART##p) | 96 | OMAP4UART##p) |
97 | 97 | ||
98 | #define DEBUG_LL_OMAP5(p, mach) \ | ||
99 | _DEBUG_LL_ENTRY(mach, OMAP5_UART##p##_BASE, OMAP_PORT_SHIFT, \ | ||
100 | OMAP5UART##p) | ||
98 | /* Zoom2/3 shift is different for UART1 and external port */ | 101 | /* Zoom2/3 shift is different for UART1 and external port */ |
99 | #define DEBUG_LL_ZOOM(mach) \ | 102 | #define DEBUG_LL_ZOOM(mach) \ |
100 | _DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART) | 103 | _DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART) |
@@ -177,6 +180,9 @@ static inline void __arch_decomp_setup(unsigned long arch_id) | |||
177 | DEBUG_LL_OMAP4(3, omap_4430sdp); | 180 | DEBUG_LL_OMAP4(3, omap_4430sdp); |
178 | DEBUG_LL_OMAP4(3, omap4_panda); | 181 | DEBUG_LL_OMAP4(3, omap4_panda); |
179 | 182 | ||
183 | /* omap5 based boards using UART3 */ | ||
184 | DEBUG_LL_OMAP5(3, omap5_sevm); | ||
185 | |||
180 | /* zoom2/3 external uart */ | 186 | /* zoom2/3 external uart */ |
181 | DEBUG_LL_ZOOM(omap_zoom2); | 187 | DEBUG_LL_ZOOM(omap_zoom2); |
182 | DEBUG_LL_ZOOM(omap_zoom3); | 188 | DEBUG_LL_ZOOM(omap_zoom3); |
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index 70cf825bdd8..766181cb5c9 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
@@ -6,8 +6,8 @@ | |||
6 | * Copyright (C) 2005 Nokia Corporation | 6 | * Copyright (C) 2005 Nokia Corporation |
7 | * Written by Tony Lindgren <tony@atomide.com> | 7 | * Written by Tony Lindgren <tony@atomide.com> |
8 | * | 8 | * |
9 | * Copyright (C) 2009 Texas Instruments | 9 | * Copyright (C) 2009-2012 Texas Instruments |
10 | * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> | 10 | * Added OMAP4/5 support - Santosh Shilimkar <santosh.shilimkar@ti.com> |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
13 | * it under the terms of the GNU General Public License version 2 as | 13 | * it under the terms of the GNU General Public License version 2 as |
@@ -44,6 +44,7 @@ | |||
44 | #else | 44 | #else |
45 | #define OMAP4_SRAM_PUB_PA (OMAP4_SRAM_PA + 0x4000) | 45 | #define OMAP4_SRAM_PUB_PA (OMAP4_SRAM_PA + 0x4000) |
46 | #endif | 46 | #endif |
47 | #define OMAP5_SRAM_PA 0x40300000 | ||
47 | 48 | ||
48 | #if defined(CONFIG_ARCH_OMAP2PLUS) | 49 | #if defined(CONFIG_ARCH_OMAP2PLUS) |
49 | #define SRAM_BOOTLOADER_SZ 0x00 | 50 | #define SRAM_BOOTLOADER_SZ 0x00 |
@@ -118,6 +119,9 @@ static void __init omap_detect_sram(void) | |||
118 | } else if (cpu_is_omap44xx()) { | 119 | } else if (cpu_is_omap44xx()) { |
119 | omap_sram_start = OMAP4_SRAM_PUB_PA; | 120 | omap_sram_start = OMAP4_SRAM_PUB_PA; |
120 | omap_sram_size = 0xa000; /* 40K */ | 121 | omap_sram_size = 0xa000; /* 40K */ |
122 | } else if (soc_is_omap54xx()) { | ||
123 | omap_sram_start = OMAP5_SRAM_PA; | ||
124 | omap_sram_size = SZ_128K; /* 128KB */ | ||
121 | } else { | 125 | } else { |
122 | omap_sram_start = OMAP2_SRAM_PUB_PA; | 126 | omap_sram_start = OMAP2_SRAM_PUB_PA; |
123 | omap_sram_size = 0x800; /* 2K */ | 127 | omap_sram_size = 0x800; /* 2K */ |
@@ -132,6 +136,9 @@ static void __init omap_detect_sram(void) | |||
132 | } else if (cpu_is_omap44xx()) { | 136 | } else if (cpu_is_omap44xx()) { |
133 | omap_sram_start = OMAP4_SRAM_PA; | 137 | omap_sram_start = OMAP4_SRAM_PA; |
134 | omap_sram_size = 0xe000; /* 56K */ | 138 | omap_sram_size = 0xe000; /* 56K */ |
139 | } else if (soc_is_omap54xx()) { | ||
140 | omap_sram_start = OMAP5_SRAM_PA; | ||
141 | omap_sram_size = SZ_128K; /* 128KB */ | ||
135 | } else { | 142 | } else { |
136 | omap_sram_start = OMAP2_SRAM_PA; | 143 | omap_sram_start = OMAP2_SRAM_PA; |
137 | if (cpu_is_omap242x()) | 144 | if (cpu_is_omap242x()) |