summaryrefslogtreecommitdiff
path: root/bsp/ls2kdev
diff options
context:
space:
mode:
authormichael <[email protected]>2020-09-15 11:20:15 +0800
committermichael <[email protected]>2020-09-15 11:20:15 +0800
commitb86d608d631d5d50f51e202d8e28107b2dd69f9a (patch)
treebbea9c7fa923a94c4ea5164d91abe4738f95e9db /bsp/ls2kdev
parenta8928c881ed935a1e2a45bb02bd0b2a7fe8d45d4 (diff)
bsp:ls2k: add reboot and shutdown support
Diffstat (limited to 'bsp/ls2kdev')
-rw-r--r--bsp/ls2kdev/drivers/board.c5
-rw-r--r--bsp/ls2kdev/drivers/board.h24
2 files changed, 29 insertions, 0 deletions
diff --git a/bsp/ls2kdev/drivers/board.c b/bsp/ls2kdev/drivers/board.c
index 6a66777121..f970e60574 100644
--- a/bsp/ls2kdev/drivers/board.c
+++ b/bsp/ls2kdev/drivers/board.c
@@ -22,6 +22,9 @@
*/
void rt_hw_cpu_reset(void)
{
+ WDT_EN = 0x01;
+ WDT_TIMER = 0x01;
+ WDT_SET = 0x01;
rt_kprintf("reboot system...\n");
while (1);
}
@@ -32,6 +35,8 @@ void rt_hw_cpu_reset(void)
*/
void rt_hw_cpu_shutdown(void)
{
+ PM1_STS &= 0xffffffff;
+ PM1_CNT = 0x3c00;
rt_kprintf("shutdown...\n");
while (1);
diff --git a/bsp/ls2kdev/drivers/board.h b/bsp/ls2kdev/drivers/board.h
index ca57ebf3f2..3c9347931c 100644
--- a/bsp/ls2kdev/drivers/board.h
+++ b/bsp/ls2kdev/drivers/board.h
@@ -12,6 +12,8 @@
#define BOARD_H__
#include <stdint.h>
+#include <rthw.h>
+#include "ls2k1000.h"
extern unsigned char __bss_end;
@@ -19,6 +21,28 @@ extern unsigned char __bss_end;
#define RT_HW_HEAP_BEGIN (void*)&__bss_end
#define RT_HW_HEAP_END (void*)(RT_HW_HEAP_BEGIN + 64 * 1024 * 1024)
+/*
+ * General PM Configuration Register
+ */
+#define PMCON_BASE (APB_BASE | (0x7 << 12))
+
+/*
+ * Power Management1 Configuration Registers
+ */
+#define PM1_BASE (PMCON_BASE + 0x0C)
+#define PM1_STS HWREG32(PM1_BASE)
+#define PM1_EN HWREG32(PM1_BASE + 0x04)
+#define PM1_CNT HWREG32(PM1_BASE + 0x08)
+
+/*
+ * Watch Dog Configuration Registers
+ */
+#define WDT_BASE (PMCON_BASE + 0x30)
+#define WDT_EN HWREG32(WDT_BASE)
+#define WDT_SET HWREG32(WDT_BASE + 0x04)
+#define WDT_TIMER HWREG32(WDT_BASE + 0x08)
+
+
void rt_hw_board_init(void);
#endif