xref: /linux/drivers/media/platform/rockchip/rkvdec/rkvdec-vdpu383-regs.h (revision f4b369c6fe0ceaba2da2daff8c9eb415f85926dd)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Rockchip Video Decoder VDPU383 driver registers description
4  *
5  * Copyright (C) 2025 Collabora, Ltd.
6  *  Detlev Casanova <detlev.casanova@collabora.com>
7  */
8 
9 #ifndef _RKVDEC_VDPU838_REGS_H_
10 #define _RKVDEC_VDPU838_REGS_H_
11 
12 #include <linux/types.h>
13 
14 #define VDPU383_OFFSET_COMMON_REGS		(8 * sizeof(u32))
15 #define VDPU383_OFFSET_CODEC_PARAMS_REGS	(64 * sizeof(u32))
16 #define VDPU383_OFFSET_COMMON_ADDR_REGS		(128 * sizeof(u32))
17 #define VDPU383_OFFSET_CODEC_ADDR_REGS		(168 * sizeof(u32))
18 #define VDPU383_OFFSET_POC_HIGHBIT_REGS		(200 * sizeof(u32))
19 
20 #define VDPU383_MODE_HEVC	0
21 #define VDPU383_MODE_H264	1
22 
23 #define VDPU383_TIMEOUT_1080p		(0xffffff)
24 #define VDPU383_TIMEOUT_4K		(0x2cfffff)
25 #define VDPU383_TIMEOUT_8K		(0x4ffffff)
26 #define VDPU383_TIMEOUT_MAX		(0xffffffff)
27 
28 #define VDPU383_LINK_TIMEOUT_THRESHOLD	0x54
29 
30 #define VDPU383_LINK_IP_ENABLE		0x58
31 #define VDPU383_IP_CRU_MODE		BIT(24)
32 
33 #define VDPU383_LINK_DEC_ENABLE		0x40
34 #define VDPU383_DEC_E_BIT		BIT(0)
35 
36 #define VDPU383_LINK_INT_EN		0x048
37 #define VDPU383_INT_EN_IRQ		BIT(0)
38 #define VDPU383_INT_EN_LINE_IRQ		BIT(1)
39 
40 #define VDPU383_LINK_STA_INT		0x04c
41 #define VDPU383_STA_INT_DEC_RDY_STA	BIT(0)
42 #define VDPU383_STA_INT_SOFTRESET_RDY	(BIT(10) | BIT(11))
43 #define VDPU383_STA_INT_ALL		0x3ff
44 
45 struct vdpu383_regs_common {
46 	u32 reg008_dec_mode;
47 
48 	struct {
49 		u32 fbc_e			: 1;
50 		u32 tile_e			: 1;
51 		u32 reserve0			: 2;
52 		u32 buf_empty_en		: 1;
53 		u32 scale_down_en		: 1;
54 		u32 reserve1			: 1;
55 		u32 pix_range_det_e		: 1;
56 		u32 av1_fgs_en			: 1;
57 		u32 reserve2			: 7;
58 		u32 line_irq_en			: 1;
59 		u32 out_cbcr_swap		: 1;
60 		u32 fbc_force_uncompress	: 1;
61 		u32 fbc_sparse_mode		: 1;
62 		u32 reserve3			: 12;
63 	} reg009_important_en;
64 
65 	struct {
66 		u32 strmd_auto_gating_e		: 1;
67 		u32 inter_auto_gating_e		: 1;
68 		u32 intra_auto_gating_e		: 1;
69 		u32 transd_auto_gating_e	: 1;
70 		u32 recon_auto_gating_e		: 1;
71 		u32 filterd_auto_gating_e	: 1;
72 		u32 bus_auto_gating_e		: 1;
73 		u32 ctrl_auto_gating_e		: 1;
74 		u32 rcb_auto_gating_e		: 1;
75 		u32 err_prc_auto_gating_e	: 1;
76 		u32 reserve0			: 22;
77 	} reg010_block_gating_en;
78 
79 	struct {
80 		u32 reserve0			: 9;
81 		u32 dec_timeout_dis		: 1;
82 		u32 reserve1			: 22;
83 	} reg011_cfg_para;
84 
85 	struct {
86 		u32 reserve0			: 7;
87 		u32 cache_hash_mask		: 25;
88 	} reg012_cache_hash_mask;
89 
90 	u32 reg013_core_timeout_threshold;
91 
92 	struct {
93 		u32 dec_line_irq_step		: 16;
94 		u32 dec_line_offset_y_st	: 16;
95 	} reg014_line_irq_ctrl;
96 
97 	struct {
98 		u32 rkvdec_frame_rdy_sta	: 1;
99 		u32 rkvdec_strm_error_sta	: 1;
100 		u32 rkvdec_core_timeout_sta	: 1;
101 		u32 rkvdec_ip_timeout_sta	: 1;
102 		u32 rkvdec_bus_error_sta	: 1;
103 		u32 rkvdec_buffer_empty_sta	: 1;
104 		u32 rkvdec_colmv_ref_error_sta	: 1;
105 		u32 rkvdec_error_spread_sta	: 1;
106 		u32 create_core_timeout_sta	: 1;
107 		u32 wlast_miss_match_sta	: 1;
108 		u32 rkvdec_core_rst_rdy_sta	: 1;
109 		u32 rkvdec_ip_rst_rdy_sta	: 1;
110 		u32 force_busidle_rdy_sta	: 1;
111 		u32 ltb_pause_rdy_sta		: 1;
112 		u32 ltb_end_flag		: 1;
113 		u32 unsupport_decmode_error_sta	: 1;
114 		u32 wmask_bits			: 15;
115 		u32 reserve0			: 1;
116 	} reg015_irq_sta;
117 
118 	struct {
119 		u32 error_proc_disable		: 1;
120 		u32 reserve0			: 7;
121 		u32 error_spread_disable	: 1;
122 		u32 reserve1			: 15;
123 		u32 roi_error_ctu_cal_en	: 1;
124 		u32 reserve2			: 7;
125 	} reg016_error_ctrl_set;
126 
127 	struct {
128 		u32 roi_x_ctu_offset_st		: 12;
129 		u32 reserve0			: 4;
130 		u32 roi_y_ctu_offset_st		: 12;
131 		u32 reserve1			: 4;
132 	} reg017_err_roi_ctu_offset_start;
133 
134 	struct {
135 		u32 roi_x_ctu_offset_end	: 12;
136 		u32 reserve0			: 4;
137 		u32 roi_y_ctu_offset_end	: 12;
138 		u32 reserve1			: 4;
139 	} reg018_err_roi_ctu_offset_end;
140 
141 	struct {
142 		u32 avs2_ref_error_field	: 1;
143 		u32 avs2_ref_error_topfield	: 1;
144 		u32 ref_error_topfield_used	: 1;
145 		u32 ref_error_botfield_used	: 1;
146 		u32 reserve0			: 28;
147 	} reg019_error_ref_info;
148 
149 	u32 reg020_cabac_error_en_lowbits;
150 	u32 reg021_cabac_error_en_highbits;
151 
152 	u32 reg022_reserved;
153 
154 	struct {
155 		u32 fill_y			: 10;
156 		u32 fill_u			: 10;
157 		u32 fill_v			: 10;
158 		u32 reserve0			: 2;
159 	} reg023_invalid_pixel_fill;
160 
161 	u32 reg024_026_reserved[3];
162 
163 	struct {
164 		u32 reserve0			: 4;
165 		u32 ctu_align_wr_en		: 1;
166 		u32 reserve1			: 27;
167 	} reg027_align_en;
168 
169 	struct {
170 		u32 axi_perf_work_e		: 1;
171 		u32 reserve0			: 2;
172 		u32 axi_cnt_type		: 1;
173 		u32 rd_latency_id		: 8;
174 		u32 reserve1			: 4;
175 		u32 rd_latency_thr		: 12;
176 		u32 reserve2			: 4;
177 	} reg028_debug_perf_latency_ctrl0;
178 
179 	struct {
180 		u32 addr_align_type		: 2;
181 		u32 ar_cnt_id_type		: 1;
182 		u32 aw_cnt_id_type		: 1;
183 		u32 ar_count_id			: 8;
184 		u32 reserve0			: 4;
185 		u32 aw_count_id			: 8;
186 		u32 rd_band_width_mode		: 1;
187 		u32 reserve1			: 7;
188 	} reg029_debug_perf_latency_ctrl1;
189 
190 	struct {
191 		u32 axi_wr_qos_level		: 4;
192 		u32 reserve0			: 4;
193 		u32 axi_wr_qos			: 4;
194 		u32 reserve1			: 4;
195 		u32 axi_rd_qos_level		: 4;
196 		u32 reserve2			: 4;
197 		u32 axi_rd_qos			: 4;
198 		u32 reserve3			: 4;
199 	} reg030_qos_ctrl;
200 };
201 
202 struct vdpu383_regs_common_addr {
203 	u32 reg128_strm_base;
204 	u32 reg129_rps_base;
205 	u32 reg130_cabactbl_base;
206 	u32 reg131_gbl_base;
207 	u32 reg132_scanlist_addr;
208 	u32 reg133_scale_down_base;
209 	u32 reg134_fgs_base;
210 	u32 reg135_139_reserved[5];
211 
212 	struct rcb_info {
213 		u32 offset;
214 		u32 size;
215 	} reg140_162_rcb_info[11];
216 };
217 
218 struct vdpu383_regs_h26x_addr {
219 	u32 reg168_decout_base;
220 	u32 reg169_error_ref_base;
221 	u32 reg170_185_ref_base[16];
222 	u32 reg186_191_reserved[6];
223 	u32 reg192_payload_st_cur_base;
224 	u32 reg193_fbc_payload_offset;
225 	u32 reg194_payload_st_error_ref_base;
226 	u32 reg195_210_payload_st_ref_base[16];
227 	u32 reg211_215_reserved[5];
228 	u32 reg216_colmv_cur_base;
229 	u32 reg217_232_colmv_ref_base[16];
230 };
231 
232 struct vdpu383_regs_h26x_params {
233 	u32 reg064_start_decoder;
234 	u32 reg065_strm_start_bit;
235 	u32 reg066_stream_len;
236 	u32 reg067_global_len;
237 	u32 reg068_hor_virstride;
238 	u32 reg069_raster_uv_hor_virstride;
239 	u32 reg070_y_virstride;
240 	u32 reg071_scl_ref_hor_virstride;
241 	u32 reg072_scl_ref_raster_uv_hor_virstride;
242 	u32 reg073_scl_ref_virstride;
243 	u32 reg074_fgs_ref_hor_virstride;
244 	u32 reg075_079_reserved[5];
245 	u32 reg080_error_ref_hor_virstride;
246 	u32 reg081_error_ref_raster_uv_hor_virstride;
247 	u32 reg082_error_ref_virstride;
248 	u32 reg083_ref0_hor_virstride;
249 	u32 reg084_ref0_raster_uv_hor_virstride;
250 	u32 reg085_ref0_virstride;
251 	u32 reg086_ref1_hor_virstride;
252 	u32 reg087_ref1_raster_uv_hor_virstride;
253 	u32 reg088_ref1_virstride;
254 	u32 reg089_ref2_hor_virstride;
255 	u32 reg090_ref2_raster_uv_hor_virstride;
256 	u32 reg091_ref2_virstride;
257 	u32 reg092_ref3_hor_virstride;
258 	u32 reg093_ref3_raster_uv_hor_virstride;
259 	u32 reg094_ref3_virstride;
260 	u32 reg095_ref4_hor_virstride;
261 	u32 reg096_ref4_raster_uv_hor_virstride;
262 	u32 reg097_ref4_virstride;
263 	u32 reg098_ref5_hor_virstride;
264 	u32 reg099_ref5_raster_uv_hor_virstride;
265 	u32 reg100_ref5_virstride;
266 	u32 reg101_ref6_hor_virstride;
267 	u32 reg102_ref6_raster_uv_hor_virstride;
268 	u32 reg103_ref6_virstride;
269 	u32 reg104_ref7_hor_virstride;
270 	u32 reg105_ref7_raster_uv_hor_virstride;
271 	u32 reg106_ref7_virstride;
272 };
273 
274 struct vdpu383_regs_h26x {
275 	struct vdpu383_regs_common		common;		/* 8-30 */
276 	struct vdpu383_regs_h26x_params		h26x_params;	/* 64-74, 80-106 */
277 	struct vdpu383_regs_common_addr		common_addr;	/* 128-134, 140-161 */
278 	struct vdpu383_regs_h26x_addr		h26x_addr;	/* 168-185, 192-210, 216-232 */
279 } __packed;
280 
281 #endif /* __RKVDEC_VDPU838_REGS_H__ */
282