xref: /rk3399_ARM-atf/plat/arm/common/trp/arm_trp_setup.c (revision 1d0ca40e9084903d21e570bb312646626aaf574b)
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