Browse Source

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>
pull/1993/merge
Madhukar Pappireddy 1 year ago
parent
commit
7a2130b4a5
  1. 12
      include/plat/arm/common/arm_sip_svc.h
  2. 2
      plat/arm/common/arm_common.mk
  3. 20
      plat/arm/common/arm_sip_svc.c
  4. 35
      plat/arm/common/plat_arm_sip_svc.c
  5. 4
      plat/nuvoton/npcm845x/platform.mk

12
include/plat/arm/common/arm_sip_svc.h

@ -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 */

2
plat/arm/common/arm_common.mk

@ -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

20
plat/arm/common/arm_sip_svc.c

@ -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

@ -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
}

4
plat/nuvoton/npcm845x/platform.mk

@ -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…
Cancel
Save