"Mark A. Greer" <mgr...@mvista.com> writes:

> From: Mark A. Greer <mgr...@mvista.com>
>
> The davinci timer code currently references the watchdog timer's
> device structure and the base address for the WDT.  However,
> the device structure is referenced by directly accessing the WDT's
> platform_data and the base address is referenced via the soc_info
> structure.  Instead of having two separate ways of accessing
> WDT info, put a pointer to the WDT's platform_data in the soc_info
> structure and get both pieces of information through it.

[sorry for the lag]

Rather than adding the pdev to soc_info, any objections to just
dropping watchdog from soc_info all together (patch below.)  It's
basically like yours, except I just access the pdev directly in the
reset code instead of via soc_info.

I'm leaning towards keeping all non-core drivers out of soc_info
and using some type of init/register hooks instead.

Kevin

commit df1fa426399ea75d5aea2b864dc46e456b37ddf3
Author: Kevin Hilman <khil...@ti.deeprootsystems.com>
Date:   Wed Jun 3 12:24:50 2009 -0700

    davinci: remove watchdog from soc_info
    
    Signed-off-by: Kevin Hilman <khil...@ti.deeprootsystems.com>

diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
index 7a2f8ae..385e833 100644
--- a/arch/arm/mach-davinci/devices.c
+++ b/arch/arm/mach-davinci/devices.c
@@ -216,6 +216,8 @@ void __init davinci_setup_mmc(int module, struct 
davinci_mmc_config *config)
 
 static struct resource wdt_resources[] = {
        {
+               .start  = DAVINCI_WDOG_BASE,
+               .end    = DAVINCI_WDOG_BASE + SZ_1K - 1,
                .flags  = IORESOURCE_MEM,
        },
 };
@@ -229,11 +231,6 @@ struct platform_device davinci_wdt_device = {
 
 static void davinci_init_wdt(void)
 {
-       struct davinci_soc_info *soc_info = &davinci_soc_info;
-
-       wdt_resources[0].start = (resource_size_t)soc_info->wdt_base;
-       wdt_resources[0].end = (resource_size_t)soc_info->wdt_base + SZ_1K - 1;
-
        platform_device_register(&davinci_wdt_device);
 }
 
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index beda643..56ccfda 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -705,7 +705,6 @@ static struct davinci_soc_info davinci_soc_info_dm355 = {
        .intc_irq_prios         = dm355_default_priorities,
        .intc_irq_num           = DAVINCI_N_AINTC_IRQ,
        .timer_info             = &dm355_timer_info,
-       .wdt_base               = IO_ADDRESS(DAVINCI_WDOG_BASE),
        .gpio_base              = IO_ADDRESS(DAVINCI_GPIO_BASE),
        .gpio_num               = 104,
        .gpio_irq               = IRQ_DM355_GPIOBNK0,
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
index 88e6d09..7a20f19 100644
--- a/arch/arm/mach-davinci/dm644x.c
+++ b/arch/arm/mach-davinci/dm644x.c
@@ -638,7 +638,6 @@ static struct davinci_soc_info davinci_soc_info_dm644x = {
        .intc_irq_prios         = dm644x_default_priorities,
        .intc_irq_num           = DAVINCI_N_AINTC_IRQ,
        .timer_info             = &dm644x_timer_info,
-       .wdt_base               = IO_ADDRESS(DAVINCI_WDOG_BASE),
        .gpio_base              = IO_ADDRESS(DAVINCI_GPIO_BASE),
        .gpio_num               = 71,
        .gpio_irq               = IRQ_GPIOBNK0,
diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index a58670b..a6ef374 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -623,7 +623,6 @@ static struct davinci_soc_info davinci_soc_info_dm646x = {
        .intc_irq_prios         = dm646x_default_priorities,
        .intc_irq_num           = DAVINCI_N_AINTC_IRQ,
        .timer_info             = &dm646x_timer_info,
-       .wdt_base               = IO_ADDRESS(DAVINCI_WDOG_BASE),
        .gpio_base              = IO_ADDRESS(DAVINCI_GPIO_BASE),
        .gpio_num               = 43, /* Only 33 usable */
        .gpio_irq               = IRQ_DM646X_GPIOBNK0,
diff --git a/arch/arm/mach-davinci/include/mach/common.h 
b/arch/arm/mach-davinci/include/mach/common.h
index a1f03b6..b21393b 100644
--- a/arch/arm/mach-davinci/include/mach/common.h
+++ b/arch/arm/mach-davinci/include/mach/common.h
@@ -60,7 +60,6 @@ struct davinci_soc_info {
        u8                              *intc_irq_prios;
        unsigned long                   intc_irq_num;
        struct davinci_timer_info       *timer_info;
-       void __iomem                    *wdt_base;
        void __iomem                    *gpio_base;
        unsigned                        gpio_num;
        unsigned                        gpio_irq;
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
index ca85d18..0d1b6d4 100644
--- a/arch/arm/mach-davinci/time.c
+++ b/arch/arm/mach-davinci/time.c
@@ -406,11 +406,11 @@ struct sys_timer davinci_timer = {
 void davinci_watchdog_reset(void)
 {
        u32 tgcr, wdtcr;
-       struct davinci_soc_info *soc_info = &davinci_soc_info;
-       void __iomem *base = soc_info->wdt_base;
+       struct platform_device *pdev = &davinci_wdt_device;
+       void __iomem *base = IO_ADDRESS(pdev->resource[0].start);
        struct clk *wd_clk;
 
-       wd_clk = clk_get(&davinci_wdt_device.dev, NULL);
+       wd_clk = clk_get(&pdev->dev, NULL);
        if (WARN_ON(IS_ERR(wd_clk)))
                return;
        clk_enable(wd_clk);

_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to