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