iot_dk: Implement board reset
authorAlexey Brodkin <abrodkin@synopsys.com>
Wed, 10 Oct 2018 11:20:11 +0000 (14:20 +0300)
committerAlexey Brodkin <abrodkin@synopsys.com>
Fri, 12 Oct 2018 12:14:41 +0000 (15:14 +0300)
It is done by writing some magic sequence in a special register.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
board/synopsys/iot_devkit/iot_devkit.c

index 1d848dde03beda46d062e04659e3a505da2c115c..fb39e6d50c4d0c3fde25a4e320e769c07e141e17 100644 (file)
@@ -17,6 +17,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #define AHBCKDIV       (void *)(SYSCON_BASE + 0x04)
 #define APBCKDIV       (void *)(SYSCON_BASE + 0x08)
 #define APBCKEN                (void *)(SYSCON_BASE + 0x0C)
+#define RESET_REG      (void *)(SYSCON_BASE + 0x18)
 #define CLKSEL         (void *)(SYSCON_BASE + 0x24)
 #define CLKSTAT                (void *)(SYSCON_BASE + 0x28)
 #define PLLCON         (void *)(SYSCON_BASE + 0x2C)
@@ -161,6 +162,13 @@ int board_mmc_init(bd_t *bis)
        return 0;
 }
 
+#define IOTDK_RESET_SEQ                0x55AA6699
+
+void reset_cpu(ulong addr)
+{
+       writel(IOTDK_RESET_SEQ, RESET_REG);
+}
+
 int checkboard(void)
 {
        puts("Board: Synopsys IoT Development Kit\n");