1*e86fb819SYidi Lin /* 2*e86fb819SYidi Lin * Copyright (c) 2025, MediaTek Inc. All rights reserved. 3*e86fb819SYidi Lin * 4*e86fb819SYidi Lin * SPDX-License-Identifier: BSD-3-Clause 5*e86fb819SYidi Lin */ 6*e86fb819SYidi Lin 7*e86fb819SYidi Lin #include <errno.h> 8*e86fb819SYidi Lin 9*e86fb819SYidi Lin #include <common/debug.h> 10*e86fb819SYidi Lin 11*e86fb819SYidi Lin #include <mtk_bl31_interface.h> 12*e86fb819SYidi Lin #include <mtk_sip_svc.h> 13*e86fb819SYidi Lin 14*e86fb819SYidi Lin #define MODULE_TAG "[SLBC]" 15*e86fb819SYidi Lin 16*e86fb819SYidi Lin enum { 17*e86fb819SYidi Lin MTK_SLBC_KERNEL_OP_CPU_DCC = 0, 18*e86fb819SYidi Lin }; 19*e86fb819SYidi Lin 20*e86fb819SYidi Lin static u_register_t slbc_kernel_handler(u_register_t x1, u_register_t x2, 21*e86fb819SYidi Lin u_register_t x3, u_register_t x4, 22*e86fb819SYidi Lin void *handle, 23*e86fb819SYidi Lin struct smccc_res *smccc_ret) 24*e86fb819SYidi Lin { 25*e86fb819SYidi Lin uint32_t request_ops = (uint32_t)x1; 26*e86fb819SYidi Lin u_register_t ret = 0; 27*e86fb819SYidi Lin 28*e86fb819SYidi Lin switch (request_ops) { 29*e86fb819SYidi Lin case MTK_SLBC_KERNEL_OP_CPU_DCC: 30*e86fb819SYidi Lin cpu_qos_change_dcc(x2, x3); 31*e86fb819SYidi Lin break; 32*e86fb819SYidi Lin default: 33*e86fb819SYidi Lin ERROR("%s: %s, unknown request_ops = %x\n", MODULE_TAG, __func__, request_ops); 34*e86fb819SYidi Lin ret = EIO; 35*e86fb819SYidi Lin break; 36*e86fb819SYidi Lin } 37*e86fb819SYidi Lin 38*e86fb819SYidi Lin VERBOSE("%s: %s, request_ops = %x, ret = %lu\n", MODULE_TAG, __func__, request_ops, ret); 39*e86fb819SYidi Lin return ret; 40*e86fb819SYidi Lin } 41*e86fb819SYidi Lin 42*e86fb819SYidi Lin /* Register SiP SMC service */ 43*e86fb819SYidi Lin DECLARE_SMC_HANDLER(MTK_SIP_KERNEL_SLBC_CONTROL, slbc_kernel_handler); 44