152430916SChungying Lu /* 252430916SChungying Lu * Copyright (c) 2023, MediaTek Inc. All rights reserved. 352430916SChungying Lu * 452430916SChungying Lu * SPDX-License-Identifier: BSD-3-Clause 552430916SChungying Lu */ 652430916SChungying Lu 752430916SChungying Lu /* TF-A system header */ 852430916SChungying Lu #include <common/debug.h> 952430916SChungying Lu 1052430916SChungying Lu /* Vendor header */ 1152430916SChungying Lu #include "apusys.h" 1252430916SChungying Lu #include "apusys_power.h" 1352430916SChungying Lu #include <lib/mtk_init/mtk_init.h> 14*8e38b928SChungying Lu #include <mtk_sip_svc.h> 15*8e38b928SChungying Lu 16*8e38b928SChungying Lu static u_register_t apusys_kernel_handler(u_register_t x1, 17*8e38b928SChungying Lu u_register_t x2, 18*8e38b928SChungying Lu u_register_t x3, 19*8e38b928SChungying Lu u_register_t x4, 20*8e38b928SChungying Lu void *handle, 21*8e38b928SChungying Lu struct smccc_res *smccc_ret) 22*8e38b928SChungying Lu { 23*8e38b928SChungying Lu uint32_t request_ops; 24*8e38b928SChungying Lu int32_t ret = -1; 25*8e38b928SChungying Lu 26*8e38b928SChungying Lu request_ops = (uint32_t)x1; 27*8e38b928SChungying Lu 28*8e38b928SChungying Lu switch (request_ops) { 29*8e38b928SChungying Lu case MTK_APUSYS_KERNEL_OP_APUSYS_PWR_TOP_ON: 30*8e38b928SChungying Lu ret = apusys_kernel_apusys_pwr_top_on(); 31*8e38b928SChungying Lu break; 32*8e38b928SChungying Lu case MTK_APUSYS_KERNEL_OP_APUSYS_PWR_TOP_OFF: 33*8e38b928SChungying Lu ret = apusys_kernel_apusys_pwr_top_off(); 34*8e38b928SChungying Lu break; 35*8e38b928SChungying Lu default: 36*8e38b928SChungying Lu ERROR(MODULE_TAG "%s unknown request_ops = %x\n", MODULE_TAG, request_ops); 37*8e38b928SChungying Lu break; 38*8e38b928SChungying Lu } 39*8e38b928SChungying Lu 40*8e38b928SChungying Lu return ret; 41*8e38b928SChungying Lu } 42*8e38b928SChungying Lu DECLARE_SMC_HANDLER(MTK_SIP_APUSYS_CONTROL, apusys_kernel_handler); 4352430916SChungying Lu 4452430916SChungying Lu int apusys_init(void) 4552430916SChungying Lu { 4652430916SChungying Lu apusys_power_init(); 4752430916SChungying Lu return 0; 4852430916SChungying Lu } 4952430916SChungying Lu MTK_PLAT_SETUP_1_INIT(apusys_init); 50