xref: /rk3399_ARM-atf/plat/mediatek/drivers/disp/mtk_disp_smc.c (revision 6bd0f7a1927049f532149a174945548be027a08e)
169970765Sxiandong.wang /*
269970765Sxiandong.wang  * Copyright (c) 2025, MediaTek Inc. All rights reserved.
369970765Sxiandong.wang  *
469970765Sxiandong.wang  * SPDX-License-Identifier: BSD-3-Clause
569970765Sxiandong.wang  */
669970765Sxiandong.wang 
769970765Sxiandong.wang #include <stddef.h>
869970765Sxiandong.wang #include <mtk_disp_priv.h>
969970765Sxiandong.wang #include <mtk_sip_svc.h>
1069970765Sxiandong.wang 
11*0f462e65SXiandong Wang /* definition */
mtk_disp_disable_sec(uint32_t larb_id,uint32_t mmu_en_msk)1269970765Sxiandong.wang static int mtk_disp_disable_sec(uint32_t larb_id, uint32_t mmu_en_msk)
1369970765Sxiandong.wang {
1469970765Sxiandong.wang 	const struct mtk_disp_config *disp_cfg_t;
1569970765Sxiandong.wang 	uint32_t cfg_cnt;
1669970765Sxiandong.wang 
1769970765Sxiandong.wang 	for (cfg_cnt = 0; cfg_cnt < (disp_cfg_count - 1); cfg_cnt++) {
1869970765Sxiandong.wang 		disp_cfg_t = &disp_cfg[cfg_cnt];
1969970765Sxiandong.wang 		mmio_setbits_32(disp_cfg_t->base, disp_cfg_t->ns_mask);
2069970765Sxiandong.wang 	}
2169970765Sxiandong.wang 
2269970765Sxiandong.wang 	disp_cfg_t = &disp_cfg[disp_cfg_count - 1];
2369970765Sxiandong.wang 	mmio_clrbits_32(disp_cfg_t->base, disp_cfg_t->ns_mask);
2469970765Sxiandong.wang 
2569970765Sxiandong.wang 	return MTK_SIP_E_SUCCESS;
2669970765Sxiandong.wang }
2769970765Sxiandong.wang 
mtk_disp_handler(u_register_t x1,u_register_t x2,u_register_t x3,u_register_t x4,void * handle,struct smccc_res * smccc_ret)2869970765Sxiandong.wang static u_register_t mtk_disp_handler(u_register_t x1, u_register_t x2,
2969970765Sxiandong.wang 				     u_register_t x3, u_register_t x4,
3069970765Sxiandong.wang 				     void *handle, struct smccc_res *smccc_ret)
3169970765Sxiandong.wang {
3269970765Sxiandong.wang 	uint32_t cmd_id = x1, mdl_id = x2, val = x3;
3369970765Sxiandong.wang 	int ret = MTK_SIP_E_NOT_SUPPORTED;
3469970765Sxiandong.wang 
3569970765Sxiandong.wang 	(void)x4;
3669970765Sxiandong.wang 	(void)handle;
3769970765Sxiandong.wang 	(void)smccc_ret;
3869970765Sxiandong.wang 
3969970765Sxiandong.wang 	switch (cmd_id) {
4069970765Sxiandong.wang 	case DISP_ATF_CMD_CONFIG_DISP_CONFIG:
4169970765Sxiandong.wang 		ret = mtk_disp_disable_sec(mdl_id, val);
4269970765Sxiandong.wang 		break;
4369970765Sxiandong.wang 	default:
4469970765Sxiandong.wang 		break;
4569970765Sxiandong.wang 	}
4669970765Sxiandong.wang 
4769970765Sxiandong.wang 	return ret;
4869970765Sxiandong.wang }
4969970765Sxiandong.wang DECLARE_SMC_HANDLER(MTK_SIP_DISP_CONTROL, mtk_disp_handler);
50