diff options
author | Robin Gong <b38343@freescale.com> | 2015-09-22 14:31:59 +0800 |
---|---|---|
committer | Leonard Crestez <leonard.crestez@nxp.com> | 2018-08-24 12:20:42 +0300 |
commit | 076b4eab631f4de834b30627f49c5b5ae88b2638 (patch) | |
tree | 6dd5a66deafe2db090cb0a6707255a9c44a1bc18 /drivers/watchdog | |
parent | 39a983b5d56c00795e9608d427d50d2243f4d460 (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.c | 14 |
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; |