1*4c7abf85SPrasad Kummari /* 2*4c7abf85SPrasad Kummari * Copyright (c) 2014-2019, Arm Limited and Contributors. All rights reserved. 3*4c7abf85SPrasad Kummari * Copyright (c) 2023, Advanced Micro Devices. All rights reserved. 4*4c7abf85SPrasad Kummari * 5*4c7abf85SPrasad Kummari * SPDX-License-Identifier: BSD-3-Clause 6*4c7abf85SPrasad Kummari */ 7*4c7abf85SPrasad Kummari 8*4c7abf85SPrasad Kummari #include <common/bl_common.h> 9*4c7abf85SPrasad Kummari #include <common/debug.h> 10*4c7abf85SPrasad Kummari #include <drivers/console.h> 11*4c7abf85SPrasad Kummari #include <plat/arm/common/plat_arm.h> 12*4c7abf85SPrasad Kummari #include <platform_tsp.h> 13*4c7abf85SPrasad Kummari 14*4c7abf85SPrasad Kummari #include <plat_private.h> 15*4c7abf85SPrasad Kummari 16*4c7abf85SPrasad Kummari /******************************************************************************* 17*4c7abf85SPrasad Kummari * Initialize the UART 18*4c7abf85SPrasad Kummari ******************************************************************************/ 19*4c7abf85SPrasad Kummari void tsp_early_platform_setup(void) 20*4c7abf85SPrasad Kummari { 21*4c7abf85SPrasad Kummari /* 22*4c7abf85SPrasad Kummari * Register a different console than already in use to display 23*4c7abf85SPrasad Kummari * messages from TSP 24*4c7abf85SPrasad Kummari */ 25*4c7abf85SPrasad Kummari static console_t tsp_boot_console; 26*4c7abf85SPrasad Kummari int32_t rc; 27*4c7abf85SPrasad Kummari 28*4c7abf85SPrasad Kummari rc = console_cdns_register((uintptr_t)UART_BASE, 29*4c7abf85SPrasad Kummari (uint32_t)get_uart_clk(), 30*4c7abf85SPrasad Kummari (uint32_t)UART_BAUDRATE, 31*4c7abf85SPrasad Kummari &tsp_boot_console); 32*4c7abf85SPrasad Kummari if (rc == 0) { 33*4c7abf85SPrasad Kummari panic(); 34*4c7abf85SPrasad Kummari } 35*4c7abf85SPrasad Kummari 36*4c7abf85SPrasad Kummari console_set_scope(&tsp_boot_console, 37*4c7abf85SPrasad Kummari CONSOLE_FLAG_RUNTIME | CONSOLE_FLAG_BOOT); 38*4c7abf85SPrasad Kummari } 39*4c7abf85SPrasad Kummari 40*4c7abf85SPrasad Kummari /******************************************************************************* 41*4c7abf85SPrasad Kummari * Perform platform specific setup placeholder 42*4c7abf85SPrasad Kummari ******************************************************************************/ 43*4c7abf85SPrasad Kummari void tsp_platform_setup(void) 44*4c7abf85SPrasad Kummari { 45*4c7abf85SPrasad Kummari plat_arm_gic_driver_init(); 46*4c7abf85SPrasad Kummari plat_arm_gic_init(); 47*4c7abf85SPrasad Kummari } 48*4c7abf85SPrasad Kummari 49*4c7abf85SPrasad Kummari /******************************************************************************* 50*4c7abf85SPrasad Kummari * Perform the very early platform specific architectural setup here. At the 51*4c7abf85SPrasad Kummari * moment this is only initializes the MMU 52*4c7abf85SPrasad Kummari ******************************************************************************/ 53*4c7abf85SPrasad Kummari void tsp_plat_arch_setup(void) 54*4c7abf85SPrasad Kummari { 55*4c7abf85SPrasad Kummari const mmap_region_t bl_regions[] = { 56*4c7abf85SPrasad Kummari MAP_REGION_FLAT(BL32_BASE, BL32_END - BL32_BASE, 57*4c7abf85SPrasad Kummari MT_MEMORY | MT_RW | MT_SECURE), 58*4c7abf85SPrasad Kummari MAP_REGION_FLAT(BL_CODE_BASE, BL_CODE_END - BL_CODE_BASE, 59*4c7abf85SPrasad Kummari MT_CODE | MT_SECURE), 60*4c7abf85SPrasad Kummari MAP_REGION_FLAT(BL_RO_DATA_BASE, BL_RO_DATA_END - BL_RO_DATA_BASE, 61*4c7abf85SPrasad Kummari MT_RO_DATA | MT_SECURE), 62*4c7abf85SPrasad Kummari MAP_REGION_FLAT(BL_COHERENT_RAM_BASE, 63*4c7abf85SPrasad Kummari BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, 64*4c7abf85SPrasad Kummari MT_DEVICE | MT_RW | MT_SECURE), 65*4c7abf85SPrasad Kummari {0} 66*4c7abf85SPrasad Kummari }; 67*4c7abf85SPrasad Kummari 68*4c7abf85SPrasad Kummari setup_page_tables(bl_regions, plat_get_mmap()); 69*4c7abf85SPrasad Kummari enable_mmu_el1(0); 70*4c7abf85SPrasad Kummari } 71