aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv/lib
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv/lib')
-rw-r--r--arch/riscv/lib/reset.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/riscv/lib/reset.c b/arch/riscv/lib/reset.c
index 5c6f89cc..f7b3ff5f 100644
--- a/arch/riscv/lib/reset.c
+++ b/arch/riscv/lib/reset.c
@@ -5,9 +5,21 @@
#include <common.h>
#include <command.h>
+#include <asm/io.h>
+
+#define AONSYS_RSTGEN_BASE ((void __iomem *)0xFFFFF44000UL)
+#define REG_RST_REQ_EN_0 (AONSYS_RSTGEN_BASE + 0x140)
+#define WDT0_SYS_RST_REQ (1 << 8)
static __attribute__((naked))void sys_wdt_reset(void)
{
+ uint32_t data;
+
+ /* wdt0 reset enable */
+ data = readl(REG_RST_REQ_EN_0);
+ data |= WDT0_SYS_RST_REQ;
+ writel(data, REG_RST_REQ_EN_0);
+
asm volatile (
"1: \n\r"
"li a0, 0xFFEFC30000 \n\r"
@@ -21,7 +33,7 @@ static __attribute__((naked))void sys_wdt_reset(void)
int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
- printf("resetting ...\n");
+ printf("resetting ...\n");
sys_wdt_reset();
hang();