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