Просмотр исходного кода

Merge git://www.linux-watchdog.org/linux-watchdog

Pull watchdog fixes from Wim Van Sebroeck:
 - a null pointer dereference fix for omap_wdt
 - some clock related fixes for pnx4008
 - an underflow fix in wdt_set_timeout() for w83977f_wdt
 - restart fix for tegra wdt
 - Kconfig change to support Freescale Layerscape platforms
 - fix for stopping the mtk_wdt watchdog

* git://www.linux-watchdog.org/linux-watchdog:
  watchdog: mtk_wdt: Use MODE_KEY when stopping the watchdog
  watchdog: Add support for Freescale Layerscape platforms
  watchdog: tegra: Stop watchdog first if restarting
  watchdog: w83977f_wdt: underflow in wdt_set_timeout()
  watchdog: pnx4008: make global wdt_clk static
  watchdog: pnx4008: fix warnings caused by enabling unprepared clock
  watchdog: omap_wdt: fix null pointer dereference
Linus Torvalds 10 лет назад
Родитель
Сommit
d0bc387dbe

+ 1 - 1
drivers/watchdog/Kconfig

@@ -446,7 +446,7 @@ config MAX63XX_WATCHDOG
 
 
 config IMX2_WDT
 config IMX2_WDT
 	tristate "IMX2+ Watchdog"
 	tristate "IMX2+ Watchdog"
-	depends on ARCH_MXC
+	depends on ARCH_MXC || ARCH_LAYERSCAPE
 	select REGMAP_MMIO
 	select REGMAP_MMIO
 	select WATCHDOG_CORE
 	select WATCHDOG_CORE
 	help
 	help

+ 1 - 0
drivers/watchdog/mtk_wdt.c

@@ -123,6 +123,7 @@ static int mtk_wdt_stop(struct watchdog_device *wdt_dev)
 
 
 	reg = readl(wdt_base + WDT_MODE);
 	reg = readl(wdt_base + WDT_MODE);
 	reg &= ~WDT_MODE_EN;
 	reg &= ~WDT_MODE_EN;
+	reg |= WDT_MODE_KEY;
 	iowrite32(reg, wdt_base + WDT_MODE);
 	iowrite32(reg, wdt_base + WDT_MODE);
 
 
 	return 0;
 	return 0;

+ 1 - 1
drivers/watchdog/omap_wdt.c

@@ -205,7 +205,7 @@ static int omap_wdt_set_timeout(struct watchdog_device *wdog,
 
 
 static unsigned int omap_wdt_get_timeleft(struct watchdog_device *wdog)
 static unsigned int omap_wdt_get_timeleft(struct watchdog_device *wdog)
 {
 {
-	struct omap_wdt_dev *wdev = watchdog_get_drvdata(wdog);
+	struct omap_wdt_dev *wdev = to_omap_wdt_dev(wdog);
 	void __iomem *base = wdev->base;
 	void __iomem *base = wdev->base;
 	u32 value;
 	u32 value;
 
 

+ 4 - 4
drivers/watchdog/pnx4008_wdt.c

@@ -80,7 +80,7 @@ static unsigned int heartbeat = DEFAULT_HEARTBEAT;
 
 
 static DEFINE_SPINLOCK(io_lock);
 static DEFINE_SPINLOCK(io_lock);
 static void __iomem	*wdt_base;
 static void __iomem	*wdt_base;
-struct clk		*wdt_clk;
+static struct clk	*wdt_clk;
 
 
 static int pnx4008_wdt_start(struct watchdog_device *wdd)
 static int pnx4008_wdt_start(struct watchdog_device *wdd)
 {
 {
@@ -161,7 +161,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
 	if (IS_ERR(wdt_clk))
 	if (IS_ERR(wdt_clk))
 		return PTR_ERR(wdt_clk);
 		return PTR_ERR(wdt_clk);
 
 
-	ret = clk_enable(wdt_clk);
+	ret = clk_prepare_enable(wdt_clk);
 	if (ret)
 	if (ret)
 		return ret;
 		return ret;
 
 
@@ -184,7 +184,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev)
 	return 0;
 	return 0;
 
 
 disable_clk:
 disable_clk:
-	clk_disable(wdt_clk);
+	clk_disable_unprepare(wdt_clk);
 	return ret;
 	return ret;
 }
 }
 
 
@@ -192,7 +192,7 @@ static int pnx4008_wdt_remove(struct platform_device *pdev)
 {
 {
 	watchdog_unregister_device(&pnx4008_wdd);
 	watchdog_unregister_device(&pnx4008_wdd);
 
 
-	clk_disable(wdt_clk);
+	clk_disable_unprepare(wdt_clk);
 
 
 	return 0;
 	return 0;
 }
 }

+ 3 - 1
drivers/watchdog/tegra_wdt.c

@@ -140,8 +140,10 @@ static int tegra_wdt_set_timeout(struct watchdog_device *wdd,
 {
 {
 	wdd->timeout = timeout;
 	wdd->timeout = timeout;
 
 
-	if (watchdog_active(wdd))
+	if (watchdog_active(wdd)) {
+		tegra_wdt_stop(wdd);
 		return tegra_wdt_start(wdd);
 		return tegra_wdt_start(wdd);
+	}
 
 
 	return 0;
 	return 0;
 }
 }

+ 1 - 1
drivers/watchdog/w83977f_wdt.c

@@ -224,7 +224,7 @@ static int wdt_keepalive(void)
 
 
 static int wdt_set_timeout(int t)
 static int wdt_set_timeout(int t)
 {
 {
-	int tmrval;
+	unsigned int tmrval;
 
 
 	/*
 	/*
 	 * Convert seconds to watchdog counter time units, rounding up.
 	 * Convert seconds to watchdog counter time units, rounding up.