xref: /rk3399_rockchip-uboot/common/usbplug/usbplug.c (revision 4a2b8db466479ddec6ee85f9fe9d7f934016be9a)
1*4a2b8db4SJoseph Chen /*
2*4a2b8db4SJoseph Chen  * (C) Copyright 2020 Rockchip Electronics Co., Ltd.
3*4a2b8db4SJoseph Chen  *
4*4a2b8db4SJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
5*4a2b8db4SJoseph Chen  */
6*4a2b8db4SJoseph Chen 
7*4a2b8db4SJoseph Chen #include <common.h>
8*4a2b8db4SJoseph Chen #include <mapmem.h>
9*4a2b8db4SJoseph Chen #include <malloc.h>
10*4a2b8db4SJoseph Chen #include <dm/root.h>
11*4a2b8db4SJoseph Chen 
12*4a2b8db4SJoseph Chen DECLARE_GLOBAL_DATA_PTR;
13*4a2b8db4SJoseph Chen 
initr_reloc(void)14*4a2b8db4SJoseph Chen static void initr_reloc(void)
15*4a2b8db4SJoseph Chen {
16*4a2b8db4SJoseph Chen 	/* tell others: relocation done */
17*4a2b8db4SJoseph Chen 	gd->flags |= GD_FLG_RELOC | GD_FLG_FULL_MALLOC_INIT;
18*4a2b8db4SJoseph Chen }
19*4a2b8db4SJoseph Chen 
20*4a2b8db4SJoseph Chen #ifdef CONFIG_ARM
initr_caches(void)21*4a2b8db4SJoseph Chen static void initr_caches(void)
22*4a2b8db4SJoseph Chen {
23*4a2b8db4SJoseph Chen 	icache_enable();
24*4a2b8db4SJoseph Chen 	dcache_enable();
25*4a2b8db4SJoseph Chen }
26*4a2b8db4SJoseph Chen #endif
27*4a2b8db4SJoseph Chen 
initr_malloc(void)28*4a2b8db4SJoseph Chen static void initr_malloc(void)
29*4a2b8db4SJoseph Chen {
30*4a2b8db4SJoseph Chen 	ulong malloc_start;
31*4a2b8db4SJoseph Chen 
32*4a2b8db4SJoseph Chen 	/* The malloc area is immediately below the monitor copy in DRAM */
33*4a2b8db4SJoseph Chen 	malloc_start = gd->relocaddr - TOTAL_MALLOC_LEN;
34*4a2b8db4SJoseph Chen 	mem_malloc_init((ulong)map_sysmem(malloc_start, TOTAL_MALLOC_LEN),
35*4a2b8db4SJoseph Chen 			TOTAL_MALLOC_LEN);
36*4a2b8db4SJoseph Chen }
37*4a2b8db4SJoseph Chen 
38*4a2b8db4SJoseph Chen #ifdef CONFIG_DM
initr_dm(void)39*4a2b8db4SJoseph Chen static int initr_dm(void)
40*4a2b8db4SJoseph Chen {
41*4a2b8db4SJoseph Chen 	/* Save the pre-reloc driver model and start a new one */
42*4a2b8db4SJoseph Chen 	gd->dm_root_f = gd->dm_root;
43*4a2b8db4SJoseph Chen 	gd->dm_root = NULL;
44*4a2b8db4SJoseph Chen 
45*4a2b8db4SJoseph Chen 	return dm_init_and_scan(false);
46*4a2b8db4SJoseph Chen }
47*4a2b8db4SJoseph Chen #endif
48*4a2b8db4SJoseph Chen 
49*4a2b8db4SJoseph Chen /*
50*4a2b8db4SJoseph Chen  * The below functions are all __weak declared.
51*4a2b8db4SJoseph Chen  */
dram_init(void)52*4a2b8db4SJoseph Chen int dram_init(void)
53*4a2b8db4SJoseph Chen {
54*4a2b8db4SJoseph Chen #if CONFIG_SYS_MALLOC_LEN > SZ_64M
55*4a2b8db4SJoseph Chen 	"CONFIG_SYS_MALLOC_LEN is over 64MB"
56*4a2b8db4SJoseph Chen #endif
57*4a2b8db4SJoseph Chen 	gd->ram_size = SZ_64M; /* default */
58*4a2b8db4SJoseph Chen 
59*4a2b8db4SJoseph Chen 	gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
60*4a2b8db4SJoseph Chen 	gd->bd->bi_dram[0].size  = gd->ram_size;
61*4a2b8db4SJoseph Chen 
62*4a2b8db4SJoseph Chen 	return 0;
63*4a2b8db4SJoseph Chen }
64*4a2b8db4SJoseph Chen 
65*4a2b8db4SJoseph Chen /* Refers to common/board_r.c */
board_init_r(gd_t * new_gd,ulong dest_addr)66*4a2b8db4SJoseph Chen void board_init_r(gd_t *new_gd, ulong dest_addr)
67*4a2b8db4SJoseph Chen {
68*4a2b8db4SJoseph Chen 	initr_reloc();
69*4a2b8db4SJoseph Chen #ifdef CONFIG_ARM
70*4a2b8db4SJoseph Chen 	initr_caches();
71*4a2b8db4SJoseph Chen #endif
72*4a2b8db4SJoseph Chen 	initr_malloc();
73*4a2b8db4SJoseph Chen #ifdef CONFIG_DM
74*4a2b8db4SJoseph Chen 	initr_dm();
75*4a2b8db4SJoseph Chen #endif
76*4a2b8db4SJoseph Chen 	/* Setup chipselects, entering usb-plug mode */
77*4a2b8db4SJoseph Chen 	board_init();
78*4a2b8db4SJoseph Chen 
79*4a2b8db4SJoseph Chen 	hang();
80*4a2b8db4SJoseph Chen }
81*4a2b8db4SJoseph Chen 
82