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