xref: /rk3399_ARM-atf/plat/mediatek/mt8186/plat_sip_calls.c (revision bbdf2591bad121b590bf71390231081ed49a19c1)
15aab27dcSRex-BC Chen /*
2635e6b10Sjason-ch chen  * Copyright (c) 2021-2022, MediaTek Inc. All rights reserved.
35aab27dcSRex-BC Chen  *
45aab27dcSRex-BC Chen  * SPDX-License-Identifier: BSD-3-Clause
55aab27dcSRex-BC Chen  */
65aab27dcSRex-BC Chen 
75aab27dcSRex-BC Chen #include <common/debug.h>
85aab27dcSRex-BC Chen #include <common/runtime_svc.h>
9*4dbe24cfSBo-Chen Chen #include <lib/mmio.h>
10*4dbe24cfSBo-Chen Chen #include <mt_msdc.h>
11635e6b10Sjason-ch chen #include <mt_spm_vcorefs.h>
12635e6b10Sjason-ch chen #include <mtk_sip_svc.h>
13e46e9df0SRex-BC Chen #include <plat_dfd.h>
14635e6b10Sjason-ch chen #include "plat_sip_calls.h"
155aab27dcSRex-BC Chen 
mediatek_plat_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)165aab27dcSRex-BC Chen uintptr_t mediatek_plat_sip_handler(uint32_t smc_fid,
175aab27dcSRex-BC Chen 				u_register_t x1,
185aab27dcSRex-BC Chen 				u_register_t x2,
195aab27dcSRex-BC Chen 				u_register_t x3,
205aab27dcSRex-BC Chen 				u_register_t x4,
215aab27dcSRex-BC Chen 				void *cookie,
225aab27dcSRex-BC Chen 				void *handle,
235aab27dcSRex-BC Chen 				u_register_t flags)
245aab27dcSRex-BC Chen {
25635e6b10Sjason-ch chen 	uint64_t ret;
26635e6b10Sjason-ch chen 
275aab27dcSRex-BC Chen 	switch (smc_fid) {
282f3f5939SLeon Chen 	case MTK_SIP_VCORE_CONTROL_AARCH32:
292f3f5939SLeon Chen 	case MTK_SIP_VCORE_CONTROL_AARCH64:
30635e6b10Sjason-ch chen 		ret = spm_vcorefs_args(x1, x2, x3, (uint64_t *)&x4);
31635e6b10Sjason-ch chen 		SMC_RET2(handle, ret, x4);
32635e6b10Sjason-ch chen 		break;
33e46e9df0SRex-BC Chen 	case MTK_SIP_KERNEL_DFD_AARCH32:
34e46e9df0SRex-BC Chen 	case MTK_SIP_KERNEL_DFD_AARCH64:
35e46e9df0SRex-BC Chen 		ret = dfd_smc_dispatcher(x1, x2, x3, x4);
36e46e9df0SRex-BC Chen 		SMC_RET1(handle, ret);
37e46e9df0SRex-BC Chen 		break;
38*4dbe24cfSBo-Chen Chen 	case MTK_SIP_KERNEL_MSDC_AARCH32:
39*4dbe24cfSBo-Chen Chen 	case MTK_SIP_KERNEL_MSDC_AARCH64:
40*4dbe24cfSBo-Chen Chen 		ret = msdc_smc_dispatcher(x1, x2, x3, x4);
41*4dbe24cfSBo-Chen Chen 		SMC_RET1(handle, ret);
42*4dbe24cfSBo-Chen Chen 		break;
435aab27dcSRex-BC Chen 	default:
445aab27dcSRex-BC Chen 		ERROR("%s: unhandled SMC (0x%x)\n", __func__, smc_fid);
455aab27dcSRex-BC Chen 		break;
465aab27dcSRex-BC Chen 	}
475aab27dcSRex-BC Chen 
485aab27dcSRex-BC Chen 	SMC_RET1(handle, SMC_UNK);
495aab27dcSRex-BC Chen }
50