From: Mikael Olsson Date: Wed, 18 Jan 2023 17:05:15 +0000 (+0100) Subject: feat(ethos-n): add check for NPU in SiP setup X-Git-Tag: baikal/aarch64/sdk5.10~1^2~111^2~10 X-Git-Url: https://git.baikalelectronics.ru/?a=commitdiff_plain;h=a2cdbb1df088cde410aea1d5989dfc500aaf7939;p=arm-tf.git feat(ethos-n): add check for NPU in SiP setup The SiP service in the Arm(R) Ethos(TM)-N NPU driver requires that there is at least one NPU available. If there is no NPU available, the driver is either used incorrectly or the HW config is incorrect. To ensure that the SiP service is not incorrectly used, a setup handler has been added to the service that will validate that there is at least one NPU available. Signed-off-by: Mikael Olsson Change-Id: I8139a652f265cfc0db4a37464f39f1fb92868e10 --- diff --git a/drivers/arm/ethosn/ethosn_smc.c b/drivers/arm/ethosn/ethosn_smc.c index cf3491055..6b1ab85dc 100644 --- a/drivers/arm/ethosn/ethosn_smc.c +++ b/drivers/arm/ethosn/ethosn_smc.c @@ -286,3 +286,13 @@ uintptr_t ethosn_smc_handler(uint32_t smc_fid, SMC_RET1(handle, SMC_UNK); } } + +int ethosn_smc_setup(void) +{ + if (ETHOSN_NUM_DEVICES == 0U) { + ERROR("ETHOSN: No NPU found\n"); + return ETHOSN_FAILURE; + } + + return 0; +} diff --git a/include/drivers/arm/ethosn.h b/include/drivers/arm/ethosn.h index 9f1b499d0..01868e37e 100644 --- a/include/drivers/arm/ethosn.h +++ b/include/drivers/arm/ethosn.h @@ -58,6 +58,8 @@ #define ETHOSN_RESET_TYPE_FULL U(0) #define ETHOSN_RESET_TYPE_HALT U(1) +int ethosn_smc_setup(void); + uintptr_t ethosn_smc_handler(uint32_t smc_fid, u_register_t core_addr, u_register_t asset_alloc_idx, diff --git a/plat/arm/common/arm_sip_svc.c b/plat/arm/common/arm_sip_svc.c index 6456c7841..af8a02fb0 100644 --- a/plat/arm/common/arm_sip_svc.c +++ b/plat/arm/common/arm_sip_svc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019,2021, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2023, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -34,6 +34,14 @@ static int arm_sip_setup(void) #endif /* USE_DEBUGFS */ +#if ARM_ETHOSN_NPU_DRIVER + + if (ethosn_smc_setup() != 0) { + return 1; + } + +#endif /* ARM_ETHOSN_NPU_DRIVER */ + return 0; }