xref: /rk3399_ARM-atf/plat/rpi/rpi3/rpi3_bl1_setup.c (revision 4f2b984852556afc3543d90150c46be4aaadbc75)
1*ab13adddSAndre Przywara /*
24f2b9848SAndre Przywara  * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
3*ab13adddSAndre Przywara  *
4*ab13adddSAndre Przywara  * SPDX-License-Identifier: BSD-3-Clause
5*ab13adddSAndre Przywara  */
6*ab13adddSAndre Przywara 
7*ab13adddSAndre Przywara #include <platform_def.h>
8*ab13adddSAndre Przywara 
9*ab13adddSAndre Przywara #include <arch.h>
10*ab13adddSAndre Przywara #include <arch_helpers.h>
11*ab13adddSAndre Przywara #include <common/bl_common.h>
12*ab13adddSAndre Przywara #include <common/debug.h>
13*ab13adddSAndre Przywara #include <lib/xlat_tables/xlat_mmu_helpers.h>
14*ab13adddSAndre Przywara #include <lib/xlat_tables/xlat_tables_defs.h>
15*ab13adddSAndre Przywara 
164f2b9848SAndre Przywara #include <rpi_shared.h>
17*ab13adddSAndre Przywara 
18*ab13adddSAndre Przywara /* Data structure which holds the extents of the trusted SRAM for BL1 */
19*ab13adddSAndre Przywara static meminfo_t bl1_tzram_layout;
20*ab13adddSAndre Przywara 
21*ab13adddSAndre Przywara meminfo_t *bl1_plat_sec_mem_layout(void)
22*ab13adddSAndre Przywara {
23*ab13adddSAndre Przywara 	return &bl1_tzram_layout;
24*ab13adddSAndre Przywara }
25*ab13adddSAndre Przywara 
26*ab13adddSAndre Przywara /*******************************************************************************
27*ab13adddSAndre Przywara  * Perform any BL1 specific platform actions.
28*ab13adddSAndre Przywara  ******************************************************************************/
29*ab13adddSAndre Przywara void bl1_early_platform_setup(void)
30*ab13adddSAndre Przywara {
31*ab13adddSAndre Przywara 	/* Initialize the console to provide early debug support */
32*ab13adddSAndre Przywara 	rpi3_console_init();
33*ab13adddSAndre Przywara 
34*ab13adddSAndre Przywara 	/* Allow BL1 to see the whole Trusted RAM */
35*ab13adddSAndre Przywara 	bl1_tzram_layout.total_base = BL_RAM_BASE;
36*ab13adddSAndre Przywara 	bl1_tzram_layout.total_size = BL_RAM_SIZE;
37*ab13adddSAndre Przywara }
38*ab13adddSAndre Przywara 
39*ab13adddSAndre Przywara /******************************************************************************
40*ab13adddSAndre Przywara  * Perform the very early platform specific architecture setup.  This only
41*ab13adddSAndre Przywara  * does basic initialization. Later architectural setup (bl1_arch_setup())
42*ab13adddSAndre Przywara  * does not do anything platform specific.
43*ab13adddSAndre Przywara  *****************************************************************************/
44*ab13adddSAndre Przywara void bl1_plat_arch_setup(void)
45*ab13adddSAndre Przywara {
46*ab13adddSAndre Przywara 	rpi3_setup_page_tables(bl1_tzram_layout.total_base,
47*ab13adddSAndre Przywara 			       bl1_tzram_layout.total_size,
48*ab13adddSAndre Przywara 			       BL_CODE_BASE, BL1_CODE_END,
49*ab13adddSAndre Przywara 			       BL1_RO_DATA_BASE, BL1_RO_DATA_END
50*ab13adddSAndre Przywara #if USE_COHERENT_MEM
51*ab13adddSAndre Przywara 			       , BL_COHERENT_RAM_BASE, BL_COHERENT_RAM_END
52*ab13adddSAndre Przywara #endif
53*ab13adddSAndre Przywara 			      );
54*ab13adddSAndre Przywara 
55*ab13adddSAndre Przywara 	enable_mmu_el3(0);
56*ab13adddSAndre Przywara }
57*ab13adddSAndre Przywara 
58*ab13adddSAndre Przywara void bl1_platform_setup(void)
59*ab13adddSAndre Przywara {
60*ab13adddSAndre Przywara 	uint32_t __unused rev;
61*ab13adddSAndre Przywara 	int __unused rc;
62*ab13adddSAndre Przywara 
63*ab13adddSAndre Przywara 	rc = rpi3_vc_hardware_get_board_revision(&rev);
64*ab13adddSAndre Przywara 
65*ab13adddSAndre Przywara 	if (rc == 0) {
66*ab13adddSAndre Przywara 		const char __unused *model, __unused *info;
67*ab13adddSAndre Przywara 
68*ab13adddSAndre Przywara 		switch (rev) {
69*ab13adddSAndre Przywara 		case 0xA02082:
70*ab13adddSAndre Przywara 			model = "Raspberry Pi 3 Model B";
71*ab13adddSAndre Przywara 			info = "(1GB, Sony, UK)";
72*ab13adddSAndre Przywara 			break;
73*ab13adddSAndre Przywara 		case 0xA22082:
74*ab13adddSAndre Przywara 			model = "Raspberry Pi 3 Model B";
75*ab13adddSAndre Przywara 			info = "(1GB, Embest, China)";
76*ab13adddSAndre Przywara 			break;
77*ab13adddSAndre Przywara 		case 0xA020D3:
78*ab13adddSAndre Przywara 			model = "Raspberry Pi 3 Model B+";
79*ab13adddSAndre Przywara 			info = "(1GB, Sony, UK)";
80*ab13adddSAndre Przywara 			break;
81*ab13adddSAndre Przywara 		default:
82*ab13adddSAndre Przywara 			model = "Unknown";
83*ab13adddSAndre Przywara 			info = "(Unknown)";
84*ab13adddSAndre Przywara 			ERROR("rpi3: Unknown board revision 0x%08x\n", rev);
85*ab13adddSAndre Przywara 			break;
86*ab13adddSAndre Przywara 		}
87*ab13adddSAndre Przywara 
88*ab13adddSAndre Przywara 		NOTICE("rpi3: Detected: %s %s [0x%08x]\n", model, info, rev);
89*ab13adddSAndre Przywara 	} else {
90*ab13adddSAndre Przywara 		ERROR("rpi3: Unable to detect board revision\n");
91*ab13adddSAndre Przywara 	}
92*ab13adddSAndre Przywara 
93*ab13adddSAndre Przywara 	/* Initialise the IO layer and register platform IO devices */
94*ab13adddSAndre Przywara 	plat_rpi3_io_setup();
95*ab13adddSAndre Przywara }
96