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