Thread (1 message) 1 message, 1 author, 2014-11-17

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

From: Andrew Bresticker <hidden>
Date: 2014-11-17 19:47:51
Also in: linux-watchdog

On Mon, Nov 17, 2014 at 7:13 AM,  [off-list ref] wrote:
From: Naidu Tellapati <redacted>

This commit adds support for ImgTec PowerDown Controller Watchdog Timer.

Signed-off-by: Jude Abraham <redacted>
Signed-off-by: Naidu Tellapati <redacted>
A couple comments below, but otherwise this is looking good.
quoted hunk
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
quoted hunk
@@ -1235,6 +1235,16 @@ config BCM_KONA_WDT_DEBUG

          If in doubt, say 'N'.

+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?
quoted hunk
--- /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.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help