aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/devices.c39
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_2420_data.c64
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_2430_data.c64
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_3xxx_data.c66
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_44xx_data.c133
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}
934arch_initcall(omap2_init_devices); 937arch_initcall(omap2_init_devices);
938
939#if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE)
940struct 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
948static 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}
972subsys_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;
34static struct omap_hwmod omap2420_iva_hwmod; 35static struct omap_hwmod omap2420_iva_hwmod;
35static struct omap_hwmod omap2420_l3_main_hwmod; 36static struct omap_hwmod omap2420_l3_main_hwmod;
36static struct omap_hwmod omap2420_l4_core_hwmod; 37static struct omap_hwmod omap2420_l4_core_hwmod;
38static struct omap_hwmod omap2420_wd_timer2_hwmod;
37 39
38/* L3 -> L4_CORE interface */ 40/* L3 -> L4_CORE interface */
39static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = { 41static 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 */
232static 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
240static 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
255static 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
264static struct omap_hwmod_class omap2420_wd_timer_hwmod_class = {
265 .name = "wd_timer",
266 .sysc = &omap2420_wd_timer_sysc,
267};
268
269/* wd_timer2 */
270static struct omap_hwmod_ocp_if *omap2420_wd_timer2_slaves[] = {
271 &omap2420_l4_wkup__wd_timer2,
272};
273
274static 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
231static struct omap_hwmod_class_sysconfig uart_sysc = { 294static 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;
34static struct omap_hwmod omap2430_iva_hwmod; 35static struct omap_hwmod omap2430_iva_hwmod;
35static struct omap_hwmod omap2430_l3_main_hwmod; 36static struct omap_hwmod omap2430_l3_main_hwmod;
36static struct omap_hwmod omap2430_l4_core_hwmod; 37static struct omap_hwmod omap2430_l4_core_hwmod;
38static struct omap_hwmod omap2430_wd_timer2_hwmod;
37 39
38/* L3 -> L4_CORE interface */ 40/* L3 -> L4_CORE interface */
39static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = { 41static 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 */
232static 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
240static 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
255static 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
264static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = {
265 .name = "wd_timer",
266 .sysc = &omap2430_wd_timer_sysc,
267};
268
269/* wd_timer2 */
270static struct omap_hwmod_ocp_if *omap2430_wd_timer2_slaves[] = {
271 &omap2430_l4_wkup__wd_timer2,
272};
273
274static 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
231static struct omap_hwmod_class_sysconfig uart_sysc = { 294static 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;
37static struct omap_hwmod omap3xxx_l3_main_hwmod; 38static struct omap_hwmod omap3xxx_l3_main_hwmod;
38static struct omap_hwmod omap3xxx_l4_core_hwmod; 39static struct omap_hwmod omap3xxx_l4_core_hwmod;
39static struct omap_hwmod omap3xxx_l4_per_hwmod; 40static struct omap_hwmod omap3xxx_l4_per_hwmod;
41static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
40 42
41/* L3 -> L4_CORE interface */ 43/* L3 -> L4_CORE interface */
42static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = { 44static 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 */
284static 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
292static 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
307static 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
318static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
319 .name = "wd_timer",
320 .sysc = &omap3xxx_wd_timer_sysc,
321};
322
323/* wd_timer2 */
324static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = {
325 &omap3xxx_l4_wkup__wd_timer2,
326};
327
328static 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
283static struct omap_hwmod_class_sysconfig uart_sysc = { 348static 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
461static 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
486static struct omap_hwmod_class omap44xx_wd_timer_hwmod_class = {
487 .name = "wd_timer",
488 .sysc = &omap44xx_wd_timer_sysc,
489};
490
491/* wd_timer2 */
492static struct omap_hwmod omap44xx_wd_timer2_hwmod;
493static struct omap_hwmod_irq_info omap44xx_wd_timer2_irqs[] = {
494 { .irq = 80 + OMAP44XX_IRQ_GIC_START },
495};
496
497static 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
470static struct omap_hwmod_class omap44xx_uart_hwmod_class = { 505static 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 */
582static 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 */
592static struct omap_hwmod_ocp_if *omap44xx_wd_timer2_slaves[] = {
593 &omap44xx_l4_wkup__wd_timer2,
594};
595
596static 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 */
613static struct omap_hwmod omap44xx_wd_timer3_hwmod;
614static struct omap_hwmod_irq_info omap44xx_wd_timer3_irqs[] = {
615 { .irq = 36 + OMAP44XX_IRQ_GIC_START },
616};
617
618static 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 */
547static struct omap_hwmod_ocp_if omap44xx_l4_per__uart2 = { 627static 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 */
679static 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) */
689static 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 */
599static struct omap_hwmod_ocp_if omap44xx_l4_per__uart3 = { 698static 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
750static 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 */
760static struct omap_hwmod_ocp_if *omap44xx_wd_timer3_slaves[] = {
761 &omap44xx_l4_abe__wd_timer3,
762 &omap44xx_l4_abe__wd_timer3_dma,
763};
764
765static 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 */
652static struct omap_hwmod_ocp_if omap44xx_l4_per__uart4 = { 782static 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,