1*be1d5e03Shuang lin /*
2*be1d5e03Shuang lin  * (C) Copyright 2015 Rockchip Electronics Co., Ltd
3*be1d5e03Shuang lin  *
4*be1d5e03Shuang lin  * SPDX-License-Identifier:     GPL-2.0+
5*be1d5e03Shuang lin  */
6*be1d5e03Shuang lin 
7*be1d5e03Shuang lin #include <common.h>
8*be1d5e03Shuang lin #include <asm/io.h>
9*be1d5e03Shuang lin #include <asm/arch/grf_rk3036.h>
10*be1d5e03Shuang lin #include <asm/arch/hardware.h>
11*be1d5e03Shuang lin #include <asm/arch/sdram_rk3036.h>
12*be1d5e03Shuang lin #include <asm/arch/timer.h>
13*be1d5e03Shuang lin #include <asm/arch/uart.h>
14*be1d5e03Shuang lin 
15*be1d5e03Shuang lin DECLARE_GLOBAL_DATA_PTR;
16*be1d5e03Shuang lin 
17*be1d5e03Shuang lin #define GRF_BASE	0x20008000
18*be1d5e03Shuang lin static struct rk3036_grf * const grf = (void *)GRF_BASE;
19*be1d5e03Shuang lin 
20*be1d5e03Shuang lin #define DEBUG_UART_BASE	0x20068000
21*be1d5e03Shuang lin 
22*be1d5e03Shuang lin extern void back_to_bootrom(void);
23*be1d5e03Shuang lin 
24*be1d5e03Shuang lin void board_init_f(ulong dummy)
25*be1d5e03Shuang lin {
26*be1d5e03Shuang lin #ifdef EARLY_DEBUG
27*be1d5e03Shuang lin 	/*
28*be1d5e03Shuang lin 	 * NOTE: sd card and debug uart use same iomux in rk3036,
29*be1d5e03Shuang lin 	 * so if you enable uart,
30*be1d5e03Shuang lin 	 * you can not boot from sdcard
31*be1d5e03Shuang lin 	 */
32*be1d5e03Shuang lin 	rk_clrsetreg(&grf->gpio1c_iomux,
33*be1d5e03Shuang lin 		     GPIO1C3_MASK << GPIO1C3_SHIFT |
34*be1d5e03Shuang lin 		     GPIO1C2_MASK << GPIO1C2_SHIFT,
35*be1d5e03Shuang lin 		     GPIO1C3_UART2_SOUT << GPIO1C3_SHIFT |
36*be1d5e03Shuang lin 		     GPIO1C2_UART2_SIN << GPIO1C2_SHIFT);
37*be1d5e03Shuang lin 	rk_uart_init((void *)DEBUG_UART_BASE);
38*be1d5e03Shuang lin #endif
39*be1d5e03Shuang lin 	rockchip_timer_init();
40*be1d5e03Shuang lin 	sdram_init();
41*be1d5e03Shuang lin 
42*be1d5e03Shuang lin 	/* return to maskrom */
43*be1d5e03Shuang lin 	back_to_bootrom();
44*be1d5e03Shuang lin }
45*be1d5e03Shuang lin 
46*be1d5e03Shuang lin /* Place Holders */
47*be1d5e03Shuang lin void board_init_r(gd_t *id, ulong dest_addr)
48*be1d5e03Shuang lin {
49*be1d5e03Shuang lin 	/*
50*be1d5e03Shuang lin 	 * Function attribute is no-return
51*be1d5e03Shuang lin 	 * This Function never executes
52*be1d5e03Shuang lin 	 */
53*be1d5e03Shuang lin 	while (1)
54*be1d5e03Shuang lin 		;
55*be1d5e03Shuang lin }
56