xref: /rk3399_ARM-atf/plat/st/stm32mp2/services/stm32mp2_svc_setup.c (revision f55b136abcdd2d6ba3bd5613eee8fff943de0fd1)
1*f55b136aSGatien Chevallier /*
2*f55b136aSGatien Chevallier  * Copyright (c) 2024, STMicroelectronics - All Rights Reserved
3*f55b136aSGatien Chevallier  *
4*f55b136aSGatien Chevallier  * SPDX-License-Identifier: BSD-3-Clause
5*f55b136aSGatien Chevallier  */
6*f55b136aSGatien Chevallier 
7*f55b136aSGatien Chevallier #include <stdbool.h>
8*f55b136aSGatien Chevallier #include <stdint.h>
9*f55b136aSGatien Chevallier 
10*f55b136aSGatien Chevallier #include <common/debug.h>
11*f55b136aSGatien Chevallier #include <common/runtime_svc.h>
12*f55b136aSGatien Chevallier #include <lib/mmio.h>
13*f55b136aSGatien Chevallier 
14*f55b136aSGatien Chevallier #include <stm32mp2_smc.h>
15*f55b136aSGatien Chevallier #include <stm32mp_svc_setup.h>
16*f55b136aSGatien Chevallier 
17*f55b136aSGatien Chevallier /*
18*f55b136aSGatien Chevallier  * Platform-level Standard Service SIP SMC handler. This handler will dispatch
19*f55b136aSGatien Chevallier  * the SMC to the correct feature handler.
20*f55b136aSGatien Chevallier  */
21*f55b136aSGatien Chevallier void plat_svc_smc_handler(uint32_t smc_fid, u_register_t x1,
22*f55b136aSGatien Chevallier 			  u_register_t x2, u_register_t x3,
23*f55b136aSGatien Chevallier 			  u_register_t x4, uint32_t *ret1,
24*f55b136aSGatien Chevallier 			  uint32_t *ret2, bool *ret2_enabled,
25*f55b136aSGatien Chevallier 			  u_register_t flags)
26*f55b136aSGatien Chevallier {
27*f55b136aSGatien Chevallier 	switch (smc_fid) {
28*f55b136aSGatien Chevallier 	case STM32_SIP_SVC_CALL_COUNT:
29*f55b136aSGatien Chevallier 		*ret1 = STM32_COMMON_SIP_NUM_CALLS;
30*f55b136aSGatien Chevallier 		break;
31*f55b136aSGatien Chevallier 	default:
32*f55b136aSGatien Chevallier 		WARN("Unimplemented STM32MP2 Service Call: 0x%x\n", smc_fid);
33*f55b136aSGatien Chevallier 		*ret1 = STM32_SMC_NOT_SUPPORTED;
34*f55b136aSGatien Chevallier 		break;
35*f55b136aSGatien Chevallier 	}
36*f55b136aSGatien Chevallier }
37