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 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