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 __HAL_VDPU34X_VP9D_H__ 18*437bfbebSnyanmisaka #define __HAL_VDPU34X_VP9D_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "rk_type.h" 21*437bfbebSnyanmisaka #include "vdpu34x_com.h" 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka 24*437bfbebSnyanmisaka typedef struct Vdpu34xRegVp9dParam_t { 25*437bfbebSnyanmisaka struct SWREG64_VP9_SET { 26*437bfbebSnyanmisaka RK_U32 cprheader_offset : 16; 27*437bfbebSnyanmisaka RK_U32 reserve : 16; 28*437bfbebSnyanmisaka } reg64; 29*437bfbebSnyanmisaka 30*437bfbebSnyanmisaka struct SWREG65_CUR_POC { 31*437bfbebSnyanmisaka RK_U32 cur_poc : 32; 32*437bfbebSnyanmisaka } reg65; 33*437bfbebSnyanmisaka 34*437bfbebSnyanmisaka RK_U32 reg66; 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka struct SWREG67_74_VP9_SEGID_GRP { 37*437bfbebSnyanmisaka RK_U32 segid_abs_delta : 1; 38*437bfbebSnyanmisaka RK_U32 segid_frame_qp_delta_en : 1; 39*437bfbebSnyanmisaka RK_U32 segid_frame_qp_delta : 9; 40*437bfbebSnyanmisaka RK_U32 segid_frame_loopfitler_value_en : 1; 41*437bfbebSnyanmisaka RK_U32 segid_frame_loopfilter_value : 7; 42*437bfbebSnyanmisaka RK_U32 segid_referinfo_en : 1; 43*437bfbebSnyanmisaka RK_U32 segid_referinfo : 2; 44*437bfbebSnyanmisaka RK_U32 segid_frame_skip_en : 1; 45*437bfbebSnyanmisaka RK_U32 reserve : 9; 46*437bfbebSnyanmisaka } reg67_74[8]; 47*437bfbebSnyanmisaka 48*437bfbebSnyanmisaka struct SWREG75_VP9_INFO_LASTFRAME { 49*437bfbebSnyanmisaka RK_U32 mode_deltas_lastframe : 14; 50*437bfbebSnyanmisaka RK_U32 vp9_segment_id_clear : 1; 51*437bfbebSnyanmisaka RK_U32 vp9_segment_id_update : 1; 52*437bfbebSnyanmisaka RK_U32 segmentation_enable_lstframe : 1; 53*437bfbebSnyanmisaka RK_U32 last_show_frame : 1; 54*437bfbebSnyanmisaka RK_U32 last_intra_only : 1; 55*437bfbebSnyanmisaka RK_U32 last_widthheight_eqcur : 1; 56*437bfbebSnyanmisaka RK_U32 color_space_lastkeyframe : 3; 57*437bfbebSnyanmisaka RK_U32 reserve1 : 9; 58*437bfbebSnyanmisaka } reg75; 59*437bfbebSnyanmisaka 60*437bfbebSnyanmisaka struct SWREG76_VP9_CPRHEADER_CONFIG { 61*437bfbebSnyanmisaka RK_U32 tx_mode : 3; 62*437bfbebSnyanmisaka RK_U32 frame_reference_mode : 2; 63*437bfbebSnyanmisaka RK_U32 reserve : 27; 64*437bfbebSnyanmisaka } reg76; 65*437bfbebSnyanmisaka 66*437bfbebSnyanmisaka struct SWREG77_VP9_INTERCMD_NUM { 67*437bfbebSnyanmisaka RK_U32 intercmd_num : 24; 68*437bfbebSnyanmisaka RK_U32 reserve : 8; 69*437bfbebSnyanmisaka } reg77; 70*437bfbebSnyanmisaka 71*437bfbebSnyanmisaka struct SWREG78_VP9_LASTTILE_SIZE { 72*437bfbebSnyanmisaka RK_U32 lasttile_size : 24; 73*437bfbebSnyanmisaka RK_U32 reserve : 8; 74*437bfbebSnyanmisaka } reg78; 75*437bfbebSnyanmisaka 76*437bfbebSnyanmisaka struct SWREG79_VP9_LASTF_Y_HOR_VIRSTRIDE { 77*437bfbebSnyanmisaka RK_U32 lastfy_hor_virstride : 16; 78*437bfbebSnyanmisaka RK_U32 reserve : 16; 79*437bfbebSnyanmisaka } reg79; 80*437bfbebSnyanmisaka 81*437bfbebSnyanmisaka struct SWREG80_VP9_LASTF_UV_HOR_VIRSTRIDE { 82*437bfbebSnyanmisaka RK_U32 lastfuv_hor_virstride : 16; 83*437bfbebSnyanmisaka RK_U32 reserve : 16; 84*437bfbebSnyanmisaka } reg80; 85*437bfbebSnyanmisaka 86*437bfbebSnyanmisaka struct SWREG81_VP9_GOLDENF_Y_HOR_VIRSTRIDE { 87*437bfbebSnyanmisaka RK_U32 goldenfy_hor_virstride : 16; 88*437bfbebSnyanmisaka RK_U32 reserve : 16; 89*437bfbebSnyanmisaka } reg81; 90*437bfbebSnyanmisaka 91*437bfbebSnyanmisaka struct SWREG82_VP9_GOLDENF_UV_HOR_VIRSTRIDE { 92*437bfbebSnyanmisaka RK_U32 goldenfuv_hor_virstride : 16; 93*437bfbebSnyanmisaka RK_U32 reserve : 16; 94*437bfbebSnyanmisaka } reg82; 95*437bfbebSnyanmisaka 96*437bfbebSnyanmisaka struct SWREG83_VP9_ALTREFF_Y_HOR_VIRSTRIDE { 97*437bfbebSnyanmisaka RK_U32 altreffy_hor_virstride : 16; 98*437bfbebSnyanmisaka RK_U32 reserve : 16; 99*437bfbebSnyanmisaka } reg83; 100*437bfbebSnyanmisaka 101*437bfbebSnyanmisaka struct SWREG84_VP9_ALTREFF_UV_HOR_VIRSTRIDE { 102*437bfbebSnyanmisaka RK_U32 altreffuv_hor_virstride : 16; 103*437bfbebSnyanmisaka RK_U32 reserve : 16; 104*437bfbebSnyanmisaka } reg84; 105*437bfbebSnyanmisaka 106*437bfbebSnyanmisaka struct SWREG85_VP9_LASTF_Y_VIRSTRIDE { 107*437bfbebSnyanmisaka RK_U32 lastfy_virstride : 28; 108*437bfbebSnyanmisaka RK_U32 reserve : 4; 109*437bfbebSnyanmisaka } reg85; 110*437bfbebSnyanmisaka 111*437bfbebSnyanmisaka struct SWREG86_VP9_GOLDEN_Y_VIRSTRIDE { 112*437bfbebSnyanmisaka RK_U32 goldeny_virstride : 28; 113*437bfbebSnyanmisaka RK_U32 reserve : 4; 114*437bfbebSnyanmisaka } reg86; 115*437bfbebSnyanmisaka 116*437bfbebSnyanmisaka struct SWREG87_VP9_ALTREF_Y_VIRSTRIDE { 117*437bfbebSnyanmisaka RK_U32 altrefy_virstride : 28; 118*437bfbebSnyanmisaka RK_U32 reserve : 4; 119*437bfbebSnyanmisaka } reg87; 120*437bfbebSnyanmisaka 121*437bfbebSnyanmisaka struct SWREG88_VP9_LREF_HOR_SCALE { 122*437bfbebSnyanmisaka RK_U32 lref_hor_scale : 16; 123*437bfbebSnyanmisaka RK_U32 reserve : 16; 124*437bfbebSnyanmisaka } reg88; 125*437bfbebSnyanmisaka 126*437bfbebSnyanmisaka struct SWREG89_VP9_LREF_VER_SCALE { 127*437bfbebSnyanmisaka RK_U32 lref_ver_scale : 16; 128*437bfbebSnyanmisaka RK_U32 reserve : 16; 129*437bfbebSnyanmisaka } reg89; 130*437bfbebSnyanmisaka 131*437bfbebSnyanmisaka struct SWREG90_VP9_GREF_HOR_SCALE { 132*437bfbebSnyanmisaka RK_U32 gref_hor_scale : 16; 133*437bfbebSnyanmisaka RK_U32 reserve : 16; 134*437bfbebSnyanmisaka } reg90; 135*437bfbebSnyanmisaka 136*437bfbebSnyanmisaka struct SWREG91_VP9_GREF_VER_SCALE { 137*437bfbebSnyanmisaka RK_U32 gref_ver_scale : 16; 138*437bfbebSnyanmisaka RK_U32 reserve : 16; 139*437bfbebSnyanmisaka } reg91; 140*437bfbebSnyanmisaka 141*437bfbebSnyanmisaka struct SWREG92_VP9_AREF_HOR_SCALE { 142*437bfbebSnyanmisaka RK_U32 aref_hor_scale : 16; 143*437bfbebSnyanmisaka RK_U32 reserve : 16; 144*437bfbebSnyanmisaka } reg92; 145*437bfbebSnyanmisaka 146*437bfbebSnyanmisaka struct SWREG93_VP9_AREF_VER_SCALE { 147*437bfbebSnyanmisaka RK_U32 aref_ver_scale : 16; 148*437bfbebSnyanmisaka RK_U32 reserve : 16; 149*437bfbebSnyanmisaka } reg93; 150*437bfbebSnyanmisaka 151*437bfbebSnyanmisaka struct SWREG94_VP9_REF_DELTAS_LASTFRAME { 152*437bfbebSnyanmisaka RK_U32 ref_deltas_lastframe : 28; 153*437bfbebSnyanmisaka RK_U32 reserve : 4; 154*437bfbebSnyanmisaka } reg94; 155*437bfbebSnyanmisaka 156*437bfbebSnyanmisaka struct SWREG95_LAST_POC { 157*437bfbebSnyanmisaka RK_U32 last_poc : 32; 158*437bfbebSnyanmisaka } reg95; 159*437bfbebSnyanmisaka 160*437bfbebSnyanmisaka struct SWREG96_GOLDEN_POC { 161*437bfbebSnyanmisaka RK_U32 golden_poc : 32; 162*437bfbebSnyanmisaka } reg96; 163*437bfbebSnyanmisaka 164*437bfbebSnyanmisaka struct SWREG97_ALTREF_POC { 165*437bfbebSnyanmisaka RK_U32 altref_poc : 32; 166*437bfbebSnyanmisaka } reg97; 167*437bfbebSnyanmisaka 168*437bfbebSnyanmisaka struct SWREG98_COF_REF_POC { 169*437bfbebSnyanmisaka RK_U32 col_ref_poc : 32; 170*437bfbebSnyanmisaka } reg98; 171*437bfbebSnyanmisaka 172*437bfbebSnyanmisaka struct SWREG99_PROB_REF_POC { 173*437bfbebSnyanmisaka RK_U32 prob_ref_poc : 32; 174*437bfbebSnyanmisaka } reg99; 175*437bfbebSnyanmisaka 176*437bfbebSnyanmisaka struct SWREG100_SEGID_REF_POC { 177*437bfbebSnyanmisaka RK_U32 segid_ref_poc : 32; 178*437bfbebSnyanmisaka } reg100; 179*437bfbebSnyanmisaka 180*437bfbebSnyanmisaka RK_U32 reg101_102_no_use[2]; 181*437bfbebSnyanmisaka 182*437bfbebSnyanmisaka struct SWREG103_VP9_PROB_EN { 183*437bfbebSnyanmisaka RK_U32 reserve : 20; 184*437bfbebSnyanmisaka RK_U32 prob_update_en : 1; 185*437bfbebSnyanmisaka RK_U32 refresh_en : 1; 186*437bfbebSnyanmisaka RK_U32 prob_save_en : 1; 187*437bfbebSnyanmisaka RK_U32 intra_only_flag : 1; 188*437bfbebSnyanmisaka 189*437bfbebSnyanmisaka RK_U32 txfmmode_rfsh_en : 1; 190*437bfbebSnyanmisaka RK_U32 ref_mode_rfsh_en : 1; 191*437bfbebSnyanmisaka RK_U32 single_ref_rfsh_en : 1; 192*437bfbebSnyanmisaka RK_U32 comp_ref_rfsh_en : 1; 193*437bfbebSnyanmisaka 194*437bfbebSnyanmisaka RK_U32 interp_filter_switch_en : 1; 195*437bfbebSnyanmisaka RK_U32 allow_high_precision_mv : 1; 196*437bfbebSnyanmisaka RK_U32 last_key_frame_flag : 1; 197*437bfbebSnyanmisaka RK_U32 inter_coef_rfsh_flag : 1; 198*437bfbebSnyanmisaka } reg103; 199*437bfbebSnyanmisaka 200*437bfbebSnyanmisaka RK_U32 reg104_no_use; 201*437bfbebSnyanmisaka 202*437bfbebSnyanmisaka struct SWREG105_VP9CNT_UPD_EN_AVS2_HEADLEN { 203*437bfbebSnyanmisaka RK_U32 avs2_head_len : 4; 204*437bfbebSnyanmisaka RK_U32 count_update_en : 1; 205*437bfbebSnyanmisaka RK_U32 reserve : 27; 206*437bfbebSnyanmisaka } reg105; 207*437bfbebSnyanmisaka 208*437bfbebSnyanmisaka struct SWREG106_VP9_FRAME_WIDTH_LAST { 209*437bfbebSnyanmisaka RK_U32 framewidth_last : 16; 210*437bfbebSnyanmisaka RK_U32 reserve : 16; 211*437bfbebSnyanmisaka } reg106; 212*437bfbebSnyanmisaka 213*437bfbebSnyanmisaka struct SWREG107_VP9_FRAME_HEIGHT_LAST { 214*437bfbebSnyanmisaka RK_U32 frameheight_last : 16; 215*437bfbebSnyanmisaka RK_U32 reserve : 16; 216*437bfbebSnyanmisaka } reg107; 217*437bfbebSnyanmisaka 218*437bfbebSnyanmisaka struct SWREG108_VP9_FRAME_WIDTH_GOLDEN { 219*437bfbebSnyanmisaka RK_U32 framewidth_golden : 16; 220*437bfbebSnyanmisaka RK_U32 reserve : 16; 221*437bfbebSnyanmisaka } reg108; 222*437bfbebSnyanmisaka 223*437bfbebSnyanmisaka struct SWREG109_VP9_FRAME_HEIGHT_GOLDEN { 224*437bfbebSnyanmisaka RK_U32 frameheight_golden : 16; 225*437bfbebSnyanmisaka RK_U32 reserve : 16; 226*437bfbebSnyanmisaka } reg109; 227*437bfbebSnyanmisaka 228*437bfbebSnyanmisaka struct SWREG110_VP9_FRAME_WIDTH_ALTREF { 229*437bfbebSnyanmisaka RK_U32 framewidth_alfter : 16; 230*437bfbebSnyanmisaka RK_U32 reserve : 16; 231*437bfbebSnyanmisaka } reg110; 232*437bfbebSnyanmisaka 233*437bfbebSnyanmisaka struct SWREG111_VP9_FRAME_HEIGHT_ALTREF { 234*437bfbebSnyanmisaka RK_U32 frameheight_alfter : 16; 235*437bfbebSnyanmisaka RK_U32 reserve : 16; 236*437bfbebSnyanmisaka } reg111; 237*437bfbebSnyanmisaka 238*437bfbebSnyanmisaka struct SWREG112_ERROR_REF_INFO { 239*437bfbebSnyanmisaka RK_U32 ref_error_field : 1; 240*437bfbebSnyanmisaka RK_U32 ref_error_topfield : 1; 241*437bfbebSnyanmisaka RK_U32 ref_error_topfield_used : 1; 242*437bfbebSnyanmisaka RK_U32 ref_error_botfield_used : 1; 243*437bfbebSnyanmisaka RK_U32 reserve : 28; 244*437bfbebSnyanmisaka } reg112; 245*437bfbebSnyanmisaka 246*437bfbebSnyanmisaka } Vdpu34xRegVp9dParam; 247*437bfbebSnyanmisaka 248*437bfbebSnyanmisaka typedef struct Vdpu34xRegVp9dAddr_t { 249*437bfbebSnyanmisaka 250*437bfbebSnyanmisaka RK_U32 reg160_delta_prob_base; 251*437bfbebSnyanmisaka 252*437bfbebSnyanmisaka RK_U32 reg161_pps_base; 253*437bfbebSnyanmisaka 254*437bfbebSnyanmisaka RK_U32 reg162_last_prob_base; 255*437bfbebSnyanmisaka 256*437bfbebSnyanmisaka RK_U32 reg163_rps_base; 257*437bfbebSnyanmisaka 258*437bfbebSnyanmisaka RK_U32 reg164_ref_last_base; 259*437bfbebSnyanmisaka 260*437bfbebSnyanmisaka RK_U32 reg165_ref_golden_base; 261*437bfbebSnyanmisaka 262*437bfbebSnyanmisaka RK_U32 reg166_ref_alfter_base; 263*437bfbebSnyanmisaka 264*437bfbebSnyanmisaka RK_U32 reg167_count_prob_base; 265*437bfbebSnyanmisaka 266*437bfbebSnyanmisaka RK_U32 reg168_segidlast_base; 267*437bfbebSnyanmisaka 268*437bfbebSnyanmisaka RK_U32 reg169_segidcur_base; 269*437bfbebSnyanmisaka 270*437bfbebSnyanmisaka RK_U32 reg170_ref_colmv_base; 271*437bfbebSnyanmisaka 272*437bfbebSnyanmisaka RK_U32 reg171_intercmd_base; 273*437bfbebSnyanmisaka 274*437bfbebSnyanmisaka RK_U32 reg172_update_prob_wr_base; 275*437bfbebSnyanmisaka 276*437bfbebSnyanmisaka RK_U32 reg173_179_no_use[7]; 277*437bfbebSnyanmisaka 278*437bfbebSnyanmisaka RK_U32 reg180_scanlist_base; 279*437bfbebSnyanmisaka 280*437bfbebSnyanmisaka RK_U32 reg181_196_ref_colmv_base[16]; 281*437bfbebSnyanmisaka 282*437bfbebSnyanmisaka RK_U32 reg197_cabactbl_base; 283*437bfbebSnyanmisaka } Vdpu34xRegVp9dAddr; 284*437bfbebSnyanmisaka 285*437bfbebSnyanmisaka typedef struct Vdpu34xVp9dRegSet_t { 286*437bfbebSnyanmisaka Vdpu34xRegCommon common; 287*437bfbebSnyanmisaka Vdpu34xRegVp9dParam vp9d_param; 288*437bfbebSnyanmisaka Vdpu34xRegCommonAddr common_addr; 289*437bfbebSnyanmisaka Vdpu34xRegVp9dAddr vp9d_addr; 290*437bfbebSnyanmisaka Vdpu34xRegIrqStatus irq_status; 291*437bfbebSnyanmisaka Vdpu34xRegStatistic statistic; 292*437bfbebSnyanmisaka } Vdpu34xVp9dRegSet; 293*437bfbebSnyanmisaka 294*437bfbebSnyanmisaka #endif /* __HAL_VDPU34X_VP9D_H__ */