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