GNU Linux-libre 6.7.9-gnu
[releases.git] / drivers / media / platform / mediatek / mdp3 / mdp_sm_mt8183.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2023 MediaTek Inc.
4  * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
5  */
6
7 #ifndef __MDP_SM_MT8183_H__
8 #define __MDP_SM_MT8183_H__
9
10 #include "mtk-mdp3-type.h"
11
12 /*
13  * ISP-MDP generic output information
14  * MD5 of the target SCP prebuild:
15  *     2d995ddb5c3b0cf26e96d6a823481886
16  */
17
18 #define IMG_MAX_SUBFRAMES_8183      14
19
20 struct img_comp_frame_8183 {
21         u32 output_disable:1;
22         u32 bypass:1;
23         u16 in_width;
24         u16 in_height;
25         u16 out_width;
26         u16 out_height;
27         struct img_crop crop;
28         u16 in_total_width;
29         u16 out_total_width;
30 } __packed;
31
32 struct img_comp_subfrm_8183 {
33         u32 tile_disable:1;
34         struct img_region in;
35         struct img_region out;
36         struct img_offset luma;
37         struct img_offset chroma;
38         s16 out_vertical; /* Output vertical index */
39         s16 out_horizontal; /* Output horizontal index */
40 } __packed;
41
42 struct mdp_rdma_subfrm_8183 {
43         u32 offset[IMG_MAX_PLANES];
44         u32 offset_0_p;
45         u32 src;
46         u32 clip;
47         u32 clip_ofst;
48 } __packed;
49
50 struct mdp_rdma_data_8183 {
51         u32 src_ctrl;
52         u32 control;
53         u32 iova[IMG_MAX_PLANES];
54         u32 iova_end[IMG_MAX_PLANES];
55         u32 mf_bkgd;
56         u32 mf_bkgd_in_pxl;
57         u32 sf_bkgd;
58         u32 ufo_dec_y;
59         u32 ufo_dec_c;
60         u32 transform;
61         struct mdp_rdma_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183];
62 } __packed;
63
64 struct mdp_rsz_subfrm_8183 {
65         u32 control2;
66         u32 src;
67         u32 clip;
68 } __packed;
69
70 struct mdp_rsz_data_8183 {
71         u32 coeff_step_x;
72         u32 coeff_step_y;
73         u32 control1;
74         u32 control2;
75         struct mdp_rsz_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183];
76 } __packed;
77
78 struct mdp_wrot_subfrm_8183 {
79         u32 offset[IMG_MAX_PLANES];
80         u32 src;
81         u32 clip;
82         u32 clip_ofst;
83         u32 main_buf;
84 } __packed;
85
86 struct mdp_wrot_data_8183 {
87         u32 iova[IMG_MAX_PLANES];
88         u32 control;
89         u32 stride[IMG_MAX_PLANES];
90         u32 mat_ctrl;
91         u32 fifo_test;
92         u32 filter;
93         struct mdp_wrot_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183];
94 } __packed;
95
96 struct mdp_wdma_subfrm_8183 {
97         u32 offset[IMG_MAX_PLANES];
98         u32 src;
99         u32 clip;
100         u32 clip_ofst;
101 } __packed;
102
103 struct mdp_wdma_data_8183 {
104         u32 wdma_cfg;
105         u32 iova[IMG_MAX_PLANES];
106         u32 w_in_byte;
107         u32 uv_stride;
108         struct mdp_wdma_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183];
109 } __packed;
110
111 struct isp_data_8183 {
112         u64 dl_flags; /* 1 << (enum mdp_comp_type) */
113         u32 smxi_iova[4];
114         u32 cq_idx;
115         u32 cq_iova;
116         u32 tpipe_iova[IMG_MAX_SUBFRAMES_8183];
117 } __packed;
118
119 struct img_compparam_8183 {
120         u16 type; /* enum mdp_comp_id */
121         u16 id; /* engine alias_id */
122         u32 input;
123         u32 outputs[IMG_MAX_HW_OUTPUTS];
124         u32 num_outputs;
125         struct img_comp_frame_8183 frame;
126         struct img_comp_subfrm_8183 subfrms[IMG_MAX_SUBFRAMES_8183];
127         u32 num_subfrms;
128         union {
129                 struct mdp_rdma_data_8183 rdma;
130                 struct mdp_rsz_data_8183 rsz;
131                 struct mdp_wrot_data_8183 wrot;
132                 struct mdp_wdma_data_8183 wdma;
133                 struct isp_data_8183 isp;
134         };
135 } __packed;
136
137 struct img_config_8183 {
138         struct img_compparam_8183 components[IMG_MAX_COMPONENTS];
139         u32 num_components;
140         struct img_mmsys_ctrl ctrls[IMG_MAX_SUBFRAMES_8183];
141         u32 num_subfrms;
142 } __packed;
143
144 #endif  /* __MDP_SM_MT8183_H__ */