xref: /rk3399_ARM-atf/plat/mediatek/drivers/disp/mtk_disp_smc.c (revision 69970765fa9f9ec7a9de2408e50ea21d681df1c2)
1*69970765Sxiandong.wang /*
2*69970765Sxiandong.wang  * Copyright (c) 2025, MediaTek Inc. All rights reserved.
3*69970765Sxiandong.wang  *
4*69970765Sxiandong.wang  * SPDX-License-Identifier: BSD-3-Clause
5*69970765Sxiandong.wang  */
6*69970765Sxiandong.wang 
7*69970765Sxiandong.wang #include <stddef.h>
8*69970765Sxiandong.wang #include <mtk_disp_priv.h>
9*69970765Sxiandong.wang #include <mtk_sip_svc.h>
10*69970765Sxiandong.wang 
11*69970765Sxiandong.wang /* defination */
12*69970765Sxiandong.wang static int mtk_disp_disable_sec(uint32_t larb_id, uint32_t mmu_en_msk)
13*69970765Sxiandong.wang {
14*69970765Sxiandong.wang 	const struct mtk_disp_config *disp_cfg_t;
15*69970765Sxiandong.wang 	uint32_t cfg_cnt;
16*69970765Sxiandong.wang 
17*69970765Sxiandong.wang 	for (cfg_cnt = 0; cfg_cnt < (disp_cfg_count - 1); cfg_cnt++) {
18*69970765Sxiandong.wang 		disp_cfg_t = &disp_cfg[cfg_cnt];
19*69970765Sxiandong.wang 		mmio_setbits_32(disp_cfg_t->base, disp_cfg_t->ns_mask);
20*69970765Sxiandong.wang 	}
21*69970765Sxiandong.wang 
22*69970765Sxiandong.wang 	disp_cfg_t = &disp_cfg[disp_cfg_count - 1];
23*69970765Sxiandong.wang 	mmio_clrbits_32(disp_cfg_t->base, disp_cfg_t->ns_mask);
24*69970765Sxiandong.wang 
25*69970765Sxiandong.wang 	return MTK_SIP_E_SUCCESS;
26*69970765Sxiandong.wang }
27*69970765Sxiandong.wang 
28*69970765Sxiandong.wang static u_register_t mtk_disp_handler(u_register_t x1, u_register_t x2,
29*69970765Sxiandong.wang 				     u_register_t x3, u_register_t x4,
30*69970765Sxiandong.wang 				     void *handle, struct smccc_res *smccc_ret)
31*69970765Sxiandong.wang {
32*69970765Sxiandong.wang 	uint32_t cmd_id = x1, mdl_id = x2, val = x3;
33*69970765Sxiandong.wang 	int ret = MTK_SIP_E_NOT_SUPPORTED;
34*69970765Sxiandong.wang 
35*69970765Sxiandong.wang 	(void)x4;
36*69970765Sxiandong.wang 	(void)handle;
37*69970765Sxiandong.wang 	(void)smccc_ret;
38*69970765Sxiandong.wang 
39*69970765Sxiandong.wang 	switch (cmd_id) {
40*69970765Sxiandong.wang 	case DISP_ATF_CMD_CONFIG_DISP_CONFIG:
41*69970765Sxiandong.wang 		ret = mtk_disp_disable_sec(mdl_id, val);
42*69970765Sxiandong.wang 		break;
43*69970765Sxiandong.wang 	default:
44*69970765Sxiandong.wang 		break;
45*69970765Sxiandong.wang 	}
46*69970765Sxiandong.wang 
47*69970765Sxiandong.wang 	return ret;
48*69970765Sxiandong.wang }
49*69970765Sxiandong.wang DECLARE_SMC_HANDLER(MTK_SIP_DISP_CONTROL, mtk_disp_handler);
50