xref: /linux/drivers/media/platform/mediatek/mdp3/mdp_sm_mt8183.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
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