Merge tag 'u-boot-atmel-fixes-2020.07-a' of https://gitlab.denx.de/u-boot/custodians...
[oweals/u-boot.git] / arch / arm / mach-rockchip / rk3036-board-spl.c
index 3a1491cab33b7608bd89bbd044c56aa9cf49d066..6eb89e15b818f1c99d4926c7e98ec4e32b1ab23c 100644 (file)
@@ -1,46 +1,49 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- * (C) Copyright 2015 Rockchip Electronics Co., Ltd
- *
- * SPDX-License-Identifier:     GPL-2.0+
+ * (C) Copyright 2015-2019 Rockchip Electronics Co., Ltd
  */
 
 #include <common.h>
+#include <debug_uart.h>
+#include <init.h>
 #include <asm/io.h>
-#include <asm/arch/grf_rk3036.h>
-#include <asm/arch/hardware.h>
-#include <asm/arch/sdram_rk3036.h>
-#include <asm/arch/timer.h>
-#include <asm/arch/uart.h>
+#include <asm/arch-rockchip/bootrom.h>
+#include <asm/arch-rockchip/sdram_rk3036.h>
 
-DECLARE_GLOBAL_DATA_PTR;
+#define TIMER_LOAD_COUNT_L     0x00
+#define TIMER_LOAD_COUNT_H     0x04
+#define TIMER_CONTROL_REG      0x10
+#define TIMER_EN       0x1
+#define        TIMER_FMODE     (0 << 1)
+#define        TIMER_RMODE     (1 << 1)
 
-#define GRF_BASE       0x20008000
-static struct rk3036_grf * const grf = (void *)GRF_BASE;
-
-#define DEBUG_UART_BASE        0x20068000
-
-extern void back_to_bootrom(void);
+void rockchip_stimer_init(void)
+{
+       asm volatile("mcr p15, 0, %0, c14, c0, 0"
+                    : : "r"(COUNTER_FREQUENCY));
+
+       writel(0, CONFIG_ROCKCHIP_STIMER_BASE + TIMER_CONTROL_REG);
+       writel(0xffffffff, CONFIG_ROCKCHIP_STIMER_BASE);
+       writel(0xffffffff, CONFIG_ROCKCHIP_STIMER_BASE + 4);
+       writel(TIMER_EN | TIMER_FMODE, CONFIG_ROCKCHIP_STIMER_BASE +
+              TIMER_CONTROL_REG);
+}
 
 void board_init_f(ulong dummy)
 {
-#ifdef EARLY_DEBUG
-       /*
-        * NOTE: sd card and debug uart use same iomux in rk3036,
-        * so if you enable uart,
-        * you can not boot from sdcard
-        */
-       rk_clrsetreg(&grf->gpio1c_iomux,
-                    GPIO1C3_MASK << GPIO1C3_SHIFT |
-                    GPIO1C2_MASK << GPIO1C2_SHIFT,
-                    GPIO1C3_UART2_SOUT << GPIO1C3_SHIFT |
-                    GPIO1C2_UART2_SIN << GPIO1C2_SHIFT);
-       rk_uart_init((void *)DEBUG_UART_BASE);
+#ifdef CONFIG_DEBUG_UART
+       debug_uart_init();
 #endif
-       rockchip_timer_init();
+
+       /* Init secure timer */
+       rockchip_stimer_init();
+       /* Init ARM arch timer in arch/arm/cpu/armv7/arch_timer.c */
+       timer_init();
+
        sdram_init();
 
        /* return to maskrom */
-       back_to_bootrom();
+       back_to_bootrom(BROM_BOOT_NEXTSTAGE);
 }
 
 /* Place Holders */