summaryrefslogtreecommitdiff
path: root/drivers/watchdog
diff options
context:
space:
mode:
authorRobin Gong <b38343@freescale.com>2015-09-22 14:31:59 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:20:42 +0300
commit076b4eab631f4de834b30627f49c5b5ae88b2638 (patch)
tree6dd5a66deafe2db090cb0a6707255a9c44a1bc18 /drivers/watchdog
parent39a983b5d56c00795e9608d427d50d2243f4d460 (diff)
MLK-11407-4: watchdog: imx2_wdt: add WDOG_B reboot trigger
Most of i.mx6 and i.mx7 board need to support WDOG_B reboot to workaroud some issues such as ldo-bypass, QSPI-NOR boot issue. Please enable 'fsl,wdog_b' property if you want to use WDOG_B reboot(trigger PMIC reboot). Signed-off-by: Robin Gong <b38343@freescale.com>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r--drivers/watchdog/imx2_wdt.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/watchdog/imx2_wdt.c b/drivers/watchdog/imx2_wdt.c
index 518dfa1047cb..873c4e0a21fb 100644
--- a/drivers/watchdog/imx2_wdt.c
+++ b/drivers/watchdog/imx2_wdt.c
@@ -2,7 +2,7 @@
* Watchdog driver for IMX2 and later processors
*
* Copyright (C) 2010 Wolfram Sang, Pengutronix e.K. <w.sang@pengutronix.de>
- * Copyright (C) 2014 Freescale Semiconductor, Inc.
+ * Copyright (C) 2015 Freescale Semiconductor, Inc.
*
* some parts adapted by similar drivers from Darius Augulis and Vladimir
* Zapolskiy, additional improvements by Wim Van Sebroeck.
@@ -68,6 +68,7 @@ struct imx2_wdt_device {
struct regmap *regmap;
struct watchdog_device wdog;
bool ext_reset;
+ bool wdog_b;
};
static bool nowayout = WATCHDOG_NOWAYOUT;
@@ -106,6 +107,11 @@ static int imx2_wdt_restart(struct watchdog_device *wdog, unsigned long action,
/* Assert SRS signal */
regmap_write(wdev->regmap, IMX2_WDT_WCR, wcr_enable);
+
+ /* Assert WDOG_B signal */
+ if (wdev->wdog_b)
+ wcr_enable = 0x14;
+
/*
* Due to imx6q errata ERR004346 (WDOG: WDOG SRS bit requires to be
* written twice), we add another two writes to ensure there must be at
@@ -254,6 +260,7 @@ static int __init imx2_wdt_probe(struct platform_device *pdev)
void __iomem *base;
int ret;
u32 val;
+ struct device_node *of_node = pdev->dev.of_node;
wdev = devm_kzalloc(&pdev->dev, sizeof(*wdev), GFP_KERNEL);
if (!wdev)
@@ -277,6 +284,11 @@ static int __init imx2_wdt_probe(struct platform_device *pdev)
return PTR_ERR(wdev->clk);
}
+ if (of_get_property(of_node, "fsl,wdog_b", NULL)) {
+ wdev->wdog_b = true;
+ dev_info(&pdev->dev, "use WDOG_B to reboot.\n");
+ }
+
wdog = &wdev->wdog;
wdog->info = &imx2_wdt_info;
wdog->ops = &imx2_wdt_ops;