1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2020 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 __VDPU34X_COM_H__ 18*437bfbebSnyanmisaka #define __VDPU34X_COM_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "mpp_device.h" 21*437bfbebSnyanmisaka #include "mpp_buf_slot.h" 22*437bfbebSnyanmisaka #include "vdpu34x.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 Vdpu34x_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 } Vdpu34xRcbType_e; 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka typedef enum Vdpu34x_RCB_SET_MODE_E { 52*437bfbebSnyanmisaka RCB_SET_BY_SIZE_SORT_MODE, 53*437bfbebSnyanmisaka RCB_SET_BY_PRIORITY_MODE, 54*437bfbebSnyanmisaka } Vdpu34xRcbSetMode_e; 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka /* base: OFFSET_COMMON_REGS */ 57*437bfbebSnyanmisaka typedef struct Vdpu34xRegCommon_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 dec_e_strmd_clkgate_dis : 1; 86*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 87*437bfbebSnyanmisaka 88*437bfbebSnyanmisaka RK_U32 dec_irq_dis : 1; 89*437bfbebSnyanmisaka RK_U32 dec_timeout_e : 1; 90*437bfbebSnyanmisaka RK_U32 buf_empty_en : 1; 91*437bfbebSnyanmisaka RK_U32 reserve1 : 3; 92*437bfbebSnyanmisaka 93*437bfbebSnyanmisaka RK_U32 dec_e_rewrite_valid : 1; 94*437bfbebSnyanmisaka RK_U32 reserve2 : 9; 95*437bfbebSnyanmisaka RK_U32 softrst_en_p : 1; 96*437bfbebSnyanmisaka RK_U32 force_softreset_valid : 1; 97*437bfbebSnyanmisaka RK_U32 reserve3 : 2; 98*437bfbebSnyanmisaka RK_U32 pix_range_detection_e : 1; 99*437bfbebSnyanmisaka RK_U32 reserve4 : 7; 100*437bfbebSnyanmisaka } reg011; 101*437bfbebSnyanmisaka 102*437bfbebSnyanmisaka struct SWREG12_SENCODARY_EN { 103*437bfbebSnyanmisaka RK_U32 wr_ddr_align_en : 1; 104*437bfbebSnyanmisaka RK_U32 colmv_compress_en : 1; 105*437bfbebSnyanmisaka RK_U32 fbc_e : 1; 106*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 107*437bfbebSnyanmisaka 108*437bfbebSnyanmisaka RK_U32 buspr_slot_disable : 1; 109*437bfbebSnyanmisaka RK_U32 error_info_en : 1; 110*437bfbebSnyanmisaka RK_U32 info_collect_en : 1; 111*437bfbebSnyanmisaka RK_U32 wait_reset_en : 1; 112*437bfbebSnyanmisaka 113*437bfbebSnyanmisaka RK_U32 scanlist_addr_valid_en : 1; 114*437bfbebSnyanmisaka RK_U32 scale_down_en : 1; 115*437bfbebSnyanmisaka RK_U32 error_cfg_wr_disable : 1; 116*437bfbebSnyanmisaka RK_U32 reserve1 : 21; 117*437bfbebSnyanmisaka } reg012; 118*437bfbebSnyanmisaka 119*437bfbebSnyanmisaka struct SWREG13_EN_MODE_SET { 120*437bfbebSnyanmisaka RK_U32 timeout_mode : 1; 121*437bfbebSnyanmisaka RK_U32 req_timeout_rst_sel : 1; 122*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 123*437bfbebSnyanmisaka RK_U32 dec_commonirq_mode : 1; 124*437bfbebSnyanmisaka RK_U32 reserve1 : 2; 125*437bfbebSnyanmisaka RK_U32 stmerror_waitdecfifo_empty : 1; 126*437bfbebSnyanmisaka RK_U32 reserve2 : 2; 127*437bfbebSnyanmisaka RK_U32 h26x_streamd_error_mode : 1; 128*437bfbebSnyanmisaka RK_U32 reserve3 : 2; 129*437bfbebSnyanmisaka RK_U32 allow_not_wr_unref_bframe : 1; 130*437bfbebSnyanmisaka RK_U32 fbc_output_wr_disable : 1; 131*437bfbebSnyanmisaka RK_U32 reserve4 : 1; 132*437bfbebSnyanmisaka RK_U32 colmv_error_mode : 1; 133*437bfbebSnyanmisaka 134*437bfbebSnyanmisaka RK_U32 reserve5 : 2; 135*437bfbebSnyanmisaka RK_U32 h26x_error_mode : 1; 136*437bfbebSnyanmisaka RK_U32 reserve6 : 2; 137*437bfbebSnyanmisaka RK_U32 ycacherd_prior : 1; 138*437bfbebSnyanmisaka RK_U32 reserve7 : 2; 139*437bfbebSnyanmisaka RK_U32 cur_pic_is_idr : 1; 140*437bfbebSnyanmisaka RK_U32 reserve8 : 1; 141*437bfbebSnyanmisaka RK_U32 right_auto_rst_disable : 1; 142*437bfbebSnyanmisaka RK_U32 frame_end_err_rst_flag : 1; 143*437bfbebSnyanmisaka RK_U32 rd_prior_mode : 1; 144*437bfbebSnyanmisaka RK_U32 rd_ctrl_prior_mode : 1; 145*437bfbebSnyanmisaka RK_U32 reserved9 : 1; 146*437bfbebSnyanmisaka RK_U32 filter_outbuf_mode : 1; 147*437bfbebSnyanmisaka } reg013; 148*437bfbebSnyanmisaka 149*437bfbebSnyanmisaka struct SWREG14_FBC_PARAM_SET { 150*437bfbebSnyanmisaka RK_U32 fbc_force_uncompress : 1; 151*437bfbebSnyanmisaka 152*437bfbebSnyanmisaka RK_U32 reserve0 : 2; 153*437bfbebSnyanmisaka RK_U32 allow_16x8_cp_flag : 1; 154*437bfbebSnyanmisaka RK_U32 reserve1 : 2; 155*437bfbebSnyanmisaka 156*437bfbebSnyanmisaka RK_U32 fbc_h264_exten_4or8_flag: 1; 157*437bfbebSnyanmisaka RK_U32 reserve2 : 25; 158*437bfbebSnyanmisaka } reg014; 159*437bfbebSnyanmisaka 160*437bfbebSnyanmisaka struct SWREG15_STREAM_PARAM_SET { 161*437bfbebSnyanmisaka RK_U32 rlc_mode_direct_write : 1; 162*437bfbebSnyanmisaka RK_U32 rlc_mode : 1; 163*437bfbebSnyanmisaka RK_U32 reserve0 : 3; 164*437bfbebSnyanmisaka 165*437bfbebSnyanmisaka RK_U32 strm_start_bit : 7; 166*437bfbebSnyanmisaka RK_U32 reserve1 : 20; 167*437bfbebSnyanmisaka } reg015; 168*437bfbebSnyanmisaka 169*437bfbebSnyanmisaka RK_U32 reg016_str_len; 170*437bfbebSnyanmisaka 171*437bfbebSnyanmisaka struct SWREG17_SLICE_NUMBER { 172*437bfbebSnyanmisaka RK_U32 slice_num : 25; 173*437bfbebSnyanmisaka RK_U32 reserve : 7; 174*437bfbebSnyanmisaka } reg017; 175*437bfbebSnyanmisaka 176*437bfbebSnyanmisaka struct SWREG18_Y_HOR_STRIDE { 177*437bfbebSnyanmisaka RK_U32 y_hor_virstride : 16; 178*437bfbebSnyanmisaka RK_U32 reserve : 16; 179*437bfbebSnyanmisaka } reg018; 180*437bfbebSnyanmisaka 181*437bfbebSnyanmisaka struct SWREG19_UV_HOR_STRIDE { 182*437bfbebSnyanmisaka RK_U32 uv_hor_virstride : 16; 183*437bfbebSnyanmisaka RK_U32 reserve : 16; 184*437bfbebSnyanmisaka } reg019; 185*437bfbebSnyanmisaka 186*437bfbebSnyanmisaka union { 187*437bfbebSnyanmisaka struct SWREG20_Y_STRIDE { 188*437bfbebSnyanmisaka RK_U32 y_virstride : 28; 189*437bfbebSnyanmisaka RK_U32 reserve : 4; 190*437bfbebSnyanmisaka } reg020_y_virstride; 191*437bfbebSnyanmisaka 192*437bfbebSnyanmisaka struct SWREG20_FBC_PAYLOAD_OFFSET { 193*437bfbebSnyanmisaka RK_U32 reserve : 4; 194*437bfbebSnyanmisaka RK_U32 payload_st_offset : 28; 195*437bfbebSnyanmisaka } reg020_fbc_payload_off; 196*437bfbebSnyanmisaka }; 197*437bfbebSnyanmisaka 198*437bfbebSnyanmisaka 199*437bfbebSnyanmisaka struct SWREG21_ERROR_CTRL_SET { 200*437bfbebSnyanmisaka RK_U32 inter_error_prc_mode : 1; 201*437bfbebSnyanmisaka RK_U32 error_intra_mode : 1; 202*437bfbebSnyanmisaka RK_U32 error_deb_en : 1; 203*437bfbebSnyanmisaka RK_U32 picidx_replace : 5; 204*437bfbebSnyanmisaka RK_U32 error_spread_e : 1; 205*437bfbebSnyanmisaka RK_U32 : 3; 206*437bfbebSnyanmisaka RK_U32 error_inter_pred_cross_slice : 1; 207*437bfbebSnyanmisaka RK_U32 reserve0 : 11; 208*437bfbebSnyanmisaka 209*437bfbebSnyanmisaka RK_U32 roi_error_ctu_cal_en : 1; 210*437bfbebSnyanmisaka RK_U32 reserve1 : 7; 211*437bfbebSnyanmisaka } reg021; 212*437bfbebSnyanmisaka 213*437bfbebSnyanmisaka struct SWREG22_ERR_ROI_CTU_OFFSET_START { 214*437bfbebSnyanmisaka RK_U32 roi_x_ctu_offset_st : 12; 215*437bfbebSnyanmisaka RK_U32 reserve0 : 4; 216*437bfbebSnyanmisaka RK_U32 roi_y_ctu_offset_st : 12; 217*437bfbebSnyanmisaka RK_U32 reserve1 : 4; 218*437bfbebSnyanmisaka } reg022; 219*437bfbebSnyanmisaka 220*437bfbebSnyanmisaka struct SWREG23_ERR_ROI_CTU_OFFSET_END { 221*437bfbebSnyanmisaka RK_U32 roi_x_ctu_offset_end : 12; 222*437bfbebSnyanmisaka RK_U32 reserve0 : 4; 223*437bfbebSnyanmisaka RK_U32 roi_y_ctu_offset_end : 12; 224*437bfbebSnyanmisaka RK_U32 reserve1 : 4; 225*437bfbebSnyanmisaka } reg023; 226*437bfbebSnyanmisaka 227*437bfbebSnyanmisaka struct SWREG24_CABAC_ERROR_EN_LOWBITS { 228*437bfbebSnyanmisaka RK_U32 cabac_err_en_lowbits : 32; 229*437bfbebSnyanmisaka } reg024; 230*437bfbebSnyanmisaka 231*437bfbebSnyanmisaka struct SWREG25_CABAC_ERROR_EN_HIGHBITS { 232*437bfbebSnyanmisaka RK_U32 cabac_err_en_highbits : 30; 233*437bfbebSnyanmisaka RK_U32 reserve : 2; 234*437bfbebSnyanmisaka } reg025; 235*437bfbebSnyanmisaka 236*437bfbebSnyanmisaka struct SWREG26_BLOCK_GATING_EN { 237*437bfbebSnyanmisaka RK_U32 swreg_block_gating_e : 20; 238*437bfbebSnyanmisaka RK_U32 reserve : 11; 239*437bfbebSnyanmisaka RK_U32 reg_cfg_gating_en : 1; 240*437bfbebSnyanmisaka } reg026; 241*437bfbebSnyanmisaka 242*437bfbebSnyanmisaka /* NOTE: reg027 ~ reg032 are added in vdpu38x at rk3588 */ 243*437bfbebSnyanmisaka struct SW027_CORE_SAFE_PIXELS { 244*437bfbebSnyanmisaka // colmv and recon report coord x safe pixels 245*437bfbebSnyanmisaka RK_U32 core_safe_x_pixels : 16; 246*437bfbebSnyanmisaka // colmv and recon report coord y safe pixels 247*437bfbebSnyanmisaka RK_U32 core_safe_y_pixels : 16; 248*437bfbebSnyanmisaka } reg027; 249*437bfbebSnyanmisaka 250*437bfbebSnyanmisaka struct SWREG28_MULTIPLY_CORE_CTRL { 251*437bfbebSnyanmisaka RK_U32 swreg_vp9_wr_prob_idx : 3; 252*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 253*437bfbebSnyanmisaka RK_U32 swreg_vp9_rd_prob_idx : 3; 254*437bfbebSnyanmisaka RK_U32 reserve1 : 1; 255*437bfbebSnyanmisaka 256*437bfbebSnyanmisaka RK_U32 swreg_ref_req_advance_flag : 1; 257*437bfbebSnyanmisaka RK_U32 sw_colmv_req_advance_flag : 1; 258*437bfbebSnyanmisaka RK_U32 sw_poc_only_highbit_flag : 1; 259*437bfbebSnyanmisaka RK_U32 sw_poc_arb_flag : 1; 260*437bfbebSnyanmisaka 261*437bfbebSnyanmisaka RK_U32 reserve2 : 4; 262*437bfbebSnyanmisaka RK_U32 sw_film_idx : 10; 263*437bfbebSnyanmisaka RK_U32 reserve3 : 2; 264*437bfbebSnyanmisaka RK_U32 sw_pu_req_mismatch_dis : 1; 265*437bfbebSnyanmisaka RK_U32 sw_colmv_req_mismatch_dis : 1; 266*437bfbebSnyanmisaka RK_U32 reserve4 : 2; 267*437bfbebSnyanmisaka } reg028; 268*437bfbebSnyanmisaka 269*437bfbebSnyanmisaka struct SW029_SCALE_DOWN_CTRL { 270*437bfbebSnyanmisaka RK_U32 scale_down_hor_ratio : 2; 271*437bfbebSnyanmisaka RK_U32 : 6; 272*437bfbebSnyanmisaka RK_U32 scale_down_vrz_ratio : 2; 273*437bfbebSnyanmisaka RK_U32 : 22; 274*437bfbebSnyanmisaka } reg029; 275*437bfbebSnyanmisaka 276*437bfbebSnyanmisaka struct SW032_Y_SCALE_DOWN_TILE8x8_HOR_STRIDE { 277*437bfbebSnyanmisaka RK_U32 y_scale_down_hor_stride : 20; 278*437bfbebSnyanmisaka RK_U32 : 12; 279*437bfbebSnyanmisaka } reg030; 280*437bfbebSnyanmisaka 281*437bfbebSnyanmisaka struct SW031_UV_SCALE_DOWN_TILE8x8_HOR_STRIDE { 282*437bfbebSnyanmisaka RK_U32 uv_scale_down_hor_stride : 20; 283*437bfbebSnyanmisaka RK_U32 : 12; 284*437bfbebSnyanmisaka } reg031; 285*437bfbebSnyanmisaka 286*437bfbebSnyanmisaka /* NOTE: timeout must be config in vdpu38x */ 287*437bfbebSnyanmisaka RK_U32 reg032_timeout_threshold; 288*437bfbebSnyanmisaka } Vdpu34xRegCommon; 289*437bfbebSnyanmisaka 290*437bfbebSnyanmisaka /* base: OFFSET_COMMON_ADDR_REGS */ 291*437bfbebSnyanmisaka typedef struct Vdpu34xRegCommonAddr_t { 292*437bfbebSnyanmisaka /* offset 128 */ 293*437bfbebSnyanmisaka RK_U32 reg128_rlc_base; 294*437bfbebSnyanmisaka 295*437bfbebSnyanmisaka RK_U32 reg129_rlcwrite_base; 296*437bfbebSnyanmisaka 297*437bfbebSnyanmisaka RK_U32 reg130_decout_base; 298*437bfbebSnyanmisaka 299*437bfbebSnyanmisaka RK_U32 reg131_colmv_cur_base; 300*437bfbebSnyanmisaka 301*437bfbebSnyanmisaka RK_U32 reg132_error_ref_base; 302*437bfbebSnyanmisaka 303*437bfbebSnyanmisaka RK_U32 reg133_rcb_intra_base; 304*437bfbebSnyanmisaka 305*437bfbebSnyanmisaka RK_U32 reg134_rcb_transd_row_base; 306*437bfbebSnyanmisaka 307*437bfbebSnyanmisaka RK_U32 reg135_rcb_transd_col_base; 308*437bfbebSnyanmisaka 309*437bfbebSnyanmisaka RK_U32 reg136_rcb_streamd_row_base; 310*437bfbebSnyanmisaka 311*437bfbebSnyanmisaka RK_U32 reg137_rcb_inter_row_base; 312*437bfbebSnyanmisaka 313*437bfbebSnyanmisaka RK_U32 reg138_rcb_inter_col_base; 314*437bfbebSnyanmisaka 315*437bfbebSnyanmisaka RK_U32 reg139_rcb_dblk_base; 316*437bfbebSnyanmisaka 317*437bfbebSnyanmisaka RK_U32 reg140_rcb_sao_base; 318*437bfbebSnyanmisaka 319*437bfbebSnyanmisaka RK_U32 reg141_rcb_fbc_base; 320*437bfbebSnyanmisaka 321*437bfbebSnyanmisaka RK_U32 reg142_rcb_filter_col_base; 322*437bfbebSnyanmisaka } Vdpu34xRegCommonAddr; 323*437bfbebSnyanmisaka 324*437bfbebSnyanmisaka /* base: OFFSET_COMMON_ADDR_REGS */ 325*437bfbebSnyanmisaka typedef struct Vdpu34xRegIrqStatus_t { 326*437bfbebSnyanmisaka struct SWREG224_STA_INT { 327*437bfbebSnyanmisaka RK_U32 dec_irq : 1; 328*437bfbebSnyanmisaka RK_U32 dec_irq_raw : 1; 329*437bfbebSnyanmisaka 330*437bfbebSnyanmisaka RK_U32 dec_rdy_sta : 1; 331*437bfbebSnyanmisaka RK_U32 dec_bus_sta : 1; 332*437bfbebSnyanmisaka RK_U32 dec_error_sta : 1; 333*437bfbebSnyanmisaka RK_U32 dec_timeout_sta : 1; 334*437bfbebSnyanmisaka RK_U32 buf_empty_sta : 1; 335*437bfbebSnyanmisaka RK_U32 colmv_ref_error_sta : 1; 336*437bfbebSnyanmisaka RK_U32 cabu_end_sta : 1; 337*437bfbebSnyanmisaka 338*437bfbebSnyanmisaka RK_U32 softreset_rdy : 1; 339*437bfbebSnyanmisaka 340*437bfbebSnyanmisaka RK_U32 reserve : 22; 341*437bfbebSnyanmisaka } reg224; 342*437bfbebSnyanmisaka 343*437bfbebSnyanmisaka struct SWREG225_STA_ERR_INFO { 344*437bfbebSnyanmisaka RK_U32 all_frame_error_flag : 1; 345*437bfbebSnyanmisaka RK_U32 strmd_detect_error_flag : 1; 346*437bfbebSnyanmisaka RK_U32 reserve : 30; 347*437bfbebSnyanmisaka } reg225; 348*437bfbebSnyanmisaka 349*437bfbebSnyanmisaka struct SWREG226_STA_CABAC_ERROR_STATUS { 350*437bfbebSnyanmisaka RK_U32 strmd_error_status : 28; 351*437bfbebSnyanmisaka RK_U32 reserve : 4; 352*437bfbebSnyanmisaka } reg226; 353*437bfbebSnyanmisaka 354*437bfbebSnyanmisaka struct SWREG227_STA_COLMV_ERROR_REF_PICIDX { 355*437bfbebSnyanmisaka RK_U32 colmv_error_ref_picidx : 4; 356*437bfbebSnyanmisaka RK_U32 reserve : 28; 357*437bfbebSnyanmisaka } reg227; 358*437bfbebSnyanmisaka 359*437bfbebSnyanmisaka struct SWREG228_STA_CABAC_ERROR_CTU_OFFSET { 360*437bfbebSnyanmisaka RK_U32 cabac_error_ctu_offset_x : 12; 361*437bfbebSnyanmisaka RK_U32 : 4; 362*437bfbebSnyanmisaka RK_U32 cabac_error_ctu_offset_y : 12; 363*437bfbebSnyanmisaka RK_U32 : 4; 364*437bfbebSnyanmisaka } reg228; 365*437bfbebSnyanmisaka 366*437bfbebSnyanmisaka struct SWREG229_STA_SAOWR_CTU_OFFSET { 367*437bfbebSnyanmisaka RK_U32 saowr_xoffset : 16; 368*437bfbebSnyanmisaka RK_U32 saowr_yoffset : 16; 369*437bfbebSnyanmisaka } reg229; 370*437bfbebSnyanmisaka 371*437bfbebSnyanmisaka struct SWREG230_STA_SLICE_DEC_NUM { 372*437bfbebSnyanmisaka RK_U32 slicedec_num : 25; 373*437bfbebSnyanmisaka RK_U32 reserve : 7; 374*437bfbebSnyanmisaka } reg230; 375*437bfbebSnyanmisaka 376*437bfbebSnyanmisaka struct SWREG231_STA_FRAME_ERROR_CTU_NUM { 377*437bfbebSnyanmisaka RK_U32 frame_ctu_err_num : 32; 378*437bfbebSnyanmisaka } reg231; 379*437bfbebSnyanmisaka 380*437bfbebSnyanmisaka struct SWREG232_STA_ERROR_PACKET_NUM { 381*437bfbebSnyanmisaka RK_U32 packet_err_num : 16; 382*437bfbebSnyanmisaka RK_U32 reserve : 16; 383*437bfbebSnyanmisaka } reg232; 384*437bfbebSnyanmisaka 385*437bfbebSnyanmisaka struct SWREG233_STA_ERR_CTU_NUM_IN_RO { 386*437bfbebSnyanmisaka RK_U32 error_ctu_num_in_roi : 24; 387*437bfbebSnyanmisaka RK_U32 reserve : 8; 388*437bfbebSnyanmisaka } reg233; 389*437bfbebSnyanmisaka 390*437bfbebSnyanmisaka RK_U32 reserve_reg234_237[4]; 391*437bfbebSnyanmisaka } Vdpu34xRegIrqStatus; 392*437bfbebSnyanmisaka 393*437bfbebSnyanmisaka typedef struct Vdpu34xRegStatistic_t { 394*437bfbebSnyanmisaka struct SWREG256_DEBUG_PERF_LATENCY_CTRL0 { 395*437bfbebSnyanmisaka RK_U32 axi_perf_work_e : 1; 396*437bfbebSnyanmisaka RK_U32 axi_perf_clr_e : 1; 397*437bfbebSnyanmisaka RK_U32 reserve0 : 1; 398*437bfbebSnyanmisaka RK_U32 axi_cnt_type : 1; 399*437bfbebSnyanmisaka RK_U32 rd_latency_id : 4; 400*437bfbebSnyanmisaka RK_U32 rd_latency_thr : 12; 401*437bfbebSnyanmisaka RK_U32 reserve1 : 12; 402*437bfbebSnyanmisaka } reg256; 403*437bfbebSnyanmisaka 404*437bfbebSnyanmisaka struct SWREG257_DEBUG_PERF_LATENCY_CTRL1 { 405*437bfbebSnyanmisaka RK_U32 addr_align_type : 2; 406*437bfbebSnyanmisaka RK_U32 ar_cnt_id_type : 1; 407*437bfbebSnyanmisaka RK_U32 aw_cnt_id_type : 1; 408*437bfbebSnyanmisaka RK_U32 ar_count_id : 4; 409*437bfbebSnyanmisaka RK_U32 aw_count_id : 4; 410*437bfbebSnyanmisaka RK_U32 rd_band_width_mode : 1; 411*437bfbebSnyanmisaka RK_U32 reserve : 19; 412*437bfbebSnyanmisaka } reg257; 413*437bfbebSnyanmisaka 414*437bfbebSnyanmisaka struct SWREG258_DEBUG_PERF_RD_MAX_LATENCY_NUM { 415*437bfbebSnyanmisaka RK_U32 rd_max_latency_num : 16; 416*437bfbebSnyanmisaka RK_U32 reserve : 16; 417*437bfbebSnyanmisaka } reg258; 418*437bfbebSnyanmisaka 419*437bfbebSnyanmisaka RK_U32 reg259_rd_latency_thr_num_ch0; 420*437bfbebSnyanmisaka RK_U32 reg260_rd_latency_acc_sum; 421*437bfbebSnyanmisaka RK_U32 reg261_perf_rd_axi_total_byte; 422*437bfbebSnyanmisaka RK_U32 reg262_perf_wr_axi_total_byte; 423*437bfbebSnyanmisaka RK_U32 reg263_perf_working_cnt; 424*437bfbebSnyanmisaka 425*437bfbebSnyanmisaka RK_U32 reserve_reg264; 426*437bfbebSnyanmisaka 427*437bfbebSnyanmisaka struct SWREG265_DEBUG_PERF_SEL { 428*437bfbebSnyanmisaka RK_U32 perf_cnt0_sel : 6; 429*437bfbebSnyanmisaka RK_U32 reserve0 : 2; 430*437bfbebSnyanmisaka RK_U32 perf_cnt1_sel : 6; 431*437bfbebSnyanmisaka RK_U32 reserve1 : 2; 432*437bfbebSnyanmisaka RK_U32 perf_cnt2_sel : 6; 433*437bfbebSnyanmisaka RK_U32 reserve2 : 10; 434*437bfbebSnyanmisaka } reg265; 435*437bfbebSnyanmisaka 436*437bfbebSnyanmisaka RK_U32 reg266_perf_cnt0; 437*437bfbebSnyanmisaka RK_U32 reg267_perf_cnt1; 438*437bfbebSnyanmisaka RK_U32 reg268_perf_cnt2; 439*437bfbebSnyanmisaka 440*437bfbebSnyanmisaka RK_U32 reserve_reg269; 441*437bfbebSnyanmisaka 442*437bfbebSnyanmisaka struct SWREG270_DEBUG_QOS_CTRL { 443*437bfbebSnyanmisaka RK_U32 bus2mc_buffer_qos_level : 8; 444*437bfbebSnyanmisaka RK_U32 reserve0 : 8; 445*437bfbebSnyanmisaka RK_U32 axi_rd_hurry_level : 2; 446*437bfbebSnyanmisaka RK_U32 reserve1 : 2; 447*437bfbebSnyanmisaka RK_U32 axi_wr_qos : 2; 448*437bfbebSnyanmisaka RK_U32 reserve2 : 2; 449*437bfbebSnyanmisaka RK_U32 axi_wr_hurry_level : 2; 450*437bfbebSnyanmisaka RK_U32 reserve3 : 2; 451*437bfbebSnyanmisaka RK_U32 axi_rd_qos : 2; 452*437bfbebSnyanmisaka RK_U32 reserve4 : 2; 453*437bfbebSnyanmisaka } reg270; 454*437bfbebSnyanmisaka 455*437bfbebSnyanmisaka RK_U32 reg271_wr_wait_cycle_qos; 456*437bfbebSnyanmisaka 457*437bfbebSnyanmisaka struct SWREG272_DEBUG_INT { 458*437bfbebSnyanmisaka RK_U32 bu_rw_clean : 1; 459*437bfbebSnyanmisaka RK_U32 saowr_frame_rdy : 1; 460*437bfbebSnyanmisaka RK_U32 saobu_frame_rdy_valid : 1; 461*437bfbebSnyanmisaka RK_U32 colmvwr_frame_rdy_real : 1; 462*437bfbebSnyanmisaka RK_U32 cabu_rlcend_valid_real : 1; 463*437bfbebSnyanmisaka RK_U32 stream_rdburst_cnteq0_towr : 1; 464*437bfbebSnyanmisaka RK_U32 wr_tansfer_cnt : 6; 465*437bfbebSnyanmisaka RK_U32 reserve0 : 4; 466*437bfbebSnyanmisaka RK_U32 streamfifo_space2full : 7; 467*437bfbebSnyanmisaka RK_U32 reserve1 : 9; 468*437bfbebSnyanmisaka } reg272; 469*437bfbebSnyanmisaka 470*437bfbebSnyanmisaka struct SWREG273 { 471*437bfbebSnyanmisaka RK_U32 bus_status_flag : 19; 472*437bfbebSnyanmisaka RK_U32 reserve0 : 12; 473*437bfbebSnyanmisaka RK_U32 pps_no_ref_bframe_dec_r : 1; 474*437bfbebSnyanmisaka } reg273; 475*437bfbebSnyanmisaka 476*437bfbebSnyanmisaka RK_U16 reg274_y_min_value; 477*437bfbebSnyanmisaka RK_U16 reg274_y_max_value; 478*437bfbebSnyanmisaka RK_U16 reg275_u_min_value; 479*437bfbebSnyanmisaka RK_U16 reg275_u_max_value; 480*437bfbebSnyanmisaka RK_U16 reg276_v_min_value; 481*437bfbebSnyanmisaka RK_U16 reg276_v_max_value; 482*437bfbebSnyanmisaka 483*437bfbebSnyanmisaka struct SWREG277_ERROR_SPREAD_NUM { 484*437bfbebSnyanmisaka RK_U32 err_spread_cnt_sum : 24; 485*437bfbebSnyanmisaka RK_U32 : 8; 486*437bfbebSnyanmisaka } reg277; 487*437bfbebSnyanmisaka } Vdpu34xRegStatistic; 488*437bfbebSnyanmisaka 489*437bfbebSnyanmisaka typedef struct vdpu34x_rcb_info_t { 490*437bfbebSnyanmisaka RK_S32 reg; 491*437bfbebSnyanmisaka RK_S32 size; 492*437bfbebSnyanmisaka RK_S32 offset; 493*437bfbebSnyanmisaka } Vdpu34xRcbInfo; 494*437bfbebSnyanmisaka 495*437bfbebSnyanmisaka #ifdef __cplusplus 496*437bfbebSnyanmisaka extern "C" { 497*437bfbebSnyanmisaka #endif 498*437bfbebSnyanmisaka 499*437bfbebSnyanmisaka RK_S32 vdpu34x_get_rcb_buf_size(Vdpu34xRcbInfo *info, RK_S32 width, RK_S32 height); 500*437bfbebSnyanmisaka void vdpu34x_setup_rcb(Vdpu34xRegCommonAddr *reg, MppDev dev, MppBuffer buf, Vdpu34xRcbInfo *info); 501*437bfbebSnyanmisaka void vdpu34x_setup_statistic(Vdpu34xRegCommon *com, Vdpu34xRegStatistic *sta); 502*437bfbebSnyanmisaka void vdpu34x_afbc_align_calc(MppBufSlots slots, MppFrame frame, RK_U32 expand); 503*437bfbebSnyanmisaka RK_S32 vdpu34x_set_rcbinfo(MppDev dev, Vdpu34xRcbInfo *rcb_info); 504*437bfbebSnyanmisaka RK_U32 vdpu34x_get_colmv_size(RK_U32 width, RK_U32 height, RK_U32 ctu_size, 505*437bfbebSnyanmisaka RK_U32 colmv_bytes, RK_U32 colmv_size, RK_U32 compress); 506*437bfbebSnyanmisaka 507*437bfbebSnyanmisaka #ifdef __cplusplus 508*437bfbebSnyanmisaka } 509*437bfbebSnyanmisaka #endif 510*437bfbebSnyanmisaka 511*437bfbebSnyanmisaka #endif /* __VDPU34X_COM_H__ */ 512