blob: 04063219b796459344cf28e57779483b00510de3 [file] [log] [blame]
Zelalem Awekec8bc23e2021-07-09 15:32:21 -05001/*
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +01002 * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
Zelalem Awekec8bc23e2021-07-09 15:32:21 -05003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <common/bl_common.h>
8#include <common/debug.h>
9#include <drivers/arm/pl011.h>
10#include <drivers/console.h>
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010011#include <services/rmm_core_manifest.h>
12#include <services/rmmd_svc.h>
13#include <services/trp/platform_trp.h>
14#include <trp_helpers.h>
15
Zelalem Awekec8bc23e2021-07-09 15:32:21 -050016#include <plat/arm/common/plat_arm.h>
17#include <platform_def.h>
18
19/*******************************************************************************
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010020 * Received from boot manifest and populated here
21 ******************************************************************************/
22extern uint32_t trp_boot_manifest_version;
23
24/*******************************************************************************
Zelalem Awekec8bc23e2021-07-09 15:32:21 -050025 * Initialize the UART
26 ******************************************************************************/
27static console_t arm_trp_runtime_console;
28
AlexeiFedorov8e754f92022-12-14 17:28:11 +000029static int arm_trp_process_manifest(struct rmm_manifest *manifest)
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010030{
Javier Almansa Sobrino04a6f2f2022-12-01 17:20:45 +000031 /* padding field on the manifest must be RES0 */
32 assert(manifest->padding == 0U);
33
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010034 /* Verify the Boot Manifest Version. Only the Major is considered */
35 if (RMMD_MANIFEST_VERSION_MAJOR !=
36 RMMD_GET_MANIFEST_VERSION_MAJOR(manifest->version)) {
37 return E_RMM_BOOT_MANIFEST_VERSION_NOT_SUPPORTED;
38 }
39
40 trp_boot_manifest_version = manifest->version;
AlexeiFedorov8e754f92022-12-14 17:28:11 +000041 flush_dcache_range((uintptr_t)manifest, sizeof(struct rmm_manifest));
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010042
43 return 0;
44}
45
AlexeiFedorov8e754f92022-12-14 17:28:11 +000046void arm_trp_early_platform_setup(struct rmm_manifest *manifest)
Zelalem Awekec8bc23e2021-07-09 15:32:21 -050047{
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010048 int rc;
49
50 rc = arm_trp_process_manifest(manifest);
51 if (rc != 0) {
52 trp_boot_abort(rc);
53 }
54
Zelalem Awekec8bc23e2021-07-09 15:32:21 -050055 /*
56 * Initialize a different console than already in use to display
57 * messages from trp
58 */
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010059 rc = console_pl011_register(PLAT_ARM_TRP_UART_BASE,
60 PLAT_ARM_TRP_UART_CLK_IN_HZ,
61 ARM_CONSOLE_BAUDRATE,
62 &arm_trp_runtime_console);
Zelalem Awekec8bc23e2021-07-09 15:32:21 -050063 if (rc == 0) {
64 panic();
65 }
66
67 console_set_scope(&arm_trp_runtime_console,
68 CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME);
69}
70
AlexeiFedorov8e754f92022-12-14 17:28:11 +000071void trp_early_platform_setup(struct rmm_manifest *manifest)
Zelalem Awekec8bc23e2021-07-09 15:32:21 -050072{
Javier Almansa Sobrino4165e842022-04-25 17:18:15 +010073 arm_trp_early_platform_setup(manifest);
Zelalem Awekec8bc23e2021-07-09 15:32:21 -050074}