Convert CONFIG_PL011_SERIAL et al to Kconfig
[platform/kernel/u-boot.git] / drivers / sysreset / sysreset_ast.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * (C) Copyright 2016 Google, Inc
4  */
5
6 #include <common.h>
7 #include <dm.h>
8 #include <errno.h>
9 #include <log.h>
10 #include <sysreset.h>
11 #include <wdt.h>
12 #include <asm/io.h>
13 #include <asm/arch/wdt.h>
14 #include <linux/err.h>
15 #include <hang.h>
16
17 static int ast_sysreset_request(struct udevice *dev, enum sysreset_t type)
18 {
19         struct udevice *wdt;
20         u32 reset_mode;
21         int ret = uclass_first_device(UCLASS_WDT, &wdt);
22
23         if (ret)
24                 return ret;
25
26         switch (type) {
27         case SYSRESET_WARM:
28                 reset_mode = WDT_CTRL_RESET_CPU;
29                 break;
30         case SYSRESET_COLD:
31                 reset_mode = WDT_CTRL_RESET_CHIP;
32                 break;
33         default:
34                 return -EPROTONOSUPPORT;
35         }
36
37 #if !defined(CONFIG_SPL_BUILD)
38         ret = wdt_expire_now(wdt, reset_mode);
39         if (ret) {
40                 debug("Sysreset failed: %d", ret);
41                 return ret;
42         }
43 #else
44         hang();
45 #endif
46
47         return -EINPROGRESS;
48 }
49
50 static struct sysreset_ops ast_sysreset = {
51         .request        = ast_sysreset_request,
52 };
53
54 U_BOOT_DRIVER(sysreset_ast) = {
55         .name   = "ast_sysreset",
56         .id     = UCLASS_SYSRESET,
57         .ops    = &ast_sysreset,
58 };