diff options
author | Vaibhav Hiremath <hvaibhav@ti.com> | 2013-03-31 22:22:21 -0400 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2013-03-31 22:22:21 -0400 |
commit | 05cf03b6eb7f791ad70b1540df2c39b54d428258 (patch) | |
tree | 66d0113e055d1c6f17bbcc82d13f07d4b4c116c3 /arch | |
parent | 07961ac7c0ee8b546658717034fe692fd12eefa9 (diff) |
ARM: OMAP2+: AM33xx: hwmod: Add missing sysc definition to wdt1 entry
This patch adds sysc definitions to the wdt1 hwmod entry, which in-turn
makes sure that sysc idle bit-fields are configured to valid state on
enable/disable callbacks.
With the recent submitted patch from Santosh Shilimkar,
"ARM: OMAP2+: hwmod: Don't call _init_mpu_rt_base if no sysc"
(commit: 4a98c2d89), it is required to add sysconf
information to each valid hwmod entry, else device will not be
come out from idle state properly and leads to below kernel
crash -
[2.190237] Unhandled fault: external abort on non-linefetch (0x1028) at
0xf9e35034
[2.198325] Internal error: : 1028 [#1] SMP ARM
[2.203101] Modules linked in:
[2.206334] CPU: 0 Not tainted (3.9.0-rc3-00059-gd114294#1)
[2.212679] PC is at omap_wdt_disable.clone.5+0xc/0x60
[2.218090] LR is at omap_wdt_probe+0x184/0x1fc
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
Cc: Benoit Cousson <benoit.cousson@linaro.org>
Cc: Paul Walmsley <paul@pwsan.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod_33xx_data.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index 26eee4a556ad..31bea1ce3de1 100644 --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "prm-regbits-33xx.h" | 28 | #include "prm-regbits-33xx.h" |
29 | #include "i2c.h" | 29 | #include "i2c.h" |
30 | #include "mmc.h" | 30 | #include "mmc.h" |
31 | #include "wd_timer.h" | ||
31 | 32 | ||
32 | /* | 33 | /* |
33 | * IP blocks | 34 | * IP blocks |
@@ -2087,8 +2088,21 @@ static struct omap_hwmod am33xx_uart6_hwmod = { | |||
2087 | }; | 2088 | }; |
2088 | 2089 | ||
2089 | /* 'wd_timer' class */ | 2090 | /* 'wd_timer' class */ |
2091 | static struct omap_hwmod_class_sysconfig wdt_sysc = { | ||
2092 | .rev_offs = 0x0, | ||
2093 | .sysc_offs = 0x10, | ||
2094 | .syss_offs = 0x14, | ||
2095 | .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE | | ||
2096 | SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), | ||
2097 | .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | | ||
2098 | SIDLE_SMART_WKUP), | ||
2099 | .sysc_fields = &omap_hwmod_sysc_type1, | ||
2100 | }; | ||
2101 | |||
2090 | static struct omap_hwmod_class am33xx_wd_timer_hwmod_class = { | 2102 | static struct omap_hwmod_class am33xx_wd_timer_hwmod_class = { |
2091 | .name = "wd_timer", | 2103 | .name = "wd_timer", |
2104 | .sysc = &wdt_sysc, | ||
2105 | .pre_shutdown = &omap2_wd_timer_disable, | ||
2092 | }; | 2106 | }; |
2093 | 2107 | ||
2094 | /* | 2108 | /* |
@@ -2099,6 +2113,7 @@ static struct omap_hwmod am33xx_wd_timer1_hwmod = { | |||
2099 | .name = "wd_timer2", | 2113 | .name = "wd_timer2", |
2100 | .class = &am33xx_wd_timer_hwmod_class, | 2114 | .class = &am33xx_wd_timer_hwmod_class, |
2101 | .clkdm_name = "l4_wkup_clkdm", | 2115 | .clkdm_name = "l4_wkup_clkdm", |
2116 | .flags = HWMOD_SWSUP_SIDLE, | ||
2102 | .main_clk = "wdt1_fck", | 2117 | .main_clk = "wdt1_fck", |
2103 | .prcm = { | 2118 | .prcm = { |
2104 | .omap4 = { | 2119 | .omap4 = { |