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