RE: [PATCH v2 1/2] watchdog: ImgTec PDC Watchdog Timer Driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Hi Andrew,

>> > +config IMGPDC_WDT
>> > +       tristate "Imagination Technologies PDC Watchdog Timer"
>> > +       depends on HAS_IOMEM
>>
>> We probably don't want to make this visible for everyone with
>> HAS_IOMEM, so perhaps MIPS || (HAS_IOMEM && COMPILE_TEST)?  Do we want
>> to make this available for META as well?

> yeh, can I suggest something like this:
>        depends on HAS_IOMEM
 >       depends on METAG || MIPS || COMPILE_TEST
> More intuitive/scalable to have them separate IMO, since technically it
> needs HAS_IOMEM regardless of platform (even if the listed platforms are
> guaranteed to select HAS_IOMEM).

Shall we go ahead with what James Hogan is suggesting here ?

>>
>> > --- /dev/null
>> > +++ b/drivers/watchdog/imgpdc_wdt.c
>>
>> > +#ifdef CONFIG_COMMON_CLK
>> > +#define to_pdc_wdt(_nb) container_of(_nb, struct pdc_wdt_dev, clk_nb)
>> > +
>> > +static int img_pdc_wdt_clk_notify(struct notifier_block *nb,
>> > +                                 unsigned long action, void *data)
>> > +{
>> > +       struct pdc_wdt_dev *wdt = to_pdc_wdt(nb);
>> > +
>> > +       switch (action) {
>> > +       case POST_RATE_CHANGE:
>> > +               if (wdt->clk_rate == data->new_rate)
>> > +                       return NOTIFY_OK;
>> > +
>> > +               /* We use the clock rate to calculate the max timeout */
>> > +               if (data->new_rate < 1 ||
>> > +                   data->new_rate > PDC_MAX_WD_CLK_RATE) {
>> > +                       dev_err(wdt->dev, "invalid clock rate\n");
>> > +                       return NOTIFY_BAD;
>> > +               }
>> > +               wdt->clk_rate = data->new_rate;
>> > +               if (order_base_2(wdt->clk_rate) == 0)
>> > +                       wdt->min_delay = 0;
>> > +               else
>> > +                       wdt->min_delay = order_base_2(wdt->clk_rate) - 1;
>> > +
>> > +               wdt->wdt_dev.max_timeout =
>> > +                               (1 << (PDC_WD_MAX_DELAY - wdt->min_delay));
>> > +               ret = watchdog_init_timeout(&wdt->wdt_dev, timeout, wdt->dev);
>> > +               if (ret < 0)
>> > +                       wdt->wdt_dev.timeout = wdt->wdt_dev.max_timeout;
>> > +
>> > +               pdc_wdt_stop(&wdt->wdt_dev);
>> > +               pdc_wdt_set_timeout(&wdt->wdt_dev, wdt->wdt_dev.timeout);
>> > +               pdc_wdt_start(&wdt->wdt_dev);
>> > +               break;
>> > +       default:
>> > +               break;
>> > +       }
>> > +       return NOTIFY_OK;
>> > +}
>> > +#endif
>>
>> Do we really expect the watchdog clock to change out from under us?  I
>> think we can just get the rate in probe() and set the timeout bounds
>> based on that - no one outside the watchdog driver should be messing
>> with the watchdog clock, right?  I know the samsung driver does
>> something similar to this, but I believe that's because the watchdog
>> clock is derived from the CPU clock.

> I agree (sorry if I implied wdt needed to be dynamic as well as reading
> the [probably constant] rate before).

> Note, dynamic changes did happen on TZ1090, but only just before suspend
> (since the hardware would change the rate regardless of what software
> did when the power actually went down, so it at least allowed drivers to
> put their workarounds in place). I presume watchdog timers aren't meant
> to be active during suspend though, in which case even for TZ1090 it
> probably doesn't need to expect changes.

>From the comments above both from Andrew & James Hogan, I understand that
we don't need clock rate-change notifier callback for Watchdog driver.
Please correct me if I am wrong.


> Cheers
> James


Thanks,
Naidu.



--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux