150a3056aSZelalem Aweke /* 21d0ca40eSJavier 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> 111d0ca40eSJavier Almansa Sobrino #include <services/rmm_core_manifest.h> 121d0ca40eSJavier Almansa Sobrino #include <services/rmmd_svc.h> 131d0ca40eSJavier Almansa Sobrino #include <services/trp/platform_trp.h> 141d0ca40eSJavier Almansa Sobrino #include <trp_helpers.h> 151d0ca40eSJavier Almansa Sobrino 1650a3056aSZelalem Aweke #include <plat/arm/common/plat_arm.h> 1750a3056aSZelalem Aweke #include <platform_def.h> 1850a3056aSZelalem Aweke 1950a3056aSZelalem Aweke /******************************************************************************* 201d0ca40eSJavier Almansa Sobrino * Received from boot manifest and populated here 211d0ca40eSJavier Almansa Sobrino ******************************************************************************/ 221d0ca40eSJavier Almansa Sobrino extern uint32_t trp_boot_manifest_version; 231d0ca40eSJavier Almansa Sobrino 241d0ca40eSJavier Almansa Sobrino /******************************************************************************* 2550a3056aSZelalem Aweke * Initialize the UART 2650a3056aSZelalem Aweke ******************************************************************************/ 2750a3056aSZelalem Aweke static console_t arm_trp_runtime_console; 2850a3056aSZelalem Aweke 29*a97bfa5fSAlexeiFedorov static int arm_trp_process_manifest(struct rmm_manifest *manifest) 3050a3056aSZelalem Aweke { 31dc0ca64eSJavier Almansa Sobrino /* padding field on the manifest must be RES0 */ 32dc0ca64eSJavier Almansa Sobrino assert(manifest->padding == 0U); 33dc0ca64eSJavier Almansa Sobrino 341d0ca40eSJavier Almansa Sobrino /* Verify the Boot Manifest Version. Only the Major is considered */ 351d0ca40eSJavier Almansa Sobrino if (RMMD_MANIFEST_VERSION_MAJOR != 361d0ca40eSJavier Almansa Sobrino RMMD_GET_MANIFEST_VERSION_MAJOR(manifest->version)) { 371d0ca40eSJavier Almansa Sobrino return E_RMM_BOOT_MANIFEST_VERSION_NOT_SUPPORTED; 381d0ca40eSJavier Almansa Sobrino } 391d0ca40eSJavier Almansa Sobrino 401d0ca40eSJavier Almansa Sobrino trp_boot_manifest_version = manifest->version; 41*a97bfa5fSAlexeiFedorov flush_dcache_range((uintptr_t)manifest, sizeof(struct rmm_manifest)); 421d0ca40eSJavier Almansa Sobrino 431d0ca40eSJavier Almansa Sobrino return 0; 441d0ca40eSJavier Almansa Sobrino } 451d0ca40eSJavier Almansa Sobrino 46*a97bfa5fSAlexeiFedorov void arm_trp_early_platform_setup(struct rmm_manifest *manifest) 471d0ca40eSJavier Almansa Sobrino { 481d0ca40eSJavier Almansa Sobrino int rc; 491d0ca40eSJavier Almansa Sobrino 501d0ca40eSJavier Almansa Sobrino rc = arm_trp_process_manifest(manifest); 511d0ca40eSJavier Almansa Sobrino if (rc != 0) { 521d0ca40eSJavier Almansa Sobrino trp_boot_abort(rc); 531d0ca40eSJavier Almansa Sobrino } 541d0ca40eSJavier Almansa Sobrino 5550a3056aSZelalem Aweke /* 5650a3056aSZelalem Aweke * Initialize a different console than already in use to display 5750a3056aSZelalem Aweke * messages from trp 5850a3056aSZelalem Aweke */ 591d0ca40eSJavier Almansa Sobrino rc = console_pl011_register(PLAT_ARM_TRP_UART_BASE, 6050a3056aSZelalem Aweke PLAT_ARM_TRP_UART_CLK_IN_HZ, 6150a3056aSZelalem Aweke ARM_CONSOLE_BAUDRATE, 6250a3056aSZelalem Aweke &arm_trp_runtime_console); 6350a3056aSZelalem Aweke if (rc == 0) { 6450a3056aSZelalem Aweke panic(); 6550a3056aSZelalem Aweke } 6650a3056aSZelalem Aweke 6750a3056aSZelalem Aweke console_set_scope(&arm_trp_runtime_console, 6850a3056aSZelalem Aweke CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME); 6950a3056aSZelalem Aweke } 7050a3056aSZelalem Aweke 71*a97bfa5fSAlexeiFedorov void trp_early_platform_setup(struct rmm_manifest *manifest) 7250a3056aSZelalem Aweke { 731d0ca40eSJavier Almansa Sobrino arm_trp_early_platform_setup(manifest); 7450a3056aSZelalem Aweke } 75