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
slbc_kernel_handler(u_register_t x1,u_register_t x2,u_register_t x3,u_register_t x4,void * handle,struct smccc_res * smccc_ret)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