1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2015 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_H264E_VEPU541_REG_H__ 18*437bfbebSnyanmisaka #define __HAL_H264E_VEPU541_REG_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "vepu541_common.h" 21*437bfbebSnyanmisaka 22*437bfbebSnyanmisaka typedef struct Vepu541H264eRegSet_t { 23*437bfbebSnyanmisaka /* 24*437bfbebSnyanmisaka * VERSION 25*437bfbebSnyanmisaka * Address: 0x0000 Access type: read only 26*437bfbebSnyanmisaka * VEPU version. It contains IP function summary and sub-version informations. 27*437bfbebSnyanmisaka */ 28*437bfbebSnyanmisaka struct { 29*437bfbebSnyanmisaka /* Sub-version(version 1.1) */ 30*437bfbebSnyanmisaka RK_U32 sub_ver : 8; 31*437bfbebSnyanmisaka /* Support H.264 encoding */ 32*437bfbebSnyanmisaka RK_U32 h264_enc : 1; 33*437bfbebSnyanmisaka /* Support HEVC encoding */ 34*437bfbebSnyanmisaka RK_U32 h265_enc : 1; 35*437bfbebSnyanmisaka RK_U32 reserved0 : 2; 36*437bfbebSnyanmisaka /* 37*437bfbebSnyanmisaka * The maximum resolution supported 38*437bfbebSnyanmisaka * 4'd0: 4096x2304 pixels; 39*437bfbebSnyanmisaka * 4'd1: 1920x1088 pixels; 40*437bfbebSnyanmisaka * others: reserved 41*437bfbebSnyanmisaka */ 42*437bfbebSnyanmisaka RK_U32 pic_size : 4; 43*437bfbebSnyanmisaka /* 44*437bfbebSnyanmisaka * OSD capability. 45*437bfbebSnyanmisaka * 2'd0: 8-area OSD, with 256-color palette 46*437bfbebSnyanmisaka * 2'd3: no OSD 47*437bfbebSnyanmisaka * others: reserved 48*437bfbebSnyanmisaka */ 49*437bfbebSnyanmisaka RK_U32 osd_cap : 2; 50*437bfbebSnyanmisaka /* 51*437bfbebSnyanmisaka * pre-process filter capability 52*437bfbebSnyanmisaka * 2'd0: basic pre-process filter 53*437bfbebSnyanmisaka * 2'd3: no pre-process filter 54*437bfbebSnyanmisaka * others: reserved 55*437bfbebSnyanmisaka */ 56*437bfbebSnyanmisaka RK_U32 filtr_cap : 2; 57*437bfbebSnyanmisaka /* B frame encoding capability */ 58*437bfbebSnyanmisaka RK_U32 bfrm_cap : 1; 59*437bfbebSnyanmisaka /* frame buffer compress capability */ 60*437bfbebSnyanmisaka RK_U32 fbc_cap : 1; 61*437bfbebSnyanmisaka RK_U32 reserved1 : 2; 62*437bfbebSnyanmisaka /* IP indentifier for RKVENC default: 0x50 */ 63*437bfbebSnyanmisaka RK_U32 rkvenc_ver : 8; 64*437bfbebSnyanmisaka } reg000; 65*437bfbebSnyanmisaka 66*437bfbebSnyanmisaka /* 67*437bfbebSnyanmisaka * ENC_STRT 68*437bfbebSnyanmisaka * Address: 0x0004 Access type: read and write/write only 69*437bfbebSnyanmisaka * Start cmd register.(auto clock gating enable, auto reset enable and 70*437bfbebSnyanmisaka * tmvp adjust enable when frame done are also allocated here.) 71*437bfbebSnyanmisaka */ 72*437bfbebSnyanmisaka struct { 73*437bfbebSnyanmisaka /* 74*437bfbebSnyanmisaka * Number of new nodes in link table. 75*437bfbebSnyanmisaka * It's valid only when rkvenc_cmd is 2 or 3. 76*437bfbebSnyanmisaka */ 77*437bfbebSnyanmisaka RK_U32 lkt_num : 8; 78*437bfbebSnyanmisaka /* 79*437bfbebSnyanmisaka * Rockchip video encoder command: 80*437bfbebSnyanmisaka * 2'd0: N/A 81*437bfbebSnyanmisaka * 2'd1: one frame encode by register configuration 82*437bfbebSnyanmisaka * 2'd2: multi-frame encode start with link table 83*437bfbebSnyanmisaka * 2'd3: multi_frame_encode link table update 84*437bfbebSnyanmisaka */ 85*437bfbebSnyanmisaka RK_U32 rkvenc_cmd : 2; 86*437bfbebSnyanmisaka RK_U32 reserved0 : 6; 87*437bfbebSnyanmisaka /* RKVENC encoder clock gating enable */ 88*437bfbebSnyanmisaka RK_U32 clk_gate_en : 1; 89*437bfbebSnyanmisaka /* auto reset core clock domain when frame finished */ 90*437bfbebSnyanmisaka RK_U32 resetn_hw_en : 1; 91*437bfbebSnyanmisaka /* wait tmvp write done by dma */ 92*437bfbebSnyanmisaka RK_U32 enc_done_tmvp_en : 1; 93*437bfbebSnyanmisaka RK_U32 reserved1 : 13; 94*437bfbebSnyanmisaka } reg001; 95*437bfbebSnyanmisaka 96*437bfbebSnyanmisaka /* 97*437bfbebSnyanmisaka * ENC_CLR 98*437bfbebSnyanmisaka * Address offset: 0x0008 Access type: read and write 99*437bfbebSnyanmisaka * ENC_CLR.safe_clr only clears RKVENC DMA and confirms the integrity of 100*437bfbebSnyanmisaka * AXI transactions. To execute the global reset of RKVENC, user needs to 101*437bfbebSnyanmisaka * configure SOC CRU register which controls RKVENC's asynchronous reset 102*437bfbebSnyanmisaka */ 103*437bfbebSnyanmisaka struct { 104*437bfbebSnyanmisaka /* 105*437bfbebSnyanmisaka * Safe clear. This filed only clears DMA module to confirm the 106*437bfbebSnyanmisaka * integrity of AXI transactions 107*437bfbebSnyanmisaka */ 108*437bfbebSnyanmisaka RK_U32 safe_clr : 1; 109*437bfbebSnyanmisaka /* 110*437bfbebSnyanmisaka * Force clear. Clear all the sub modules besides regfile and AHB data 111*437bfbebSnyanmisaka * path. 112*437bfbebSnyanmisaka */ 113*437bfbebSnyanmisaka RK_U32 force_clr : 1; 114*437bfbebSnyanmisaka RK_U32 reserved : 30; 115*437bfbebSnyanmisaka } reg002; 116*437bfbebSnyanmisaka 117*437bfbebSnyanmisaka /* 118*437bfbebSnyanmisaka * LKT_ADDR 119*437bfbebSnyanmisaka * Address offset: 0x000c Access type: read and write 120*437bfbebSnyanmisaka * Link table 121*437bfbebSnyanmisaka */ 122*437bfbebSnyanmisaka struct { 123*437bfbebSnyanmisaka /* 124*437bfbebSnyanmisaka * High 28 bits of the address for the first node in current link table 125*437bfbebSnyanmisaka * (16bytes aligned) 126*437bfbebSnyanmisaka */ 127*437bfbebSnyanmisaka RK_U32 lkt_addr : 32; 128*437bfbebSnyanmisaka } reg003; 129*437bfbebSnyanmisaka 130*437bfbebSnyanmisaka /* 131*437bfbebSnyanmisaka * INT_EN 132*437bfbebSnyanmisaka * Address offset: 0x0010 Access type: read and write 133*437bfbebSnyanmisaka * VEPU interrupt enable 134*437bfbebSnyanmisaka */ 135*437bfbebSnyanmisaka struct { 136*437bfbebSnyanmisaka /* One frame encode finish interrupt enable */ 137*437bfbebSnyanmisaka RK_U32 enc_done_en : 1; 138*437bfbebSnyanmisaka /* Link table finish interrupt enable */ 139*437bfbebSnyanmisaka RK_U32 lkt_done_en : 1; 140*437bfbebSnyanmisaka /* Safe clear finish interrupt enable */ 141*437bfbebSnyanmisaka RK_U32 sclr_done_en : 1; 142*437bfbebSnyanmisaka /* Safe clear finish interrupt enable */ 143*437bfbebSnyanmisaka RK_U32 enc_slice_done_en : 1; 144*437bfbebSnyanmisaka /* Bit stream overflow interrupt enable */ 145*437bfbebSnyanmisaka RK_U32 oflw_done_en : 1; 146*437bfbebSnyanmisaka /* AXI write response fifo full interrupt enable */ 147*437bfbebSnyanmisaka RK_U32 brsp_done_en : 1; 148*437bfbebSnyanmisaka /* AXI write response channel error interrupt enable */ 149*437bfbebSnyanmisaka RK_U32 berr_done_en : 1; 150*437bfbebSnyanmisaka /* AXI read channel error interrupt enable */ 151*437bfbebSnyanmisaka RK_U32 rerr_done_en : 1; 152*437bfbebSnyanmisaka /* timeout error interrupt enable */ 153*437bfbebSnyanmisaka RK_U32 wdg_done_en : 1; 154*437bfbebSnyanmisaka RK_U32 reserved : 23; 155*437bfbebSnyanmisaka } reg004; 156*437bfbebSnyanmisaka 157*437bfbebSnyanmisaka /* 158*437bfbebSnyanmisaka * INT_MSK 159*437bfbebSnyanmisaka * Address offset: 0x0014 Access type: read and write 160*437bfbebSnyanmisaka * VEPU interrupt mask 161*437bfbebSnyanmisaka */ 162*437bfbebSnyanmisaka struct { 163*437bfbebSnyanmisaka /* One frame encode finish interrupt mask */ 164*437bfbebSnyanmisaka RK_U32 enc_done_msk : 1; 165*437bfbebSnyanmisaka /* Link table finish interrupt mask */ 166*437bfbebSnyanmisaka RK_U32 lkt_done_msk : 1; 167*437bfbebSnyanmisaka /* Safe clear finish interrupt mask */ 168*437bfbebSnyanmisaka RK_U32 sclr_done_msk : 1; 169*437bfbebSnyanmisaka /* Safe clear finish interrupt mask */ 170*437bfbebSnyanmisaka RK_U32 enc_slice_done_msk : 1; 171*437bfbebSnyanmisaka /* Bit stream overflow interrupt mask */ 172*437bfbebSnyanmisaka RK_U32 oflw_done_msk : 1; 173*437bfbebSnyanmisaka /* AXI write response fifo full interrupt mask */ 174*437bfbebSnyanmisaka RK_U32 brsp_done_msk : 1; 175*437bfbebSnyanmisaka /* AXI write response channel error interrupt mask */ 176*437bfbebSnyanmisaka RK_U32 berr_done_msk : 1; 177*437bfbebSnyanmisaka /* AXI read channel error interrupt mask */ 178*437bfbebSnyanmisaka RK_U32 rerr_done_msk : 1; 179*437bfbebSnyanmisaka /* timeout error interrupt mask */ 180*437bfbebSnyanmisaka RK_U32 wdg_done_msk : 1; 181*437bfbebSnyanmisaka RK_U32 reserved : 23; 182*437bfbebSnyanmisaka } reg005; 183*437bfbebSnyanmisaka 184*437bfbebSnyanmisaka /* 185*437bfbebSnyanmisaka * INT_CLR 186*437bfbebSnyanmisaka * Address offset: 0x0018 Access type: read and write, write one to clear 187*437bfbebSnyanmisaka * VEPU interrupt clear 188*437bfbebSnyanmisaka */ 189*437bfbebSnyanmisaka struct { 190*437bfbebSnyanmisaka /* One frame encode finish interrupt clear */ 191*437bfbebSnyanmisaka RK_U32 enc_done_clr : 1; 192*437bfbebSnyanmisaka /* Link table finish interrupt clear */ 193*437bfbebSnyanmisaka RK_U32 lkt_done_clr : 1; 194*437bfbebSnyanmisaka /* Safe clear finish interrupt clear */ 195*437bfbebSnyanmisaka RK_U32 sclr_done_clr : 1; 196*437bfbebSnyanmisaka /* One slice encode finish interrupt clear */ 197*437bfbebSnyanmisaka RK_U32 enc_slice_done_clr : 1; 198*437bfbebSnyanmisaka /* Bit stream overflow interrupt clear */ 199*437bfbebSnyanmisaka RK_U32 oflw_done_clr : 1; 200*437bfbebSnyanmisaka /* AXI write response fifo full interrupt clear */ 201*437bfbebSnyanmisaka RK_U32 brsp_done_clr : 1; 202*437bfbebSnyanmisaka /* AXI write response channel error interrupt clear */ 203*437bfbebSnyanmisaka RK_U32 berr_done_clr : 1; 204*437bfbebSnyanmisaka /* AXI read channel error interrupt clear */ 205*437bfbebSnyanmisaka RK_U32 rerr_done_clr : 1; 206*437bfbebSnyanmisaka /* timeout error interrupt clear */ 207*437bfbebSnyanmisaka RK_U32 wdg_done_clr : 1; 208*437bfbebSnyanmisaka RK_U32 reserved : 23; 209*437bfbebSnyanmisaka } reg006; 210*437bfbebSnyanmisaka 211*437bfbebSnyanmisaka /* 212*437bfbebSnyanmisaka * INT_STA 213*437bfbebSnyanmisaka * Address offset: 0x001c Access type: read and write, write one to clear 214*437bfbebSnyanmisaka * VEPU interrupt status 215*437bfbebSnyanmisaka */ 216*437bfbebSnyanmisaka struct { 217*437bfbebSnyanmisaka /* One frame encode finish interrupt status */ 218*437bfbebSnyanmisaka RK_U32 enc_done_sta : 1; 219*437bfbebSnyanmisaka /* Link table finish interrupt status */ 220*437bfbebSnyanmisaka RK_U32 lkt_done_sta : 1; 221*437bfbebSnyanmisaka /* Safe clear finish interrupt status */ 222*437bfbebSnyanmisaka RK_U32 sclr_done_sta : 1; 223*437bfbebSnyanmisaka /* One slice encode finish interrupt status */ 224*437bfbebSnyanmisaka RK_U32 enc_slice_done_sta : 1; 225*437bfbebSnyanmisaka /* Bit stream overflow interrupt status */ 226*437bfbebSnyanmisaka RK_U32 oflw_done_sta : 1; 227*437bfbebSnyanmisaka /* AXI write response fifo full interrupt status */ 228*437bfbebSnyanmisaka RK_U32 brsp_done_sta : 1; 229*437bfbebSnyanmisaka /* AXI write response channel error interrupt status */ 230*437bfbebSnyanmisaka RK_U32 berr_done_sta : 1; 231*437bfbebSnyanmisaka /* AXI read channel error interrupt status */ 232*437bfbebSnyanmisaka RK_U32 rerr_done_sta : 1; 233*437bfbebSnyanmisaka /* timeout error interrupt status */ 234*437bfbebSnyanmisaka RK_U32 wdg_done_sta : 1; 235*437bfbebSnyanmisaka RK_U32 reserved : 23; 236*437bfbebSnyanmisaka } reg007; 237*437bfbebSnyanmisaka 238*437bfbebSnyanmisaka /* reg gap 008~011 */ 239*437bfbebSnyanmisaka RK_U32 reg_008_011[4]; 240*437bfbebSnyanmisaka 241*437bfbebSnyanmisaka /* 242*437bfbebSnyanmisaka * ENC_RSL 243*437bfbebSnyanmisaka * Address offset: 0x0030 Access type: read and write 244*437bfbebSnyanmisaka * Resolution 245*437bfbebSnyanmisaka */ 246*437bfbebSnyanmisaka struct { 247*437bfbebSnyanmisaka /* ceil(picture width/8) - 1 */ 248*437bfbebSnyanmisaka RK_U32 pic_wd8_m1 : 9; 249*437bfbebSnyanmisaka RK_U32 reserved0 : 1; 250*437bfbebSnyanmisaka /* filling pixels to maintain picture width 8 pixels aligned */ 251*437bfbebSnyanmisaka RK_U32 pic_wfill : 6; 252*437bfbebSnyanmisaka /* Ceil(picture_height/8)-1 */ 253*437bfbebSnyanmisaka RK_U32 pic_hd8_m1 : 9; 254*437bfbebSnyanmisaka RK_U32 reserved1 : 1; 255*437bfbebSnyanmisaka /* Filling pixels to maintain picture height 8 pixels aligned */ 256*437bfbebSnyanmisaka RK_U32 pic_hfill : 6; 257*437bfbebSnyanmisaka } reg012; 258*437bfbebSnyanmisaka 259*437bfbebSnyanmisaka /* 260*437bfbebSnyanmisaka * ENC_PIC 261*437bfbebSnyanmisaka * Address offset: 0x0034 Access type: read and write 262*437bfbebSnyanmisaka * VEPU common configuration 263*437bfbebSnyanmisaka */ 264*437bfbebSnyanmisaka struct { 265*437bfbebSnyanmisaka /* Video standard: 0->H.264; 1->HEVC */ 266*437bfbebSnyanmisaka RK_U32 enc_stnd : 1; 267*437bfbebSnyanmisaka /* ROI encode enable */ 268*437bfbebSnyanmisaka RK_U32 roi_enc : 1; 269*437bfbebSnyanmisaka /* Current frame should be refered in future */ 270*437bfbebSnyanmisaka RK_U32 cur_frm_ref : 1; 271*437bfbebSnyanmisaka /* Output ME information */ 272*437bfbebSnyanmisaka RK_U32 mei_stor : 1; 273*437bfbebSnyanmisaka /* Output start code prefix */ 274*437bfbebSnyanmisaka RK_U32 bs_scp : 1; 275*437bfbebSnyanmisaka /* 0: select table A, 1: select table B */ 276*437bfbebSnyanmisaka RK_U32 lamb_mod_sel : 1; 277*437bfbebSnyanmisaka RK_U32 reserved0 : 2; 278*437bfbebSnyanmisaka /* QP value for current frame encoding */ 279*437bfbebSnyanmisaka RK_U32 pic_qp : 6; 280*437bfbebSnyanmisaka /* sum of reference pictures (indexed by difference POCs), HEVC only */ 281*437bfbebSnyanmisaka RK_U32 tot_poc_num : 5; 282*437bfbebSnyanmisaka /* bit width to express the maximum ctu number in current picure, HEVC only */ 283*437bfbebSnyanmisaka RK_U32 log2_ctu_num : 4; 284*437bfbebSnyanmisaka /* 1'h0: Select atr_thd group 1'h1: Select atr_thd group1 */ 285*437bfbebSnyanmisaka RK_U32 atr_thd_sel : 1; 286*437bfbebSnyanmisaka /* Dual-core handshake Rx ID. */ 287*437bfbebSnyanmisaka RK_U32 dchs_rxid : 2; 288*437bfbebSnyanmisaka /* Dual-core handshake tx ID. */ 289*437bfbebSnyanmisaka RK_U32 dchs_txid : 2; 290*437bfbebSnyanmisaka /* Dual-core handshake rx enable. */ 291*437bfbebSnyanmisaka RK_U32 dchs_rxe : 1; 292*437bfbebSnyanmisaka /* RDO intra-prediction satd path bypass enable. */ 293*437bfbebSnyanmisaka RK_U32 satd_byps_en : 1; 294*437bfbebSnyanmisaka /* Slice length fifo enable. */ 295*437bfbebSnyanmisaka RK_U32 slen_fifo : 1; 296*437bfbebSnyanmisaka /* Node interrupt enable (only for link table node configuration). */ 297*437bfbebSnyanmisaka RK_U32 node_int : 1; 298*437bfbebSnyanmisaka } reg013; 299*437bfbebSnyanmisaka 300*437bfbebSnyanmisaka /* 301*437bfbebSnyanmisaka * ENC_WDG 302*437bfbebSnyanmisaka * Address offset: 0x0038 Access type: read and write 303*437bfbebSnyanmisaka * VEPU watch dog configure register 304*437bfbebSnyanmisaka */ 305*437bfbebSnyanmisaka struct { 306*437bfbebSnyanmisaka /* 307*437bfbebSnyanmisaka * Video source loading timeout threshold. 308*437bfbebSnyanmisaka * 24'h0: No time limit 309*437bfbebSnyanmisaka * 24'hx: x*256 core clock cycles 310*437bfbebSnyanmisaka */ 311*437bfbebSnyanmisaka RK_U32 vs_load_thd : 24; 312*437bfbebSnyanmisaka /* 313*437bfbebSnyanmisaka * Reference picture loading timeout threshold. 314*437bfbebSnyanmisaka * 8'h0: No time limit 315*437bfbebSnyanmisaka * 8'hx: x*256 core clock cycles 316*437bfbebSnyanmisaka */ 317*437bfbebSnyanmisaka RK_U32 rfp_load_thrd : 8; 318*437bfbebSnyanmisaka } reg014; 319*437bfbebSnyanmisaka 320*437bfbebSnyanmisaka /* 321*437bfbebSnyanmisaka * DTRNS_MAP 322*437bfbebSnyanmisaka * Address offset: 0x003c Access type: read and write 323*437bfbebSnyanmisaka * Data transaction mapping (endian and order) 324*437bfbebSnyanmisaka */ 325*437bfbebSnyanmisaka struct { 326*437bfbebSnyanmisaka /* swap the position of 64bits in 128bits for lpf write data between tiles */ 327*437bfbebSnyanmisaka RK_U32 lpfw_bus_ordr : 1; 328*437bfbebSnyanmisaka /* Swap the position of 64 bits in 128 bits for co-located Mv(HEVC only). */ 329*437bfbebSnyanmisaka RK_U32 cmvw_bus_ordr : 1; 330*437bfbebSnyanmisaka /* Swap the position of 64 bits in 128 bits for down-sampled picture. */ 331*437bfbebSnyanmisaka RK_U32 dspw_bus_ordr : 1; 332*437bfbebSnyanmisaka /* Swap the position of 64 bits in 128 bits for reference picture. */ 333*437bfbebSnyanmisaka RK_U32 rfpw_bus_ordr : 1; 334*437bfbebSnyanmisaka /* 335*437bfbebSnyanmisaka * Data swap for video source loading channel. 336*437bfbebSnyanmisaka * [3]: Swap 64 bits in 128 bits 337*437bfbebSnyanmisaka * [2]: Swap 32 bits in 64 bits 338*437bfbebSnyanmisaka * [1]: Swap 16 bits in 32 bits 339*437bfbebSnyanmisaka * [0]: Swap 8 bits in 16 bits 340*437bfbebSnyanmisaka */ 341*437bfbebSnyanmisaka RK_U32 src_bus_edin : 4; 342*437bfbebSnyanmisaka /* 343*437bfbebSnyanmisaka * Data swap for ME information write channel. 344*437bfbebSnyanmisaka * [3]: Swap 64 bits in 128 bits 345*437bfbebSnyanmisaka * [2]: Swap 32 bits in 64 bits 346*437bfbebSnyanmisaka * [1]: Swap 16 bits in 32 bits 347*437bfbebSnyanmisaka * [0]: Swap 8 bits in 16 bits 348*437bfbebSnyanmisaka */ 349*437bfbebSnyanmisaka RK_U32 meiw_bus_edin : 4; 350*437bfbebSnyanmisaka /* 351*437bfbebSnyanmisaka * Data swap for bis stream write channel. 352*437bfbebSnyanmisaka * [2]: Swap 32 bits in 64 bits 353*437bfbebSnyanmisaka * [1]: Swap 16 bits in 32 bits 354*437bfbebSnyanmisaka * [0]: Swap 8 bits in 16 bits 355*437bfbebSnyanmisaka */ 356*437bfbebSnyanmisaka RK_U32 bsw_bus_edin : 3; 357*437bfbebSnyanmisaka /* 358*437bfbebSnyanmisaka * Data swap for link table read channel. 359*437bfbebSnyanmisaka * [3]: Swap 64 bits in 128 bits 360*437bfbebSnyanmisaka * [2]: Swap 32 bits in 64 bits 361*437bfbebSnyanmisaka * [1]: Swap 16 bits in 32 bits 362*437bfbebSnyanmisaka * [0]: Swap 8 bits in 16 bits 363*437bfbebSnyanmisaka */ 364*437bfbebSnyanmisaka RK_U32 lktr_bus_edin : 4; 365*437bfbebSnyanmisaka /* 366*437bfbebSnyanmisaka * Data swap for ROI configuration read channel. 367*437bfbebSnyanmisaka * [3]: Swap 64 bits in 128 bits 368*437bfbebSnyanmisaka * [2]: Swap 32 bits in 64 bits 369*437bfbebSnyanmisaka * [1]: Swap 16 bits in 32 bits 370*437bfbebSnyanmisaka * [0]: Swap 8 bits in 16 bits 371*437bfbebSnyanmisaka */ 372*437bfbebSnyanmisaka RK_U32 roir_bus_edin : 4; 373*437bfbebSnyanmisaka /* 374*437bfbebSnyanmisaka * Data swap for link table write channel. 375*437bfbebSnyanmisaka * [3]: Swap 64 bits in 128 bits 376*437bfbebSnyanmisaka * [2]: Swap 32 bits in 64 bits 377*437bfbebSnyanmisaka * [1]: Swap 16 bits in 32 bits 378*437bfbebSnyanmisaka * [0]: Swap 8 bits in 16 bits 379*437bfbebSnyanmisaka */ 380*437bfbebSnyanmisaka RK_U32 lktw_bus_edin : 4; 381*437bfbebSnyanmisaka /* 382*437bfbebSnyanmisaka * AFBC video source loading burst size. 383*437bfbebSnyanmisaka * 1'h0: 32 bytes 384*437bfbebSnyanmisaka * 1'h1: 64 bytes 385*437bfbebSnyanmisaka */ 386*437bfbebSnyanmisaka RK_U32 afbc_bsize : 1; 387*437bfbebSnyanmisaka RK_U32 reserved1 : 4; 388*437bfbebSnyanmisaka } reg015; 389*437bfbebSnyanmisaka 390*437bfbebSnyanmisaka /* 391*437bfbebSnyanmisaka * DTRNS_CFG 392*437bfbebSnyanmisaka * Address offset: 0x0040 Access type: read and write 393*437bfbebSnyanmisaka * (AXI bus) Data transaction configuration 394*437bfbebSnyanmisaka */ 395*437bfbebSnyanmisaka union { 396*437bfbebSnyanmisaka struct vepu541_t { 397*437bfbebSnyanmisaka /* 398*437bfbebSnyanmisaka * AXI write response channel check enable. 399*437bfbebSnyanmisaka * [6]: Reconstructed picture write response check enable. 400*437bfbebSnyanmisaka * [5]: ME information write response check enable. 401*437bfbebSnyanmisaka * [4]: CTU information write response check enable. 402*437bfbebSnyanmisaka * [3]: Down-sampled picture write response check enable. 403*437bfbebSnyanmisaka * [2]: Bit stream write response check enable. 404*437bfbebSnyanmisaka * [1]: Link table mode write reponse check enable. 405*437bfbebSnyanmisaka * [0]: Reserved for video preprocess. 406*437bfbebSnyanmisaka */ 407*437bfbebSnyanmisaka RK_U32 axi_brsp_cke : 7; 408*437bfbebSnyanmisaka /* 409*437bfbebSnyanmisaka * Down sampled reference picture read outstanding enable. 410*437bfbebSnyanmisaka * 1'h0: No outstanding 411*437bfbebSnyanmisaka * 1'h1: Outstanding read, which improves data transaction efficiency, 412*437bfbebSnyanmisaka * but core clock frequency should not lower than bus clock frequency. 413*437bfbebSnyanmisaka */ 414*437bfbebSnyanmisaka RK_U32 dspr_otsd : 1; 415*437bfbebSnyanmisaka RK_U32 reserved : 24; 416*437bfbebSnyanmisaka } vepu541; 417*437bfbebSnyanmisaka 418*437bfbebSnyanmisaka struct vepu540_t { 419*437bfbebSnyanmisaka RK_U32 reserved0 : 7; 420*437bfbebSnyanmisaka /* 421*437bfbebSnyanmisaka * Down sampled reference picture read outstanding enable. 422*437bfbebSnyanmisaka * 1'h0: No outstanding 423*437bfbebSnyanmisaka * 1'h1: Outstanding read, which improves data transaction efficiency, 424*437bfbebSnyanmisaka * but core clock frequency should not lower than bus clock frequency. 425*437bfbebSnyanmisaka */ 426*437bfbebSnyanmisaka RK_U32 dspr_otsd : 1; 427*437bfbebSnyanmisaka RK_U32 reserved1 : 8; 428*437bfbebSnyanmisaka /* 429*437bfbebSnyanmisaka * AXI write response channel check enable. 430*437bfbebSnyanmisaka * [7]: lpf write response check enable 431*437bfbebSnyanmisaka * [6]: Reconstructed picture write response check enable. 432*437bfbebSnyanmisaka * [5]: ME information write response check enable. 433*437bfbebSnyanmisaka * [4]: CTU information write response check enable. 434*437bfbebSnyanmisaka * [3]: Down-sampled picture write response check enable. 435*437bfbebSnyanmisaka * [2]: Bit stream write response check enable. 436*437bfbebSnyanmisaka * [1]: Link table mode write reponse check enable. 437*437bfbebSnyanmisaka * [0]: Reserved for video preprocess. 438*437bfbebSnyanmisaka */ 439*437bfbebSnyanmisaka RK_U32 axi_brsp_cke : 8; 440*437bfbebSnyanmisaka RK_U32 reserved2 : 8; 441*437bfbebSnyanmisaka } vepu540; 442*437bfbebSnyanmisaka } reg016; 443*437bfbebSnyanmisaka 444*437bfbebSnyanmisaka /* 445*437bfbebSnyanmisaka * SRC_FMT 446*437bfbebSnyanmisaka * Address offset: 0x0044 Access type: read and write 447*437bfbebSnyanmisaka * Video source format 448*437bfbebSnyanmisaka */ 449*437bfbebSnyanmisaka struct { 450*437bfbebSnyanmisaka /* 451*437bfbebSnyanmisaka * Swap the position of alpha and RGB for ARBG8888. 452*437bfbebSnyanmisaka * 1'h0: BGRA8888 or RGBA8888. 453*437bfbebSnyanmisaka * 1'h1: ABGR8888 or ARGB8888. 454*437bfbebSnyanmisaka */ 455*437bfbebSnyanmisaka RK_U32 alpha_swap : 1; 456*437bfbebSnyanmisaka /* 457*437bfbebSnyanmisaka * Swap the position of R and B for BGRA8888, RGB888, RGB 656 format; 458*437bfbebSnyanmisaka * Swap the position of U and V for YUV422-SP, YUV420-SP, YUYV422 and UYUV422 format. 459*437bfbebSnyanmisaka * 1'h0: RGB or YUYV or UYVY. 460*437bfbebSnyanmisaka * 1'h1: BGR or YVYU or VYUY. 461*437bfbebSnyanmisaka */ 462*437bfbebSnyanmisaka RK_U32 rbuv_swap : 1; 463*437bfbebSnyanmisaka /* 464*437bfbebSnyanmisaka * Video source color format. 465*437bfbebSnyanmisaka * 4'h0: BGRA8888 466*437bfbebSnyanmisaka * 4'h1: RGB888 467*437bfbebSnyanmisaka * 4'h2: RGB565 468*437bfbebSnyanmisaka * 4'h4: YUV422 SP 469*437bfbebSnyanmisaka * 4'h5: YUV422 P 470*437bfbebSnyanmisaka * 4'h6: YUV420 SP 471*437bfbebSnyanmisaka * 4'h7: YUV420 P 472*437bfbebSnyanmisaka * 4'h8: YUYV422 473*437bfbebSnyanmisaka * 4'h9: UYVY422 474*437bfbebSnyanmisaka * Others: Reserved 475*437bfbebSnyanmisaka */ 476*437bfbebSnyanmisaka RK_U32 src_cfmt : 4; 477*437bfbebSnyanmisaka /* 478*437bfbebSnyanmisaka * Video source clip (low active). 479*437bfbebSnyanmisaka * 1'h0: [16:235] for luma and [16:240] for chroma. 480*437bfbebSnyanmisaka * 1'h1: [0:255] for both luma and chroma. 481*437bfbebSnyanmisaka */ 482*437bfbebSnyanmisaka RK_U32 src_range : 1; 483*437bfbebSnyanmisaka /* 484*437bfbebSnyanmisaka * Ourput reconstructed frame format 485*437bfbebSnyanmisaka * 1'h0: yuv420 486*437bfbebSnyanmisaka * 1'h1: yuv400 487*437bfbebSnyanmisaka */ 488*437bfbebSnyanmisaka RK_U32 out_fmt_cfg : 1; 489*437bfbebSnyanmisaka RK_U32 reserved : 24; 490*437bfbebSnyanmisaka } reg017; 491*437bfbebSnyanmisaka 492*437bfbebSnyanmisaka /* 493*437bfbebSnyanmisaka * SRC_UDFY 494*437bfbebSnyanmisaka * Address offset: 0x0048 Access type: read and write 495*437bfbebSnyanmisaka * Weight of user defined formula for RBG to Y conversion 496*437bfbebSnyanmisaka */ 497*437bfbebSnyanmisaka struct { 498*437bfbebSnyanmisaka /* Weight of BLUE in RBG to Y conversion formula. */ 499*437bfbebSnyanmisaka RK_U32 csc_wgt_b2y : 9; 500*437bfbebSnyanmisaka /* Weight of GREEN in RBG to Y conversion formula. */ 501*437bfbebSnyanmisaka RK_U32 csc_wgt_g2y : 9; 502*437bfbebSnyanmisaka /* Weight of RED in RBG to Y conversion formula. */ 503*437bfbebSnyanmisaka RK_U32 csc_wgt_r2y : 9; 504*437bfbebSnyanmisaka RK_U32 reserved : 5; 505*437bfbebSnyanmisaka } reg018; 506*437bfbebSnyanmisaka 507*437bfbebSnyanmisaka /* 508*437bfbebSnyanmisaka * SRC_UDFU 509*437bfbebSnyanmisaka * Address offset: 0x004c Access type: read and write 510*437bfbebSnyanmisaka * Weight of user defined formula for RBG to U conversion 511*437bfbebSnyanmisaka */ 512*437bfbebSnyanmisaka struct { 513*437bfbebSnyanmisaka /* Weight of BLUE in RBG to U conversion formula. */ 514*437bfbebSnyanmisaka RK_U32 csc_wgt_b2u : 9; 515*437bfbebSnyanmisaka /* Weight of GREEN in RBG to U conversion formula. */ 516*437bfbebSnyanmisaka RK_U32 csc_wgt_g2u : 9; 517*437bfbebSnyanmisaka /* Weight of RED in RBG to U conversion formula. */ 518*437bfbebSnyanmisaka RK_U32 csc_wgt_r2u : 9; 519*437bfbebSnyanmisaka RK_U32 reserved : 5; 520*437bfbebSnyanmisaka } reg019; 521*437bfbebSnyanmisaka 522*437bfbebSnyanmisaka /* 523*437bfbebSnyanmisaka * SRC_UDFV 524*437bfbebSnyanmisaka * Address offset: 0x0050 Access type: read and write 525*437bfbebSnyanmisaka * Weight of user defined formula for RBG to V conversion 526*437bfbebSnyanmisaka */ 527*437bfbebSnyanmisaka struct { 528*437bfbebSnyanmisaka /* Weight of BLUE in RBG to V conversion formula. */ 529*437bfbebSnyanmisaka RK_U32 csc_wgt_b2v : 9; 530*437bfbebSnyanmisaka /* Weight of GREEN in RBG to V conversion formula. */ 531*437bfbebSnyanmisaka RK_U32 csc_wgt_g2v : 9; 532*437bfbebSnyanmisaka /* Weight of RED in RBG to V conversion formula. */ 533*437bfbebSnyanmisaka RK_U32 csc_wgt_r2v : 9; 534*437bfbebSnyanmisaka RK_U32 reserved : 5; 535*437bfbebSnyanmisaka } reg020; 536*437bfbebSnyanmisaka 537*437bfbebSnyanmisaka /* 538*437bfbebSnyanmisaka * SRC_UDFO 539*437bfbebSnyanmisaka * Address offset: 0x0054 Access type: read and write 540*437bfbebSnyanmisaka * Offset of user defined formula for RBG to YUV conversion 541*437bfbebSnyanmisaka */ 542*437bfbebSnyanmisaka struct { 543*437bfbebSnyanmisaka /* Offset of RBG to V conversion formula. */ 544*437bfbebSnyanmisaka RK_U32 csc_ofst_v : 8; 545*437bfbebSnyanmisaka /* Offset of RBG to U conversion formula. */ 546*437bfbebSnyanmisaka RK_U32 csc_ofst_u : 8; 547*437bfbebSnyanmisaka /* Offset of RBG to Y conversion formula. */ 548*437bfbebSnyanmisaka RK_U32 csc_ofst_y : 5; 549*437bfbebSnyanmisaka RK_U32 reserved : 11; 550*437bfbebSnyanmisaka } reg021; 551*437bfbebSnyanmisaka 552*437bfbebSnyanmisaka /* 553*437bfbebSnyanmisaka * SRC_PROC 554*437bfbebSnyanmisaka * Address offset: 0x0058 Access type: read and write 555*437bfbebSnyanmisaka * Video source process 556*437bfbebSnyanmisaka */ 557*437bfbebSnyanmisaka struct { 558*437bfbebSnyanmisaka RK_U32 reserved0 : 26; 559*437bfbebSnyanmisaka /* Video source mirror mode enable. */ 560*437bfbebSnyanmisaka RK_U32 src_mirr : 1; 561*437bfbebSnyanmisaka /* 562*437bfbebSnyanmisaka * Video source rotation mode. 563*437bfbebSnyanmisaka * 2'h0: 0 degree 564*437bfbebSnyanmisaka * 2'h1: Clockwise 90 degree 565*437bfbebSnyanmisaka * 2'h2: Clockwise 180 degree 566*437bfbebSnyanmisaka * 2'h3: Clockwise 280 degree 567*437bfbebSnyanmisaka */ 568*437bfbebSnyanmisaka RK_U32 src_rot : 2; 569*437bfbebSnyanmisaka /* Video source texture analysis enable. */ 570*437bfbebSnyanmisaka RK_U32 txa_en : 1; 571*437bfbebSnyanmisaka /* AFBC decompress enable (for AFBC format video source). */ 572*437bfbebSnyanmisaka RK_U32 afbcd_en : 1; 573*437bfbebSnyanmisaka RK_U32 reserved1 : 1; 574*437bfbebSnyanmisaka } reg022; 575*437bfbebSnyanmisaka 576*437bfbebSnyanmisaka /* 577*437bfbebSnyanmisaka * SLI_CFG_H264 578*437bfbebSnyanmisaka * Address offset: 0x005C Access type: read and write 579*437bfbebSnyanmisaka * Slice cross lines configuration, h264 only. 580*437bfbebSnyanmisaka */ 581*437bfbebSnyanmisaka struct { 582*437bfbebSnyanmisaka RK_U32 reserved0 : 31; 583*437bfbebSnyanmisaka /* 584*437bfbebSnyanmisaka * Slice cut cross lines enable, 585*437bfbebSnyanmisaka * using for breaking the resolution limit, h264 only. 586*437bfbebSnyanmisaka */ 587*437bfbebSnyanmisaka RK_U32 sli_crs_en : 1; 588*437bfbebSnyanmisaka } reg023; 589*437bfbebSnyanmisaka 590*437bfbebSnyanmisaka /* reg gap 024 */ 591*437bfbebSnyanmisaka RK_U32 reg_024; 592*437bfbebSnyanmisaka 593*437bfbebSnyanmisaka /* 594*437bfbebSnyanmisaka * KLUT_OFST 595*437bfbebSnyanmisaka * Address offset: 0x0064 Access type: read and write 596*437bfbebSnyanmisaka * Offset of (RDO) chroma cost weight table 597*437bfbebSnyanmisaka */ 598*437bfbebSnyanmisaka struct { 599*437bfbebSnyanmisaka /* Offset of (RDO) chroma cost weight table, values from 0 to 6. */ 600*437bfbebSnyanmisaka RK_U32 chrm_klut_ofst : 3; 601*437bfbebSnyanmisaka RK_U32 reserved : 1; 602*437bfbebSnyanmisaka } reg025; 603*437bfbebSnyanmisaka 604*437bfbebSnyanmisaka /* 605*437bfbebSnyanmisaka * KLUT_WGT0 606*437bfbebSnyanmisaka * Address offset: 0x0068 Access type: read and write 607*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register0 608*437bfbebSnyanmisaka */ 609*437bfbebSnyanmisaka struct { 610*437bfbebSnyanmisaka /* Data0 in chroma cost weight table. */ 611*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt0 : 18; 612*437bfbebSnyanmisaka RK_U32 reserved : 5; 613*437bfbebSnyanmisaka /* Low 9 bits of data1 in chroma cost weight table. */ 614*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt1_l9 : 9; 615*437bfbebSnyanmisaka } reg026; 616*437bfbebSnyanmisaka 617*437bfbebSnyanmisaka /* 618*437bfbebSnyanmisaka * KLUT_WGT1 619*437bfbebSnyanmisaka * Address offset: 0x006C Access type: read and write 620*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register1 621*437bfbebSnyanmisaka */ 622*437bfbebSnyanmisaka struct { 623*437bfbebSnyanmisaka /* High 9 bits of data1 in chroma cost weight table. */ 624*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt1_h9 : 9; 625*437bfbebSnyanmisaka RK_U32 reserved : 5; 626*437bfbebSnyanmisaka /* Data2 in chroma cost weight table. */ 627*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt2 : 18; 628*437bfbebSnyanmisaka } reg027; 629*437bfbebSnyanmisaka 630*437bfbebSnyanmisaka /* 631*437bfbebSnyanmisaka * KLUT_WGT2 632*437bfbebSnyanmisaka * Address offset: 0x0070 Access type: read and write 633*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register2 634*437bfbebSnyanmisaka */ 635*437bfbebSnyanmisaka struct { 636*437bfbebSnyanmisaka /* Data3 in chroma cost weight table. */ 637*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt3 : 18; 638*437bfbebSnyanmisaka RK_U32 reserved : 5; 639*437bfbebSnyanmisaka /* Low 9 bits of data4 in chroma cost weight table. */ 640*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt4_l9 : 9; 641*437bfbebSnyanmisaka } reg028; 642*437bfbebSnyanmisaka 643*437bfbebSnyanmisaka /* 644*437bfbebSnyanmisaka * KLUT_WGT3 645*437bfbebSnyanmisaka * Address offset: 0x0074 Access type: read and write 646*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register3 647*437bfbebSnyanmisaka */ 648*437bfbebSnyanmisaka struct { 649*437bfbebSnyanmisaka /* High 9 bits of data4 in chroma cost weight table. */ 650*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt4_h9 : 9; 651*437bfbebSnyanmisaka RK_U32 reserved : 5; 652*437bfbebSnyanmisaka /* Data5 in chroma cost weight table. */ 653*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt5 : 18; 654*437bfbebSnyanmisaka } reg029; 655*437bfbebSnyanmisaka 656*437bfbebSnyanmisaka /* 657*437bfbebSnyanmisaka * KLUT_WGT4 658*437bfbebSnyanmisaka * Address offset: 0x0078 Access type: read and write 659*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register4 660*437bfbebSnyanmisaka */ 661*437bfbebSnyanmisaka struct { 662*437bfbebSnyanmisaka /* Data6 in chroma cost weight table. */ 663*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt6 : 18; 664*437bfbebSnyanmisaka RK_U32 reserved : 5; 665*437bfbebSnyanmisaka /* Low 9 bits of data7 in chroma cost weight table. */ 666*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt7_l9 : 9; 667*437bfbebSnyanmisaka } reg030; 668*437bfbebSnyanmisaka 669*437bfbebSnyanmisaka /* 670*437bfbebSnyanmisaka * KLUT_WGT5 671*437bfbebSnyanmisaka * Address offset: 0x007C Access type: read and write 672*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register5 673*437bfbebSnyanmisaka */ 674*437bfbebSnyanmisaka struct { 675*437bfbebSnyanmisaka /* High 9 bits of data7 in chroma cost weight table. */ 676*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt7_h9 : 9; 677*437bfbebSnyanmisaka RK_U32 reserved : 5; 678*437bfbebSnyanmisaka /* Data8 in chroma cost weight table. */ 679*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt8 : 18; 680*437bfbebSnyanmisaka } reg031; 681*437bfbebSnyanmisaka 682*437bfbebSnyanmisaka /* 683*437bfbebSnyanmisaka * KLUT_WGT6 684*437bfbebSnyanmisaka * Address offset: 0x0080 Access type: read and write 685*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register6 686*437bfbebSnyanmisaka */ 687*437bfbebSnyanmisaka struct { 688*437bfbebSnyanmisaka /* Data9 in chroma cost weight table. */ 689*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt9 : 18; 690*437bfbebSnyanmisaka RK_U32 reserved : 5; 691*437bfbebSnyanmisaka /* Low 9 bits of data10 in chroma cost weight table. */ 692*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt10_l9 : 9; 693*437bfbebSnyanmisaka } reg032; 694*437bfbebSnyanmisaka 695*437bfbebSnyanmisaka /* 696*437bfbebSnyanmisaka * KLUT_WGT7 697*437bfbebSnyanmisaka * Address offset: 0x0084 Access type: read and write 698*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register7 699*437bfbebSnyanmisaka */ 700*437bfbebSnyanmisaka struct { 701*437bfbebSnyanmisaka /* High 9 bits of data10 in chroma cost weight table. */ 702*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt10_h9 : 9; 703*437bfbebSnyanmisaka RK_U32 reserved : 5; 704*437bfbebSnyanmisaka /* Data11 in chroma cost weight table. */ 705*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt11 : 18; 706*437bfbebSnyanmisaka } reg033; 707*437bfbebSnyanmisaka 708*437bfbebSnyanmisaka /* 709*437bfbebSnyanmisaka * KLUT_WGT8 710*437bfbebSnyanmisaka * Address offset: 0x0088 Access type: read and write 711*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register8 712*437bfbebSnyanmisaka */ 713*437bfbebSnyanmisaka struct { 714*437bfbebSnyanmisaka /* Data12 in chroma cost weight table. */ 715*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt12 : 18; 716*437bfbebSnyanmisaka RK_U32 reserved : 5; 717*437bfbebSnyanmisaka /* Low 9 bits of data13 in chroma cost weight table. */ 718*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt13_l9 : 9; 719*437bfbebSnyanmisaka } reg034; 720*437bfbebSnyanmisaka 721*437bfbebSnyanmisaka /* 722*437bfbebSnyanmisaka * KLUT_WGT9 723*437bfbebSnyanmisaka * Address offset: 0x008C Access type: read and write 724*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register9 725*437bfbebSnyanmisaka */ 726*437bfbebSnyanmisaka struct { 727*437bfbebSnyanmisaka /* High 9 bits of data13 in chroma cost weight table. */ 728*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt13_h9 : 9; 729*437bfbebSnyanmisaka RK_U32 reserved : 5; 730*437bfbebSnyanmisaka /* Data14 in chroma cost weight table. */ 731*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt14 : 18; 732*437bfbebSnyanmisaka } reg035; 733*437bfbebSnyanmisaka 734*437bfbebSnyanmisaka /* 735*437bfbebSnyanmisaka * KLUT_WGT10 736*437bfbebSnyanmisaka * Address offset: 0x0090 Access type: read and write 737*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register10 738*437bfbebSnyanmisaka */ 739*437bfbebSnyanmisaka struct { 740*437bfbebSnyanmisaka /* Data15 in chroma cost weight table. */ 741*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt15 : 18; 742*437bfbebSnyanmisaka RK_U32 reserved : 5; 743*437bfbebSnyanmisaka /* Low 9 bits of data16 in chroma cost weight table. */ 744*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt16_l9 : 9; 745*437bfbebSnyanmisaka } reg036; 746*437bfbebSnyanmisaka 747*437bfbebSnyanmisaka /* 748*437bfbebSnyanmisaka * KLUT_WGT11 749*437bfbebSnyanmisaka * Address offset: 0x0094 Access type: read and write 750*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register11 751*437bfbebSnyanmisaka */ 752*437bfbebSnyanmisaka struct { 753*437bfbebSnyanmisaka /* High 9 bits of data16 in chroma cost weight table. */ 754*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt16_h9 : 9; 755*437bfbebSnyanmisaka RK_U32 reserved : 5; 756*437bfbebSnyanmisaka /* Data17 in chroma cost weight table. */ 757*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt17 : 18; 758*437bfbebSnyanmisaka } reg037; 759*437bfbebSnyanmisaka 760*437bfbebSnyanmisaka /* 761*437bfbebSnyanmisaka * KLUT_WGT12 762*437bfbebSnyanmisaka * Address offset: 0x0098 Access type: read and write 763*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register12 764*437bfbebSnyanmisaka */ 765*437bfbebSnyanmisaka struct { 766*437bfbebSnyanmisaka /* Data18 in chroma cost weight table. */ 767*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt18 : 18; 768*437bfbebSnyanmisaka RK_U32 reserved : 5; 769*437bfbebSnyanmisaka /* Low 9 bits of data19 in chroma cost weight table. */ 770*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt19_l9 : 9; 771*437bfbebSnyanmisaka } reg038; 772*437bfbebSnyanmisaka 773*437bfbebSnyanmisaka /* 774*437bfbebSnyanmisaka * KLUT_WGT13 775*437bfbebSnyanmisaka * Address offset: 0x009C Access type: read and write 776*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register13 777*437bfbebSnyanmisaka */ 778*437bfbebSnyanmisaka struct { 779*437bfbebSnyanmisaka /* High 9 bits of data19 in chroma cost weight table. */ 780*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt19_h9 : 9; 781*437bfbebSnyanmisaka RK_U32 reserved : 5; 782*437bfbebSnyanmisaka /* Data14 in chroma cost weight table. */ 783*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt20 : 18; 784*437bfbebSnyanmisaka } reg039; 785*437bfbebSnyanmisaka 786*437bfbebSnyanmisaka /* 787*437bfbebSnyanmisaka * KLUT_WGT14 788*437bfbebSnyanmisaka * Address offset: 0x00A0 Access type: read and write 789*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register14 790*437bfbebSnyanmisaka */ 791*437bfbebSnyanmisaka struct { 792*437bfbebSnyanmisaka /* Data21 in chroma cost weight table. */ 793*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt21 : 18; 794*437bfbebSnyanmisaka RK_U32 reserved : 5; 795*437bfbebSnyanmisaka /* Low 9 bits of data22 in chroma cost weight table. */ 796*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt22_l9 : 9; 797*437bfbebSnyanmisaka } reg040; 798*437bfbebSnyanmisaka 799*437bfbebSnyanmisaka /* 800*437bfbebSnyanmisaka * KLUT_WGT15 801*437bfbebSnyanmisaka * Address offset: 0x00A4 Access type: read and write 802*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register15 803*437bfbebSnyanmisaka */ 804*437bfbebSnyanmisaka struct { 805*437bfbebSnyanmisaka /* High 9 bits of data22 in chroma cost weight table. */ 806*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt22_h9 : 9; 807*437bfbebSnyanmisaka RK_U32 reserved : 5; 808*437bfbebSnyanmisaka /* Data23 in chroma cost weight table. */ 809*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt23 : 18; 810*437bfbebSnyanmisaka } reg041; 811*437bfbebSnyanmisaka 812*437bfbebSnyanmisaka /* 813*437bfbebSnyanmisaka * KLUT_WGT16 814*437bfbebSnyanmisaka * Address offset: 0x00A8 Access type: read and write 815*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register16 816*437bfbebSnyanmisaka */ 817*437bfbebSnyanmisaka struct { 818*437bfbebSnyanmisaka /* Data24 in chroma cost weight table. */ 819*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt24 : 18; 820*437bfbebSnyanmisaka RK_U32 reserved : 5; 821*437bfbebSnyanmisaka /* Low 9 bits of data25 in chroma cost weight table. */ 822*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt25_l9 : 9; 823*437bfbebSnyanmisaka } reg042; 824*437bfbebSnyanmisaka 825*437bfbebSnyanmisaka /* 826*437bfbebSnyanmisaka * KLUT_WGT17 827*437bfbebSnyanmisaka * Address offset: 0x00AC Access type: read and write 828*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register17 829*437bfbebSnyanmisaka */ 830*437bfbebSnyanmisaka struct { 831*437bfbebSnyanmisaka /* High 9 bits of data25 in chroma cost weight table. */ 832*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt25_h9 : 9; 833*437bfbebSnyanmisaka RK_U32 reserved : 5; 834*437bfbebSnyanmisaka /* Data26 in chroma cost weight table. */ 835*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt26 : 18; 836*437bfbebSnyanmisaka } reg043; 837*437bfbebSnyanmisaka 838*437bfbebSnyanmisaka /* 839*437bfbebSnyanmisaka * KLUT_WGT18 840*437bfbebSnyanmisaka * Address offset: 0x00B0 Access type: read and write 841*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register18 842*437bfbebSnyanmisaka */ 843*437bfbebSnyanmisaka struct { 844*437bfbebSnyanmisaka /* Data27 in chroma cost weight table. */ 845*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt27 : 18; 846*437bfbebSnyanmisaka RK_U32 reserved : 5; 847*437bfbebSnyanmisaka /* Low 9 bits of data28 in chroma cost weight table. */ 848*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt28_l9 : 9; 849*437bfbebSnyanmisaka } reg044; 850*437bfbebSnyanmisaka 851*437bfbebSnyanmisaka /* 852*437bfbebSnyanmisaka * KLUT_WGT19 853*437bfbebSnyanmisaka * Address offset: 0x00B4 Access type: read and write 854*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register19 855*437bfbebSnyanmisaka */ 856*437bfbebSnyanmisaka struct { 857*437bfbebSnyanmisaka /* High 9 bits of data28 in chroma cost weight table. */ 858*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt28_h9 : 9; 859*437bfbebSnyanmisaka RK_U32 reserved : 5; 860*437bfbebSnyanmisaka /* Data29 in chroma cost weight table. */ 861*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt29 : 18; 862*437bfbebSnyanmisaka } reg045; 863*437bfbebSnyanmisaka 864*437bfbebSnyanmisaka /* 865*437bfbebSnyanmisaka * KLUT_WGT20 866*437bfbebSnyanmisaka * Address offset: 0x00B8 Access type: read and write 867*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register20 868*437bfbebSnyanmisaka */ 869*437bfbebSnyanmisaka struct { 870*437bfbebSnyanmisaka /* Data30 in chroma cost weight table. */ 871*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt30 : 18; 872*437bfbebSnyanmisaka RK_U32 reserved : 5; 873*437bfbebSnyanmisaka /* Low 9 bits of data31 in chroma cost weight table. */ 874*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt31_l9 : 9; 875*437bfbebSnyanmisaka } reg046; 876*437bfbebSnyanmisaka 877*437bfbebSnyanmisaka /* 878*437bfbebSnyanmisaka * KLUT_WGT21 879*437bfbebSnyanmisaka * Address offset: 0x00BC Access type: read and write 880*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register21 881*437bfbebSnyanmisaka */ 882*437bfbebSnyanmisaka struct { 883*437bfbebSnyanmisaka /* High 9 bits of data31 in chroma cost weight table. */ 884*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt31_h9 : 9; 885*437bfbebSnyanmisaka RK_U32 reserved : 5; 886*437bfbebSnyanmisaka /* Data32 in chroma cost weight table. */ 887*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt32 : 18; 888*437bfbebSnyanmisaka } reg047; 889*437bfbebSnyanmisaka 890*437bfbebSnyanmisaka /* 891*437bfbebSnyanmisaka * KLUT_WGT22 892*437bfbebSnyanmisaka * Address offset: 0x00C0 Access type: read and write 893*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register22 894*437bfbebSnyanmisaka */ 895*437bfbebSnyanmisaka struct { 896*437bfbebSnyanmisaka /* Data33 in chroma cost weight table. */ 897*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt33 : 18; 898*437bfbebSnyanmisaka RK_U32 reserved : 5; 899*437bfbebSnyanmisaka /* Low 9 bits of data34 in chroma cost weight table. */ 900*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt34_l9 : 9; 901*437bfbebSnyanmisaka } reg048; 902*437bfbebSnyanmisaka 903*437bfbebSnyanmisaka /* 904*437bfbebSnyanmisaka * KLUT_WGT23 905*437bfbebSnyanmisaka * Address offset: 0x00C4 Access type: read and write 906*437bfbebSnyanmisaka * (RDO) Chroma weight table configure register23 907*437bfbebSnyanmisaka */ 908*437bfbebSnyanmisaka struct { 909*437bfbebSnyanmisaka /* High 9 bits of data34 in chroma cost weight table. */ 910*437bfbebSnyanmisaka RK_U32 chrm_klut_wgt34_h9 : 9; 911*437bfbebSnyanmisaka RK_U32 reserved : 23; 912*437bfbebSnyanmisaka } reg049; 913*437bfbebSnyanmisaka 914*437bfbebSnyanmisaka /* 915*437bfbebSnyanmisaka * RC_CFG 916*437bfbebSnyanmisaka * Address offset: 0x00C8 Access type: read and write 917*437bfbebSnyanmisaka * Rate control configuration 918*437bfbebSnyanmisaka */ 919*437bfbebSnyanmisaka struct { 920*437bfbebSnyanmisaka /* Rate control enable. */ 921*437bfbebSnyanmisaka RK_U32 rc_en : 1; 922*437bfbebSnyanmisaka /* Adaptive quantization enable. */ 923*437bfbebSnyanmisaka RK_U32 aq_en : 1; 924*437bfbebSnyanmisaka /* 925*437bfbebSnyanmisaka * Mode of aq_delta calculation for CU32 and CU64. 926*437bfbebSnyanmisaka * 1'b0: aq_delta of CU32/CU64 is calculated by corresponding MADI32/64; 927*437bfbebSnyanmisaka * 1'b1: aq_delta of CU32/CU64 is calculated by corresponding 4/16 CU16 qp_deltas. 928*437bfbebSnyanmisaka */ 929*437bfbebSnyanmisaka RK_U32 aq_mode : 1; 930*437bfbebSnyanmisaka RK_U32 reserved : 13; 931*437bfbebSnyanmisaka /* RC adjustment intervals, base on CTU number. */ 932*437bfbebSnyanmisaka RK_U32 rc_ctu_num : 16; 933*437bfbebSnyanmisaka } reg050; 934*437bfbebSnyanmisaka 935*437bfbebSnyanmisaka /* 936*437bfbebSnyanmisaka * RC_QP 937*437bfbebSnyanmisaka * Address offset: 0x00CC Access type: read and write 938*437bfbebSnyanmisaka * QP configuration for rate control 939*437bfbebSnyanmisaka */ 940*437bfbebSnyanmisaka struct { 941*437bfbebSnyanmisaka RK_U32 reserved : 16; 942*437bfbebSnyanmisaka /* 943*437bfbebSnyanmisaka * QP adjust range(delta_qp) in rate control. 944*437bfbebSnyanmisaka * Delta_qp is constrained between -rc_qp_range to rc_qp_range. 945*437bfbebSnyanmisaka */ 946*437bfbebSnyanmisaka RK_S32 rc_qp_range : 4; 947*437bfbebSnyanmisaka /* Max QP for rate control and AQ mode. */ 948*437bfbebSnyanmisaka RK_U32 rc_max_qp : 6; 949*437bfbebSnyanmisaka /* Min QP for rate control and AQ mode. */ 950*437bfbebSnyanmisaka RK_U32 rc_min_qp : 6; 951*437bfbebSnyanmisaka } reg051; 952*437bfbebSnyanmisaka 953*437bfbebSnyanmisaka /* 954*437bfbebSnyanmisaka * RC_TGT 955*437bfbebSnyanmisaka * Address offset: 0x00D0 Access type: read and write 956*437bfbebSnyanmisaka * The target bit rate for rate control 957*437bfbebSnyanmisaka */ 958*437bfbebSnyanmisaka struct { 959*437bfbebSnyanmisaka /* 960*437bfbebSnyanmisaka * Target bit num for one 64x64 CTU(for HEVC) 961*437bfbebSnyanmisaka * or one 16x16 MB(for H.264), with 1/16 precision. 962*437bfbebSnyanmisaka */ 963*437bfbebSnyanmisaka RK_U32 ctu_ebit : 20; 964*437bfbebSnyanmisaka RK_U32 reserved : 12; 965*437bfbebSnyanmisaka } reg052; 966*437bfbebSnyanmisaka 967*437bfbebSnyanmisaka /* 968*437bfbebSnyanmisaka * RC_ADJ0 969*437bfbebSnyanmisaka * Address offset: 0x00D4 Access type: read and write 970*437bfbebSnyanmisaka * QP adjust configuration for rate control 971*437bfbebSnyanmisaka */ 972*437bfbebSnyanmisaka struct { 973*437bfbebSnyanmisaka /* QP adjust step0 for rate control. */ 974*437bfbebSnyanmisaka RK_S32 qp_adj0 : 5; 975*437bfbebSnyanmisaka /* QP adjust step1 for rate control. */ 976*437bfbebSnyanmisaka RK_S32 qp_adj1 : 5; 977*437bfbebSnyanmisaka /* QP adjust step2 for rate control. */ 978*437bfbebSnyanmisaka RK_S32 qp_adj2 : 5; 979*437bfbebSnyanmisaka /* QP adjust step3 for rate control. */ 980*437bfbebSnyanmisaka RK_S32 qp_adj3 : 5; 981*437bfbebSnyanmisaka /* QP adjust step4 for rate control. */ 982*437bfbebSnyanmisaka RK_S32 qp_adj4 : 5; 983*437bfbebSnyanmisaka RK_U32 reserved : 7; 984*437bfbebSnyanmisaka } reg053; 985*437bfbebSnyanmisaka 986*437bfbebSnyanmisaka /* 987*437bfbebSnyanmisaka * RC_ADJ1 988*437bfbebSnyanmisaka * Address offset: 0x00D8 Access type: read and write 989*437bfbebSnyanmisaka * QP adjust configuration for rate control 990*437bfbebSnyanmisaka */ 991*437bfbebSnyanmisaka struct { 992*437bfbebSnyanmisaka /* QP adjust step5 for rate control. */ 993*437bfbebSnyanmisaka RK_S32 qp_adj5 : 5; 994*437bfbebSnyanmisaka /* QP adjust step6 for rate control. */ 995*437bfbebSnyanmisaka RK_S32 qp_adj6 : 5; 996*437bfbebSnyanmisaka /* QP adjust step7 for rate control. */ 997*437bfbebSnyanmisaka RK_S32 qp_adj7 : 5; 998*437bfbebSnyanmisaka /* QP adjust step8 for rate control. */ 999*437bfbebSnyanmisaka RK_S32 qp_adj8 : 5; 1000*437bfbebSnyanmisaka RK_U32 reserved : 12; 1001*437bfbebSnyanmisaka } reg054; 1002*437bfbebSnyanmisaka 1003*437bfbebSnyanmisaka /* 1004*437bfbebSnyanmisaka * RC_DTHD0~8 1005*437bfbebSnyanmisaka * Address offset: 0x00DC~0x00FC Access type: read and write 1006*437bfbebSnyanmisaka * Bits rate deviation threshold0~8 1007*437bfbebSnyanmisaka */ 1008*437bfbebSnyanmisaka struct { 1009*437bfbebSnyanmisaka /* Bits rate deviation threshold0~8. */ 1010*437bfbebSnyanmisaka RK_U32 rc_dthd[9]; 1011*437bfbebSnyanmisaka } reg055_063; 1012*437bfbebSnyanmisaka 1013*437bfbebSnyanmisaka /* 1014*437bfbebSnyanmisaka * ROI_QTHD0 1015*437bfbebSnyanmisaka * Address offset: 0x0100 Access type: read and write 1016*437bfbebSnyanmisaka * ROI QP threshold configuration0 1017*437bfbebSnyanmisaka */ 1018*437bfbebSnyanmisaka struct { 1019*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area0. */ 1020*437bfbebSnyanmisaka RK_U32 qpmin_area0 : 6; 1021*437bfbebSnyanmisaka /* Max QP for 16x16 CU inside ROI area0. */ 1022*437bfbebSnyanmisaka RK_U32 qpmax_area0 : 6; 1023*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area1. */ 1024*437bfbebSnyanmisaka RK_U32 qpmin_area1 : 6; 1025*437bfbebSnyanmisaka /* Max QP for 16x16 CU inside ROI area1. */ 1026*437bfbebSnyanmisaka RK_U32 qpmax_area1 : 6; 1027*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area2. */ 1028*437bfbebSnyanmisaka RK_U32 qpmin_area2 : 6; 1029*437bfbebSnyanmisaka RK_U32 reserved : 2; 1030*437bfbebSnyanmisaka } reg064; 1031*437bfbebSnyanmisaka 1032*437bfbebSnyanmisaka /* 1033*437bfbebSnyanmisaka * ROI_QTHD1 1034*437bfbebSnyanmisaka * Address offset: 0x0104 Access type: read and write 1035*437bfbebSnyanmisaka * ROI QP threshold configuration1 1036*437bfbebSnyanmisaka */ 1037*437bfbebSnyanmisaka struct { 1038*437bfbebSnyanmisaka /* Max QP for 16x16 CU inside ROI area2. */ 1039*437bfbebSnyanmisaka RK_U32 qpmax_area2 : 6; 1040*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area3. */ 1041*437bfbebSnyanmisaka RK_U32 qpmin_area3 : 6; 1042*437bfbebSnyanmisaka /* Max QP for 16x16 CU inside ROI area3. */ 1043*437bfbebSnyanmisaka RK_U32 qpmax_area3 : 6; 1044*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area4. */ 1045*437bfbebSnyanmisaka RK_U32 qpmin_area4 : 6; 1046*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area4. */ 1047*437bfbebSnyanmisaka RK_U32 qpmax_area4 : 6; 1048*437bfbebSnyanmisaka RK_U32 reserved : 2; 1049*437bfbebSnyanmisaka } reg065; 1050*437bfbebSnyanmisaka 1051*437bfbebSnyanmisaka /* 1052*437bfbebSnyanmisaka * ROI_QTHD2 1053*437bfbebSnyanmisaka * Address offset: 0x0108 Access type: read and write 1054*437bfbebSnyanmisaka * ROI QP threshold configuration2 1055*437bfbebSnyanmisaka */ 1056*437bfbebSnyanmisaka struct { 1057*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area5. */ 1058*437bfbebSnyanmisaka RK_U32 qpmin_area5 : 6; 1059*437bfbebSnyanmisaka /* Max QP for 16x16 CU inside ROI area5. */ 1060*437bfbebSnyanmisaka RK_U32 qpmax_area5 : 6; 1061*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area6. */ 1062*437bfbebSnyanmisaka RK_U32 qpmin_area6 : 6; 1063*437bfbebSnyanmisaka /* Max QP for 16x16 CU inside ROI area6. */ 1064*437bfbebSnyanmisaka RK_U32 qpmax_area6 : 6; 1065*437bfbebSnyanmisaka /* Min QP for 16x16 CU inside ROI area7. */ 1066*437bfbebSnyanmisaka RK_U32 qpmin_area7 : 6; 1067*437bfbebSnyanmisaka RK_U32 reserved : 2; 1068*437bfbebSnyanmisaka } reg066; 1069*437bfbebSnyanmisaka 1070*437bfbebSnyanmisaka /* 1071*437bfbebSnyanmisaka * ROI_QTHD3 1072*437bfbebSnyanmisaka * Address offset: 0x010C Access type: read and write 1073*437bfbebSnyanmisaka * ROI QP threshold configuration3 1074*437bfbebSnyanmisaka */ 1075*437bfbebSnyanmisaka struct { 1076*437bfbebSnyanmisaka /* Max QP for 16x16 CU inside ROI area7. */ 1077*437bfbebSnyanmisaka RK_U32 qpmax_area7 : 6; 1078*437bfbebSnyanmisaka RK_U32 reserved : 24; 1079*437bfbebSnyanmisaka /* 1080*437bfbebSnyanmisaka * QP theshold generation for the CUs whose size is bigger than 16x16. 1081*437bfbebSnyanmisaka * 2'h0: Mean value of 16x16 CU QP thesholds 1082*437bfbebSnyanmisaka * 2'h1: Max value of 16x16 CU QP thesholds 1083*437bfbebSnyanmisaka * 2'h2: Min value of 16x16 CU QP thesholds 1084*437bfbebSnyanmisaka * 2'h3: Reserved 1085*437bfbebSnyanmisaka */ 1086*437bfbebSnyanmisaka RK_U32 qpmap_mode : 2; 1087*437bfbebSnyanmisaka } reg067; 1088*437bfbebSnyanmisaka 1089*437bfbebSnyanmisaka /* 1090*437bfbebSnyanmisaka * PIC_OFST 1091*437bfbebSnyanmisaka * Address offset: 0x0110 Access type: read and write 1092*437bfbebSnyanmisaka * Encoding picture offset 1093*437bfbebSnyanmisaka */ 1094*437bfbebSnyanmisaka struct { 1095*437bfbebSnyanmisaka /* Vertical offset for encoding picture. */ 1096*437bfbebSnyanmisaka RK_U32 pic_ofst_y : 13; 1097*437bfbebSnyanmisaka RK_U32 reserved0 : 3; 1098*437bfbebSnyanmisaka /* Horizontal offset for encoding picture. */ 1099*437bfbebSnyanmisaka RK_U32 pic_ofst_x : 13; 1100*437bfbebSnyanmisaka RK_U32 reserved1 : 3; 1101*437bfbebSnyanmisaka } reg068; 1102*437bfbebSnyanmisaka 1103*437bfbebSnyanmisaka /* 1104*437bfbebSnyanmisaka * SRC_STRID 1105*437bfbebSnyanmisaka * Address offset: 0x0114 Access type: read and write 1106*437bfbebSnyanmisaka * Video source stride 1107*437bfbebSnyanmisaka */ 1108*437bfbebSnyanmisaka struct { 1109*437bfbebSnyanmisaka /* 1110*437bfbebSnyanmisaka * Video source stride0, based on pixel (byte). 1111*437bfbebSnyanmisaka * Note that if the video format is YUV, src_strd is the LUMA component 1112*437bfbebSnyanmisaka * stride while src_strid1 is the CHROMA component stride. 1113*437bfbebSnyanmisaka */ 1114*437bfbebSnyanmisaka RK_U32 src_strd0 : 16; 1115*437bfbebSnyanmisaka /* 1116*437bfbebSnyanmisaka * CHROMA stride of video source, only for YUV format. 1117*437bfbebSnyanmisaka * Note that U and V stride must be the same when color format is YUV 1118*437bfbebSnyanmisaka * planar. 1119*437bfbebSnyanmisaka */ 1120*437bfbebSnyanmisaka RK_U32 src_strd1 : 16; 1121*437bfbebSnyanmisaka } reg069; 1122*437bfbebSnyanmisaka 1123*437bfbebSnyanmisaka /* 1124*437bfbebSnyanmisaka * ADR_SRC0 1125*437bfbebSnyanmisaka * Address offset: 0x0118 Access type: read and write 1126*437bfbebSnyanmisaka * Base address of the 1st storage area for video source 1127*437bfbebSnyanmisaka */ 1128*437bfbebSnyanmisaka struct { 1129*437bfbebSnyanmisaka /* 1130*437bfbebSnyanmisaka * Base address of the 1st storage area for video source. 1131*437bfbebSnyanmisaka * ARGB8888, BGR888, RGB565, YUYV422 and UYUV422 have only one storage 1132*437bfbebSnyanmisaka * area, while adr_src0 is configured as the base address of video 1133*437bfbebSnyanmisaka * source frame buffer. 1134*437bfbebSnyanmisaka * YUV422/420 semi-planar have 2 storage area, while adr_src0 is 1135*437bfbebSnyanmisaka * configured as the base address of Y frame buffer. 1136*437bfbebSnyanmisaka * YUV422/420 planar have 3 storage area, while adr_src0 is configured 1137*437bfbebSnyanmisaka * as the base address of Y frame buffer. 1138*437bfbebSnyanmisaka * Note that if the video source is compressed by AFBC, adr_src0 is 1139*437bfbebSnyanmisaka * configured as the base address of compressed frame buffer. 1140*437bfbebSnyanmisaka */ 1141*437bfbebSnyanmisaka RK_U32 adr_src0; 1142*437bfbebSnyanmisaka } reg070; 1143*437bfbebSnyanmisaka 1144*437bfbebSnyanmisaka /* 1145*437bfbebSnyanmisaka * ADR_SRC1 1146*437bfbebSnyanmisaka * Address offset: 0x011C Access type: read and write 1147*437bfbebSnyanmisaka * Base address of the 2nd storage area for video source 1148*437bfbebSnyanmisaka */ 1149*437bfbebSnyanmisaka struct { 1150*437bfbebSnyanmisaka /* 1151*437bfbebSnyanmisaka * Base address of V frame buffer when video source is uncompress and 1152*437bfbebSnyanmisaka * color format is YUV422/420 planar. 1153*437bfbebSnyanmisaka */ 1154*437bfbebSnyanmisaka RK_U32 adr_src1; 1155*437bfbebSnyanmisaka } reg071; 1156*437bfbebSnyanmisaka 1157*437bfbebSnyanmisaka /* 1158*437bfbebSnyanmisaka * ADR_SRC2 1159*437bfbebSnyanmisaka * Address offset: 0x0120 Access type: read and write 1160*437bfbebSnyanmisaka * Base address of the 3rd storage area for video source 1161*437bfbebSnyanmisaka */ 1162*437bfbebSnyanmisaka struct { 1163*437bfbebSnyanmisaka /* 1164*437bfbebSnyanmisaka * Base address of V frame buffer when video source is uncompress and 1165*437bfbebSnyanmisaka * color format is YUV422/420 planar. 1166*437bfbebSnyanmisaka */ 1167*437bfbebSnyanmisaka RK_U32 adr_src2; 1168*437bfbebSnyanmisaka } reg072; 1169*437bfbebSnyanmisaka 1170*437bfbebSnyanmisaka /* 1171*437bfbebSnyanmisaka * ADR_ROI 1172*437bfbebSnyanmisaka * Address offset: 0x0124 Access type: read and write 1173*437bfbebSnyanmisaka * Base address for ROI configuration, 16 bytes aligned 1174*437bfbebSnyanmisaka */ 1175*437bfbebSnyanmisaka struct { 1176*437bfbebSnyanmisaka /* High 28 bits of base address for ROI configuration. */ 1177*437bfbebSnyanmisaka RK_U32 roi_addr; 1178*437bfbebSnyanmisaka } reg073; 1179*437bfbebSnyanmisaka 1180*437bfbebSnyanmisaka /* 1181*437bfbebSnyanmisaka * ADR_RFPW_H 1182*437bfbebSnyanmisaka * Address offset: 0x0128 Access type: read and write 1183*437bfbebSnyanmisaka * Base address of header_block for compressed reference frame write, 1184*437bfbebSnyanmisaka * 4K bytes aligned 1185*437bfbebSnyanmisaka */ 1186*437bfbebSnyanmisaka struct { 1187*437bfbebSnyanmisaka /* 1188*437bfbebSnyanmisaka * High 20 bits of the header_block base address for compressed 1189*437bfbebSnyanmisaka * reference frame write. 1190*437bfbebSnyanmisaka */ 1191*437bfbebSnyanmisaka RK_U32 rfpw_h_addr; 1192*437bfbebSnyanmisaka } reg074; 1193*437bfbebSnyanmisaka 1194*437bfbebSnyanmisaka /* 1195*437bfbebSnyanmisaka * ADR_RFPW_B 1196*437bfbebSnyanmisaka * Address offset: 0x012C Access type: read and write 1197*437bfbebSnyanmisaka * Base address of body_block for compressed reference frame write, 1198*437bfbebSnyanmisaka * 4K bytes aligned 1199*437bfbebSnyanmisaka */ 1200*437bfbebSnyanmisaka struct { 1201*437bfbebSnyanmisaka /* 1202*437bfbebSnyanmisaka * High 20 bits of the body_block base address for compressed 1203*437bfbebSnyanmisaka * reference frame write. 1204*437bfbebSnyanmisaka */ 1205*437bfbebSnyanmisaka RK_U32 rfpw_b_addr; 1206*437bfbebSnyanmisaka } reg075; 1207*437bfbebSnyanmisaka 1208*437bfbebSnyanmisaka /* 1209*437bfbebSnyanmisaka * ADR_RFPR_H 1210*437bfbebSnyanmisaka * Address offset: 0x0130 Access type: read and write 1211*437bfbebSnyanmisaka * Base address of header_block for compressed reference frame read, 1212*437bfbebSnyanmisaka * 4K bytes aligned 1213*437bfbebSnyanmisaka */ 1214*437bfbebSnyanmisaka struct { 1215*437bfbebSnyanmisaka /* 1216*437bfbebSnyanmisaka * High 20 bits of the header_block base address for compressed 1217*437bfbebSnyanmisaka * reference frame read. 1218*437bfbebSnyanmisaka */ 1219*437bfbebSnyanmisaka RK_U32 rfpr_h_addr; 1220*437bfbebSnyanmisaka } reg076; 1221*437bfbebSnyanmisaka 1222*437bfbebSnyanmisaka /* 1223*437bfbebSnyanmisaka * ADR_RFPR_B 1224*437bfbebSnyanmisaka * Address offset: 0x0134 Access type: read and write 1225*437bfbebSnyanmisaka * Base address of body_block for compressed reference frame read, 1226*437bfbebSnyanmisaka * 4K bytes aligned 1227*437bfbebSnyanmisaka */ 1228*437bfbebSnyanmisaka struct { 1229*437bfbebSnyanmisaka /* 1230*437bfbebSnyanmisaka * High 20 bits of the body_block base address for compressed 1231*437bfbebSnyanmisaka * reference frame read. 1232*437bfbebSnyanmisaka */ 1233*437bfbebSnyanmisaka RK_U32 rfpr_b_addr; 1234*437bfbebSnyanmisaka } reg077; 1235*437bfbebSnyanmisaka 1236*437bfbebSnyanmisaka /* 1237*437bfbebSnyanmisaka * ADR_CMVW 1238*437bfbebSnyanmisaka * Address offset: 0x0138 Access type: read and write 1239*437bfbebSnyanmisaka * Base address for col-located Mv write, 1KB aligned, HEVC only 1240*437bfbebSnyanmisaka */ 1241*437bfbebSnyanmisaka struct { 1242*437bfbebSnyanmisaka /* High 22 bits of base address for col-located Mv write, HEVC only. */ 1243*437bfbebSnyanmisaka RK_U32 cmvw_addr; 1244*437bfbebSnyanmisaka } reg078; 1245*437bfbebSnyanmisaka 1246*437bfbebSnyanmisaka /* 1247*437bfbebSnyanmisaka * ADR_CMVR 1248*437bfbebSnyanmisaka * Address offset: 0x013C Access type: read and write 1249*437bfbebSnyanmisaka * Base address for col-located Mv read, 1KB aligned, HEVC only 1250*437bfbebSnyanmisaka */ 1251*437bfbebSnyanmisaka struct { 1252*437bfbebSnyanmisaka /* High 22 bits of base address for col-located Mv read, HEVC only. */ 1253*437bfbebSnyanmisaka RK_U32 cmvr_addr; 1254*437bfbebSnyanmisaka } reg079; 1255*437bfbebSnyanmisaka 1256*437bfbebSnyanmisaka /* 1257*437bfbebSnyanmisaka * ADR_DSPW 1258*437bfbebSnyanmisaka * Address offset: 0x0140 Access type: read and write 1259*437bfbebSnyanmisaka * Base address for down-sampled reference frame write, 1KB aligned 1260*437bfbebSnyanmisaka */ 1261*437bfbebSnyanmisaka struct { 1262*437bfbebSnyanmisaka /* High 22 bits of base address for down-sampled reference frame write. */ 1263*437bfbebSnyanmisaka RK_U32 dspw_addr; 1264*437bfbebSnyanmisaka } reg080; 1265*437bfbebSnyanmisaka 1266*437bfbebSnyanmisaka /* 1267*437bfbebSnyanmisaka * ADR_DSPR 1268*437bfbebSnyanmisaka * Address offset: 0x0144 Access type: read and write 1269*437bfbebSnyanmisaka * Base address for down-sampled reference frame read, 1KB aligned 1270*437bfbebSnyanmisaka */ 1271*437bfbebSnyanmisaka struct { 1272*437bfbebSnyanmisaka /* High 22 bits of base address for down-sampled reference frame read. */ 1273*437bfbebSnyanmisaka RK_U32 dspr_addr; 1274*437bfbebSnyanmisaka } reg081; 1275*437bfbebSnyanmisaka 1276*437bfbebSnyanmisaka /* 1277*437bfbebSnyanmisaka * ADR_MEIW 1278*437bfbebSnyanmisaka * Address offset: 0x0148 Access type: read and write 1279*437bfbebSnyanmisaka * Base address for ME information write, 1KB aligned 1280*437bfbebSnyanmisaka */ 1281*437bfbebSnyanmisaka struct { 1282*437bfbebSnyanmisaka /* High 22 bits of base address for ME information write. */ 1283*437bfbebSnyanmisaka RK_U32 meiw_addr; 1284*437bfbebSnyanmisaka } reg082; 1285*437bfbebSnyanmisaka 1286*437bfbebSnyanmisaka /* 1287*437bfbebSnyanmisaka * ADR_BSBT 1288*437bfbebSnyanmisaka * Address offset: 0x014C Access type: read and write 1289*437bfbebSnyanmisaka * Top address of bit stream buffer, 128B aligned 1290*437bfbebSnyanmisaka */ 1291*437bfbebSnyanmisaka struct { 1292*437bfbebSnyanmisaka /* High 25 bits of the top address of bit stream buffer. */ 1293*437bfbebSnyanmisaka RK_U32 bsbt_addr; 1294*437bfbebSnyanmisaka } reg083; 1295*437bfbebSnyanmisaka 1296*437bfbebSnyanmisaka /* 1297*437bfbebSnyanmisaka * ADR_BSBB 1298*437bfbebSnyanmisaka * Address offset: 0x0150 Access type: read and write 1299*437bfbebSnyanmisaka * Bottom address of bit stream buffer, 128B aligned 1300*437bfbebSnyanmisaka */ 1301*437bfbebSnyanmisaka struct { 1302*437bfbebSnyanmisaka /* High 25 bits of the bottom address of bit stream buffer. */ 1303*437bfbebSnyanmisaka RK_U32 bsbb_addr; 1304*437bfbebSnyanmisaka } reg084; 1305*437bfbebSnyanmisaka 1306*437bfbebSnyanmisaka /* 1307*437bfbebSnyanmisaka * ADR_BSBR 1308*437bfbebSnyanmisaka * Address offset: 0x0154 Access type: read and write 1309*437bfbebSnyanmisaka * Read address of bit stream buffer, 128B aligned 1310*437bfbebSnyanmisaka */ 1311*437bfbebSnyanmisaka struct { 1312*437bfbebSnyanmisaka /* 1313*437bfbebSnyanmisaka * Read address of bit stream buffer, 128B aligned. 1314*437bfbebSnyanmisaka * VEPU will pause when write address meets read address and then send 1315*437bfbebSnyanmisaka * an interrupt. SW should move some data out from bit stream buffer 1316*437bfbebSnyanmisaka * and change this register accordingly. 1317*437bfbebSnyanmisaka * After that VEPU will continue processing automatically. 1318*437bfbebSnyanmisaka */ 1319*437bfbebSnyanmisaka RK_U32 bsbr_addr; 1320*437bfbebSnyanmisaka } reg085; 1321*437bfbebSnyanmisaka 1322*437bfbebSnyanmisaka /* 1323*437bfbebSnyanmisaka * ADR_BSBS 1324*437bfbebSnyanmisaka * Address offset: 0x0158 Access type: read and write 1325*437bfbebSnyanmisaka * Start address of bit stream buffer 1326*437bfbebSnyanmisaka */ 1327*437bfbebSnyanmisaka struct { 1328*437bfbebSnyanmisaka /* 1329*437bfbebSnyanmisaka * Start address of bit stream buffer. 1330*437bfbebSnyanmisaka * VEPU begins to write bit stream from this address and increase 1331*437bfbebSnyanmisaka * address automatically. 1332*437bfbebSnyanmisaka * Note that the VEPU's real-time write address is marked in BSB_STUS. 1333*437bfbebSnyanmisaka */ 1334*437bfbebSnyanmisaka RK_U32 adr_bsbs; 1335*437bfbebSnyanmisaka } reg086; 1336*437bfbebSnyanmisaka 1337*437bfbebSnyanmisaka /* 1338*437bfbebSnyanmisaka * SLI_SPLT 1339*437bfbebSnyanmisaka * Address offset: 0x015C Access type: read and write 1340*437bfbebSnyanmisaka * Slice split configuration 1341*437bfbebSnyanmisaka */ 1342*437bfbebSnyanmisaka struct { 1343*437bfbebSnyanmisaka /* Slice split enable. */ 1344*437bfbebSnyanmisaka RK_U32 sli_splt : 1; 1345*437bfbebSnyanmisaka /* 1346*437bfbebSnyanmisaka * Slice split mode. 1347*437bfbebSnyanmisaka * 1'h0: Slice splited by byte. 1348*437bfbebSnyanmisaka * 1'h1: Slice splited by number of MB(H.264)/CTU(HEVC). 1349*437bfbebSnyanmisaka */ 1350*437bfbebSnyanmisaka RK_U32 sli_splt_mode : 1; 1351*437bfbebSnyanmisaka /* 1352*437bfbebSnyanmisaka * Slice split compensation when slice is splited by byte. 1353*437bfbebSnyanmisaka * Byte distortion of current slice will be compensated in the next slice. 1354*437bfbebSnyanmisaka */ 1355*437bfbebSnyanmisaka RK_U32 sli_splt_cpst : 1; 1356*437bfbebSnyanmisaka /* Max slice num in one frame. */ 1357*437bfbebSnyanmisaka RK_U32 sli_max_num_m1 : 10; 1358*437bfbebSnyanmisaka /* Slice flush. Flush all the bit stream after each slice finished. */ 1359*437bfbebSnyanmisaka RK_U32 sli_flsh : 1; 1360*437bfbebSnyanmisaka RK_U32 reserved : 2; 1361*437bfbebSnyanmisaka /* Number of CTU/MB for slice split. Valid when slice is splited by CTU/MB. */ 1362*437bfbebSnyanmisaka RK_U32 sli_splt_cnum_m1 : 16; 1363*437bfbebSnyanmisaka } reg087; 1364*437bfbebSnyanmisaka 1365*437bfbebSnyanmisaka /* 1366*437bfbebSnyanmisaka * SLI_BYTE 1367*437bfbebSnyanmisaka * Address offset: 0x0160 Access type: read and write 1368*437bfbebSnyanmisaka * Number of bytes for slice split 1369*437bfbebSnyanmisaka */ 1370*437bfbebSnyanmisaka struct { 1371*437bfbebSnyanmisaka /* Byte number for each slice when slice is splited by byte. */ 1372*437bfbebSnyanmisaka RK_U32 sli_splt_byte : 18; 1373*437bfbebSnyanmisaka RK_U32 reserved : 14; 1374*437bfbebSnyanmisaka } reg088; 1375*437bfbebSnyanmisaka 1376*437bfbebSnyanmisaka /* 1377*437bfbebSnyanmisaka * ME_RNGE 1378*437bfbebSnyanmisaka * Address offset: 0x0164 Access type: read and write 1379*437bfbebSnyanmisaka * Motion estimation range 1380*437bfbebSnyanmisaka */ 1381*437bfbebSnyanmisaka struct { 1382*437bfbebSnyanmisaka /* CME horizontal search range, base on 16 pixels. */ 1383*437bfbebSnyanmisaka RK_U32 cme_srch_h : 4; 1384*437bfbebSnyanmisaka /* CME vertical search range, base on 16 pixel. */ 1385*437bfbebSnyanmisaka RK_U32 cme_srch_v : 4; 1386*437bfbebSnyanmisaka /* RME horizontal search range, values from 3 to 7. */ 1387*437bfbebSnyanmisaka RK_U32 rme_srch_h : 3; 1388*437bfbebSnyanmisaka /* RME vertical search range, values from 4 to 5. */ 1389*437bfbebSnyanmisaka RK_U32 rme_srch_v : 3; 1390*437bfbebSnyanmisaka RK_U32 reserved : 2; 1391*437bfbebSnyanmisaka /* Frame number difference value between current and reference frame, HEVC only. */ 1392*437bfbebSnyanmisaka RK_U32 dlt_frm_num : 16; 1393*437bfbebSnyanmisaka } reg089; 1394*437bfbebSnyanmisaka 1395*437bfbebSnyanmisaka /* 1396*437bfbebSnyanmisaka * ME_CNST 1397*437bfbebSnyanmisaka * Address offset: 0x0168 Access type: read and write 1398*437bfbebSnyanmisaka * Motion estimation configuration 1399*437bfbebSnyanmisaka */ 1400*437bfbebSnyanmisaka struct { 1401*437bfbebSnyanmisaka /* Min horizontal distance for PMV selection. */ 1402*437bfbebSnyanmisaka RK_U32 pmv_mdst_h : 8; 1403*437bfbebSnyanmisaka /* Min vertical distance for PMV selection. */ 1404*437bfbebSnyanmisaka RK_U32 pmv_mdst_v : 8; 1405*437bfbebSnyanmisaka /* 1406*437bfbebSnyanmisaka * Motion vector limit ( by level), H.264 only. 1407*437bfbebSnyanmisaka * 2'h0: Mvy is limited to [-64,63]. 1408*437bfbebSnyanmisaka * Others: Mvy is limited to [-128,127]. 1409*437bfbebSnyanmisaka */ 1410*437bfbebSnyanmisaka RK_U32 mv_limit : 2; 1411*437bfbebSnyanmisaka /* PMV number (should be constant2). */ 1412*437bfbebSnyanmisaka RK_U32 pmv_num : 2; 1413*437bfbebSnyanmisaka /* Store col-Mv information to external memory, HEVC only. */ 1414*437bfbebSnyanmisaka RK_U32 colmv_stor : 1; 1415*437bfbebSnyanmisaka /* Load co-located Mvs as predicated Mv candidates, HEVC only. */ 1416*437bfbebSnyanmisaka RK_U32 colmv_load : 1; 1417*437bfbebSnyanmisaka /* 1418*437bfbebSnyanmisaka * [4]: Disable 64x64 block RME. 1419*437bfbebSnyanmisaka * [3]: Disable 32x32 block RME. 1420*437bfbebSnyanmisaka * [2]: Disable 16x16 block RME. 1421*437bfbebSnyanmisaka * [1]: Disable 8x8 block RME. 1422*437bfbebSnyanmisaka * [0]: Disable 4x4 block RME. 1423*437bfbebSnyanmisaka */ 1424*437bfbebSnyanmisaka RK_U32 rme_dis : 5; 1425*437bfbebSnyanmisaka /* 1426*437bfbebSnyanmisaka * [4]: Disable 64x64 block FME. 1427*437bfbebSnyanmisaka * [3]: Disable 32x32 block FME. 1428*437bfbebSnyanmisaka * [2]: Disable 16x16 block FME. 1429*437bfbebSnyanmisaka * [1]: Disable 8x8 block FME. 1430*437bfbebSnyanmisaka * [0]: Disable 4x4 block FME. 1431*437bfbebSnyanmisaka */ 1432*437bfbebSnyanmisaka RK_U32 fme_dis : 5; 1433*437bfbebSnyanmisaka } reg090; 1434*437bfbebSnyanmisaka 1435*437bfbebSnyanmisaka /* 1436*437bfbebSnyanmisaka * ME_RAM 1437*437bfbebSnyanmisaka * Address offset: 0x016C Access type: read and write 1438*437bfbebSnyanmisaka * ME cache configuration 1439*437bfbebSnyanmisaka */ 1440*437bfbebSnyanmisaka struct { 1441*437bfbebSnyanmisaka /* CME's max RAM address. */ 1442*437bfbebSnyanmisaka RK_U32 cme_rama_max : 11; 1443*437bfbebSnyanmisaka /* Height of CME RAMA district, base on 4 pixels. */ 1444*437bfbebSnyanmisaka RK_U32 cme_rama_h : 5; 1445*437bfbebSnyanmisaka /* 1446*437bfbebSnyanmisaka * L2 cach mapping, base on pixels. 1447*437bfbebSnyanmisaka * 2'h0: 32x512 1448*437bfbebSnyanmisaka * 2'h1: 16x1024 1449*437bfbebSnyanmisaka * 2'h2: 8x2048 1450*437bfbebSnyanmisaka * 2'h3: 4x4096 1451*437bfbebSnyanmisaka */ 1452*437bfbebSnyanmisaka RK_U32 cach_l2_map : 2; 1453*437bfbebSnyanmisaka /* The width of CIME down-sample recon data linebuf, based on 64 pixel. */ 1454*437bfbebSnyanmisaka RK_U32 cme_linebuf_w : 8; 1455*437bfbebSnyanmisaka RK_U32 reserved : 6; 1456*437bfbebSnyanmisaka } reg091; 1457*437bfbebSnyanmisaka 1458*437bfbebSnyanmisaka /* 1459*437bfbebSnyanmisaka * SYNT_LONG_REFM0 1460*437bfbebSnyanmisaka * Address offset: 0x0170 Access type: read and write 1461*437bfbebSnyanmisaka * Long term reference frame mark0 for HEVC 1462*437bfbebSnyanmisaka */ 1463*437bfbebSnyanmisaka struct { 1464*437bfbebSnyanmisaka /* Poc_lsb_lt[1] */ 1465*437bfbebSnyanmisaka RK_U32 poc_lsb_lt1 : 16; 1466*437bfbebSnyanmisaka /* Poc_lsb_lt[2] */ 1467*437bfbebSnyanmisaka RK_U32 poc_lsb_lt2 : 16; 1468*437bfbebSnyanmisaka } reg092; 1469*437bfbebSnyanmisaka 1470*437bfbebSnyanmisaka /* 1471*437bfbebSnyanmisaka * SYNT_LONG_REFM1 1472*437bfbebSnyanmisaka * Address offset: 0x0174 Access type: read and write 1473*437bfbebSnyanmisaka * Long term reference frame mark1 for HEVC 1474*437bfbebSnyanmisaka */ 1475*437bfbebSnyanmisaka struct { 1476*437bfbebSnyanmisaka /* Delta_poc_msb_cycle_lt[1] */ 1477*437bfbebSnyanmisaka RK_U32 dlt_poc_msb_cycl1 : 16; 1478*437bfbebSnyanmisaka /* Delta_poc_msb_cycle_lt[2] */ 1479*437bfbebSnyanmisaka RK_U32 dlt_poc_msb_cycl2 : 16; 1480*437bfbebSnyanmisaka } reg093; 1481*437bfbebSnyanmisaka 1482*437bfbebSnyanmisaka /* 1483*437bfbebSnyanmisaka * OSD_INV_CFG 1484*437bfbebSnyanmisaka * Address offset: 0x0178 Access type: read and write 1485*437bfbebSnyanmisaka * OSD color inverse configuration 1486*437bfbebSnyanmisaka * 1487*437bfbebSnyanmisaka * Added in vepu540 1488*437bfbebSnyanmisaka */ 1489*437bfbebSnyanmisaka struct { 1490*437bfbebSnyanmisaka /* 1491*437bfbebSnyanmisaka * OSD color inverse enable of chroma component, 1492*437bfbebSnyanmisaka * each bit controls corresponding region. 1493*437bfbebSnyanmisaka */ 1494*437bfbebSnyanmisaka RK_U32 osd_ch_inv_en : 8; 1495*437bfbebSnyanmisaka /* 1496*437bfbebSnyanmisaka * OSD color inverse expression type 1497*437bfbebSnyanmisaka * each bit controls corresponding region. 1498*437bfbebSnyanmisaka * 1'h0: AND; 1499*437bfbebSnyanmisaka * 1'h1: OR 1500*437bfbebSnyanmisaka */ 1501*437bfbebSnyanmisaka RK_U32 osd_itype : 8; 1502*437bfbebSnyanmisaka /* 1503*437bfbebSnyanmisaka * OSD color inverse expression switch for luma component 1504*437bfbebSnyanmisaka * each bit controls corresponding region. 1505*437bfbebSnyanmisaka * 1'h0: Expression need to determine the condition; 1506*437bfbebSnyanmisaka * 1'h1: Expression don't need to determine the condition; 1507*437bfbebSnyanmisaka */ 1508*437bfbebSnyanmisaka RK_U32 osd_lu_inv_msk : 8; 1509*437bfbebSnyanmisaka /* 1510*437bfbebSnyanmisaka * OSD color inverse expression switch for chroma component 1511*437bfbebSnyanmisaka * each bit controls corresponding region. 1512*437bfbebSnyanmisaka * 1'h0: Expression need to determine the condition; 1513*437bfbebSnyanmisaka * 1'h1: Expression don't need to determine the condition; 1514*437bfbebSnyanmisaka */ 1515*437bfbebSnyanmisaka RK_U32 osd_ch_inv_msk : 8; 1516*437bfbebSnyanmisaka } reg094; 1517*437bfbebSnyanmisaka 1518*437bfbebSnyanmisaka /* reg gap 095~100 */ 1519*437bfbebSnyanmisaka RK_U32 reg_095_100[6]; 1520*437bfbebSnyanmisaka 1521*437bfbebSnyanmisaka /* 1522*437bfbebSnyanmisaka * IPRD_CSTS 1523*437bfbebSnyanmisaka * Address offset: 0x0194 Access type: read and write 1524*437bfbebSnyanmisaka * Cost function configuration for intra prediction 1525*437bfbebSnyanmisaka */ 1526*437bfbebSnyanmisaka struct { 1527*437bfbebSnyanmisaka /* LUMA variance threshold to select intra prediction cost function. */ 1528*437bfbebSnyanmisaka RK_U32 vthd_y : 12; 1529*437bfbebSnyanmisaka RK_U32 reserved0 : 4; 1530*437bfbebSnyanmisaka /* CHROMA variance threshold to select intra prediction cost function. */ 1531*437bfbebSnyanmisaka RK_U32 vthd_c : 12; 1532*437bfbebSnyanmisaka RK_U32 reserved1 : 4; 1533*437bfbebSnyanmisaka } reg101; 1534*437bfbebSnyanmisaka 1535*437bfbebSnyanmisaka /* 1536*437bfbebSnyanmisaka * RDO_CFG_H264 1537*437bfbebSnyanmisaka * Address offset: 0x0198 Access type: read and write 1538*437bfbebSnyanmisaka * H.264 RDO configuration 1539*437bfbebSnyanmisaka */ 1540*437bfbebSnyanmisaka struct { 1541*437bfbebSnyanmisaka /* Limit sub_mb_rect_size for low level. */ 1542*437bfbebSnyanmisaka RK_U32 rect_size : 1; 1543*437bfbebSnyanmisaka /* 4x4 sub MB enable. */ 1544*437bfbebSnyanmisaka RK_U32 inter_4x4 : 1; 1545*437bfbebSnyanmisaka /* Reserved */ 1546*437bfbebSnyanmisaka RK_U32 arb_sel : 1; 1547*437bfbebSnyanmisaka /* CAVLC syntax limit. */ 1548*437bfbebSnyanmisaka RK_U32 vlc_lmt : 1; 1549*437bfbebSnyanmisaka /* Chroma special candidates enable. */ 1550*437bfbebSnyanmisaka RK_U32 chrm_spcl : 1; 1551*437bfbebSnyanmisaka /* 1552*437bfbebSnyanmisaka * [7]: Disable intra4x4. 1553*437bfbebSnyanmisaka * [6]: Disable intra8x8. 1554*437bfbebSnyanmisaka * [5]: Disable intra16x16. 1555*437bfbebSnyanmisaka * [4]: Disable inter8x8 with T4. 1556*437bfbebSnyanmisaka * [3]: Disable inter8x8 with T8. 1557*437bfbebSnyanmisaka * [2]: Disable inter16x16 with T4. 1558*437bfbebSnyanmisaka * [1]: Disable inter16x16 with T8. 1559*437bfbebSnyanmisaka * [0]: Disable skip mode. 1560*437bfbebSnyanmisaka */ 1561*437bfbebSnyanmisaka RK_U32 rdo_mask : 8; 1562*437bfbebSnyanmisaka /* Chroma cost weight adjustment(KLUT) enable. */ 1563*437bfbebSnyanmisaka RK_U32 ccwa_e : 1; 1564*437bfbebSnyanmisaka /* 1565*437bfbebSnyanmisaka * Scale list selection. 1566*437bfbebSnyanmisaka * 1'h0: Flat scale list. 1567*437bfbebSnyanmisaka * 1'h1: Default scale list. 1568*437bfbebSnyanmisaka */ 1569*437bfbebSnyanmisaka RK_U32 scl_lst_sel : 1; 1570*437bfbebSnyanmisaka /* Anti-ring enable. */ 1571*437bfbebSnyanmisaka RK_U32 atr_e : 1; 1572*437bfbebSnyanmisaka /* Edge of anti-flicker, base on MB. the MBs inside edge should not influenced. */ 1573*437bfbebSnyanmisaka RK_U32 atf_edg : 2; 1574*437bfbebSnyanmisaka /* Block level anti-flicker enable. */ 1575*437bfbebSnyanmisaka RK_U32 atf_lvl_e : 1; 1576*437bfbebSnyanmisaka /* Intra mode anti-flicker enable. */ 1577*437bfbebSnyanmisaka RK_U32 atf_intra_e : 1; 1578*437bfbebSnyanmisaka /* 1579*437bfbebSnyanmisaka * Scale list selection. (for vepu540) 1580*437bfbebSnyanmisaka * 2'h0: Flat scale list. 1581*437bfbebSnyanmisaka * 2'h1: Default scale list. 1582*437bfbebSnyanmisaka * 2'h2: User defined. 1583*437bfbebSnyanmisaka * 2'h3: Reserved. 1584*437bfbebSnyanmisaka */ 1585*437bfbebSnyanmisaka RK_U32 scl_lst_sel_ : 2; 1586*437bfbebSnyanmisaka RK_U32 reserved : 9; 1587*437bfbebSnyanmisaka /* 1588*437bfbebSnyanmisaka * Rdo cost caculation expression for intra by using sad or satd. 1589*437bfbebSnyanmisaka * 1'h0: SATD; 1590*437bfbebSnyanmisaka * 1'h1: SAD; 1591*437bfbebSnyanmisaka */ 1592*437bfbebSnyanmisaka RK_U32 satd_byps_flg : 1; 1593*437bfbebSnyanmisaka } reg102; 1594*437bfbebSnyanmisaka 1595*437bfbebSnyanmisaka /* 1596*437bfbebSnyanmisaka * SYNT_NAL_H264 1597*437bfbebSnyanmisaka * Address offset: 0x019C Access type: read and write 1598*437bfbebSnyanmisaka * NAL configuration for H.264 1599*437bfbebSnyanmisaka */ 1600*437bfbebSnyanmisaka struct { 1601*437bfbebSnyanmisaka /* nal_ref_idc */ 1602*437bfbebSnyanmisaka RK_U32 nal_ref_idc : 2; 1603*437bfbebSnyanmisaka RK_U32 nal_unit_type : 5; 1604*437bfbebSnyanmisaka /* nal_unit_type */ 1605*437bfbebSnyanmisaka RK_U32 reserved : 25; 1606*437bfbebSnyanmisaka } reg103; 1607*437bfbebSnyanmisaka 1608*437bfbebSnyanmisaka /* 1609*437bfbebSnyanmisaka * SYNT_SPS_H264 1610*437bfbebSnyanmisaka * Address offset: 0x01A0 Access type: read and write 1611*437bfbebSnyanmisaka * Sequence parameter set syntax configuration for H.264 1612*437bfbebSnyanmisaka */ 1613*437bfbebSnyanmisaka struct { 1614*437bfbebSnyanmisaka /* log2_max_frame_num_minus4 */ 1615*437bfbebSnyanmisaka RK_U32 max_fnum : 4; 1616*437bfbebSnyanmisaka /* direct_8x8_inference_flag */ 1617*437bfbebSnyanmisaka RK_U32 drct_8x8 : 1; 1618*437bfbebSnyanmisaka /* log2_max_pic_order_cnt_lsb_minus4 */ 1619*437bfbebSnyanmisaka RK_U32 mpoc_lm4 : 4; 1620*437bfbebSnyanmisaka RK_U32 reserved : 23; 1621*437bfbebSnyanmisaka } reg104; 1622*437bfbebSnyanmisaka 1623*437bfbebSnyanmisaka /* 1624*437bfbebSnyanmisaka * SYNT_PPS_H264 1625*437bfbebSnyanmisaka * Address offset: 0x01A4 Access type: read and write 1626*437bfbebSnyanmisaka * Picture parameter set configuration for H.264 1627*437bfbebSnyanmisaka */ 1628*437bfbebSnyanmisaka struct { 1629*437bfbebSnyanmisaka /* entropy_coding_mode_flag */ 1630*437bfbebSnyanmisaka RK_U32 etpy_mode : 1; 1631*437bfbebSnyanmisaka /* transform_8x8_mode_flag */ 1632*437bfbebSnyanmisaka RK_U32 trns_8x8 : 1; 1633*437bfbebSnyanmisaka /* constrained_intra_pred_flag */ 1634*437bfbebSnyanmisaka RK_U32 csip_flag : 1; 1635*437bfbebSnyanmisaka /* num_ref_idx_l0_active_minus1 */ 1636*437bfbebSnyanmisaka RK_U32 num_ref0_idx : 2; 1637*437bfbebSnyanmisaka /* num_ref_idx_l1_active_minus1 */ 1638*437bfbebSnyanmisaka RK_U32 num_ref1_idx : 2; 1639*437bfbebSnyanmisaka /* pic_init_qp_minus26 + 26 */ 1640*437bfbebSnyanmisaka RK_U32 pic_init_qp : 6; 1641*437bfbebSnyanmisaka /* chroma_qp_index_offset */ 1642*437bfbebSnyanmisaka RK_U32 cb_ofst : 5; 1643*437bfbebSnyanmisaka /* second_chroma_qp_index_offset */ 1644*437bfbebSnyanmisaka RK_U32 cr_ofst : 5; 1645*437bfbebSnyanmisaka /* weight_pred_flag */ 1646*437bfbebSnyanmisaka RK_U32 wght_pred : 1; 1647*437bfbebSnyanmisaka /* deblocking_filter_control_present_flag */ 1648*437bfbebSnyanmisaka RK_U32 dbf_cp_flg : 1; 1649*437bfbebSnyanmisaka RK_U32 reserved : 7; 1650*437bfbebSnyanmisaka } reg105; 1651*437bfbebSnyanmisaka 1652*437bfbebSnyanmisaka /* 1653*437bfbebSnyanmisaka * SYNT_SLI0_H264 1654*437bfbebSnyanmisaka * Address offset: 0x01A8 Access type: read and write 1655*437bfbebSnyanmisaka * Slice header configuration0 for H.264 1656*437bfbebSnyanmisaka */ 1657*437bfbebSnyanmisaka struct { 1658*437bfbebSnyanmisaka /* slice_type: 0->P, 1->B, 2->I. */ 1659*437bfbebSnyanmisaka RK_U32 sli_type : 2; 1660*437bfbebSnyanmisaka /* pic_parameter_set_id */ 1661*437bfbebSnyanmisaka RK_U32 pps_id : 8; 1662*437bfbebSnyanmisaka /* direct_spatial_mv_pred_flag */ 1663*437bfbebSnyanmisaka RK_U32 drct_smvp : 1; 1664*437bfbebSnyanmisaka /* num_ref_idx_active_override_flag */ 1665*437bfbebSnyanmisaka RK_U32 num_ref_ovrd : 1; 1666*437bfbebSnyanmisaka /* cabac_init_idc */ 1667*437bfbebSnyanmisaka RK_U32 cbc_init_idc : 2; 1668*437bfbebSnyanmisaka RK_U32 reserved : 2; 1669*437bfbebSnyanmisaka /* frame_num */ 1670*437bfbebSnyanmisaka RK_U32 frm_num : 16; 1671*437bfbebSnyanmisaka } reg106; 1672*437bfbebSnyanmisaka 1673*437bfbebSnyanmisaka /* 1674*437bfbebSnyanmisaka * SYNT_SLI1_H264 1675*437bfbebSnyanmisaka * Address offset: 0x01AC Access type: read and write 1676*437bfbebSnyanmisaka * Slice header configuration1 for H.264 1677*437bfbebSnyanmisaka */ 1678*437bfbebSnyanmisaka struct { 1679*437bfbebSnyanmisaka /* idr_pid */ 1680*437bfbebSnyanmisaka RK_U32 idr_pic_id : 16; 1681*437bfbebSnyanmisaka /* pic_order_cnt_lsb */ 1682*437bfbebSnyanmisaka RK_U32 poc_lsb : 16; 1683*437bfbebSnyanmisaka } reg107; 1684*437bfbebSnyanmisaka 1685*437bfbebSnyanmisaka /* 1686*437bfbebSnyanmisaka * SYNT_SLI2_H264 1687*437bfbebSnyanmisaka * Address offset: 0x01B0 Access type: read and write 1688*437bfbebSnyanmisaka * Slice header configuration2 for H.264 1689*437bfbebSnyanmisaka */ 1690*437bfbebSnyanmisaka struct { 1691*437bfbebSnyanmisaka /* reordering_of_pic_nums_idc */ 1692*437bfbebSnyanmisaka RK_U32 rodr_pic_idx : 2; 1693*437bfbebSnyanmisaka /* ref_pic_list_reordering_flag_l0 */ 1694*437bfbebSnyanmisaka RK_U32 ref_list0_rodr : 1; 1695*437bfbebSnyanmisaka /* slice_beta_offset_div2 */ 1696*437bfbebSnyanmisaka RK_U32 sli_beta_ofst : 4; 1697*437bfbebSnyanmisaka /* slice_alpha_c0_offset_div2 */ 1698*437bfbebSnyanmisaka RK_U32 sli_alph_ofst : 4; 1699*437bfbebSnyanmisaka /* disable_deblocking_filter_idc */ 1700*437bfbebSnyanmisaka RK_U32 dis_dblk_idc : 2; 1701*437bfbebSnyanmisaka RK_U32 reserved : 3; 1702*437bfbebSnyanmisaka /* abs_diff_pic_num_minus1/long_term_pic_num */ 1703*437bfbebSnyanmisaka RK_U32 rodr_pic_num : 16; 1704*437bfbebSnyanmisaka } reg108; 1705*437bfbebSnyanmisaka 1706*437bfbebSnyanmisaka /* 1707*437bfbebSnyanmisaka * SYNT_REFM0_H264 1708*437bfbebSnyanmisaka * Address offset: 0x01B4 Access type: read and write 1709*437bfbebSnyanmisaka * Reference frame mark0 for H.264 1710*437bfbebSnyanmisaka */ 1711*437bfbebSnyanmisaka struct { 1712*437bfbebSnyanmisaka /* no_output_of_prior_pics_flag */ 1713*437bfbebSnyanmisaka RK_U32 nopp_flg : 1; 1714*437bfbebSnyanmisaka /* long_term_reference_flag */ 1715*437bfbebSnyanmisaka RK_U32 ltrf_flg : 1; 1716*437bfbebSnyanmisaka /* adaptive_ref_pic_marking_mode_flag */ 1717*437bfbebSnyanmisaka RK_U32 arpm_flg : 1; 1718*437bfbebSnyanmisaka /* A No.4 MMCO should be executed firstly if mmo4_pre is 1 */ 1719*437bfbebSnyanmisaka RK_U32 mmco4_pre : 1; 1720*437bfbebSnyanmisaka /* memory_management_control_operation */ 1721*437bfbebSnyanmisaka RK_U32 mmco_type0 : 3; 1722*437bfbebSnyanmisaka /* 1723*437bfbebSnyanmisaka * MMCO parameters which have different meanings according to different mmco_parm0 valus. 1724*437bfbebSnyanmisaka * difference_of_pic_nums_minus1 for mmco_parm0 equals 0 or 3. 1725*437bfbebSnyanmisaka * long_term_pic_num for mmco_parm0 equals 2. 1726*437bfbebSnyanmisaka * long_term_frame_idx for mmco_parm0 equals 6. 1727*437bfbebSnyanmisaka * max_long_term_frame_idx_plus1 for mmco_parm0 equals 4. 1728*437bfbebSnyanmisaka */ 1729*437bfbebSnyanmisaka RK_U32 mmco_parm0 : 16; 1730*437bfbebSnyanmisaka /* memory_management_control_operation[1] */ 1731*437bfbebSnyanmisaka RK_U32 mmco_type1 : 3; 1732*437bfbebSnyanmisaka /* memory_management_control_operation[2] */ 1733*437bfbebSnyanmisaka RK_U32 mmco_type2 : 3; 1734*437bfbebSnyanmisaka RK_U32 reserved : 3; 1735*437bfbebSnyanmisaka } reg109; 1736*437bfbebSnyanmisaka 1737*437bfbebSnyanmisaka /* 1738*437bfbebSnyanmisaka * SYNT_REFM1_H264 1739*437bfbebSnyanmisaka * Address offset: 0x01B8 Access type: read and write 1740*437bfbebSnyanmisaka * Reference frame mark1 for H.264 1741*437bfbebSnyanmisaka */ 1742*437bfbebSnyanmisaka struct { 1743*437bfbebSnyanmisaka /* 1744*437bfbebSnyanmisaka * MMCO parameters which have different meanings according to different mmco_parm1 valus. 1745*437bfbebSnyanmisaka * difference_of_pic_nums_minus1 for mmco_parm1 equals 0 or 3. 1746*437bfbebSnyanmisaka * long_term_pic_num for mmco_parm1 equals 2. 1747*437bfbebSnyanmisaka * long_term_frame_idx for mmco_parm1 equals 6. 1748*437bfbebSnyanmisaka * max_long_term_frame_idx_plus1 for mmco_parm1 equals 4. 1749*437bfbebSnyanmisaka */ 1750*437bfbebSnyanmisaka RK_U32 mmco_parm1 : 16; 1751*437bfbebSnyanmisaka /* 1752*437bfbebSnyanmisaka * MMCO parameters which have different meanings according to different mmco_parm2 valus. 1753*437bfbebSnyanmisaka * difference_of_pic_nums_minus1 for mmco_parm2 equals 0 or 3. 1754*437bfbebSnyanmisaka * long_term_pic_num for mmco_parm2 equals 2. 1755*437bfbebSnyanmisaka * long_term_frame_idx for mmco_parm2 equals 6. 1756*437bfbebSnyanmisaka * max_long_term_frame_idx_plus1 for mmco_parm2 equals 4. 1757*437bfbebSnyanmisaka */ 1758*437bfbebSnyanmisaka RK_U32 mmco_parm2 : 16; 1759*437bfbebSnyanmisaka } reg110; 1760*437bfbebSnyanmisaka 1761*437bfbebSnyanmisaka /* reg gap 111 */ 1762*437bfbebSnyanmisaka RK_U32 reg_111; 1763*437bfbebSnyanmisaka 1764*437bfbebSnyanmisaka /* 1765*437bfbebSnyanmisaka * OSD_CFG 1766*437bfbebSnyanmisaka * Address offset: 0x01C0 Access type: read and write 1767*437bfbebSnyanmisaka * OSD configuration 1768*437bfbebSnyanmisaka */ 1769*437bfbebSnyanmisaka struct { 1770*437bfbebSnyanmisaka /* OSD region enable, each bit controls corresponding OSD region. */ 1771*437bfbebSnyanmisaka RK_U32 osd_e : 8; 1772*437bfbebSnyanmisaka /* OSD inverse color enable, each bit controls corresponding region. */ 1773*437bfbebSnyanmisaka RK_U32 osd_inv_e : 8; 1774*437bfbebSnyanmisaka /* 1775*437bfbebSnyanmisaka * OSD palette clock selection. 1776*437bfbebSnyanmisaka * 1'h0: Configure bus clock domain. 1777*437bfbebSnyanmisaka * 1'h1: Core clock domain. 1778*437bfbebSnyanmisaka */ 1779*437bfbebSnyanmisaka RK_U32 osd_plt_cks : 1; 1780*437bfbebSnyanmisaka /* 1781*437bfbebSnyanmisaka * OSD palette type. 1782*437bfbebSnyanmisaka * 1'h1: Default type. 1783*437bfbebSnyanmisaka * 1'h0: User defined type. 1784*437bfbebSnyanmisaka */ 1785*437bfbebSnyanmisaka RK_U32 osd_plt_typ : 1; 1786*437bfbebSnyanmisaka RK_U32 reserved : 14; 1787*437bfbebSnyanmisaka } reg112; 1788*437bfbebSnyanmisaka 1789*437bfbebSnyanmisaka /* 1790*437bfbebSnyanmisaka * OSD_INV 1791*437bfbebSnyanmisaka * Address offset: 0x01C4 Access type: read and write 1792*437bfbebSnyanmisaka * OSD color inverse configuration 1793*437bfbebSnyanmisaka */ 1794*437bfbebSnyanmisaka struct { 1795*437bfbebSnyanmisaka /* Color inverse theshold for OSD region0. */ 1796*437bfbebSnyanmisaka RK_U32 osd_ithd_r0 : 4; 1797*437bfbebSnyanmisaka /* Color inverse theshold for OSD region1. */ 1798*437bfbebSnyanmisaka RK_U32 osd_ithd_r1 : 4; 1799*437bfbebSnyanmisaka /* Color inverse theshold for OSD region2. */ 1800*437bfbebSnyanmisaka RK_U32 osd_ithd_r2 : 4; 1801*437bfbebSnyanmisaka /* Color inverse theshold for OSD region3. */ 1802*437bfbebSnyanmisaka RK_U32 osd_ithd_r3 : 4; 1803*437bfbebSnyanmisaka /* Color inverse theshold for OSD region4. */ 1804*437bfbebSnyanmisaka RK_U32 osd_ithd_r4 : 4; 1805*437bfbebSnyanmisaka /* Color inverse theshold for OSD region5. */ 1806*437bfbebSnyanmisaka RK_U32 osd_ithd_r5 : 4; 1807*437bfbebSnyanmisaka /* Color inverse theshold for OSD region6. */ 1808*437bfbebSnyanmisaka RK_U32 osd_ithd_r6 : 4; 1809*437bfbebSnyanmisaka /* Color inverse theshold for OSD region7. */ 1810*437bfbebSnyanmisaka RK_U32 osd_ithd_r7 : 4; 1811*437bfbebSnyanmisaka } reg113; 1812*437bfbebSnyanmisaka 1813*437bfbebSnyanmisaka /* 1814*437bfbebSnyanmisaka * SYNT_REFM2_H264 1815*437bfbebSnyanmisaka * Address offset: 0x01C8 Access type: read and write 1816*437bfbebSnyanmisaka * Reference frame mark2 for H.264 1817*437bfbebSnyanmisaka */ 1818*437bfbebSnyanmisaka struct { 1819*437bfbebSnyanmisaka /* long_term_frame_idx[0] (when mmco equal 3) */ 1820*437bfbebSnyanmisaka RK_U32 long_term_frame_idx0 : 4; 1821*437bfbebSnyanmisaka /* long_term_frame_idx[1] (when mmco equal 3) */ 1822*437bfbebSnyanmisaka RK_U32 long_term_frame_idx1 : 4; 1823*437bfbebSnyanmisaka /* long_term_frame_idx[2] (when mmco equal 3) */ 1824*437bfbebSnyanmisaka RK_U32 long_term_frame_idx2 : 4; 1825*437bfbebSnyanmisaka RK_U32 reserved : 20; 1826*437bfbebSnyanmisaka } reg114; 1827*437bfbebSnyanmisaka 1828*437bfbebSnyanmisaka /* 1829*437bfbebSnyanmisaka * SYNT_REFM3 1830*437bfbebSnyanmisaka * Address offset: 0x01CC Access type: read and write 1831*437bfbebSnyanmisaka * Reference frame mark3 for HEVC 1832*437bfbebSnyanmisaka */ 1833*437bfbebSnyanmisaka RK_U32 reg115; 1834*437bfbebSnyanmisaka 1835*437bfbebSnyanmisaka /* 1836*437bfbebSnyanmisaka * OSD_POS 1837*437bfbebSnyanmisaka * Address offset: 0x01D0~0x01EC Access type: read and write 1838*437bfbebSnyanmisaka * OSD region position 1839*437bfbebSnyanmisaka */ 1840*437bfbebSnyanmisaka struct { 1841*437bfbebSnyanmisaka Vepu541OsdPos osd_pos[8]; 1842*437bfbebSnyanmisaka } reg116_123; 1843*437bfbebSnyanmisaka 1844*437bfbebSnyanmisaka /* 1845*437bfbebSnyanmisaka * ADR_OSD 1846*437bfbebSnyanmisaka * Address offset: 0x01F0~0x20C Access type: read and write 1847*437bfbebSnyanmisaka * Base address for OSD region, 16B aligned 1848*437bfbebSnyanmisaka */ 1849*437bfbebSnyanmisaka struct { 1850*437bfbebSnyanmisaka RK_U32 osd_addr[8]; 1851*437bfbebSnyanmisaka } reg124_131; 1852*437bfbebSnyanmisaka 1853*437bfbebSnyanmisaka /* 1854*437bfbebSnyanmisaka * ST_BSL 1855*437bfbebSnyanmisaka * Address offset: 0x210 Access type: read only 1856*437bfbebSnyanmisaka * Bit stream length for current frame 1857*437bfbebSnyanmisaka */ 1858*437bfbebSnyanmisaka struct { 1859*437bfbebSnyanmisaka /* Bit stream length for current frame. */ 1860*437bfbebSnyanmisaka RK_U32 bs_lgth : 27; 1861*437bfbebSnyanmisaka RK_U32 reserved : 5; 1862*437bfbebSnyanmisaka } reg132; 1863*437bfbebSnyanmisaka 1864*437bfbebSnyanmisaka /* 1865*437bfbebSnyanmisaka * ST_SSE_L32 1866*437bfbebSnyanmisaka * Address offset: 0x214 Access type: read only 1867*437bfbebSnyanmisaka * Low 32 bits of encoding distortion (SSE) 1868*437bfbebSnyanmisaka */ 1869*437bfbebSnyanmisaka struct { 1870*437bfbebSnyanmisaka RK_U32 sse_l32; 1871*437bfbebSnyanmisaka } reg133; 1872*437bfbebSnyanmisaka 1873*437bfbebSnyanmisaka /* 1874*437bfbebSnyanmisaka * ST_SSE_QP 1875*437bfbebSnyanmisaka * Address offset: 0x218 Access type: read only 1876*437bfbebSnyanmisaka * High 8 bits of encoding distortion (SSE) and sum of QP for the encoded frame 1877*437bfbebSnyanmisaka */ 1878*437bfbebSnyanmisaka struct { 1879*437bfbebSnyanmisaka /* Sum of QP for the encoded frame. */ 1880*437bfbebSnyanmisaka RK_U32 qp_sum : 22; 1881*437bfbebSnyanmisaka RK_U32 reserved : 2; 1882*437bfbebSnyanmisaka /* High bits of encoding distortion(SSE). */ 1883*437bfbebSnyanmisaka RK_U32 sse_h8 : 8; 1884*437bfbebSnyanmisaka } reg134; 1885*437bfbebSnyanmisaka 1886*437bfbebSnyanmisaka /* 1887*437bfbebSnyanmisaka * ST_SAO 1888*437bfbebSnyanmisaka * Address offset: 0x21C Access type: read only 1889*437bfbebSnyanmisaka * Number of CTUs which adjusted by SAO 1890*437bfbebSnyanmisaka */ 1891*437bfbebSnyanmisaka struct { 1892*437bfbebSnyanmisaka /* Number of CTUs whose CHROMA component are adjusted by SAO. */ 1893*437bfbebSnyanmisaka RK_U32 sao_cnum : 12; 1894*437bfbebSnyanmisaka /* Number of CTUs whose LUMA component are adjusted by SAO. */ 1895*437bfbebSnyanmisaka RK_U32 sao_ynum : 12; 1896*437bfbebSnyanmisaka RK_U32 reserved : 8; 1897*437bfbebSnyanmisaka } reg135; 1898*437bfbebSnyanmisaka 1899*437bfbebSnyanmisaka /* reg gap 136~137 */ 1900*437bfbebSnyanmisaka RK_U32 reg_136_137[2]; 1901*437bfbebSnyanmisaka 1902*437bfbebSnyanmisaka /* 1903*437bfbebSnyanmisaka * ST_ENC 1904*437bfbebSnyanmisaka * Address offset: 0x228 Access type: read only 1905*437bfbebSnyanmisaka * VEPU working status 1906*437bfbebSnyanmisaka */ 1907*437bfbebSnyanmisaka struct { 1908*437bfbebSnyanmisaka /* 1909*437bfbebSnyanmisaka * VEPU working status. 1910*437bfbebSnyanmisaka * 2'h0: Idle. 1911*437bfbebSnyanmisaka * 2'h1: Working in register conifguration mode. 1912*437bfbebSnyanmisaka * 2'h2: Working in link table configuration mode. 1913*437bfbebSnyanmisaka */ 1914*437bfbebSnyanmisaka RK_U32 st_enc : 2; 1915*437bfbebSnyanmisaka /* 1916*437bfbebSnyanmisaka * Status of safe clear. 1917*437bfbebSnyanmisaka * 1'h0: Safe clear is finished or not started. 1918*437bfbebSnyanmisaka * 1'h1: VEPU is performing safe clear. 1919*437bfbebSnyanmisaka */ 1920*437bfbebSnyanmisaka RK_U32 st_sclr : 1; 1921*437bfbebSnyanmisaka RK_U32 reserved : 29; 1922*437bfbebSnyanmisaka } reg138; 1923*437bfbebSnyanmisaka 1924*437bfbebSnyanmisaka /* 1925*437bfbebSnyanmisaka * ST_LKT 1926*437bfbebSnyanmisaka * Address offset: 0x22C Access type: read only 1927*437bfbebSnyanmisaka * Status of link table mode encoding 1928*437bfbebSnyanmisaka */ 1929*437bfbebSnyanmisaka struct { 1930*437bfbebSnyanmisaka /* Number of frames has been encoded since link table mode started. */ 1931*437bfbebSnyanmisaka RK_U32 fnum_enc : 8; 1932*437bfbebSnyanmisaka /* Number of frames has been configured since link table mode started. */ 1933*437bfbebSnyanmisaka RK_U32 fnum_cfg : 8; 1934*437bfbebSnyanmisaka /* 1935*437bfbebSnyanmisaka * Number of frames has been encoded since link table mode started, 1936*437bfbebSnyanmisaka * updated only when corresponding link table node send interrupt 1937*437bfbebSnyanmisaka * (VEPU_ENC_PIC_node_int==1). 1938*437bfbebSnyanmisaka */ 1939*437bfbebSnyanmisaka RK_U32 fnum_int : 8; 1940*437bfbebSnyanmisaka RK_U32 reserved : 8; 1941*437bfbebSnyanmisaka } reg139; 1942*437bfbebSnyanmisaka 1943*437bfbebSnyanmisaka /* 1944*437bfbebSnyanmisaka * ST_NADR 1945*437bfbebSnyanmisaka * Address offset: 0x230 Access type: read only 1946*437bfbebSnyanmisaka * Address of the processing link table node 1947*437bfbebSnyanmisaka */ 1948*437bfbebSnyanmisaka struct { 1949*437bfbebSnyanmisaka /* High 28 bits of the address for the processing linke table node. */ 1950*437bfbebSnyanmisaka RK_U32 node_addr; 1951*437bfbebSnyanmisaka } reg140; 1952*437bfbebSnyanmisaka 1953*437bfbebSnyanmisaka /* 1954*437bfbebSnyanmisaka * ST_BSB 1955*437bfbebSnyanmisaka * Address offset: 0x234 Access type: read only 1956*437bfbebSnyanmisaka * Status of bit stream buffer 1957*437bfbebSnyanmisaka */ 1958*437bfbebSnyanmisaka struct { 1959*437bfbebSnyanmisaka /* High 28 bits of bit stream buffer write address. */ 1960*437bfbebSnyanmisaka RK_U32 bsbw_addr; 1961*437bfbebSnyanmisaka } reg141; 1962*437bfbebSnyanmisaka 1963*437bfbebSnyanmisaka /* 1964*437bfbebSnyanmisaka * ST_BUS 1965*437bfbebSnyanmisaka * Address offset: 0x238 Access type: read only 1966*437bfbebSnyanmisaka * VEPU bus status 1967*437bfbebSnyanmisaka */ 1968*437bfbebSnyanmisaka struct { 1969*437bfbebSnyanmisaka /* 1970*437bfbebSnyanmisaka * AXI write response idle. 1971*437bfbebSnyanmisaka * [6]: Reconstructed picture channel (AXI0_WID==5) 1972*437bfbebSnyanmisaka * [5]: ME information channel (AXI0_WID==4) 1973*437bfbebSnyanmisaka * [4]: Co-located Mv channel (AXI0_WID==3) 1974*437bfbebSnyanmisaka * [3]: Down-sampled picture channel (AXI0_WID==2) 1975*437bfbebSnyanmisaka * [2]: Bit stream channel (AXI0_WID==1) 1976*437bfbebSnyanmisaka * [1]: Link table node channel (AXI0_WID==0) 1977*437bfbebSnyanmisaka * [0]: Reserved 1978*437bfbebSnyanmisaka */ 1979*437bfbebSnyanmisaka RK_U32 axib_idl : 7; 1980*437bfbebSnyanmisaka /* 1981*437bfbebSnyanmisaka * AXI write response outstanding overflow. 1982*437bfbebSnyanmisaka * [6]: Reconstructed picture channel (AXI0_WID==5) 1983*437bfbebSnyanmisaka * [5]: ME information channel (AXI0_WID==4) 1984*437bfbebSnyanmisaka * [4]: Co-located Mv channel (AXI0_WID==3) 1985*437bfbebSnyanmisaka * [3]: Down-sampled picture channel (AXI0_WID==2) 1986*437bfbebSnyanmisaka * [2]: Bit stream channel (AXI0_WID==1) 1987*437bfbebSnyanmisaka * [1]: Link table node channel (AXI0_WID==0) 1988*437bfbebSnyanmisaka * [0]: Reserved. 1989*437bfbebSnyanmisaka */ 1990*437bfbebSnyanmisaka RK_U32 axib_ovfl : 7; 1991*437bfbebSnyanmisaka /* 1992*437bfbebSnyanmisaka * AXI write response error. 1993*437bfbebSnyanmisaka * [6]: Reconstructed picture channel (AXI0_WID==5) 1994*437bfbebSnyanmisaka * [5]: ME information channel (AXI0_WID==4) 1995*437bfbebSnyanmisaka * [4]: Co-located Mv channel (AXI0_WID==3) 1996*437bfbebSnyanmisaka * [3]: Down-sampled picture channel (AXI0_WID==2) 1997*437bfbebSnyanmisaka * [2]: Bit stream channel (AXI0_WID==1) 1998*437bfbebSnyanmisaka * [1]: Link table node channel (AXI0_WID==0) 1999*437bfbebSnyanmisaka * [0]: Reserved. 2000*437bfbebSnyanmisaka */ 2001*437bfbebSnyanmisaka RK_U32 axib_err : 7; 2002*437bfbebSnyanmisaka /* 2003*437bfbebSnyanmisaka * AXI read error. 2004*437bfbebSnyanmisaka * [5]: ROI configuration (AXI0_ARID==7) 2005*437bfbebSnyanmisaka * [4]: Down-sampled picture (AXI0_ARID==6) 2006*437bfbebSnyanmisaka * [3]: Co-located Mv (AXI0_ARID==5) 2007*437bfbebSnyanmisaka * [2]: Link table (AXI0_ARID==4) 2008*437bfbebSnyanmisaka * [1]: Reference picture (AXI0_ARID==1,2,3,8) 2009*437bfbebSnyanmisaka * [0]: Video source load (AXI1) 2010*437bfbebSnyanmisaka */ 2011*437bfbebSnyanmisaka RK_U32 axir_err : 6; 2012*437bfbebSnyanmisaka RK_U32 reserved : 5; 2013*437bfbebSnyanmisaka } reg142; 2014*437bfbebSnyanmisaka 2015*437bfbebSnyanmisaka /* 2016*437bfbebSnyanmisaka * ST_SNUM 2017*437bfbebSnyanmisaka * Address offset: 0x23C Access type: read only 2018*437bfbebSnyanmisaka * Slice number status 2019*437bfbebSnyanmisaka */ 2020*437bfbebSnyanmisaka struct { 2021*437bfbebSnyanmisaka /* Number for slices has been encoded and not read out (by reading ST_SLEN). */ 2022*437bfbebSnyanmisaka RK_U32 sli_num : 6; 2023*437bfbebSnyanmisaka RK_U32 reserved : 30; 2024*437bfbebSnyanmisaka } reg143; 2025*437bfbebSnyanmisaka 2026*437bfbebSnyanmisaka /* 2027*437bfbebSnyanmisaka * ST_SLEN 2028*437bfbebSnyanmisaka * Address offset: 0x240 Access type: read only 2029*437bfbebSnyanmisaka * Status of slice length 2030*437bfbebSnyanmisaka */ 2031*437bfbebSnyanmisaka struct { 2032*437bfbebSnyanmisaka /* Byte length for the earlist encoded slice which has not been read out( by reading VEPU_ST_SLEN). */ 2033*437bfbebSnyanmisaka RK_U32 sli_len : 25; 2034*437bfbebSnyanmisaka RK_U32 reserved : 7; 2035*437bfbebSnyanmisaka } reg144; 2036*437bfbebSnyanmisaka 2037*437bfbebSnyanmisaka /* 2038*437bfbebSnyanmisaka * ST_PNUM_P64 2039*437bfbebSnyanmisaka * Address offset: 0x244 Access type: read only 2040*437bfbebSnyanmisaka * Number of 64x64 inter predicted blocks 2041*437bfbebSnyanmisaka */ 2042*437bfbebSnyanmisaka struct { 2043*437bfbebSnyanmisaka /* Number of 64x64 inter predicted blocks. */ 2044*437bfbebSnyanmisaka RK_U32 pnum_p64 : 12; 2045*437bfbebSnyanmisaka RK_U32 reserved : 20; 2046*437bfbebSnyanmisaka } reg145; 2047*437bfbebSnyanmisaka 2048*437bfbebSnyanmisaka /* 2049*437bfbebSnyanmisaka * ST_PNUM_P32 2050*437bfbebSnyanmisaka * Address offset: 0x248 Access type: read only 2051*437bfbebSnyanmisaka * Number of 32x32 inter predicted blocks 2052*437bfbebSnyanmisaka */ 2053*437bfbebSnyanmisaka struct { 2054*437bfbebSnyanmisaka /* Number of 32x32 inter predicted blocks. */ 2055*437bfbebSnyanmisaka RK_U32 pnum_p32 : 14; 2056*437bfbebSnyanmisaka RK_U32 reserved : 18; 2057*437bfbebSnyanmisaka } reg146; 2058*437bfbebSnyanmisaka 2059*437bfbebSnyanmisaka /* 2060*437bfbebSnyanmisaka * ST_PNUM_P16 2061*437bfbebSnyanmisaka * Address offset: 0x24C Access type: read only 2062*437bfbebSnyanmisaka * Number of 16x16 inter predicted blocks 2063*437bfbebSnyanmisaka */ 2064*437bfbebSnyanmisaka struct { 2065*437bfbebSnyanmisaka /* Number of 16x16 inter predicted blocks. */ 2066*437bfbebSnyanmisaka RK_U32 pnum_p16 : 16; 2067*437bfbebSnyanmisaka RK_U32 reserved : 16; 2068*437bfbebSnyanmisaka } reg147; 2069*437bfbebSnyanmisaka 2070*437bfbebSnyanmisaka /* 2071*437bfbebSnyanmisaka * ST_PNUM_P8 2072*437bfbebSnyanmisaka * Address offset: 0x250 Access type: read only 2073*437bfbebSnyanmisaka * Number of 8x8 inter predicted blocks 2074*437bfbebSnyanmisaka */ 2075*437bfbebSnyanmisaka struct { 2076*437bfbebSnyanmisaka /* Number of 8x8 inter predicted blocks. */ 2077*437bfbebSnyanmisaka RK_U32 pnum_p8 : 18; 2078*437bfbebSnyanmisaka RK_U32 reserved : 14; 2079*437bfbebSnyanmisaka } reg148; 2080*437bfbebSnyanmisaka 2081*437bfbebSnyanmisaka /* 2082*437bfbebSnyanmisaka * ST_PNUM_I32 2083*437bfbebSnyanmisaka * Address offset: 0x254 Access type: read only 2084*437bfbebSnyanmisaka * Number of 32x32 intra predicted blocks 2085*437bfbebSnyanmisaka */ 2086*437bfbebSnyanmisaka struct { 2087*437bfbebSnyanmisaka /* Number of 32x32 intra predicted blocks. */ 2088*437bfbebSnyanmisaka RK_U32 pnum_i32 : 14; 2089*437bfbebSnyanmisaka RK_U32 reserved : 18; 2090*437bfbebSnyanmisaka } reg149; 2091*437bfbebSnyanmisaka 2092*437bfbebSnyanmisaka /* 2093*437bfbebSnyanmisaka * ST_PNUM_I16 2094*437bfbebSnyanmisaka * Address offset: 0x258 Access type: read only 2095*437bfbebSnyanmisaka * Number of 16x16 intra predicted blocks 2096*437bfbebSnyanmisaka */ 2097*437bfbebSnyanmisaka struct { 2098*437bfbebSnyanmisaka /* Number of 16x16 intra predicted blocks. */ 2099*437bfbebSnyanmisaka RK_U32 pnum_i16 : 16; 2100*437bfbebSnyanmisaka RK_U32 reserved : 16; 2101*437bfbebSnyanmisaka } reg150; 2102*437bfbebSnyanmisaka 2103*437bfbebSnyanmisaka /* 2104*437bfbebSnyanmisaka * ST_PNUM_I8 2105*437bfbebSnyanmisaka * Address offset: 0x25C Access type: read only 2106*437bfbebSnyanmisaka * Number of 8x8 intra predicted blocks 2107*437bfbebSnyanmisaka */ 2108*437bfbebSnyanmisaka struct { 2109*437bfbebSnyanmisaka /* Number of 8x8 intra predicted blocks. */ 2110*437bfbebSnyanmisaka RK_U32 pnum_i8 : 18; 2111*437bfbebSnyanmisaka RK_U32 reserved : 14; 2112*437bfbebSnyanmisaka } reg151; 2113*437bfbebSnyanmisaka 2114*437bfbebSnyanmisaka /* 2115*437bfbebSnyanmisaka * ST_PNUM_I4 2116*437bfbebSnyanmisaka * Address offset: 0x260 Access type: read only 2117*437bfbebSnyanmisaka * Number of 4x4 intra predicted blocks 2118*437bfbebSnyanmisaka */ 2119*437bfbebSnyanmisaka struct { 2120*437bfbebSnyanmisaka /* Number of 4x4 intra predicted blocks. */ 2121*437bfbebSnyanmisaka RK_U32 pnum_i4 : 20; 2122*437bfbebSnyanmisaka RK_U32 reserved : 12; 2123*437bfbebSnyanmisaka } reg152; 2124*437bfbebSnyanmisaka 2125*437bfbebSnyanmisaka /* 2126*437bfbebSnyanmisaka * ST_B8_QP0~51 2127*437bfbebSnyanmisaka * Address offset: 0x264~0x330 Access type: read only 2128*437bfbebSnyanmisaka * Number of block8x8s with QP=0~51 2129*437bfbebSnyanmisaka */ 2130*437bfbebSnyanmisaka struct { 2131*437bfbebSnyanmisaka /* 2132*437bfbebSnyanmisaka * Number of block8x8s with QP value. 2133*437bfbebSnyanmisaka * HEVC CUs of which size are bigger that 8x8 are considered as 2134*437bfbebSnyanmisaka * (CU_size/8)*(CU_size/8) clock8x8s; 2135*437bfbebSnyanmisaka * while H.264 MB is considered as 4 block8x8s. 2136*437bfbebSnyanmisaka */ 2137*437bfbebSnyanmisaka Vepu541B8NumQp num_qp[52]; 2138*437bfbebSnyanmisaka } reg153_204; 2139*437bfbebSnyanmisaka 2140*437bfbebSnyanmisaka /* 2141*437bfbebSnyanmisaka * ST_CPLX_TMP 2142*437bfbebSnyanmisaka * Address offset: 0x334 Access type: read only 2143*437bfbebSnyanmisaka * Temporal complexity(MADP) for current encoding and reference frame 2144*437bfbebSnyanmisaka */ 2145*437bfbebSnyanmisaka struct { 2146*437bfbebSnyanmisaka /* Mean absolute differences between current encoding and reference frame. */ 2147*437bfbebSnyanmisaka RK_U32 madp; 2148*437bfbebSnyanmisaka } reg205; 2149*437bfbebSnyanmisaka 2150*437bfbebSnyanmisaka /* 2151*437bfbebSnyanmisaka * ST_BNUM_CME 2152*437bfbebSnyanmisaka * Address offset: 0x338 Access type: read only 2153*437bfbebSnyanmisaka * Number of CME blocks in frame. 2154*437bfbebSnyanmisaka * H.264: number CME blocks (4 MBs) in 16x64 aligned extended frame, 2155*437bfbebSnyanmisaka * except for the CME blocks configured as force intra. 2156*437bfbebSnyanmisaka * HEVC : number CME blocks (CTU) in 64x64 aligned extended frame, 2157*437bfbebSnyanmisaka * except for the CME blocks configured as force intra. 2158*437bfbebSnyanmisaka */ 2159*437bfbebSnyanmisaka struct { 2160*437bfbebSnyanmisaka /* Number of CTU (HEVC: 64x64; H.264: 64x16) for CME inter-frame prediction. */ 2161*437bfbebSnyanmisaka RK_U32 num_ctu : 16; 2162*437bfbebSnyanmisaka RK_U32 reserved : 16; 2163*437bfbebSnyanmisaka } reg206; 2164*437bfbebSnyanmisaka 2165*437bfbebSnyanmisaka /* 2166*437bfbebSnyanmisaka * ST_CPLX_SPT 2167*437bfbebSnyanmisaka * Address offset: 0x33C Access type: read only 2168*437bfbebSnyanmisaka * Spatial complexity(MADI) for current encoding frame 2169*437bfbebSnyanmisaka */ 2170*437bfbebSnyanmisaka struct { 2171*437bfbebSnyanmisaka /* Mean absolute differences for current encoding frame. */ 2172*437bfbebSnyanmisaka RK_U32 madi; 2173*437bfbebSnyanmisaka } reg207; 2174*437bfbebSnyanmisaka 2175*437bfbebSnyanmisaka /* 2176*437bfbebSnyanmisaka * ST_BNUM_B16 2177*437bfbebSnyanmisaka * Address offset: 0x340 Access type: read only 2178*437bfbebSnyanmisaka * Number of valid 16x16 blocks for one frame. 2179*437bfbebSnyanmisaka */ 2180*437bfbebSnyanmisaka struct { 2181*437bfbebSnyanmisaka /* Number of valid 16x16 blocks for one frame. */ 2182*437bfbebSnyanmisaka RK_U32 num_b16; 2183*437bfbebSnyanmisaka } reg208; 2184*437bfbebSnyanmisaka } Vepu541H264eRegSet; 2185*437bfbebSnyanmisaka 2186*437bfbebSnyanmisaka /* return register is a subset of the whole register. */ 2187*437bfbebSnyanmisaka typedef struct Vepu541H264eRegRet_t { 2188*437bfbebSnyanmisaka /* 2189*437bfbebSnyanmisaka * INT_STA 2190*437bfbebSnyanmisaka * Address offset: 0x001c Access type: read and write, write one to clear 2191*437bfbebSnyanmisaka * VEPU interrupt status 2192*437bfbebSnyanmisaka */ 2193*437bfbebSnyanmisaka struct { 2194*437bfbebSnyanmisaka /* One frame encode finish interrupt status */ 2195*437bfbebSnyanmisaka RK_U32 enc_done_sta : 1; 2196*437bfbebSnyanmisaka /* Link table finish interrupt status */ 2197*437bfbebSnyanmisaka RK_U32 lkt_done_sta : 1; 2198*437bfbebSnyanmisaka /* Safe clear finish interrupt status */ 2199*437bfbebSnyanmisaka RK_U32 sclr_done_sta : 1; 2200*437bfbebSnyanmisaka /* One slice encode finish interrupt status */ 2201*437bfbebSnyanmisaka RK_U32 enc_slice_done_sta : 1; 2202*437bfbebSnyanmisaka /* Bit stream overflow interrupt status */ 2203*437bfbebSnyanmisaka RK_U32 oflw_done_sta : 1; 2204*437bfbebSnyanmisaka /* AXI write response fifo full interrupt status */ 2205*437bfbebSnyanmisaka RK_U32 brsp_done_sta : 1; 2206*437bfbebSnyanmisaka /* AXI write response channel error interrupt status */ 2207*437bfbebSnyanmisaka RK_U32 berr_done_sta : 1; 2208*437bfbebSnyanmisaka /* AXI read channel error interrupt status */ 2209*437bfbebSnyanmisaka RK_U32 rerr_done_sta : 1; 2210*437bfbebSnyanmisaka /* timeout error interrupt status */ 2211*437bfbebSnyanmisaka RK_U32 wdg_done_sta : 1; 2212*437bfbebSnyanmisaka RK_U32 reserved : 23; 2213*437bfbebSnyanmisaka } hw_status; /* reg007 */ 2214*437bfbebSnyanmisaka 2215*437bfbebSnyanmisaka /* 2216*437bfbebSnyanmisaka * ST_BSL 2217*437bfbebSnyanmisaka * Address offset: 0x210 Access type: read only 2218*437bfbebSnyanmisaka * Bit stream length for current frame 2219*437bfbebSnyanmisaka */ 2220*437bfbebSnyanmisaka struct { 2221*437bfbebSnyanmisaka /* Bit stream length for current frame. */ 2222*437bfbebSnyanmisaka RK_U32 bs_lgth : 27; 2223*437bfbebSnyanmisaka RK_U32 reserved : 5; 2224*437bfbebSnyanmisaka } st_bsl; /* reg132 */ 2225*437bfbebSnyanmisaka 2226*437bfbebSnyanmisaka /* 2227*437bfbebSnyanmisaka * ST_SSE_L32 2228*437bfbebSnyanmisaka * Address offset: 0x214 Access type: read only 2229*437bfbebSnyanmisaka * Low 32 bits of encoding distortion (SSE) 2230*437bfbebSnyanmisaka */ 2231*437bfbebSnyanmisaka struct { 2232*437bfbebSnyanmisaka RK_U32 sse_l32; 2233*437bfbebSnyanmisaka } st_sse_l32; /* reg133 */ 2234*437bfbebSnyanmisaka 2235*437bfbebSnyanmisaka /* 2236*437bfbebSnyanmisaka * ST_SSE_QP 2237*437bfbebSnyanmisaka * Address offset: 0x218 Access type: read only 2238*437bfbebSnyanmisaka * High 8 bits of encoding distortion (SSE) and sum of QP for the encoded frame 2239*437bfbebSnyanmisaka */ 2240*437bfbebSnyanmisaka struct { 2241*437bfbebSnyanmisaka /* Sum of QP for the encoded frame. */ 2242*437bfbebSnyanmisaka RK_U32 qp_sum : 22; 2243*437bfbebSnyanmisaka RK_U32 reserved : 2; 2244*437bfbebSnyanmisaka /* High bits of encoding distortion(SSE). */ 2245*437bfbebSnyanmisaka RK_U32 sse_h8 : 8; 2246*437bfbebSnyanmisaka } st_sse_qp; /* reg134 */ 2247*437bfbebSnyanmisaka 2248*437bfbebSnyanmisaka /* 2249*437bfbebSnyanmisaka * ST_SAO 2250*437bfbebSnyanmisaka * Address offset: 0x21C Access type: read only 2251*437bfbebSnyanmisaka * Number of CTUs which adjusted by SAO 2252*437bfbebSnyanmisaka */ 2253*437bfbebSnyanmisaka struct { 2254*437bfbebSnyanmisaka /* Number of CTUs whose CHROMA component are adjusted by SAO. */ 2255*437bfbebSnyanmisaka RK_U32 sao_cnum : 12; 2256*437bfbebSnyanmisaka /* Number of CTUs whose LUMA component are adjusted by SAO. */ 2257*437bfbebSnyanmisaka RK_U32 sao_ynum : 12; 2258*437bfbebSnyanmisaka RK_U32 reserved : 8; 2259*437bfbebSnyanmisaka } st_sao; /* reg135 */ 2260*437bfbebSnyanmisaka 2261*437bfbebSnyanmisaka /* reg gap 136~137 */ 2262*437bfbebSnyanmisaka RK_U32 reg_136_137[2]; 2263*437bfbebSnyanmisaka 2264*437bfbebSnyanmisaka /* 2265*437bfbebSnyanmisaka * ST_ENC 2266*437bfbebSnyanmisaka * Address offset: 0x228 Access type: read only 2267*437bfbebSnyanmisaka * VEPU working status 2268*437bfbebSnyanmisaka */ 2269*437bfbebSnyanmisaka struct { 2270*437bfbebSnyanmisaka /* 2271*437bfbebSnyanmisaka * VEPU working status. 2272*437bfbebSnyanmisaka * 2'h0: Idle. 2273*437bfbebSnyanmisaka * 2'h1: Working in register conifguration mode. 2274*437bfbebSnyanmisaka * 2'h2: Working in link table configuration mode. 2275*437bfbebSnyanmisaka */ 2276*437bfbebSnyanmisaka RK_U32 st_enc : 2; 2277*437bfbebSnyanmisaka /* 2278*437bfbebSnyanmisaka * Status of safe clear. 2279*437bfbebSnyanmisaka * 1'h0: Safe clear is finished or not started. 2280*437bfbebSnyanmisaka * 1'h1: VEPU is performing safe clear. 2281*437bfbebSnyanmisaka */ 2282*437bfbebSnyanmisaka RK_U32 st_sclr : 1; 2283*437bfbebSnyanmisaka RK_U32 reserved : 29; 2284*437bfbebSnyanmisaka } st_enc; /* reg138 */ 2285*437bfbebSnyanmisaka 2286*437bfbebSnyanmisaka /* 2287*437bfbebSnyanmisaka * ST_LKT 2288*437bfbebSnyanmisaka * Address offset: 0x22C Access type: read only 2289*437bfbebSnyanmisaka * Status of link table mode encoding 2290*437bfbebSnyanmisaka */ 2291*437bfbebSnyanmisaka struct { 2292*437bfbebSnyanmisaka /* Number of frames has been encoded since link table mode started. */ 2293*437bfbebSnyanmisaka RK_U32 fnum_enc : 8; 2294*437bfbebSnyanmisaka /* Number of frames has been configured since link table mode started. */ 2295*437bfbebSnyanmisaka RK_U32 fnum_cfg : 8; 2296*437bfbebSnyanmisaka /* 2297*437bfbebSnyanmisaka * Number of frames has been encoded since link table mode started, 2298*437bfbebSnyanmisaka * updated only when corresponding link table node send interrupt 2299*437bfbebSnyanmisaka * (VEPU_ENC_PIC_node_int==1). 2300*437bfbebSnyanmisaka */ 2301*437bfbebSnyanmisaka RK_U32 fnum_int : 8; 2302*437bfbebSnyanmisaka RK_U32 reserved : 8; 2303*437bfbebSnyanmisaka } st_lkt; /* reg139 */ 2304*437bfbebSnyanmisaka 2305*437bfbebSnyanmisaka /* 2306*437bfbebSnyanmisaka * ST_NADR 2307*437bfbebSnyanmisaka * Address offset: 0x230 Access type: read only 2308*437bfbebSnyanmisaka * Address of the processing link table node 2309*437bfbebSnyanmisaka */ 2310*437bfbebSnyanmisaka struct { 2311*437bfbebSnyanmisaka /* High 28 bits of the address for the processing linke table node. */ 2312*437bfbebSnyanmisaka RK_U32 node_addr; 2313*437bfbebSnyanmisaka } ST_NADR; /* reg140 */ 2314*437bfbebSnyanmisaka 2315*437bfbebSnyanmisaka /* 2316*437bfbebSnyanmisaka * ST_BSB 2317*437bfbebSnyanmisaka * Address offset: 0x234 Access type: read only 2318*437bfbebSnyanmisaka * Status of bit stream buffer 2319*437bfbebSnyanmisaka */ 2320*437bfbebSnyanmisaka struct { 2321*437bfbebSnyanmisaka /* High 28 bits of bit stream buffer write address. */ 2322*437bfbebSnyanmisaka RK_U32 bsbw_addr; 2323*437bfbebSnyanmisaka } st_bsb; /* reg141 */ 2324*437bfbebSnyanmisaka 2325*437bfbebSnyanmisaka /* 2326*437bfbebSnyanmisaka * ST_BUS 2327*437bfbebSnyanmisaka * Address offset: 0x238 Access type: read only 2328*437bfbebSnyanmisaka * VEPU bus status 2329*437bfbebSnyanmisaka */ 2330*437bfbebSnyanmisaka struct { 2331*437bfbebSnyanmisaka /* 2332*437bfbebSnyanmisaka * AXI write response idle. 2333*437bfbebSnyanmisaka * [6]: Reconstructed picture channel (AXI0_WID==5) 2334*437bfbebSnyanmisaka * [5]: ME information channel (AXI0_WID==4) 2335*437bfbebSnyanmisaka * [4]: Co-located Mv channel (AXI0_WID==3) 2336*437bfbebSnyanmisaka * [3]: Down-sampled picture channel (AXI0_WID==2) 2337*437bfbebSnyanmisaka * [2]: Bit stream channel (AXI0_WID==1) 2338*437bfbebSnyanmisaka * [1]: Link table node channel (AXI0_WID==0) 2339*437bfbebSnyanmisaka * [0]: Reserved 2340*437bfbebSnyanmisaka */ 2341*437bfbebSnyanmisaka RK_U32 axib_idl : 7; 2342*437bfbebSnyanmisaka /* 2343*437bfbebSnyanmisaka * AXI write response outstanding overflow. 2344*437bfbebSnyanmisaka * [6]: Reconstructed picture channel (AXI0_WID==5) 2345*437bfbebSnyanmisaka * [5]: ME information channel (AXI0_WID==4) 2346*437bfbebSnyanmisaka * [4]: Co-located Mv channel (AXI0_WID==3) 2347*437bfbebSnyanmisaka * [3]: Down-sampled picture channel (AXI0_WID==2) 2348*437bfbebSnyanmisaka * [2]: Bit stream channel (AXI0_WID==1) 2349*437bfbebSnyanmisaka * [1]: Link table node channel (AXI0_WID==0) 2350*437bfbebSnyanmisaka * [0]: Reserved. 2351*437bfbebSnyanmisaka */ 2352*437bfbebSnyanmisaka RK_U32 axib_ovfl : 7; 2353*437bfbebSnyanmisaka /* 2354*437bfbebSnyanmisaka * AXI write response error. 2355*437bfbebSnyanmisaka * [6]: Reconstructed picture channel (AXI0_WID==5) 2356*437bfbebSnyanmisaka * [5]: ME information channel (AXI0_WID==4) 2357*437bfbebSnyanmisaka * [4]: Co-located Mv channel (AXI0_WID==3) 2358*437bfbebSnyanmisaka * [3]: Down-sampled picture channel (AXI0_WID==2) 2359*437bfbebSnyanmisaka * [2]: Bit stream channel (AXI0_WID==1) 2360*437bfbebSnyanmisaka * [1]: Link table node channel (AXI0_WID==0) 2361*437bfbebSnyanmisaka * [0]: Reserved. 2362*437bfbebSnyanmisaka */ 2363*437bfbebSnyanmisaka RK_U32 axib_err : 7; 2364*437bfbebSnyanmisaka /* 2365*437bfbebSnyanmisaka * AXI read error. 2366*437bfbebSnyanmisaka * [5]: ROI configuration (AXI0_ARID==7) 2367*437bfbebSnyanmisaka * [4]: Down-sampled picture (AXI0_ARID==6) 2368*437bfbebSnyanmisaka * [3]: Co-located Mv (AXI0_ARID==5) 2369*437bfbebSnyanmisaka * [2]: Link table (AXI0_ARID==4) 2370*437bfbebSnyanmisaka * [1]: Reference picture (AXI0_ARID==1,2,3,8) 2371*437bfbebSnyanmisaka * [0]: Video source load (AXI1) 2372*437bfbebSnyanmisaka */ 2373*437bfbebSnyanmisaka RK_U32 axir_err : 6; 2374*437bfbebSnyanmisaka RK_U32 reserved : 5; 2375*437bfbebSnyanmisaka } st_bus; /* reg142 */ 2376*437bfbebSnyanmisaka 2377*437bfbebSnyanmisaka /* 2378*437bfbebSnyanmisaka * ST_SNUM 2379*437bfbebSnyanmisaka * Address offset: 0x23C Access type: read only 2380*437bfbebSnyanmisaka * Slice number status 2381*437bfbebSnyanmisaka */ 2382*437bfbebSnyanmisaka RK_U32 st_slice_number; 2383*437bfbebSnyanmisaka 2384*437bfbebSnyanmisaka /* 2385*437bfbebSnyanmisaka * ST_SLEN 2386*437bfbebSnyanmisaka * Address offset: 0x240 Access type: read only 2387*437bfbebSnyanmisaka * Status of slice length 2388*437bfbebSnyanmisaka */ 2389*437bfbebSnyanmisaka RK_U32 st_slice_length; 2390*437bfbebSnyanmisaka 2391*437bfbebSnyanmisaka /* 2392*437bfbebSnyanmisaka * ST_PNUM_P64 2393*437bfbebSnyanmisaka * Address offset: 0x244 Access type: read only 2394*437bfbebSnyanmisaka * Number of 64x64 inter predicted blocks 2395*437bfbebSnyanmisaka */ 2396*437bfbebSnyanmisaka RK_U32 st_lvl64_inter_num; 2397*437bfbebSnyanmisaka 2398*437bfbebSnyanmisaka /* 2399*437bfbebSnyanmisaka * ST_PNUM_P32 2400*437bfbebSnyanmisaka * Address offset: 0x248 Access type: read only 2401*437bfbebSnyanmisaka * Number of 32x32 inter predicted blocks 2402*437bfbebSnyanmisaka */ 2403*437bfbebSnyanmisaka RK_U32 st_lvl32_inter_num; 2404*437bfbebSnyanmisaka 2405*437bfbebSnyanmisaka /* 2406*437bfbebSnyanmisaka * ST_PNUM_P16 2407*437bfbebSnyanmisaka * Address offset: 0x24C Access type: read only 2408*437bfbebSnyanmisaka * Number of 16x16 inter predicted blocks 2409*437bfbebSnyanmisaka */ 2410*437bfbebSnyanmisaka RK_U32 st_lvl16_inter_num; 2411*437bfbebSnyanmisaka 2412*437bfbebSnyanmisaka /* 2413*437bfbebSnyanmisaka * ST_PNUM_P8 2414*437bfbebSnyanmisaka * Address offset: 0x250 Access type: read only 2415*437bfbebSnyanmisaka * Number of 8x8 inter predicted blocks 2416*437bfbebSnyanmisaka */ 2417*437bfbebSnyanmisaka RK_U32 st_lvl8_inter_num; 2418*437bfbebSnyanmisaka 2419*437bfbebSnyanmisaka /* 2420*437bfbebSnyanmisaka * ST_PNUM_I32 2421*437bfbebSnyanmisaka * Address offset: 0x254 Access type: read only 2422*437bfbebSnyanmisaka * Number of 32x32 intra predicted blocks 2423*437bfbebSnyanmisaka */ 2424*437bfbebSnyanmisaka RK_U32 st_lvl32_intra_num; 2425*437bfbebSnyanmisaka 2426*437bfbebSnyanmisaka /* 2427*437bfbebSnyanmisaka * ST_PNUM_I16 2428*437bfbebSnyanmisaka * Address offset: 0x258 Access type: read only 2429*437bfbebSnyanmisaka * Number of 16x16 intra predicted blocks 2430*437bfbebSnyanmisaka */ 2431*437bfbebSnyanmisaka RK_U32 st_lvl16_intra_num; 2432*437bfbebSnyanmisaka 2433*437bfbebSnyanmisaka /* 2434*437bfbebSnyanmisaka * ST_PNUM_I8 2435*437bfbebSnyanmisaka * Address offset: 0x25C Access type: read only 2436*437bfbebSnyanmisaka * Number of 8x8 intra predicted blocks 2437*437bfbebSnyanmisaka */ 2438*437bfbebSnyanmisaka RK_U32 st_lvl8_intra_num; 2439*437bfbebSnyanmisaka 2440*437bfbebSnyanmisaka /* 2441*437bfbebSnyanmisaka * ST_PNUM_I4 2442*437bfbebSnyanmisaka * Address offset: 0x260 Access type: read only 2443*437bfbebSnyanmisaka * Number of 4x4 intra predicted blocks 2444*437bfbebSnyanmisaka */ 2445*437bfbebSnyanmisaka RK_U32 st_lvl4_intra_num; 2446*437bfbebSnyanmisaka 2447*437bfbebSnyanmisaka /* 2448*437bfbebSnyanmisaka * ST_B8_QP0~51 2449*437bfbebSnyanmisaka * Address offset: 0x264~0x330 Access type: read only 2450*437bfbebSnyanmisaka * Number of block8x8s with QP=0~51 2451*437bfbebSnyanmisaka */ 2452*437bfbebSnyanmisaka RK_U32 st_cu_num_qp[52]; 2453*437bfbebSnyanmisaka 2454*437bfbebSnyanmisaka /* 2455*437bfbebSnyanmisaka * ST_CPLX_TMP 2456*437bfbebSnyanmisaka * Address offset: 0x334 Access type: read only 2457*437bfbebSnyanmisaka * Temporal complexity(MADP) for current encoding and reference frame 2458*437bfbebSnyanmisaka */ 2459*437bfbebSnyanmisaka RK_U32 st_madp; 2460*437bfbebSnyanmisaka 2461*437bfbebSnyanmisaka /* 2462*437bfbebSnyanmisaka * ST_BNUM_CME 2463*437bfbebSnyanmisaka * Address offset: 0x338 Access type: read only 2464*437bfbebSnyanmisaka * Number of CME blocks in frame. 2465*437bfbebSnyanmisaka * H.264: number CME blocks (4 MBs) in 16x64 aligned extended frame, 2466*437bfbebSnyanmisaka * except for the CME blocks configured as force intra. 2467*437bfbebSnyanmisaka * HEVC : number CME blocks (CTU) in 64x64 aligned extended frame, 2468*437bfbebSnyanmisaka * except for the CME blocks configured as force intra. 2469*437bfbebSnyanmisaka */ 2470*437bfbebSnyanmisaka RK_U32 st_ctu_num; 2471*437bfbebSnyanmisaka 2472*437bfbebSnyanmisaka /* 2473*437bfbebSnyanmisaka * ST_CPLX_SPT 2474*437bfbebSnyanmisaka * Address offset: 0x33C Access type: read only 2475*437bfbebSnyanmisaka * Spatial complexity(MADI) for current encoding frame 2476*437bfbebSnyanmisaka */ 2477*437bfbebSnyanmisaka RK_U32 st_madi; 2478*437bfbebSnyanmisaka 2479*437bfbebSnyanmisaka /* 2480*437bfbebSnyanmisaka * ST_BNUM_B16 2481*437bfbebSnyanmisaka * Address offset: 0x340 Access type: read only 2482*437bfbebSnyanmisaka * Number of valid 16x16 blocks for one frame. 2483*437bfbebSnyanmisaka */ 2484*437bfbebSnyanmisaka RK_U32 st_mb_num; 2485*437bfbebSnyanmisaka } Vepu541H264eRegRet; 2486*437bfbebSnyanmisaka 2487*437bfbebSnyanmisaka #endif /* __HAL_H264E_VEPU541_REG_H__ */ 2488