xref: /rk3399_ARM-atf/plat/arm/common/plat_arm_sip_svc.c (revision 20324013b17706751ecdd68f57c0ab95c522ca7e)
17a2130b4SMadhukar Pappireddy /*
27a2130b4SMadhukar Pappireddy  * Copyright (c) 2023, Arm Limited. All rights reserved.
37a2130b4SMadhukar Pappireddy  *
47a2130b4SMadhukar Pappireddy  * SPDX-License-Identifier: BSD-3-Clause
57a2130b4SMadhukar Pappireddy  */
67a2130b4SMadhukar Pappireddy 
77a2130b4SMadhukar Pappireddy #include <stdint.h>
87a2130b4SMadhukar Pappireddy 
97a2130b4SMadhukar Pappireddy #include <common/debug.h>
107a2130b4SMadhukar Pappireddy #include <common/runtime_svc.h>
117a2130b4SMadhukar Pappireddy 
127a2130b4SMadhukar Pappireddy #include <plat/arm/common/arm_sip_svc.h>
137a2130b4SMadhukar Pappireddy #include <plat/common/platform.h>
147a2130b4SMadhukar Pappireddy 
157a2130b4SMadhukar Pappireddy #if ENABLE_SPMD_LP
167a2130b4SMadhukar Pappireddy #include <services/el3_spmd_logical_sp.h>
177a2130b4SMadhukar Pappireddy #endif
187a2130b4SMadhukar Pappireddy 
197a2130b4SMadhukar Pappireddy uintptr_t plat_arm_sip_handler(uint32_t smc_fid,
207a2130b4SMadhukar Pappireddy 				u_register_t x1,
217a2130b4SMadhukar Pappireddy 				u_register_t x2,
227a2130b4SMadhukar Pappireddy 				u_register_t x3,
237a2130b4SMadhukar Pappireddy 				u_register_t x4,
247a2130b4SMadhukar Pappireddy 				void *cookie,
257a2130b4SMadhukar Pappireddy 				void *handle,
267a2130b4SMadhukar Pappireddy 				u_register_t flags)
277a2130b4SMadhukar Pappireddy {
28*20324013SMadhukar Pappireddy #if PLAT_TEST_SPM
29*20324013SMadhukar Pappireddy 	bool secure_origin;
30*20324013SMadhukar Pappireddy 
31*20324013SMadhukar Pappireddy 	/* Determine which security state this SMC originated from */
32*20324013SMadhukar Pappireddy 	secure_origin = is_caller_secure(flags);
33*20324013SMadhukar Pappireddy 
34*20324013SMadhukar Pappireddy 	switch (smc_fid) {
35*20324013SMadhukar Pappireddy 	case ARM_SIP_SET_INTERRUPT_PENDING:
36*20324013SMadhukar Pappireddy 		if (!secure_origin) {
37*20324013SMadhukar Pappireddy 			SMC_RET1(handle, SMC_UNK);
38*20324013SMadhukar Pappireddy 		}
39*20324013SMadhukar Pappireddy 
40*20324013SMadhukar Pappireddy 		VERBOSE("SiP Call- Set interrupt pending %d\n", (uint32_t)x1);
41*20324013SMadhukar Pappireddy 		plat_ic_set_interrupt_pending(x1);
42*20324013SMadhukar Pappireddy 
43*20324013SMadhukar Pappireddy 		SMC_RET1(handle, SMC_OK);
44*20324013SMadhukar Pappireddy 		break; /* Not reached */
45*20324013SMadhukar Pappireddy 	default:
46*20324013SMadhukar Pappireddy 		break;
47*20324013SMadhukar Pappireddy 	}
48*20324013SMadhukar Pappireddy #endif
49*20324013SMadhukar Pappireddy 
507a2130b4SMadhukar Pappireddy #if ENABLE_SPMD_LP
517a2130b4SMadhukar Pappireddy 	return plat_spmd_logical_sp_smc_handler(smc_fid, x1, x2, x3, x4,
527a2130b4SMadhukar Pappireddy 				cookie, handle, flags);
537a2130b4SMadhukar Pappireddy #else
547a2130b4SMadhukar Pappireddy 	WARN("Unimplemented ARM SiP Service Call: 0x%x\n", smc_fid);
557a2130b4SMadhukar Pappireddy 	SMC_RET1(handle, SMC_UNK);
567a2130b4SMadhukar Pappireddy #endif
577a2130b4SMadhukar Pappireddy }
58