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