109e694f1SMoudy Ho /* SPDX-License-Identifier: GPL-2.0-only */ 209e694f1SMoudy Ho /* 309e694f1SMoudy Ho * Copyright (c) 2023 MediaTek Inc. 409e694f1SMoudy Ho * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com> 509e694f1SMoudy Ho */ 609e694f1SMoudy Ho 709e694f1SMoudy Ho #ifndef __MDP_SM_MT8183_H__ 809e694f1SMoudy Ho #define __MDP_SM_MT8183_H__ 909e694f1SMoudy Ho 1009e694f1SMoudy Ho #include "mtk-mdp3-type.h" 1109e694f1SMoudy Ho 1209e694f1SMoudy Ho /* 1309e694f1SMoudy Ho * ISP-MDP generic output information 14*b4e52199SMoudy Ho * MD5 of the target SCP prebuild: 15*b4e52199SMoudy Ho * 2d995ddb5c3b0cf26e96d6a823481886 1609e694f1SMoudy Ho */ 1709e694f1SMoudy Ho 1809e694f1SMoudy Ho #define IMG_MAX_SUBFRAMES_8183 14 1909e694f1SMoudy Ho 2009e694f1SMoudy Ho struct img_comp_frame_8183 { 2109e694f1SMoudy Ho u32 output_disable:1; 2209e694f1SMoudy Ho u32 bypass:1; 2309e694f1SMoudy Ho u16 in_width; 2409e694f1SMoudy Ho u16 in_height; 2509e694f1SMoudy Ho u16 out_width; 2609e694f1SMoudy Ho u16 out_height; 2709e694f1SMoudy Ho struct img_crop crop; 2809e694f1SMoudy Ho u16 in_total_width; 2909e694f1SMoudy Ho u16 out_total_width; 3009e694f1SMoudy Ho } __packed; 3109e694f1SMoudy Ho 3209e694f1SMoudy Ho struct img_comp_subfrm_8183 { 3309e694f1SMoudy Ho u32 tile_disable:1; 3409e694f1SMoudy Ho struct img_region in; 3509e694f1SMoudy Ho struct img_region out; 3609e694f1SMoudy Ho struct img_offset luma; 3709e694f1SMoudy Ho struct img_offset chroma; 3809e694f1SMoudy Ho s16 out_vertical; /* Output vertical index */ 3909e694f1SMoudy Ho s16 out_horizontal; /* Output horizontal index */ 4009e694f1SMoudy Ho } __packed; 4109e694f1SMoudy Ho 4209e694f1SMoudy Ho struct mdp_rdma_subfrm_8183 { 4309e694f1SMoudy Ho u32 offset[IMG_MAX_PLANES]; 4409e694f1SMoudy Ho u32 offset_0_p; 4509e694f1SMoudy Ho u32 src; 4609e694f1SMoudy Ho u32 clip; 4709e694f1SMoudy Ho u32 clip_ofst; 4809e694f1SMoudy Ho } __packed; 4909e694f1SMoudy Ho 5009e694f1SMoudy Ho struct mdp_rdma_data_8183 { 5109e694f1SMoudy Ho u32 src_ctrl; 5209e694f1SMoudy Ho u32 control; 5309e694f1SMoudy Ho u32 iova[IMG_MAX_PLANES]; 5409e694f1SMoudy Ho u32 iova_end[IMG_MAX_PLANES]; 5509e694f1SMoudy Ho u32 mf_bkgd; 5609e694f1SMoudy Ho u32 mf_bkgd_in_pxl; 5709e694f1SMoudy Ho u32 sf_bkgd; 5809e694f1SMoudy Ho u32 ufo_dec_y; 5909e694f1SMoudy Ho u32 ufo_dec_c; 6009e694f1SMoudy Ho u32 transform; 6109e694f1SMoudy Ho struct mdp_rdma_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183]; 6209e694f1SMoudy Ho } __packed; 6309e694f1SMoudy Ho 6409e694f1SMoudy Ho struct mdp_rsz_subfrm_8183 { 6509e694f1SMoudy Ho u32 control2; 6609e694f1SMoudy Ho u32 src; 6709e694f1SMoudy Ho u32 clip; 6809e694f1SMoudy Ho } __packed; 6909e694f1SMoudy Ho 7009e694f1SMoudy Ho struct mdp_rsz_data_8183 { 7109e694f1SMoudy Ho u32 coeff_step_x; 7209e694f1SMoudy Ho u32 coeff_step_y; 7309e694f1SMoudy Ho u32 control1; 7409e694f1SMoudy Ho u32 control2; 7509e694f1SMoudy Ho struct mdp_rsz_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183]; 7609e694f1SMoudy Ho } __packed; 7709e694f1SMoudy Ho 7809e694f1SMoudy Ho struct mdp_wrot_subfrm_8183 { 7909e694f1SMoudy Ho u32 offset[IMG_MAX_PLANES]; 8009e694f1SMoudy Ho u32 src; 8109e694f1SMoudy Ho u32 clip; 8209e694f1SMoudy Ho u32 clip_ofst; 8309e694f1SMoudy Ho u32 main_buf; 8409e694f1SMoudy Ho } __packed; 8509e694f1SMoudy Ho 8609e694f1SMoudy Ho struct mdp_wrot_data_8183 { 8709e694f1SMoudy Ho u32 iova[IMG_MAX_PLANES]; 8809e694f1SMoudy Ho u32 control; 8909e694f1SMoudy Ho u32 stride[IMG_MAX_PLANES]; 9009e694f1SMoudy Ho u32 mat_ctrl; 9109e694f1SMoudy Ho u32 fifo_test; 9209e694f1SMoudy Ho u32 filter; 9309e694f1SMoudy Ho struct mdp_wrot_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183]; 9409e694f1SMoudy Ho } __packed; 9509e694f1SMoudy Ho 9609e694f1SMoudy Ho struct mdp_wdma_subfrm_8183 { 9709e694f1SMoudy Ho u32 offset[IMG_MAX_PLANES]; 9809e694f1SMoudy Ho u32 src; 9909e694f1SMoudy Ho u32 clip; 10009e694f1SMoudy Ho u32 clip_ofst; 10109e694f1SMoudy Ho } __packed; 10209e694f1SMoudy Ho 10309e694f1SMoudy Ho struct mdp_wdma_data_8183 { 10409e694f1SMoudy Ho u32 wdma_cfg; 10509e694f1SMoudy Ho u32 iova[IMG_MAX_PLANES]; 10609e694f1SMoudy Ho u32 w_in_byte; 10709e694f1SMoudy Ho u32 uv_stride; 10809e694f1SMoudy Ho struct mdp_wdma_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183]; 10909e694f1SMoudy Ho } __packed; 11009e694f1SMoudy Ho 11109e694f1SMoudy Ho struct isp_data_8183 { 11209e694f1SMoudy Ho u64 dl_flags; /* 1 << (enum mdp_comp_type) */ 11309e694f1SMoudy Ho u32 smxi_iova[4]; 11409e694f1SMoudy Ho u32 cq_idx; 11509e694f1SMoudy Ho u32 cq_iova; 11609e694f1SMoudy Ho u32 tpipe_iova[IMG_MAX_SUBFRAMES_8183]; 11709e694f1SMoudy Ho } __packed; 11809e694f1SMoudy Ho 11909e694f1SMoudy Ho struct img_compparam_8183 { 12009e694f1SMoudy Ho u16 type; /* enum mdp_comp_id */ 12109e694f1SMoudy Ho u16 id; /* engine alias_id */ 12209e694f1SMoudy Ho u32 input; 12309e694f1SMoudy Ho u32 outputs[IMG_MAX_HW_OUTPUTS]; 12409e694f1SMoudy Ho u32 num_outputs; 12509e694f1SMoudy Ho struct img_comp_frame_8183 frame; 12609e694f1SMoudy Ho struct img_comp_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183]; 12709e694f1SMoudy Ho u32 num_subfrms; 12809e694f1SMoudy Ho union { 12909e694f1SMoudy Ho struct mdp_rdma_data_8183 rdma; 13009e694f1SMoudy Ho struct mdp_rsz_data_8183 rsz; 13109e694f1SMoudy Ho struct mdp_wrot_data_8183 wrot; 13209e694f1SMoudy Ho struct mdp_wdma_data_8183 wdma; 13309e694f1SMoudy Ho struct isp_data_8183 isp; 13409e694f1SMoudy Ho }; 13509e694f1SMoudy Ho } __packed; 13609e694f1SMoudy Ho 13709e694f1SMoudy Ho struct img_config_8183 { 13809e694f1SMoudy Ho struct img_compparam_8183 components[IMG_MAX_COMPONENTS]; 13909e694f1SMoudy Ho u32 num_components; 14009e694f1SMoudy Ho struct img_mmsys_ctrl ctrls[IMG_MAX_SUBFRAMES_8183]; 14109e694f1SMoudy Ho u32 num_subfrms; 14209e694f1SMoudy Ho } __packed; 14309e694f1SMoudy Ho 14409e694f1SMoudy Ho #endif /* __MDP_SM_MT8183_H__ */ 145