rtc: stmp3xxx: Don't reset the rtc in .probe() when watchdog is running
As pointed out in the added comment resetting the rtc also stops the included watchdog. This is bad if the bootloader started the watchdog to secure the boot process. So don't reset if the watchdog is running. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Acked-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
Родитель
d6c3029f32
Коммит
dff700fa81
|
@ -288,11 +288,23 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev)
|
|||
|
||||
platform_set_drvdata(pdev, rtc_data);
|
||||
|
||||
/*
|
||||
* Resetting the rtc stops the watchdog timer that is potentially
|
||||
* running. So (assuming it is running on purpose) don't reset if the
|
||||
* watchdog is enabled.
|
||||
*/
|
||||
if (readl(rtc_data->io + STMP3XXX_RTC_CTRL) &
|
||||
STMP3XXX_RTC_CTRL_WATCHDOGEN) {
|
||||
dev_info(&pdev->dev,
|
||||
"Watchdog is running, skip resetting rtc\n");
|
||||
} else {
|
||||
err = stmp_reset_block(rtc_data->io);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "stmp_reset_block failed: %d\n", err);
|
||||
dev_err(&pdev->dev, "stmp_reset_block failed: %d\n",
|
||||
err);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Obviously the rtc needs a clock input to be able to run.
|
||||
|
|
Загрузка…
Ссылка в новой задаче