diff options
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/devices.c | 39 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_2420_data.c | 64 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_2430_data.c | 64 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 66 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 133 |
5 files changed, 366 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 9e5d51bee94..8e2f0aa310b 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/platform_device.h> | 15 | #include <linux/platform_device.h> |
16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
17 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
18 | #include <linux/err.h> | ||
18 | 19 | ||
19 | #include <mach/hardware.h> | 20 | #include <mach/hardware.h> |
20 | #include <mach/irqs.h> | 21 | #include <mach/irqs.h> |
@@ -28,6 +29,8 @@ | |||
28 | #include <mach/gpio.h> | 29 | #include <mach/gpio.h> |
29 | #include <plat/mmc.h> | 30 | #include <plat/mmc.h> |
30 | #include <plat/dma.h> | 31 | #include <plat/dma.h> |
32 | #include <plat/omap_hwmod.h> | ||
33 | #include <plat/omap_device.h> | ||
31 | 34 | ||
32 | #include "mux.h" | 35 | #include "mux.h" |
33 | 36 | ||
@@ -932,3 +935,39 @@ static int __init omap2_init_devices(void) | |||
932 | return 0; | 935 | return 0; |
933 | } | 936 | } |
934 | arch_initcall(omap2_init_devices); | 937 | arch_initcall(omap2_init_devices); |
938 | |||
939 | #if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE) | ||
940 | struct omap_device_pm_latency omap_wdt_latency[] = { | ||
941 | [0] = { | ||
942 | .deactivate_func = omap_device_idle_hwmods, | ||
943 | .activate_func = omap_device_enable_hwmods, | ||
944 | .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST, | ||
945 | }, | ||
946 | }; | ||
947 | |||
948 | static int __init omap_init_wdt(void) | ||
949 | { | ||
950 | int id = -1; | ||
951 | struct omap_device *od; | ||
952 | struct omap_hwmod *oh; | ||
953 | char *oh_name = "wd_timer2"; | ||
954 | char *dev_name = "omap_wdt"; | ||
955 | |||
956 | if (!cpu_class_is_omap2()) | ||
957 | return 0; | ||
958 | |||
959 | oh = omap_hwmod_lookup(oh_name); | ||
960 | if (!oh) { | ||
961 | pr_err("Could not look up wd_timer%d hwmod\n", id); | ||
962 | return -EINVAL; | ||
963 | } | ||
964 | |||
965 | od = omap_device_build(dev_name, id, oh, NULL, 0, | ||
966 | omap_wdt_latency, | ||
967 | ARRAY_SIZE(omap_wdt_latency), 0); | ||
968 | WARN(IS_ERR(od), "Cant build omap_device for %s:%s.\n", | ||
969 | dev_name, oh->name); | ||
970 | return 0; | ||
971 | } | ||
972 | subsys_initcall(omap_init_wdt); | ||
973 | #endif | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c index ba145f7d589..adf6e3632a2 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include "omap_hwmod_common_data.h" | 20 | #include "omap_hwmod_common_data.h" |
21 | 21 | ||
22 | #include "prm-regbits-24xx.h" | 22 | #include "prm-regbits-24xx.h" |
23 | #include "cm-regbits-24xx.h" | ||
23 | 24 | ||
24 | /* | 25 | /* |
25 | * OMAP2420 hardware module integration data | 26 | * OMAP2420 hardware module integration data |
@@ -34,6 +35,7 @@ static struct omap_hwmod omap2420_mpu_hwmod; | |||
34 | static struct omap_hwmod omap2420_iva_hwmod; | 35 | static struct omap_hwmod omap2420_iva_hwmod; |
35 | static struct omap_hwmod omap2420_l3_main_hwmod; | 36 | static struct omap_hwmod omap2420_l3_main_hwmod; |
36 | static struct omap_hwmod omap2420_l4_core_hwmod; | 37 | static struct omap_hwmod omap2420_l4_core_hwmod; |
38 | static struct omap_hwmod omap2420_wd_timer2_hwmod; | ||
37 | 39 | ||
38 | /* L3 -> L4_CORE interface */ | 40 | /* L3 -> L4_CORE interface */ |
39 | static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = { | 41 | static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = { |
@@ -226,6 +228,67 @@ static struct omap_hwmod omap2420_iva_hwmod = { | |||
226 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420) | 228 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420) |
227 | }; | 229 | }; |
228 | 230 | ||
231 | /* l4_wkup -> wd_timer2 */ | ||
232 | static struct omap_hwmod_addr_space omap2420_wd_timer2_addrs[] = { | ||
233 | { | ||
234 | .pa_start = 0x48022000, | ||
235 | .pa_end = 0x4802207f, | ||
236 | .flags = ADDR_TYPE_RT | ||
237 | }, | ||
238 | }; | ||
239 | |||
240 | static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = { | ||
241 | .master = &omap2420_l4_wkup_hwmod, | ||
242 | .slave = &omap2420_wd_timer2_hwmod, | ||
243 | .clk = "mpu_wdt_ick", | ||
244 | .addr = omap2420_wd_timer2_addrs, | ||
245 | .addr_cnt = ARRAY_SIZE(omap2420_wd_timer2_addrs), | ||
246 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
247 | }; | ||
248 | |||
249 | /* | ||
250 | * 'wd_timer' class | ||
251 | * 32-bit watchdog upward counter that generates a pulse on the reset pin on | ||
252 | * overflow condition | ||
253 | */ | ||
254 | |||
255 | static struct omap_hwmod_class_sysconfig omap2420_wd_timer_sysc = { | ||
256 | .rev_offs = 0x0000, | ||
257 | .sysc_offs = 0x0010, | ||
258 | .syss_offs = 0x0014, | ||
259 | .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET | | ||
260 | SYSC_HAS_AUTOIDLE), | ||
261 | .sysc_fields = &omap_hwmod_sysc_type1, | ||
262 | }; | ||
263 | |||
264 | static struct omap_hwmod_class omap2420_wd_timer_hwmod_class = { | ||
265 | .name = "wd_timer", | ||
266 | .sysc = &omap2420_wd_timer_sysc, | ||
267 | }; | ||
268 | |||
269 | /* wd_timer2 */ | ||
270 | static struct omap_hwmod_ocp_if *omap2420_wd_timer2_slaves[] = { | ||
271 | &omap2420_l4_wkup__wd_timer2, | ||
272 | }; | ||
273 | |||
274 | static struct omap_hwmod omap2420_wd_timer2_hwmod = { | ||
275 | .name = "wd_timer2", | ||
276 | .class = &omap2420_wd_timer_hwmod_class, | ||
277 | .main_clk = "mpu_wdt_fck", | ||
278 | .prcm = { | ||
279 | .omap2 = { | ||
280 | .prcm_reg_id = 1, | ||
281 | .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT, | ||
282 | .module_offs = WKUP_MOD, | ||
283 | .idlest_reg_id = 1, | ||
284 | .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT, | ||
285 | }, | ||
286 | }, | ||
287 | .slaves = omap2420_wd_timer2_slaves, | ||
288 | .slaves_cnt = ARRAY_SIZE(omap2420_wd_timer2_slaves), | ||
289 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420), | ||
290 | }; | ||
291 | |||
229 | /* UART */ | 292 | /* UART */ |
230 | 293 | ||
231 | static struct omap_hwmod_class_sysconfig uart_sysc = { | 294 | static struct omap_hwmod_class_sysconfig uart_sysc = { |
@@ -361,6 +424,7 @@ static __initdata struct omap_hwmod *omap2420_hwmods[] = { | |||
361 | &omap2420_l4_wkup_hwmod, | 424 | &omap2420_l4_wkup_hwmod, |
362 | &omap2420_mpu_hwmod, | 425 | &omap2420_mpu_hwmod, |
363 | &omap2420_iva_hwmod, | 426 | &omap2420_iva_hwmod, |
427 | &omap2420_wd_timer2_hwmod, | ||
364 | &omap2420_uart1_hwmod, | 428 | &omap2420_uart1_hwmod, |
365 | &omap2420_uart2_hwmod, | 429 | &omap2420_uart2_hwmod, |
366 | &omap2420_uart3_hwmod, | 430 | &omap2420_uart3_hwmod, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index d21073d7eb7..12d939e456c 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include "omap_hwmod_common_data.h" | 20 | #include "omap_hwmod_common_data.h" |
21 | 21 | ||
22 | #include "prm-regbits-24xx.h" | 22 | #include "prm-regbits-24xx.h" |
23 | #include "cm-regbits-24xx.h" | ||
23 | 24 | ||
24 | /* | 25 | /* |
25 | * OMAP2430 hardware module integration data | 26 | * OMAP2430 hardware module integration data |
@@ -34,6 +35,7 @@ static struct omap_hwmod omap2430_mpu_hwmod; | |||
34 | static struct omap_hwmod omap2430_iva_hwmod; | 35 | static struct omap_hwmod omap2430_iva_hwmod; |
35 | static struct omap_hwmod omap2430_l3_main_hwmod; | 36 | static struct omap_hwmod omap2430_l3_main_hwmod; |
36 | static struct omap_hwmod omap2430_l4_core_hwmod; | 37 | static struct omap_hwmod omap2430_l4_core_hwmod; |
38 | static struct omap_hwmod omap2430_wd_timer2_hwmod; | ||
37 | 39 | ||
38 | /* L3 -> L4_CORE interface */ | 40 | /* L3 -> L4_CORE interface */ |
39 | static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = { | 41 | static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = { |
@@ -226,6 +228,67 @@ static struct omap_hwmod omap2430_iva_hwmod = { | |||
226 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430) | 228 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430) |
227 | }; | 229 | }; |
228 | 230 | ||
231 | /* l4_wkup -> wd_timer2 */ | ||
232 | static struct omap_hwmod_addr_space omap2430_wd_timer2_addrs[] = { | ||
233 | { | ||
234 | .pa_start = 0x49016000, | ||
235 | .pa_end = 0x4901607f, | ||
236 | .flags = ADDR_TYPE_RT | ||
237 | }, | ||
238 | }; | ||
239 | |||
240 | static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = { | ||
241 | .master = &omap2430_l4_wkup_hwmod, | ||
242 | .slave = &omap2430_wd_timer2_hwmod, | ||
243 | .clk = "mpu_wdt_ick", | ||
244 | .addr = omap2430_wd_timer2_addrs, | ||
245 | .addr_cnt = ARRAY_SIZE(omap2430_wd_timer2_addrs), | ||
246 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
247 | }; | ||
248 | |||
249 | /* | ||
250 | * 'wd_timer' class | ||
251 | * 32-bit watchdog upward counter that generates a pulse on the reset pin on | ||
252 | * overflow condition | ||
253 | */ | ||
254 | |||
255 | static struct omap_hwmod_class_sysconfig omap2430_wd_timer_sysc = { | ||
256 | .rev_offs = 0x0, | ||
257 | .sysc_offs = 0x0010, | ||
258 | .syss_offs = 0x0014, | ||
259 | .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET | | ||
260 | SYSC_HAS_AUTOIDLE), | ||
261 | .sysc_fields = &omap_hwmod_sysc_type1, | ||
262 | }; | ||
263 | |||
264 | static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = { | ||
265 | .name = "wd_timer", | ||
266 | .sysc = &omap2430_wd_timer_sysc, | ||
267 | }; | ||
268 | |||
269 | /* wd_timer2 */ | ||
270 | static struct omap_hwmod_ocp_if *omap2430_wd_timer2_slaves[] = { | ||
271 | &omap2430_l4_wkup__wd_timer2, | ||
272 | }; | ||
273 | |||
274 | static struct omap_hwmod omap2430_wd_timer2_hwmod = { | ||
275 | .name = "wd_timer2", | ||
276 | .class = &omap2430_wd_timer_hwmod_class, | ||
277 | .main_clk = "mpu_wdt_fck", | ||
278 | .prcm = { | ||
279 | .omap2 = { | ||
280 | .prcm_reg_id = 1, | ||
281 | .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT, | ||
282 | .module_offs = WKUP_MOD, | ||
283 | .idlest_reg_id = 1, | ||
284 | .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT, | ||
285 | }, | ||
286 | }, | ||
287 | .slaves = omap2430_wd_timer2_slaves, | ||
288 | .slaves_cnt = ARRAY_SIZE(omap2430_wd_timer2_slaves), | ||
289 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430), | ||
290 | }; | ||
291 | |||
229 | /* UART */ | 292 | /* UART */ |
230 | 293 | ||
231 | static struct omap_hwmod_class_sysconfig uart_sysc = { | 294 | static struct omap_hwmod_class_sysconfig uart_sysc = { |
@@ -361,6 +424,7 @@ static __initdata struct omap_hwmod *omap2430_hwmods[] = { | |||
361 | &omap2430_l4_wkup_hwmod, | 424 | &omap2430_l4_wkup_hwmod, |
362 | &omap2430_mpu_hwmod, | 425 | &omap2430_mpu_hwmod, |
363 | &omap2430_iva_hwmod, | 426 | &omap2430_iva_hwmod, |
427 | &omap2430_wd_timer2_hwmod, | ||
364 | &omap2430_uart1_hwmod, | 428 | &omap2430_uart1_hwmod, |
365 | &omap2430_uart2_hwmod, | 429 | &omap2430_uart2_hwmod, |
366 | &omap2430_uart3_hwmod, | 430 | &omap2430_uart3_hwmod, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 5c9cb255a05..cb97ecf0a3f 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include "omap_hwmod_common_data.h" | 22 | #include "omap_hwmod_common_data.h" |
23 | 23 | ||
24 | #include "prm-regbits-34xx.h" | 24 | #include "prm-regbits-34xx.h" |
25 | #include "cm-regbits-34xx.h" | ||
25 | 26 | ||
26 | /* | 27 | /* |
27 | * OMAP3xxx hardware module integration data | 28 | * OMAP3xxx hardware module integration data |
@@ -37,6 +38,7 @@ static struct omap_hwmod omap3xxx_iva_hwmod; | |||
37 | static struct omap_hwmod omap3xxx_l3_main_hwmod; | 38 | static struct omap_hwmod omap3xxx_l3_main_hwmod; |
38 | static struct omap_hwmod omap3xxx_l4_core_hwmod; | 39 | static struct omap_hwmod omap3xxx_l4_core_hwmod; |
39 | static struct omap_hwmod omap3xxx_l4_per_hwmod; | 40 | static struct omap_hwmod omap3xxx_l4_per_hwmod; |
41 | static struct omap_hwmod omap3xxx_wd_timer2_hwmod; | ||
40 | 42 | ||
41 | /* L3 -> L4_CORE interface */ | 43 | /* L3 -> L4_CORE interface */ |
42 | static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = { | 44 | static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = { |
@@ -278,6 +280,69 @@ static struct omap_hwmod omap3xxx_iva_hwmod = { | |||
278 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430) | 280 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430) |
279 | }; | 281 | }; |
280 | 282 | ||
283 | /* l4_wkup -> wd_timer2 */ | ||
284 | static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = { | ||
285 | { | ||
286 | .pa_start = 0x48314000, | ||
287 | .pa_end = 0x4831407f, | ||
288 | .flags = ADDR_TYPE_RT | ||
289 | }, | ||
290 | }; | ||
291 | |||
292 | static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = { | ||
293 | .master = &omap3xxx_l4_wkup_hwmod, | ||
294 | .slave = &omap3xxx_wd_timer2_hwmod, | ||
295 | .clk = "wdt2_ick", | ||
296 | .addr = omap3xxx_wd_timer2_addrs, | ||
297 | .addr_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_addrs), | ||
298 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
299 | }; | ||
300 | |||
301 | /* | ||
302 | * 'wd_timer' class | ||
303 | * 32-bit watchdog upward counter that generates a pulse on the reset pin on | ||
304 | * overflow condition | ||
305 | */ | ||
306 | |||
307 | static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = { | ||
308 | .rev_offs = 0x0000, | ||
309 | .sysc_offs = 0x0010, | ||
310 | .syss_offs = 0x0014, | ||
311 | .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE | | ||
312 | SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | | ||
313 | SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY), | ||
314 | .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), | ||
315 | .sysc_fields = &omap_hwmod_sysc_type1, | ||
316 | }; | ||
317 | |||
318 | static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = { | ||
319 | .name = "wd_timer", | ||
320 | .sysc = &omap3xxx_wd_timer_sysc, | ||
321 | }; | ||
322 | |||
323 | /* wd_timer2 */ | ||
324 | static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = { | ||
325 | &omap3xxx_l4_wkup__wd_timer2, | ||
326 | }; | ||
327 | |||
328 | static struct omap_hwmod omap3xxx_wd_timer2_hwmod = { | ||
329 | .name = "wd_timer2", | ||
330 | .class = &omap3xxx_wd_timer_hwmod_class, | ||
331 | .main_clk = "wdt2_fck", | ||
332 | .prcm = { | ||
333 | .omap2 = { | ||
334 | .prcm_reg_id = 1, | ||
335 | .module_bit = OMAP3430_EN_WDT2_SHIFT, | ||
336 | .module_offs = WKUP_MOD, | ||
337 | .idlest_reg_id = 1, | ||
338 | .idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT, | ||
339 | }, | ||
340 | }, | ||
341 | .slaves = omap3xxx_wd_timer2_slaves, | ||
342 | .slaves_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_slaves), | ||
343 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430), | ||
344 | }; | ||
345 | |||
281 | /* UART common */ | 346 | /* UART common */ |
282 | 347 | ||
283 | static struct omap_hwmod_class_sysconfig uart_sysc = { | 348 | static struct omap_hwmod_class_sysconfig uart_sysc = { |
@@ -451,6 +516,7 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { | |||
451 | &omap3xxx_l4_wkup_hwmod, | 516 | &omap3xxx_l4_wkup_hwmod, |
452 | &omap3xxx_mpu_hwmod, | 517 | &omap3xxx_mpu_hwmod, |
453 | &omap3xxx_iva_hwmod, | 518 | &omap3xxx_iva_hwmod, |
519 | &omap3xxx_wd_timer2_hwmod, | ||
454 | &omap3xxx_uart1_hwmod, | 520 | &omap3xxx_uart1_hwmod, |
455 | &omap3xxx_uart2_hwmod, | 521 | &omap3xxx_uart2_hwmod, |
456 | &omap3xxx_uart3_hwmod, | 522 | &omap3xxx_uart3_hwmod, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index afcbd483a6c..7274db4de48 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
@@ -453,6 +453,22 @@ static struct omap_hwmod omap44xx_mpu_hwmod = { | |||
453 | }; | 453 | }; |
454 | 454 | ||
455 | /* | 455 | /* |
456 | * 'wd_timer' class | ||
457 | * 32-bit watchdog upward counter that generates a pulse on the reset pin on | ||
458 | * overflow condition | ||
459 | */ | ||
460 | |||
461 | static struct omap_hwmod_class_sysconfig omap44xx_wd_timer_sysc = { | ||
462 | .rev_offs = 0x0000, | ||
463 | .sysc_offs = 0x0010, | ||
464 | .syss_offs = 0x0014, | ||
465 | .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE | | ||
466 | SYSC_HAS_SOFTRESET), | ||
467 | .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), | ||
468 | .sysc_fields = &omap_hwmod_sysc_type1, | ||
469 | }; | ||
470 | |||
471 | /* | ||
456 | * 'uart' class | 472 | * 'uart' class |
457 | * universal asynchronous receiver/transmitter (uart) | 473 | * universal asynchronous receiver/transmitter (uart) |
458 | */ | 474 | */ |
@@ -467,6 +483,25 @@ static struct omap_hwmod_class_sysconfig omap44xx_uart_sysc = { | |||
467 | .sysc_fields = &omap_hwmod_sysc_type1, | 483 | .sysc_fields = &omap_hwmod_sysc_type1, |
468 | }; | 484 | }; |
469 | 485 | ||
486 | static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = { | ||
487 | .name = "wd_timer", | ||
488 | .sysc = &omap44xx_wd_timer_sysc, | ||
489 | }; | ||
490 | |||
491 | /* wd_timer2 */ | ||
492 | static struct omap_hwmod omap44xx_wd_timer2_hwmod; | ||
493 | static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = { | ||
494 | { .irq = 80 + OMAP44XX_IRQ_GIC_START }, | ||
495 | }; | ||
496 | |||
497 | static struct omap_hwmod_addr_space omap44xx_wd_timer2_addrs[] = { | ||
498 | { | ||
499 | .pa_start = 0x4a314000, | ||
500 | .pa_end = 0x4a31407f, | ||
501 | .flags = ADDR_TYPE_RT | ||
502 | }, | ||
503 | }; | ||
504 | |||
470 | static struct omap_hwmod_class omap44xx_uart_hwmod_class = { | 505 | static struct omap_hwmod_class omap44xx_uart_hwmod_class = { |
471 | .name = "uart", | 506 | .name = "uart", |
472 | .sysc = &omap44xx_uart_sysc, | 507 | .sysc = &omap44xx_uart_sysc, |
@@ -543,6 +578,51 @@ static struct omap_hwmod_addr_space omap44xx_uart2_addrs[] = { | |||
543 | }, | 578 | }, |
544 | }; | 579 | }; |
545 | 580 | ||
581 | /* l4_wkup -> wd_timer2 */ | ||
582 | static struct omap_hwmod_ocp_if omap44xx_l4_wkup__wd_timer2 = { | ||
583 | .master = &omap44xx_l4_wkup_hwmod, | ||
584 | .slave = &omap44xx_wd_timer2_hwmod, | ||
585 | .clk = "l4_wkup_clk_mux_ck", | ||
586 | .addr = omap44xx_wd_timer2_addrs, | ||
587 | .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer2_addrs), | ||
588 | .user = OCP_USER_MPU | OCP_USER_SDMA, | ||
589 | }; | ||
590 | |||
591 | /* wd_timer2 slave ports */ | ||
592 | static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = { | ||
593 | &omap44xx_l4_wkup__wd_timer2, | ||
594 | }; | ||
595 | |||
596 | static struct omap_hwmod omap44xx_wd_timer2_hwmod = { | ||
597 | .name = "wd_timer2", | ||
598 | .class = &omap44xx_wd_timer_hwmod_class, | ||
599 | .mpu_irqs = omap44xx_wd_timer2_irqs, | ||
600 | .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer2_irqs), | ||
601 | .main_clk = "wd_timer2_fck", | ||
602 | .prcm = { | ||
603 | .omap4 = { | ||
604 | .clkctrl_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL, | ||
605 | }, | ||
606 | }, | ||
607 | .slaves = omap44xx_wd_timer2_slaves, | ||
608 | .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer2_slaves), | ||
609 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
610 | }; | ||
611 | |||
612 | /* wd_timer3 */ | ||
613 | static struct omap_hwmod omap44xx_wd_timer3_hwmod; | ||
614 | static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = { | ||
615 | { .irq = 36 + OMAP44XX_IRQ_GIC_START }, | ||
616 | }; | ||
617 | |||
618 | static struct omap_hwmod_addr_space omap44xx_wd_timer3_addrs[] = { | ||
619 | { | ||
620 | .pa_start = 0x40130000, | ||
621 | .pa_end = 0x4013007f, | ||
622 | .flags = ADDR_TYPE_RT | ||
623 | }, | ||
624 | }; | ||
625 | |||
546 | /* l4_per -> uart2 */ | 626 | /* l4_per -> uart2 */ |
547 | static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = { | 627 | static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = { |
548 | .master = &omap44xx_l4_per_hwmod, | 628 | .master = &omap44xx_l4_per_hwmod, |
@@ -595,6 +675,25 @@ static struct omap_hwmod_addr_space omap44xx_uart3_addrs[] = { | |||
595 | }, | 675 | }, |
596 | }; | 676 | }; |
597 | 677 | ||
678 | /* l4_abe -> wd_timer3 */ | ||
679 | static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3 = { | ||
680 | .master = &omap44xx_l4_abe_hwmod, | ||
681 | .slave = &omap44xx_wd_timer3_hwmod, | ||
682 | .clk = "ocp_abe_iclk", | ||
683 | .addr = omap44xx_wd_timer3_addrs, | ||
684 | .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_addrs), | ||
685 | .user = OCP_USER_MPU, | ||
686 | }; | ||
687 | |||
688 | /* l4_abe -> wd_timer3 (dma) */ | ||
689 | static struct omap_hwmod_addr_space omap44xx_wd_timer3_dma_addrs[] = { | ||
690 | { | ||
691 | .pa_start = 0x49030000, | ||
692 | .pa_end = 0x4903007f, | ||
693 | .flags = ADDR_TYPE_RT | ||
694 | }, | ||
695 | }; | ||
696 | |||
598 | /* l4_per -> uart3 */ | 697 | /* l4_per -> uart3 */ |
599 | static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = { | 698 | static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = { |
600 | .master = &omap44xx_l4_per_hwmod, | 699 | .master = &omap44xx_l4_per_hwmod, |
@@ -648,6 +747,37 @@ static struct omap_hwmod_addr_space omap44xx_uart4_addrs[] = { | |||
648 | }, | 747 | }, |
649 | }; | 748 | }; |
650 | 749 | ||
750 | static struct omap_hwmod_ocp_if omap44xx_l4_abe__wd_timer3_dma = { | ||
751 | .master = &omap44xx_l4_abe_hwmod, | ||
752 | .slave = &omap44xx_wd_timer3_hwmod, | ||
753 | .clk = "ocp_abe_iclk", | ||
754 | .addr = omap44xx_wd_timer3_dma_addrs, | ||
755 | .addr_cnt = ARRAY_SIZE(omap44xx_wd_timer3_dma_addrs), | ||
756 | .user = OCP_USER_SDMA, | ||
757 | }; | ||
758 | |||
759 | /* wd_timer3 slave ports */ | ||
760 | static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = { | ||
761 | &omap44xx_l4_abe__wd_timer3, | ||
762 | &omap44xx_l4_abe__wd_timer3_dma, | ||
763 | }; | ||
764 | |||
765 | static struct omap_hwmod omap44xx_wd_timer3_hwmod = { | ||
766 | .name = "wd_timer3", | ||
767 | .class = &omap44xx_wd_timer_hwmod_class, | ||
768 | .mpu_irqs = omap44xx_wd_timer3_irqs, | ||
769 | .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_wd_timer3_irqs), | ||
770 | .main_clk = "wd_timer3_fck", | ||
771 | .prcm = { | ||
772 | .omap4 = { | ||
773 | .clkctrl_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL, | ||
774 | }, | ||
775 | }, | ||
776 | .slaves = omap44xx_wd_timer3_slaves, | ||
777 | .slaves_cnt = ARRAY_SIZE(omap44xx_wd_timer3_slaves), | ||
778 | .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430), | ||
779 | }; | ||
780 | |||
651 | /* l4_per -> uart4 */ | 781 | /* l4_per -> uart4 */ |
652 | static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = { | 782 | static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = { |
653 | .master = &omap44xx_l4_per_hwmod, | 783 | .master = &omap44xx_l4_per_hwmod, |
@@ -701,6 +831,9 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = { | |||
701 | 831 | ||
702 | /* mpu class */ | 832 | /* mpu class */ |
703 | &omap44xx_mpu_hwmod, | 833 | &omap44xx_mpu_hwmod, |
834 | /* wd_timer class */ | ||
835 | &omap44xx_wd_timer2_hwmod, | ||
836 | &omap44xx_wd_timer3_hwmod, | ||
704 | 837 | ||
705 | /* uart class */ | 838 | /* uart class */ |
706 | &omap44xx_uart1_hwmod, | 839 | &omap44xx_uart1_hwmod, |