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