watchdog: Automatically register device with sysreset
Add an option to automatically register watchdog devices with the wdt_reboot driver for use with sysreset. This allows sysreset to be a drop-in replacement for platform-specific watchdog reset code, without needing any device tree changes. Signed-off-by: Samuel Holland <samuel@sholland.org> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
committed by
Stefan Roese
parent
5544a01142
commit
a8f63d18bb
@@ -131,6 +131,13 @@ config SYSRESET_WATCHDOG
|
||||
help
|
||||
Reboot support for generic watchdog reset.
|
||||
|
||||
config SYSRESET_WATCHDOG_AUTO
|
||||
bool "Automatically register first watchdog with sysreset"
|
||||
depends on SYSRESET_WATCHDOG
|
||||
help
|
||||
If enabled, the first watchdog (as selected by the watchdog uclass)
|
||||
will automatically be registered with the watchdog reboot driver.
|
||||
|
||||
config SYSRESET_RESETCTL
|
||||
bool "Enable support for reset controller reboot driver"
|
||||
select DM_RESET
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <errno.h>
|
||||
#include <malloc.h>
|
||||
#include <sysreset.h>
|
||||
#include <wdt.h>
|
||||
|
||||
@@ -57,3 +59,25 @@ U_BOOT_DRIVER(wdt_reboot) = {
|
||||
.plat_auto = sizeof(struct wdt_reboot_plat),
|
||||
.ops = &wdt_reboot_ops,
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_SYSRESET_WATCHDOG_AUTO)
|
||||
int sysreset_register_wdt(struct udevice *dev)
|
||||
{
|
||||
struct wdt_reboot_plat *plat = malloc(sizeof(*plat));
|
||||
int ret;
|
||||
|
||||
if (!plat)
|
||||
return -ENOMEM;
|
||||
|
||||
plat->wdt = dev;
|
||||
|
||||
ret = device_bind(dev, DM_DRIVER_GET(wdt_reboot),
|
||||
dev->name, plat, ofnode_null(), NULL);
|
||||
if (ret) {
|
||||
free(plat);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user