150a3056aSZelalem Aweke /* 2*1d0ca40eSJavier Almansa Sobrino * Copyright (c) 2021-2022, Arm Limited. All rights reserved. 350a3056aSZelalem Aweke * 450a3056aSZelalem Aweke * SPDX-License-Identifier: BSD-3-Clause 550a3056aSZelalem Aweke */ 650a3056aSZelalem Aweke 750a3056aSZelalem Aweke #include <common/bl_common.h> 850a3056aSZelalem Aweke #include <common/debug.h> 950a3056aSZelalem Aweke #include <drivers/arm/pl011.h> 1050a3056aSZelalem Aweke #include <drivers/console.h> 11*1d0ca40eSJavier Almansa Sobrino #include <services/rmm_core_manifest.h> 12*1d0ca40eSJavier Almansa Sobrino #include <services/rmmd_svc.h> 13*1d0ca40eSJavier Almansa Sobrino #include <services/trp/platform_trp.h> 14*1d0ca40eSJavier Almansa Sobrino #include <trp_helpers.h> 15*1d0ca40eSJavier Almansa Sobrino 1650a3056aSZelalem Aweke #include <plat/arm/common/plat_arm.h> 1750a3056aSZelalem Aweke #include <platform_def.h> 1850a3056aSZelalem Aweke 1950a3056aSZelalem Aweke /******************************************************************************* 20*1d0ca40eSJavier Almansa Sobrino * Received from boot manifest and populated here 21*1d0ca40eSJavier Almansa Sobrino ******************************************************************************/ 22*1d0ca40eSJavier Almansa Sobrino extern uint32_t trp_boot_manifest_version; 23*1d0ca40eSJavier Almansa Sobrino 24*1d0ca40eSJavier Almansa Sobrino /******************************************************************************* 2550a3056aSZelalem Aweke * Initialize the UART 2650a3056aSZelalem Aweke ******************************************************************************/ 2750a3056aSZelalem Aweke static console_t arm_trp_runtime_console; 2850a3056aSZelalem Aweke 29*1d0ca40eSJavier Almansa Sobrino static int arm_trp_process_manifest(rmm_manifest_t *manifest) 3050a3056aSZelalem Aweke { 31*1d0ca40eSJavier Almansa Sobrino /* Verify the Boot Manifest Version. Only the Major is considered */ 32*1d0ca40eSJavier Almansa Sobrino if (RMMD_MANIFEST_VERSION_MAJOR != 33*1d0ca40eSJavier Almansa Sobrino RMMD_GET_MANIFEST_VERSION_MAJOR(manifest->version)) { 34*1d0ca40eSJavier Almansa Sobrino return E_RMM_BOOT_MANIFEST_VERSION_NOT_SUPPORTED; 35*1d0ca40eSJavier Almansa Sobrino } 36*1d0ca40eSJavier Almansa Sobrino 37*1d0ca40eSJavier Almansa Sobrino trp_boot_manifest_version = manifest->version; 38*1d0ca40eSJavier Almansa Sobrino flush_dcache_range((uintptr_t)manifest, sizeof(rmm_manifest_t)); 39*1d0ca40eSJavier Almansa Sobrino 40*1d0ca40eSJavier Almansa Sobrino return 0; 41*1d0ca40eSJavier Almansa Sobrino } 42*1d0ca40eSJavier Almansa Sobrino 43*1d0ca40eSJavier Almansa Sobrino void arm_trp_early_platform_setup(rmm_manifest_t *manifest) 44*1d0ca40eSJavier Almansa Sobrino { 45*1d0ca40eSJavier Almansa Sobrino int rc; 46*1d0ca40eSJavier Almansa Sobrino 47*1d0ca40eSJavier Almansa Sobrino rc = arm_trp_process_manifest(manifest); 48*1d0ca40eSJavier Almansa Sobrino if (rc != 0) { 49*1d0ca40eSJavier Almansa Sobrino trp_boot_abort(rc); 50*1d0ca40eSJavier Almansa Sobrino } 51*1d0ca40eSJavier Almansa Sobrino 5250a3056aSZelalem Aweke /* 5350a3056aSZelalem Aweke * Initialize a different console than already in use to display 5450a3056aSZelalem Aweke * messages from trp 5550a3056aSZelalem Aweke */ 56*1d0ca40eSJavier Almansa Sobrino rc = console_pl011_register(PLAT_ARM_TRP_UART_BASE, 5750a3056aSZelalem Aweke PLAT_ARM_TRP_UART_CLK_IN_HZ, 5850a3056aSZelalem Aweke ARM_CONSOLE_BAUDRATE, 5950a3056aSZelalem Aweke &arm_trp_runtime_console); 6050a3056aSZelalem Aweke if (rc == 0) { 6150a3056aSZelalem Aweke panic(); 6250a3056aSZelalem Aweke } 6350a3056aSZelalem Aweke 6450a3056aSZelalem Aweke console_set_scope(&arm_trp_runtime_console, 6550a3056aSZelalem Aweke CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME); 66*1d0ca40eSJavier Almansa Sobrino 6750a3056aSZelalem Aweke } 6850a3056aSZelalem Aweke 69*1d0ca40eSJavier Almansa Sobrino void trp_early_platform_setup(rmm_manifest_t *manifest) 7050a3056aSZelalem Aweke { 71*1d0ca40eSJavier Almansa Sobrino arm_trp_early_platform_setup(manifest); 7250a3056aSZelalem Aweke } 73