1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 2532cb7f5SJagan Teki /* 3532cb7f5SJagan Teki * Copyright (C) 2017 Amarula Solutions 4532cb7f5SJagan Teki */ 5532cb7f5SJagan Teki 6532cb7f5SJagan Teki #include <common.h> 7532cb7f5SJagan Teki #include <debug_uart.h> 8532cb7f5SJagan Teki #include <dm.h> 9532cb7f5SJagan Teki #include <ram.h> 10532cb7f5SJagan Teki #include <spl.h> 11532cb7f5SJagan Teki #include <version.h> 12532cb7f5SJagan Teki #include <asm/io.h> 13532cb7f5SJagan Teki #include <asm/arch/bootrom.h> 14532cb7f5SJagan Teki #include <asm/arch/clock.h> 15532cb7f5SJagan Teki #include <asm/arch/grf_rk3288.h> 16532cb7f5SJagan Teki #include <asm/arch/periph.h> 17532cb7f5SJagan Teki #include <asm/arch/pmu_rk3288.h> 18532cb7f5SJagan Teki #include <asm/arch/sys_proto.h> 19532cb7f5SJagan Teki #include <asm/arch/timer.h> 20532cb7f5SJagan Teki 21532cb7f5SJagan Teki #define GRF_BASE 0xff770000 board_init_f(ulong dummy)22532cb7f5SJagan Tekivoid board_init_f(ulong dummy) 23532cb7f5SJagan Teki { 24532cb7f5SJagan Teki struct udevice *dev; 25532cb7f5SJagan Teki int ret; 26532cb7f5SJagan Teki 27532cb7f5SJagan Teki /* Example code showing how to enable the debug UART on RK3288 */ 28532cb7f5SJagan Teki /* Enable early UART on the RK3288 */ 29532cb7f5SJagan Teki struct rk3288_grf * const grf = (void *)GRF_BASE; 30532cb7f5SJagan Teki 31532cb7f5SJagan Teki rk_clrsetreg(&grf->gpio7ch_iomux, GPIO7C7_MASK << GPIO7C7_SHIFT | 32532cb7f5SJagan Teki GPIO7C6_MASK << GPIO7C6_SHIFT, 33532cb7f5SJagan Teki GPIO7C7_UART2DBG_SOUT << GPIO7C7_SHIFT | 34532cb7f5SJagan Teki GPIO7C6_UART2DBG_SIN << GPIO7C6_SHIFT); 35532cb7f5SJagan Teki /* 36532cb7f5SJagan Teki * Debug UART can be used from here if required: 37532cb7f5SJagan Teki * 38532cb7f5SJagan Teki * debug_uart_init(); 39532cb7f5SJagan Teki * printch('a'); 40532cb7f5SJagan Teki * printhex8(0x1234); 41532cb7f5SJagan Teki * printascii("string"); 42532cb7f5SJagan Teki */ 43532cb7f5SJagan Teki debug_uart_init(); 44532cb7f5SJagan Teki 45532cb7f5SJagan Teki ret = spl_early_init(); 46532cb7f5SJagan Teki if (ret) { 47532cb7f5SJagan Teki debug("spl_early_init() failed: %d\n", ret); 48532cb7f5SJagan Teki hang(); 49532cb7f5SJagan Teki } 50532cb7f5SJagan Teki 51532cb7f5SJagan Teki rockchip_timer_init(); 52532cb7f5SJagan Teki configure_l2ctlr(); 53532cb7f5SJagan Teki 54532cb7f5SJagan Teki ret = rockchip_get_clk(&dev); 55532cb7f5SJagan Teki if (ret) { 56532cb7f5SJagan Teki debug("CLK init failed: %d\n", ret); 57532cb7f5SJagan Teki return; 58532cb7f5SJagan Teki } 59532cb7f5SJagan Teki 60532cb7f5SJagan Teki ret = uclass_get_device(UCLASS_RAM, 0, &dev); 61532cb7f5SJagan Teki if (ret) { 62532cb7f5SJagan Teki debug("DRAM init failed: %d\n", ret); 63532cb7f5SJagan Teki return; 64532cb7f5SJagan Teki } 65532cb7f5SJagan Teki } 66532cb7f5SJagan Teki board_return_to_bootrom(void)67532cb7f5SJagan Tekivoid board_return_to_bootrom(void) 68532cb7f5SJagan Teki { 69b82bd1f8SPhilipp Tomsich back_to_bootrom(BROM_BOOT_NEXTSTAGE); 70532cb7f5SJagan Teki } 71532cb7f5SJagan Teki spl_boot_device(void)72532cb7f5SJagan Tekiu32 spl_boot_device(void) 73532cb7f5SJagan Teki { 74532cb7f5SJagan Teki return BOOT_DEVICE_BOOTROM; 75532cb7f5SJagan Teki } 76532cb7f5SJagan Teki spl_board_init(void)77532cb7f5SJagan Tekivoid spl_board_init(void) 78532cb7f5SJagan Teki { 79532cb7f5SJagan Teki puts("\nU-Boot TPL " PLAIN_VERSION " (" U_BOOT_DATE " - " \ 80532cb7f5SJagan Teki U_BOOT_TIME ")\n"); 81532cb7f5SJagan Teki } 82