diff options
author | Cyril Chemparathy <cyril@ti.com> | 2010-05-01 18:38:28 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@deeprootsystems.com> | 2010-05-06 18:02:09 -0400 |
commit | c78a5bc2e77e8fc5be29cda5b28c9b9afd0f4b6d (patch) | |
tree | fc54260054d1b46d9f4e6f47c56952a82ee6b1e4 /arch/arm/mach-davinci/time.c | |
parent | 5b3a05ca911688c53680f2b020a1512b9da29c89 (diff) |
Davinci: watchdog reset separation across socs
The earlier watchdog reset mechanism had a couple of limitations. First, it
embedded a reference to "davinci_wdt_device" inside common code. This
forced all derived platforms (da8xx and tnetv107x) to define such a device.
This also would have caused problems in including multiple socs in a single
build due to symbol redefinition.
With this patch, davinci_watchdog_reset() now takes the platform device as an
argument. The davinci_soc_info struct has been extended to include a reset
function and a watchdog platform_device. arch_reset() then uses these
elements to reset the system in a SoC specific fashion.
Signed-off-by: Cyril Chemparathy <cyril@ti.com>
Tested-by: Sandeep Paulraj <s-paulraj@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-davinci/time.c')
-rw-r--r-- | arch/arm/mach-davinci/time.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c index b21f7633d9a8..e5c598a387be 100644 --- a/arch/arm/mach-davinci/time.c +++ b/arch/arm/mach-davinci/time.c | |||
@@ -399,13 +399,16 @@ struct sys_timer davinci_timer = { | |||
399 | 399 | ||
400 | 400 | ||
401 | /* reset board using watchdog timer */ | 401 | /* reset board using watchdog timer */ |
402 | void davinci_watchdog_reset(void) | 402 | void davinci_watchdog_reset(struct platform_device *pdev) |
403 | { | 403 | { |
404 | u32 tgcr, wdtcr; | 404 | u32 tgcr, wdtcr; |
405 | struct platform_device *pdev = &davinci_wdt_device; | 405 | void __iomem *base; |
406 | void __iomem *base = IO_ADDRESS(pdev->resource[0].start); | ||
407 | struct clk *wd_clk; | 406 | struct clk *wd_clk; |
408 | 407 | ||
408 | base = ioremap(pdev->resource[0].start, SZ_4K); | ||
409 | if (WARN_ON(!base)) | ||
410 | return; | ||
411 | |||
409 | wd_clk = clk_get(&pdev->dev, NULL); | 412 | wd_clk = clk_get(&pdev->dev, NULL); |
410 | if (WARN_ON(IS_ERR(wd_clk))) | 413 | if (WARN_ON(IS_ERR(wd_clk))) |
411 | return; | 414 | return; |