From a2cdbb1df088cde410aea1d5989dfc500aaf7939 Mon Sep 17 00:00:00 2001 From: Mikael Olsson Date: Wed, 18 Jan 2023 18:05:15 +0100 Subject: [PATCH] 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 --- drivers/arm/ethosn/ethosn_smc.c | 10 ++++++++++ include/drivers/arm/ethosn.h | 2 ++ plat/arm/common/arm_sip_svc.c | 10 +++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) 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; } -- 2.39.5