mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 09:34:18 +00:00
refactor(arm): allow platform specific SiP support
This patch introduces handler to add support for SiP calls to be handled at EL3 for Arm platforms. Consequently, the support for SPMD LSP is moved to corresponding Arm platform SiP source file. This will allow us to add support for a new SiP call in subsequent patch. Change-Id: Ie29cb57fc622f96be3b67bebf34ce37cc82947d8 Signed-off-by: Madhukar Pappireddy <madhukar.pappireddy@arm.com>
This commit is contained in:
parent
f8363a8e2c
commit
7a2130b4a5
5 changed files with 60 additions and 13 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2019,2021-2022, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2019,2021-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -35,4 +35,14 @@
|
|||
#define ARM_SIP_SVC_VERSION_MAJOR U(0x0)
|
||||
#define ARM_SIP_SVC_VERSION_MINOR U(0x2)
|
||||
|
||||
/* SiP handler specific to each Arm platform. */
|
||||
uintptr_t plat_arm_sip_handler(uint32_t smc_fid,
|
||||
u_register_t x1,
|
||||
u_register_t x2,
|
||||
u_register_t x3,
|
||||
u_register_t x4,
|
||||
void *cookie,
|
||||
void *handle,
|
||||
u_register_t flags);
|
||||
|
||||
#endif /* ARM_SIP_SVC_H */
|
||||
|
|
|
@ -331,9 +331,11 @@ endif
|
|||
ifeq (${ARCH}, aarch64)
|
||||
BL31_SOURCES += plat/arm/common/aarch64/execution_state_switch.c\
|
||||
plat/arm/common/arm_sip_svc.c \
|
||||
plat/arm/common/plat_arm_sip_svc.c \
|
||||
${ARM_SVC_HANDLER_SRCS}
|
||||
else
|
||||
BL32_SOURCES += plat/arm/common/arm_sip_svc.c \
|
||||
plat/arm/common/plat_arm_sip_svc.c \
|
||||
${ARM_SVC_HANDLER_SRCS}
|
||||
endif
|
||||
endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2023, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -13,9 +13,6 @@
|
|||
#include <lib/pmf/pmf.h>
|
||||
#include <plat/arm/common/arm_sip_svc.h>
|
||||
#include <plat/arm/common/plat_arm.h>
|
||||
#if ENABLE_SPMD_LP
|
||||
#include <services/el3_spmd_logical_sp.h>
|
||||
#endif
|
||||
#include <tools_share/uuid.h>
|
||||
|
||||
/* ARM SiP Service UUID */
|
||||
|
@ -136,15 +133,16 @@ static uintptr_t arm_sip_handler(unsigned int smc_fid,
|
|||
SMC_RET2(handle, ARM_SIP_SVC_VERSION_MAJOR, ARM_SIP_SVC_VERSION_MINOR);
|
||||
|
||||
default:
|
||||
#if ENABLE_SPMD_LP
|
||||
return plat_spmd_logical_sp_smc_handler(smc_fid, x1, x2, x3, x4,
|
||||
cookie, handle, flags);
|
||||
#else
|
||||
WARN("Unimplemented ARM SiP Service Call: 0x%x \n", smc_fid);
|
||||
SMC_RET1(handle, SMC_UNK);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fall back to allow Arm platform specific handler.
|
||||
* TODO: Refactor needed to move out generic handlers from this file and
|
||||
* only keep Arm Platform specific handlers here.
|
||||
*/
|
||||
return plat_arm_sip_handler(smc_fid, x1, x2, x3, x4,
|
||||
cookie, handle, flags);
|
||||
}
|
||||
|
||||
|
||||
|
|
35
plat/arm/common/plat_arm_sip_svc.c
Normal file
35
plat/arm/common/plat_arm_sip_svc.c
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <common/debug.h>
|
||||
#include <common/runtime_svc.h>
|
||||
|
||||
#include <plat/arm/common/arm_sip_svc.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#if ENABLE_SPMD_LP
|
||||
#include <services/el3_spmd_logical_sp.h>
|
||||
#endif
|
||||
|
||||
uintptr_t plat_arm_sip_handler(uint32_t smc_fid,
|
||||
u_register_t x1,
|
||||
u_register_t x2,
|
||||
u_register_t x3,
|
||||
u_register_t x4,
|
||||
void *cookie,
|
||||
void *handle,
|
||||
u_register_t flags)
|
||||
{
|
||||
#if ENABLE_SPMD_LP
|
||||
return plat_spmd_logical_sp_smc_handler(smc_fid, x1, x2, x3, x4,
|
||||
cookie, handle, flags);
|
||||
#else
|
||||
WARN("Unimplemented ARM SiP Service Call: 0x%x\n", smc_fid);
|
||||
SMC_RET1(handle, SMC_UNK);
|
||||
#endif
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2015-2023, ARM Limited and Contributors. All rights reserved.
|
||||
# Copyright (c) 2015-2023, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# Copyright (c) 2017-2023 Nuvoton Ltd.
|
||||
#
|
||||
|
@ -273,9 +273,11 @@ ifeq (${ENABLE_PMF}, 1)
|
|||
ifeq (${ARCH}, aarch64)
|
||||
BL31_SOURCES += plat/arm/common/aarch64/execution_state_switch.c \
|
||||
plat/arm/common/arm_sip_svc.c \
|
||||
plat/arm/common/plat_arm_sip_svc.c \
|
||||
lib/pmf/pmf_smc.c
|
||||
else
|
||||
BL32_SOURCES += plat/arm/common/arm_sip_svc.c \
|
||||
plat/arm/common/plat_arm_sip_svc.c \
|
||||
lib/pmf/pmf_smc.c
|
||||
endif
|
||||
endif
|
||||
|
|
Loading…
Add table
Reference in a new issue