1168eef7aSKever Yang /* 2168eef7aSKever Yang * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3168eef7aSKever Yang * 4168eef7aSKever Yang * SPDX-License-Identifier: GPL-2.0+ 5168eef7aSKever Yang */ 6168eef7aSKever Yang 7168eef7aSKever Yang #include <common.h> 8168eef7aSKever Yang #include <debug_uart.h> 9168eef7aSKever Yang #include <dm.h> 10168eef7aSKever Yang #include <ram.h> 11168eef7aSKever Yang #include <spl.h> 12168eef7aSKever Yang #include <asm/io.h> 13168eef7aSKever Yang #include <asm/arch/bootrom.h> 14168eef7aSKever Yang #include <asm/arch/cru_rk322x.h> 15168eef7aSKever Yang #include <asm/arch/grf_rk322x.h> 16168eef7aSKever Yang #include <asm/arch/hardware.h> 17168eef7aSKever Yang #include <asm/arch/timer.h> 18168eef7aSKever Yang #include <asm/arch/uart.h> 19168eef7aSKever Yang 20168eef7aSKever Yang u32 spl_boot_device(void) 21168eef7aSKever Yang { 22168eef7aSKever Yang return BOOT_DEVICE_MMC1; 23168eef7aSKever Yang } 24168eef7aSKever Yang DECLARE_GLOBAL_DATA_PTR; 25168eef7aSKever Yang 26168eef7aSKever Yang #define GRF_BASE 0x11000000 27168eef7aSKever Yang #define SGRF_BASE 0x10140000 28168eef7aSKever Yang 29168eef7aSKever Yang #define DEBUG_UART_BASE 0x11030000 30168eef7aSKever Yang 31168eef7aSKever Yang void board_debug_uart_init(void) 32168eef7aSKever Yang { 33168eef7aSKever Yang static struct rk322x_grf * const grf = (void *)GRF_BASE; 34424324d3SDavid Wu enum { 35424324d3SDavid Wu GPIO1B2_SHIFT = 4, 36424324d3SDavid Wu GPIO1B2_MASK = 3 << GPIO1B2_SHIFT, 37424324d3SDavid Wu GPIO1B2_GPIO = 0, 38424324d3SDavid Wu GPIO1B2_UART1_SIN, 39424324d3SDavid Wu GPIO1B2_UART21_SIN, 40424324d3SDavid Wu 41424324d3SDavid Wu GPIO1B1_SHIFT = 2, 42424324d3SDavid Wu GPIO1B1_MASK = 3 << GPIO1B1_SHIFT, 43424324d3SDavid Wu GPIO1B1_GPIO = 0, 44424324d3SDavid Wu GPIO1B1_UART1_SOUT, 45424324d3SDavid Wu GPIO1B1_UART21_SOUT, 46424324d3SDavid Wu }; 47424324d3SDavid Wu enum { 48424324d3SDavid Wu CON_IOMUX_UART2SEL_SHIFT= 8, 49424324d3SDavid Wu CON_IOMUX_UART2SEL_MASK = 1 << CON_IOMUX_UART2SEL_SHIFT, 50424324d3SDavid Wu CON_IOMUX_UART2SEL_2 = 0, 51424324d3SDavid Wu CON_IOMUX_UART2SEL_21, 52424324d3SDavid Wu }; 53424324d3SDavid Wu 54168eef7aSKever Yang /* Enable early UART2 channel 1 on the RK322x */ 55168eef7aSKever Yang rk_clrsetreg(&grf->gpio1b_iomux, 56168eef7aSKever Yang GPIO1B1_MASK | GPIO1B2_MASK, 57168eef7aSKever Yang GPIO1B2_UART21_SIN << GPIO1B2_SHIFT | 58168eef7aSKever Yang GPIO1B1_UART21_SOUT << GPIO1B1_SHIFT); 59168eef7aSKever Yang /* Set channel C as UART2 input */ 60168eef7aSKever Yang rk_clrsetreg(&grf->con_iomux, 61168eef7aSKever Yang CON_IOMUX_UART2SEL_MASK, 62168eef7aSKever Yang CON_IOMUX_UART2SEL_21 << CON_IOMUX_UART2SEL_SHIFT); 63168eef7aSKever Yang } 6418d38d3aSKever Yang 6518d38d3aSKever Yang #define SGRF_DDR_CON0 0x10150000 66168eef7aSKever Yang void board_init_f(ulong dummy) 67168eef7aSKever Yang { 68168eef7aSKever Yang struct udevice *dev; 69168eef7aSKever Yang int ret; 70168eef7aSKever Yang 71168eef7aSKever Yang /* 72168eef7aSKever Yang * Debug UART can be used from here if required: 73168eef7aSKever Yang * 74168eef7aSKever Yang * debug_uart_init(); 75168eef7aSKever Yang * printch('a'); 76168eef7aSKever Yang * printhex8(0x1234); 77168eef7aSKever Yang * printascii("string"); 78168eef7aSKever Yang */ 79168eef7aSKever Yang debug_uart_init(); 80168eef7aSKever Yang printascii("SPL Init"); 81168eef7aSKever Yang 82168eef7aSKever Yang ret = spl_early_init(); 83168eef7aSKever Yang if (ret) { 84168eef7aSKever Yang debug("spl_early_init() failed: %d\n", ret); 85168eef7aSKever Yang hang(); 86168eef7aSKever Yang } 87168eef7aSKever Yang 88168eef7aSKever Yang rockchip_timer_init(); 89168eef7aSKever Yang printf("timer init done\n"); 90168eef7aSKever Yang ret = uclass_get_device(UCLASS_RAM, 0, &dev); 91168eef7aSKever Yang if (ret) { 92168eef7aSKever Yang printf("DRAM init failed: %d\n", ret); 93168eef7aSKever Yang return; 94168eef7aSKever Yang } 95168eef7aSKever Yang 9618d38d3aSKever Yang /* Disable the ddr secure region setting to make it non-secure */ 9718d38d3aSKever Yang rk_clrreg(SGRF_DDR_CON0, 0x4000); 98*cb7116afSKever Yang #if defined(CONFIG_SPL_ROCKCHIP_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT) 99b82bd1f8SPhilipp Tomsich back_to_bootrom(BROM_BOOT_NEXTSTAGE); 100168eef7aSKever Yang #endif 101168eef7aSKever Yang } 102