diff options
author | Stefano Babic <sbabic@denx.de> | 2017-05-09 18:03:44 +0200 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2017-05-09 18:03:44 +0200 |
commit | 4f66e09bb9fbc47b73f67c3cc08ee2663e8fcdb1 (patch) | |
tree | 89bc85aa5a8ca9b60027cdd2f1a40fc83f6278c4 /drivers/sysreset/sysreset_ast.c | |
parent | 809b133722eee0e7bdfa6595daabc0bb2f5aa698 (diff) | |
parent | 85ea850976daea57c8045f3569566fad5ce9fe0f (diff) |
Merge branch 'master' of git://git.denx.de/u-boot
Signed-off-by: Stefano Babic <sbabic@denx.de>
Diffstat (limited to 'drivers/sysreset/sysreset_ast.c')
-rw-r--r-- | drivers/sysreset/sysreset_ast.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/sysreset/sysreset_ast.c b/drivers/sysreset/sysreset_ast.c index a0ab12851d4..3c3f552df83 100644 --- a/drivers/sysreset/sysreset_ast.c +++ b/drivers/sysreset/sysreset_ast.c @@ -8,21 +8,19 @@ #include <dm.h> #include <errno.h> #include <sysreset.h> +#include <wdt.h> #include <asm/io.h> #include <asm/arch/wdt.h> #include <linux/err.h> -/* Number of Watchdog Timer ticks before reset */ -#define AST_WDT_RESET_TIMEOUT 10 -#define AST_WDT_FOR_RESET 0 - static int ast_sysreset_request(struct udevice *dev, enum sysreset_t type) { - struct ast_wdt *wdt = ast_get_wdt(AST_WDT_FOR_RESET); - u32 reset_mode = 0; + struct udevice *wdt; + u32 reset_mode; + int ret = uclass_first_device(UCLASS_WDT, &wdt); - if (IS_ERR(wdt)) - return PTR_ERR(wdt); + if (ret) + return ret; switch (type) { case SYSRESET_WARM: @@ -35,11 +33,11 @@ static int ast_sysreset_request(struct udevice *dev, enum sysreset_t type) return -EPROTONOSUPPORT; } - /* Clear reset mode bits */ - clrsetbits_le32(&wdt->ctrl, - (WDT_CTRL_RESET_MODE_MASK << WDT_CTRL_RESET_MODE_SHIFT), - (reset_mode << WDT_CTRL_RESET_MODE_SHIFT)); - wdt_start(wdt, AST_WDT_RESET_TIMEOUT); + ret = wdt_expire_now(wdt, reset_mode); + if (ret) { + debug("Sysreset failed: %d", ret); + return ret; + } return -EINPROGRESS; } |