1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2022 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka #ifndef __VDPU382_COM_H__ 18*437bfbebSnyanmisaka #define __VDPU382_COM_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "mpp_device.h" 21*437bfbebSnyanmisaka #include "mpp_buf_slot.h" 22*437bfbebSnyanmisaka #include "vdpu382.h" 23*437bfbebSnyanmisaka 24*437bfbebSnyanmisaka #define OFFSET_COMMON_REGS (8 * sizeof(RK_U32)) 25*437bfbebSnyanmisaka #define OFFSET_CODEC_PARAMS_REGS (64 * sizeof(RK_U32)) 26*437bfbebSnyanmisaka #define OFFSET_COMMON_ADDR_REGS (128 * sizeof(RK_U32)) 27*437bfbebSnyanmisaka #define OFFSET_CODEC_ADDR_REGS (160 * sizeof(RK_U32)) 28*437bfbebSnyanmisaka #define OFFSET_POC_HIGHBIT_REGS (200 * sizeof(RK_U32)) 29*437bfbebSnyanmisaka #define OFFSET_INTERRUPT_REGS (224 * sizeof(RK_U32)) 30*437bfbebSnyanmisaka #define OFFSET_STATISTIC_REGS (256 * sizeof(RK_U32)) 31*437bfbebSnyanmisaka 32*437bfbebSnyanmisaka #define RCB_ALLINE_SIZE (64) 33*437bfbebSnyanmisaka 34*437bfbebSnyanmisaka #define MPP_RCB_BYTES(bits) MPP_ALIGN((bits + 7) / 8, RCB_ALLINE_SIZE) 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka typedef enum Vdpu382_RCB_TYPE_E { 37*437bfbebSnyanmisaka RCB_DBLK_ROW, 38*437bfbebSnyanmisaka RCB_INTRA_ROW, 39*437bfbebSnyanmisaka RCB_TRANSD_ROW, 40*437bfbebSnyanmisaka RCB_STRMD_ROW, 41*437bfbebSnyanmisaka RCB_INTER_ROW, 42*437bfbebSnyanmisaka RCB_SAO_ROW, 43*437bfbebSnyanmisaka RCB_FBC_ROW, 44*437bfbebSnyanmisaka RCB_TRANSD_COL, 45*437bfbebSnyanmisaka RCB_INTER_COL, 46*437bfbebSnyanmisaka RCB_FILT_COL, 47*437bfbebSnyanmisaka 48*437bfbebSnyanmisaka RCB_BUF_COUNT, 49*437bfbebSnyanmisaka } Vdpu382RcbType_e; 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka typedef enum Vdpu382_RCB_SET_MODE_E { 52*437bfbebSnyanmisaka RCB_SET_BY_SIZE_SORT_MODE, 53*437bfbebSnyanmisaka RCB_SET_BY_PRIORITY_MODE, 54*437bfbebSnyanmisaka } Vdpu382RcbSetMode_e; 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka /* base: OFFSET_COMMON_REGS */ 57*437bfbebSnyanmisaka typedef struct Vdpu382RegCommon_t { 58*437bfbebSnyanmisaka struct SWREG8_IN_OUT { 59*437bfbebSnyanmisaka RK_U32 in_endian : 1; 60*437bfbebSnyanmisaka RK_U32 in_swap32_e : 1; 61*437bfbebSnyanmisaka RK_U32 in_swap64_e : 1; 62*437bfbebSnyanmisaka RK_U32 str_endian : 1; 63*437bfbebSnyanmisaka RK_U32 str_swap32_e : 1; 64*437bfbebSnyanmisaka RK_U32 str_swap64_e : 1; 65*437bfbebSnyanmisaka RK_U32 out_endian : 1; 66*437bfbebSnyanmisaka RK_U32 out_swap32_e : 1; 67*437bfbebSnyanmisaka RK_U32 out_cbcr_swap : 1; 68*437bfbebSnyanmisaka RK_U32 out_swap64_e : 1; 69*437bfbebSnyanmisaka RK_U32 reserve : 22; 70*437bfbebSnyanmisaka } reg008; 71*437bfbebSnyanmisaka 72*437bfbebSnyanmisaka struct SWREG9_DEC_MODE { 73*437bfbebSnyanmisaka RK_U32 dec_mode : 10; 74*437bfbebSnyanmisaka RK_U32 reserve : 22; 75*437bfbebSnyanmisaka } reg009; 76*437bfbebSnyanmisaka 77*437bfbebSnyanmisaka struct SWREG10_DEC_E { 78*437bfbebSnyanmisaka RK_U32 dec_e : 1; 79*437bfbebSnyanmisaka RK_U32 reserve : 31; 80*437bfbebSnyanmisaka } reg010; 81*437bfbebSnyanmisaka 82*437bfbebSnyanmisaka struct SWREG11_IMPORTANT_EN { 83*437bfbebSnyanmisaka RK_U32 reserver : 1; 84*437bfbebSnyanmisaka RK_U32 dec_clkgate_e : 1; 85*437bfbebSnyanmisaka RK_U32 reserve1 : 2; 86*437bfbebSnyanmisaka 87*437bfbebSnyanmisaka RK_U32 dec_irq_dis : 1; 88*437bfbebSnyanmisaka RK_U32 dec_line_irq_dis : 1; //change to reg205[9] 89*437bfbebSnyanmisaka RK_U32 buf_empty_en : 1; 90*437bfbebSnyanmisaka RK_U32 reserve2 : 1; 91*437bfbebSnyanmisaka 92*437bfbebSnyanmisaka RK_U32 dec_line_irq_en : 1; 93*437bfbebSnyanmisaka RK_U32 reserve3 : 1; 94*437bfbebSnyanmisaka RK_U32 dec_e_rewrite_valid : 1; 95*437bfbebSnyanmisaka RK_U32 reserve4 : 9; 96*437bfbebSnyanmisaka 97*437bfbebSnyanmisaka RK_U32 softrst_en_p : 1; 98*437bfbebSnyanmisaka RK_U32 reserve5 : 1; //change to reg205[0] 99*437bfbebSnyanmisaka RK_U32 err_head_fill_e : 1; 100*437bfbebSnyanmisaka RK_U32 err_colmv_fill_e : 1; 101*437bfbebSnyanmisaka RK_U32 pix_range_detection_e : 1; 102*437bfbebSnyanmisaka RK_U32 reserve6 : 3; 103*437bfbebSnyanmisaka RK_U32 wlast_match_fail : 1; 104*437bfbebSnyanmisaka RK_U32 mmu_wlast_match_fail : 1; 105*437bfbebSnyanmisaka RK_U32 reserve7 : 2; 106*437bfbebSnyanmisaka } reg011; 107*437bfbebSnyanmisaka 108*437bfbebSnyanmisaka struct SWREG12_SENCODARY_EN { 109*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 110*437bfbebSnyanmisaka RK_U32 colmv_compress_en : 1; 111*437bfbebSnyanmisaka RK_U32 fbc_e : 1; 112*437bfbebSnyanmisaka RK_U32 tile_e : 1; 113*437bfbebSnyanmisaka 114*437bfbebSnyanmisaka RK_U32 reserve1 : 1; 115*437bfbebSnyanmisaka RK_U32 error_info_en : 1; 116*437bfbebSnyanmisaka RK_U32 info_collect_en : 1; 117*437bfbebSnyanmisaka RK_U32 reserve2 : 1; //change to reg205[4] 118*437bfbebSnyanmisaka 119*437bfbebSnyanmisaka RK_U32 scanlist_addr_valid_en : 1; 120*437bfbebSnyanmisaka RK_U32 scale_down_en : 1; 121*437bfbebSnyanmisaka RK_U32 reserve3 : 22; 122*437bfbebSnyanmisaka } reg012; 123*437bfbebSnyanmisaka 124*437bfbebSnyanmisaka struct SWREG13_EN_MODE_SET { 125*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 126*437bfbebSnyanmisaka RK_U32 req_timeout_rst_sel : 1; 127*437bfbebSnyanmisaka RK_U32 reserve1 : 1; 128*437bfbebSnyanmisaka RK_U32 dec_commonirq_mode : 1; 129*437bfbebSnyanmisaka RK_U32 reserve2 : 2; 130*437bfbebSnyanmisaka RK_U32 stmerror_waitdecfifo_empty : 1; 131*437bfbebSnyanmisaka RK_U32 reserve3 : 1; 132*437bfbebSnyanmisaka RK_U32 strmd_zero_rm_en : 1; 133*437bfbebSnyanmisaka RK_U32 reserve4 : 3; 134*437bfbebSnyanmisaka RK_U32 allow_not_wr_unref_bframe : 1; 135*437bfbebSnyanmisaka RK_U32 fbc_output_wr_disable : 1; 136*437bfbebSnyanmisaka 137*437bfbebSnyanmisaka RK_U32 reserve5 : 4; 138*437bfbebSnyanmisaka RK_U32 h26x_error_mode : 1; 139*437bfbebSnyanmisaka RK_U32 reserve6 : 5; 140*437bfbebSnyanmisaka RK_U32 cur_pic_is_idr : 1; 141*437bfbebSnyanmisaka RK_U32 reserve8 : 6; //change to reg205[5] 142*437bfbebSnyanmisaka RK_U32 filter_outbuf_mode : 1; 143*437bfbebSnyanmisaka 144*437bfbebSnyanmisaka } reg013; 145*437bfbebSnyanmisaka 146*437bfbebSnyanmisaka struct SWREG14_FBC_PARAM_SET { 147*437bfbebSnyanmisaka RK_U32 fbc_force_uncompress : 1; 148*437bfbebSnyanmisaka 149*437bfbebSnyanmisaka RK_U32 reserve0 : 2; 150*437bfbebSnyanmisaka RK_U32 allow_16x8_cp_flag : 1; 151*437bfbebSnyanmisaka RK_U32 reserve1 : 2; 152*437bfbebSnyanmisaka 153*437bfbebSnyanmisaka RK_U32 fbc_h264_exten_4or8_flag: 1; 154*437bfbebSnyanmisaka RK_U32 reserve2 : 25; 155*437bfbebSnyanmisaka } reg014; 156*437bfbebSnyanmisaka 157*437bfbebSnyanmisaka struct SWREG15_STREAM_PARAM_SET { 158*437bfbebSnyanmisaka RK_U32 rlc_mode_direct_write : 1; 159*437bfbebSnyanmisaka RK_U32 rlc_mode : 1; 160*437bfbebSnyanmisaka RK_U32 strmd_ofifo_perf_opt_en : 1; 161*437bfbebSnyanmisaka RK_U32 reserve0 : 2; 162*437bfbebSnyanmisaka 163*437bfbebSnyanmisaka RK_U32 strm_start_bit : 7; 164*437bfbebSnyanmisaka RK_U32 reserve1 : 20; 165*437bfbebSnyanmisaka } reg015; 166*437bfbebSnyanmisaka 167*437bfbebSnyanmisaka RK_U32 reg016_str_len; 168*437bfbebSnyanmisaka 169*437bfbebSnyanmisaka struct SWREG17_SLICE_NUMBER { 170*437bfbebSnyanmisaka RK_U32 slice_num : 25; 171*437bfbebSnyanmisaka RK_U32 reserve : 7; 172*437bfbebSnyanmisaka } reg017; 173*437bfbebSnyanmisaka 174*437bfbebSnyanmisaka struct SWREG18_Y_HOR_STRIDE { 175*437bfbebSnyanmisaka RK_U32 y_hor_virstride : 16; 176*437bfbebSnyanmisaka RK_U32 reserve : 16; 177*437bfbebSnyanmisaka } reg018; 178*437bfbebSnyanmisaka 179*437bfbebSnyanmisaka struct SWREG19_UV_HOR_STRIDE { 180*437bfbebSnyanmisaka RK_U32 uv_hor_virstride : 16; 181*437bfbebSnyanmisaka RK_U32 reserve : 16; 182*437bfbebSnyanmisaka } reg019; 183*437bfbebSnyanmisaka 184*437bfbebSnyanmisaka union { 185*437bfbebSnyanmisaka struct SWREG20_Y_STRIDE { 186*437bfbebSnyanmisaka RK_U32 y_virstride : 28; 187*437bfbebSnyanmisaka RK_U32 reserve : 4; 188*437bfbebSnyanmisaka } reg020_y_virstride; 189*437bfbebSnyanmisaka 190*437bfbebSnyanmisaka struct SWREG20_FBC_PAYLOAD_OFFSET { 191*437bfbebSnyanmisaka RK_U32 reserve : 4; 192*437bfbebSnyanmisaka RK_U32 payload_st_offset : 28; 193*437bfbebSnyanmisaka } reg020_fbc_payload_off; 194*437bfbebSnyanmisaka }; 195*437bfbebSnyanmisaka 196*437bfbebSnyanmisaka 197*437bfbebSnyanmisaka struct SWREG21_ERROR_CTRL_SET { 198*437bfbebSnyanmisaka RK_U32 inter_error_prc_mode : 1; 199*437bfbebSnyanmisaka RK_U32 error_intra_mode : 1; 200*437bfbebSnyanmisaka RK_U32 error_deb_en : 1; 201*437bfbebSnyanmisaka RK_U32 picidx_replace : 5; 202*437bfbebSnyanmisaka RK_U32 error_spread_e : 1; 203*437bfbebSnyanmisaka RK_U32 : 3; 204*437bfbebSnyanmisaka RK_U32 error_inter_pred_cross_slice : 1; 205*437bfbebSnyanmisaka RK_U32 reserve0 : 11; 206*437bfbebSnyanmisaka 207*437bfbebSnyanmisaka RK_U32 roi_error_ctu_cal_en : 1; 208*437bfbebSnyanmisaka RK_U32 reserve1 : 7; 209*437bfbebSnyanmisaka } reg021; 210*437bfbebSnyanmisaka 211*437bfbebSnyanmisaka struct SWREG22_ERR_ROI_CTU_OFFSET_START { 212*437bfbebSnyanmisaka RK_U32 roi_x_ctu_offset_st : 12; 213*437bfbebSnyanmisaka RK_U32 reserve0 : 4; 214*437bfbebSnyanmisaka RK_U32 roi_y_ctu_offset_st : 12; 215*437bfbebSnyanmisaka RK_U32 reserve1 : 4; 216*437bfbebSnyanmisaka } reg022; 217*437bfbebSnyanmisaka 218*437bfbebSnyanmisaka struct SWREG23_ERR_ROI_CTU_OFFSET_END { 219*437bfbebSnyanmisaka RK_U32 roi_x_ctu_offset_end : 12; 220*437bfbebSnyanmisaka RK_U32 reserve0 : 4; 221*437bfbebSnyanmisaka RK_U32 roi_y_ctu_offset_end : 12; 222*437bfbebSnyanmisaka RK_U32 reserve1 : 4; 223*437bfbebSnyanmisaka } reg023; 224*437bfbebSnyanmisaka 225*437bfbebSnyanmisaka struct SWREG24_CABAC_ERROR_EN_LOWBITS { 226*437bfbebSnyanmisaka RK_U32 cabac_err_en_lowbits : 32; 227*437bfbebSnyanmisaka } reg024; 228*437bfbebSnyanmisaka 229*437bfbebSnyanmisaka struct SWREG25_CABAC_ERROR_EN_HIGHBITS { 230*437bfbebSnyanmisaka RK_U32 cabac_err_en_highbits : 30; 231*437bfbebSnyanmisaka RK_U32 reserve : 2; 232*437bfbebSnyanmisaka } reg025; 233*437bfbebSnyanmisaka 234*437bfbebSnyanmisaka struct SWREG26_BLOCK_GATING_EN { 235*437bfbebSnyanmisaka RK_U32 inter_auto_gating_e : 1; 236*437bfbebSnyanmisaka RK_U32 filterd_auto_gating_e : 1; 237*437bfbebSnyanmisaka RK_U32 strmd_auto_gating_e : 1; 238*437bfbebSnyanmisaka RK_U32 mcp_auto_gating_e : 1; 239*437bfbebSnyanmisaka RK_U32 busifd_auto_gating_e : 1; 240*437bfbebSnyanmisaka RK_U32 reserved : 3; 241*437bfbebSnyanmisaka RK_U32 dec_ctrl_auto_gating_e : 1; 242*437bfbebSnyanmisaka RK_U32 intra_auto_gating_e : 1; 243*437bfbebSnyanmisaka RK_U32 mc_auto_gating_e : 1; 244*437bfbebSnyanmisaka RK_U32 transd_auto_gating_e : 1; 245*437bfbebSnyanmisaka RK_U32 reserved1 : 4; 246*437bfbebSnyanmisaka RK_U32 sram_auto_gating_e : 1; 247*437bfbebSnyanmisaka RK_U32 cru_auto_gating_e : 1; 248*437bfbebSnyanmisaka RK_U32 reserved2 : 13; 249*437bfbebSnyanmisaka RK_U32 reg_cfg_gating_en : 1; 250*437bfbebSnyanmisaka } reg026; 251*437bfbebSnyanmisaka 252*437bfbebSnyanmisaka /* NOTE: reg027 ~ reg032 are added in vdpu38x at rk3588 */ 253*437bfbebSnyanmisaka struct SW027_CORE_SAFE_PIXELS { 254*437bfbebSnyanmisaka // colmv and recon report coord x safe pixels 255*437bfbebSnyanmisaka RK_U32 core_safe_x_pixels : 16; 256*437bfbebSnyanmisaka // colmv and recon report coord y safe pixels 257*437bfbebSnyanmisaka RK_U32 core_safe_y_pixels : 16; 258*437bfbebSnyanmisaka } reg027; 259*437bfbebSnyanmisaka 260*437bfbebSnyanmisaka struct SWREG28_MULTIPLY_CORE_CTRL { 261*437bfbebSnyanmisaka RK_U32 swreg_vp9_wr_prob_idx : 3; 262*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 263*437bfbebSnyanmisaka RK_U32 swreg_vp9_rd_prob_idx : 3; 264*437bfbebSnyanmisaka RK_U32 reserve1 : 1; 265*437bfbebSnyanmisaka 266*437bfbebSnyanmisaka RK_U32 swreg_ref_req_advance_flag : 1; 267*437bfbebSnyanmisaka RK_U32 sw_colmv_req_advance_flag : 1; 268*437bfbebSnyanmisaka RK_U32 sw_poc_only_highbit_flag : 1; 269*437bfbebSnyanmisaka RK_U32 sw_poc_arb_flag : 1; 270*437bfbebSnyanmisaka 271*437bfbebSnyanmisaka RK_U32 reserve2 : 4; 272*437bfbebSnyanmisaka RK_U32 sw_film_idx : 10; 273*437bfbebSnyanmisaka RK_U32 reserve3 : 2; 274*437bfbebSnyanmisaka RK_U32 sw_pu_req_mismatch_dis : 1; 275*437bfbebSnyanmisaka RK_U32 sw_colmv_req_mismatch_dis : 1; 276*437bfbebSnyanmisaka RK_U32 reserve4 : 2; 277*437bfbebSnyanmisaka } reg028; 278*437bfbebSnyanmisaka 279*437bfbebSnyanmisaka struct SWREG29_SCALE_DOWN_CTRL { 280*437bfbebSnyanmisaka RK_U32 scale_down_y_wratio : 5; 281*437bfbebSnyanmisaka RK_U32 reserve0 : 3; 282*437bfbebSnyanmisaka RK_U32 scale_down_y_hratio : 5; 283*437bfbebSnyanmisaka RK_U32 reserve1 : 3; 284*437bfbebSnyanmisaka RK_U32 scale_down_c_wratio : 5; 285*437bfbebSnyanmisaka RK_U32 reserve2 : 3; 286*437bfbebSnyanmisaka RK_U32 scale_down_c_hratio : 5; 287*437bfbebSnyanmisaka RK_U32 reserve3 : 1; 288*437bfbebSnyanmisaka RK_U32 scale_down_roi_mode : 1; 289*437bfbebSnyanmisaka RK_U32 scale_down_tile_mode : 1; 290*437bfbebSnyanmisaka } reg029; 291*437bfbebSnyanmisaka 292*437bfbebSnyanmisaka struct SW032_Y_SCALE_DOWN_TILE8x8_HOR_STRIDE { 293*437bfbebSnyanmisaka RK_U32 y_scale_down_hor_stride : 20; 294*437bfbebSnyanmisaka RK_U32 : 12; 295*437bfbebSnyanmisaka } reg030; 296*437bfbebSnyanmisaka 297*437bfbebSnyanmisaka struct SW031_UV_SCALE_DOWN_TILE8x8_HOR_STRIDE { 298*437bfbebSnyanmisaka RK_U32 uv_scale_down_hor_stride : 20; 299*437bfbebSnyanmisaka RK_U32 : 12; 300*437bfbebSnyanmisaka } reg031; 301*437bfbebSnyanmisaka 302*437bfbebSnyanmisaka /* NOTE: reg027 ~ reg032 are added in vdpu38x at rk3588 */ 303*437bfbebSnyanmisaka /* NOTE: timeout must be config in vdpu38x */ 304*437bfbebSnyanmisaka RK_U32 reg032_timeout_threshold; 305*437bfbebSnyanmisaka 306*437bfbebSnyanmisaka struct SW033_LINE_IRQ_CTRL { 307*437bfbebSnyanmisaka RK_U32 dec_line_irq_step : 12; 308*437bfbebSnyanmisaka RK_U32 dec_line_offset_y_st : 12; 309*437bfbebSnyanmisaka RK_U32 buf_empty_timeout_threshold : 8; 310*437bfbebSnyanmisaka } reg033; 311*437bfbebSnyanmisaka 312*437bfbebSnyanmisaka /* 0x00000088 reg34 */ 313*437bfbebSnyanmisaka struct SW034_SCALE_DOWN_ROI_OFFSET { 314*437bfbebSnyanmisaka RK_U32 scale_down_roi_st_offsetx : 16; 315*437bfbebSnyanmisaka RK_U32 scale_down_roi_st_offsety : 16; 316*437bfbebSnyanmisaka } reg034; 317*437bfbebSnyanmisaka 318*437bfbebSnyanmisaka /* 0x0000008c reg35 */ 319*437bfbebSnyanmisaka struct SW035_SCALE_DOWN_ROI_OUT_SIZE { 320*437bfbebSnyanmisaka RK_U32 scale_down_roi_out_width : 16; 321*437bfbebSnyanmisaka RK_U32 scale_down_roi_out_height : 16; 322*437bfbebSnyanmisaka } reg035; 323*437bfbebSnyanmisaka 324*437bfbebSnyanmisaka } Vdpu382RegCommon; 325*437bfbebSnyanmisaka 326*437bfbebSnyanmisaka /* base: OFFSET_COMMON_ADDR_REGS */ 327*437bfbebSnyanmisaka typedef struct Vdpu382RegCommonAddr_t { 328*437bfbebSnyanmisaka /* offset 128 */ 329*437bfbebSnyanmisaka RK_U32 reg128_rlc_base; 330*437bfbebSnyanmisaka 331*437bfbebSnyanmisaka RK_U32 reg129_rlcwrite_base; 332*437bfbebSnyanmisaka 333*437bfbebSnyanmisaka RK_U32 reg130_decout_base; 334*437bfbebSnyanmisaka 335*437bfbebSnyanmisaka RK_U32 reg131_colmv_cur_base; 336*437bfbebSnyanmisaka 337*437bfbebSnyanmisaka RK_U32 reg132_error_ref_base; 338*437bfbebSnyanmisaka 339*437bfbebSnyanmisaka RK_U32 reg133_rcb_intra_base; 340*437bfbebSnyanmisaka 341*437bfbebSnyanmisaka RK_U32 reg134_rcb_transd_row_base; 342*437bfbebSnyanmisaka 343*437bfbebSnyanmisaka RK_U32 reg135_rcb_transd_col_base; 344*437bfbebSnyanmisaka 345*437bfbebSnyanmisaka RK_U32 reg136_rcb_streamd_row_base; 346*437bfbebSnyanmisaka 347*437bfbebSnyanmisaka RK_U32 reg137_rcb_inter_row_base; 348*437bfbebSnyanmisaka 349*437bfbebSnyanmisaka RK_U32 reg138_rcb_inter_col_base; 350*437bfbebSnyanmisaka 351*437bfbebSnyanmisaka RK_U32 reg139_rcb_dblk_base; 352*437bfbebSnyanmisaka 353*437bfbebSnyanmisaka RK_U32 reg140_rcb_sao_base; 354*437bfbebSnyanmisaka 355*437bfbebSnyanmisaka RK_U32 reg141_rcb_fbc_base; 356*437bfbebSnyanmisaka 357*437bfbebSnyanmisaka RK_U32 reg142_rcb_filter_col_base; 358*437bfbebSnyanmisaka 359*437bfbebSnyanmisaka RK_U32 reg143_rcb_base; 360*437bfbebSnyanmisaka } Vdpu382RegCommonAddr; 361*437bfbebSnyanmisaka 362*437bfbebSnyanmisaka /* base: OFFSET_COMMON_ADDR_REGS */ 363*437bfbebSnyanmisaka typedef struct Vdpu382RegIrqStatus_t { 364*437bfbebSnyanmisaka struct SWREG224_STA_INT { 365*437bfbebSnyanmisaka RK_U32 dec_irq : 1; 366*437bfbebSnyanmisaka RK_U32 dec_irq_raw : 1; 367*437bfbebSnyanmisaka 368*437bfbebSnyanmisaka RK_U32 dec_rdy_sta : 1; 369*437bfbebSnyanmisaka RK_U32 dec_bus_sta : 1; 370*437bfbebSnyanmisaka RK_U32 dec_error_sta : 1; 371*437bfbebSnyanmisaka RK_U32 dec_timeout_sta : 1; 372*437bfbebSnyanmisaka RK_U32 buf_empty_sta : 1; 373*437bfbebSnyanmisaka RK_U32 colmv_ref_error_sta : 1; 374*437bfbebSnyanmisaka RK_U32 cabu_end_sta : 1; 375*437bfbebSnyanmisaka 376*437bfbebSnyanmisaka RK_U32 softreset_rdy : 1; 377*437bfbebSnyanmisaka 378*437bfbebSnyanmisaka RK_U32 dec_line_irq : 1; 379*437bfbebSnyanmisaka RK_U32 dec_line_irq_raw : 1; 380*437bfbebSnyanmisaka RK_U32 ltb_pause_sta : 1; 381*437bfbebSnyanmisaka RK_U32 mmureset_rdy : 1; 382*437bfbebSnyanmisaka RK_U32 ltb_end_sta : 1; 383*437bfbebSnyanmisaka 384*437bfbebSnyanmisaka RK_U32 reserve : 17; 385*437bfbebSnyanmisaka } reg224; 386*437bfbebSnyanmisaka 387*437bfbebSnyanmisaka struct SWREG225_STA_SLICE_BYTE_OFFSET { 388*437bfbebSnyanmisaka RK_U32 strmd_slice_byte_offset : 32; 389*437bfbebSnyanmisaka } reg225; 390*437bfbebSnyanmisaka 391*437bfbebSnyanmisaka struct SWREG226_STA_CABAC_ERROR_STATUS { 392*437bfbebSnyanmisaka RK_U32 all_frame_error_flag : 1; 393*437bfbebSnyanmisaka RK_U32 strmd_detect_error_flag : 3; 394*437bfbebSnyanmisaka RK_U32 strmd_error_status : 28; 395*437bfbebSnyanmisaka } reg226; 396*437bfbebSnyanmisaka 397*437bfbebSnyanmisaka struct SWREG227_STA_COLMV_ERROR_REF_PICIDX { 398*437bfbebSnyanmisaka RK_U32 colmv_error_ref_picidx : 4; 399*437bfbebSnyanmisaka RK_U32 reserve : 28; 400*437bfbebSnyanmisaka } reg227; 401*437bfbebSnyanmisaka 402*437bfbebSnyanmisaka struct SWREG228_STA_CABAC_ERROR_CTU_OFFSET { 403*437bfbebSnyanmisaka RK_U32 cabac_error_ctu_offset_x : 12; 404*437bfbebSnyanmisaka RK_U32 : 4; 405*437bfbebSnyanmisaka RK_U32 cabac_error_ctu_offset_y : 12; 406*437bfbebSnyanmisaka RK_U32 : 4; 407*437bfbebSnyanmisaka } reg228; 408*437bfbebSnyanmisaka 409*437bfbebSnyanmisaka struct SWREG229_STA_AXI_WCH_FINISH_FLAG { 410*437bfbebSnyanmisaka RK_U32 axi_wch_finish_flag : 17; 411*437bfbebSnyanmisaka RK_U32 reserved : 15; 412*437bfbebSnyanmisaka } reg229; 413*437bfbebSnyanmisaka 414*437bfbebSnyanmisaka struct SWREG230_STA_SLICE_DEC_NUM { 415*437bfbebSnyanmisaka RK_U32 slicedec_num : 25; 416*437bfbebSnyanmisaka RK_U32 reserve : 7; 417*437bfbebSnyanmisaka } reg230; 418*437bfbebSnyanmisaka 419*437bfbebSnyanmisaka struct SWREG231_STA_FRAME_ERROR_CTU_NUM { 420*437bfbebSnyanmisaka RK_U32 frame_ctu_err_num : 32; 421*437bfbebSnyanmisaka } reg231; 422*437bfbebSnyanmisaka 423*437bfbebSnyanmisaka struct SWREG232_STA_ERROR_PACKET_NUM { 424*437bfbebSnyanmisaka RK_U32 packet_err_num : 16; 425*437bfbebSnyanmisaka RK_U32 reserve : 16; 426*437bfbebSnyanmisaka } reg232; 427*437bfbebSnyanmisaka 428*437bfbebSnyanmisaka struct SWREG233_STA_ERR_CTU_NUM_IN_RO { 429*437bfbebSnyanmisaka RK_U32 error_ctu_num_in_roi : 24; 430*437bfbebSnyanmisaka RK_U32 reserve : 8; 431*437bfbebSnyanmisaka } reg233; 432*437bfbebSnyanmisaka 433*437bfbebSnyanmisaka struct SWREG234_BUF_EMPTY_OFFSET { 434*437bfbebSnyanmisaka RK_U32 coord_report_offset_x : 16; 435*437bfbebSnyanmisaka RK_U32 coord_report_offset_y : 16; 436*437bfbebSnyanmisaka } reg234; 437*437bfbebSnyanmisaka 438*437bfbebSnyanmisaka struct SWREG235_COORD_REPORT_OUTBUF_HEIGHT { 439*437bfbebSnyanmisaka RK_U32 coord_report_output_height : 16; 440*437bfbebSnyanmisaka RK_U32 reserve : 16; 441*437bfbebSnyanmisaka } reg235; 442*437bfbebSnyanmisaka 443*437bfbebSnyanmisaka RK_U32 reserve_reg236_237[2]; 444*437bfbebSnyanmisaka } Vdpu382RegIrqStatus; 445*437bfbebSnyanmisaka 446*437bfbebSnyanmisaka typedef struct Vdpu382RegStatistic_t { 447*437bfbebSnyanmisaka struct SWREG256_DEBUG_PERF_LATENCY_CTRL0 { 448*437bfbebSnyanmisaka RK_U32 axi_perf_work_e : 1; 449*437bfbebSnyanmisaka RK_U32 axi_perf_clr_e : 1; 450*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 451*437bfbebSnyanmisaka RK_U32 axi_cnt_type : 1; 452*437bfbebSnyanmisaka RK_U32 rd_latency_id : 4; 453*437bfbebSnyanmisaka RK_U32 rd_latency_thr : 12; 454*437bfbebSnyanmisaka RK_U32 reserve1 : 12; 455*437bfbebSnyanmisaka } reg256; 456*437bfbebSnyanmisaka 457*437bfbebSnyanmisaka struct SWREG257_DEBUG_PERF_LATENCY_CTRL1 { 458*437bfbebSnyanmisaka RK_U32 addr_align_type : 2; 459*437bfbebSnyanmisaka RK_U32 ar_cnt_id_type : 1; 460*437bfbebSnyanmisaka RK_U32 aw_cnt_id_type : 1; 461*437bfbebSnyanmisaka RK_U32 ar_count_id : 4; 462*437bfbebSnyanmisaka RK_U32 aw_count_id : 4; 463*437bfbebSnyanmisaka RK_U32 rd_band_width_mode : 1; 464*437bfbebSnyanmisaka RK_U32 reserve : 19; 465*437bfbebSnyanmisaka } reg257; 466*437bfbebSnyanmisaka 467*437bfbebSnyanmisaka struct SWREG258_DEBUG_PERF_RD_MAX_LATENCY_NUM { 468*437bfbebSnyanmisaka RK_U32 rd_max_latency_num : 16; 469*437bfbebSnyanmisaka RK_U32 reserve : 16; 470*437bfbebSnyanmisaka } reg258; 471*437bfbebSnyanmisaka 472*437bfbebSnyanmisaka RK_U32 reg259_rd_latency_thr_num_ch0; 473*437bfbebSnyanmisaka RK_U32 reg260_rd_latency_acc_sum; 474*437bfbebSnyanmisaka RK_U32 reg261_perf_rd_axi_total_byte; 475*437bfbebSnyanmisaka RK_U32 reg262_perf_wr_axi_total_byte; 476*437bfbebSnyanmisaka RK_U32 reg263_perf_working_cnt; 477*437bfbebSnyanmisaka 478*437bfbebSnyanmisaka struct SWREG264_DEBUG_BUS_STATE { 479*437bfbebSnyanmisaka RK_U32 bus_state_flag : 25; 480*437bfbebSnyanmisaka RK_U32 reserve : 7; 481*437bfbebSnyanmisaka } reg264; 482*437bfbebSnyanmisaka 483*437bfbebSnyanmisaka union { 484*437bfbebSnyanmisaka struct { 485*437bfbebSnyanmisaka RK_U32 perf_cnt0_sel : 6; 486*437bfbebSnyanmisaka RK_U32 reserve0 : 2; 487*437bfbebSnyanmisaka RK_U32 perf_cnt1_sel : 6; 488*437bfbebSnyanmisaka RK_U32 reserve1 : 2; 489*437bfbebSnyanmisaka RK_U32 perf_cnt2_sel : 6; 490*437bfbebSnyanmisaka RK_U32 reserve2 : 10; 491*437bfbebSnyanmisaka }; 492*437bfbebSnyanmisaka 493*437bfbebSnyanmisaka RK_U32 link_perf_cnt0; 494*437bfbebSnyanmisaka } reg265; 495*437bfbebSnyanmisaka 496*437bfbebSnyanmisaka RK_U32 reg266_perf_cnt0; 497*437bfbebSnyanmisaka RK_U32 reg267_perf_cnt1; 498*437bfbebSnyanmisaka RK_U32 reg268_perf_cnt2; 499*437bfbebSnyanmisaka 500*437bfbebSnyanmisaka RK_U32 reserve_reg269; 501*437bfbebSnyanmisaka 502*437bfbebSnyanmisaka struct SWREG270_DEBUG_QOS_CTRL { 503*437bfbebSnyanmisaka RK_U32 bus2mc_buffer_qos_level : 8; 504*437bfbebSnyanmisaka RK_U32 reserve0 : 8; 505*437bfbebSnyanmisaka RK_U32 axi_wr_hurry_level : 3; 506*437bfbebSnyanmisaka RK_U32 reserve1 : 1; 507*437bfbebSnyanmisaka RK_U32 axi_wr_qos : 3; 508*437bfbebSnyanmisaka RK_U32 reserve2 : 1; 509*437bfbebSnyanmisaka RK_U32 axi_rd_hurry_level : 3; 510*437bfbebSnyanmisaka RK_U32 reserve3 : 1; 511*437bfbebSnyanmisaka RK_U32 axi_rd_qos : 3; 512*437bfbebSnyanmisaka RK_U32 reserve4 : 1; 513*437bfbebSnyanmisaka } reg270; 514*437bfbebSnyanmisaka 515*437bfbebSnyanmisaka RK_U32 reg271_wr_wait_cycle_qos; 516*437bfbebSnyanmisaka 517*437bfbebSnyanmisaka struct SWREG272_DEBUG_INT { 518*437bfbebSnyanmisaka RK_U32 busidle_flag : 1; 519*437bfbebSnyanmisaka RK_U32 reserved : 4; 520*437bfbebSnyanmisaka RK_U32 mmu_busidle_flag : 1; 521*437bfbebSnyanmisaka RK_U32 wr_tansfer_cnt : 8; 522*437bfbebSnyanmisaka RK_U32 reserved1 : 2; 523*437bfbebSnyanmisaka RK_U32 Sw_streamfifo_space2full : 7; 524*437bfbebSnyanmisaka RK_U32 reserved2 : 1; 525*437bfbebSnyanmisaka RK_U32 mmu_wr_transer_cnt : 8; 526*437bfbebSnyanmisaka } reg272; 527*437bfbebSnyanmisaka 528*437bfbebSnyanmisaka struct SWREG273 { 529*437bfbebSnyanmisaka RK_U32 bus_status_flag : 25; 530*437bfbebSnyanmisaka RK_U32 reserve0 : 6; 531*437bfbebSnyanmisaka RK_U32 pps_no_ref_bframe_dec_r : 1; 532*437bfbebSnyanmisaka } reg273; 533*437bfbebSnyanmisaka 534*437bfbebSnyanmisaka RK_U16 reg274_y_min_value; 535*437bfbebSnyanmisaka RK_U16 reg274_y_max_value; 536*437bfbebSnyanmisaka RK_U16 reg275_u_min_value; 537*437bfbebSnyanmisaka RK_U16 reg275_u_max_value; 538*437bfbebSnyanmisaka RK_U16 reg276_v_min_value; 539*437bfbebSnyanmisaka RK_U16 reg276_v_max_value; 540*437bfbebSnyanmisaka 541*437bfbebSnyanmisaka struct SWREG277_ERROR_SPREAD_NUM { 542*437bfbebSnyanmisaka RK_U32 err_spread_cnt_sum : 24; 543*437bfbebSnyanmisaka RK_U32 : 8; 544*437bfbebSnyanmisaka } reg277; 545*437bfbebSnyanmisaka 546*437bfbebSnyanmisaka // RK_U32 reg277_err_spread_num; 547*437bfbebSnyanmisaka // struct SWREG278_DEC_LINE_OFFSET_Y { 548*437bfbebSnyanmisaka // RK_U32 dec_line_offset_y : 16; 549*437bfbebSnyanmisaka // RK_U32 reserve : 16; 550*437bfbebSnyanmisaka // } reg278; 551*437bfbebSnyanmisaka 552*437bfbebSnyanmisaka } Vdpu382RegStatistic; 553*437bfbebSnyanmisaka 554*437bfbebSnyanmisaka typedef struct vdpu382_rcb_info_t { 555*437bfbebSnyanmisaka RK_S32 reg; 556*437bfbebSnyanmisaka RK_S32 size; 557*437bfbebSnyanmisaka RK_S32 offset; 558*437bfbebSnyanmisaka } Vdpu382RcbInfo; 559*437bfbebSnyanmisaka 560*437bfbebSnyanmisaka #ifdef __cplusplus 561*437bfbebSnyanmisaka extern "C" { 562*437bfbebSnyanmisaka #endif 563*437bfbebSnyanmisaka 564*437bfbebSnyanmisaka RK_S32 vdpu382_get_rcb_buf_size(Vdpu382RcbInfo *info, RK_S32 width, RK_S32 height); 565*437bfbebSnyanmisaka void vdpu382_setup_rcb(Vdpu382RegCommonAddr *reg, MppDev dev, MppBuffer buf, Vdpu382RcbInfo *info); 566*437bfbebSnyanmisaka RK_S32 vdpu382_compare_rcb_size(const void *a, const void *b); 567*437bfbebSnyanmisaka RK_S32 vdpu382_set_rcbinfo(MppDev dev, Vdpu382RcbInfo *rcb_info); 568*437bfbebSnyanmisaka void vdpu382_setup_statistic(Vdpu382RegCommon *com, Vdpu382RegStatistic *sta); 569*437bfbebSnyanmisaka void vdpu382_afbc_align_calc(MppBufSlots slots, MppFrame frame, RK_U32 expand); 570*437bfbebSnyanmisaka void vdpu382_setup_down_scale(MppFrame frame, MppDev dev, Vdpu382RegCommon *com); 571*437bfbebSnyanmisaka RK_U32 vdpu382_get_colmv_size(RK_U32 width, RK_U32 height, RK_U32 ctu_size, 572*437bfbebSnyanmisaka RK_U32 colmv_bytes, RK_U32 colmv_size, RK_U32 compress); 573*437bfbebSnyanmisaka 574*437bfbebSnyanmisaka #ifdef __cplusplus 575*437bfbebSnyanmisaka } 576*437bfbebSnyanmisaka #endif 577*437bfbebSnyanmisaka 578*437bfbebSnyanmisaka #endif /* __VDPU382_COM_H__ */ 579