1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2023 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __HAL_JPEGE_VPU720_REG_H__ 7*437bfbebSnyanmisaka #define __HAL_JPEGE_VPU720_REG_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include "rk_type.h" 10*437bfbebSnyanmisaka 11*437bfbebSnyanmisaka typedef struct JpegeVpu720BaseReg_t { 12*437bfbebSnyanmisaka // 0x0000, IP version 13*437bfbebSnyanmisaka RK_U32 reg000_version; 14*437bfbebSnyanmisaka // 0x0004, Start Command 15*437bfbebSnyanmisaka struct { 16*437bfbebSnyanmisaka // Number of new nodes added to link table 17*437bfbebSnyanmisaka RK_U32 lkt_num : 8; 18*437bfbebSnyanmisaka /** 19*437bfbebSnyanmisaka * @brief VEPU command 20*437bfbebSnyanmisaka * 0 -- N/A 21*437bfbebSnyanmisaka * 1 -- One-frame encoding by register configuration 22*437bfbebSnyanmisaka * 2 -- Multi-frame encoding start with link table mode 23*437bfbebSnyanmisaka * 3 -- Multi-frame encoding update (with link table mode) 24*437bfbebSnyanmisaka * 4 -- link table encoding force pause 25*437bfbebSnyanmisaka * 5 -- continue link table encoder when link table stop 26*437bfbebSnyanmisaka * 6 -- safe_clr 27*437bfbebSnyanmisaka * 7 -- force_clr 28*437bfbebSnyanmisaka */ 29*437bfbebSnyanmisaka RK_U32 vepu_cmd : 4; 30*437bfbebSnyanmisaka RK_U32 : 20; 31*437bfbebSnyanmisaka } reg001_enc_strt; 32*437bfbebSnyanmisaka 33*437bfbebSnyanmisaka /*reserved 0x8 ~ 0xC*/ 34*437bfbebSnyanmisaka RK_U32 reg002_003[2]; 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka // 0x0010, Interrupt Enable 37*437bfbebSnyanmisaka struct { 38*437bfbebSnyanmisaka // One frame encoding finish interrupt enable 39*437bfbebSnyanmisaka RK_U32 fenc_done_en : 1; 40*437bfbebSnyanmisaka // Link table one node finish interrupt enable 41*437bfbebSnyanmisaka RK_U32 lkt_node_done_en : 1; 42*437bfbebSnyanmisaka // Safe clear finish interrupt enable 43*437bfbebSnyanmisaka RK_U32 sclr_done_en : 1; 44*437bfbebSnyanmisaka // One slice of video encoding finish interrupt enable 45*437bfbebSnyanmisaka RK_U32 vslc_done_en : 1; 46*437bfbebSnyanmisaka // Video bit stream buffer overflow interrupt enable 47*437bfbebSnyanmisaka RK_U32 vbsb_oflw_en : 1; 48*437bfbebSnyanmisaka // Video bit stream buffer write section interrupt enable 49*437bfbebSnyanmisaka RK_U32 vbsb_sct_en : 1; 50*437bfbebSnyanmisaka // Frame encoding error interrupt enable 51*437bfbebSnyanmisaka RK_U32 fenc_err_en : 1; 52*437bfbebSnyanmisaka // Watch dog (timeout) interrupt enable 53*437bfbebSnyanmisaka RK_U32 wdg_en : 1; 54*437bfbebSnyanmisaka // Link table operation error interrupt enable 55*437bfbebSnyanmisaka RK_U32 lkt_oerr_en : 1; 56*437bfbebSnyanmisaka // Link table encoding error stop interrupt enable 57*437bfbebSnyanmisaka RK_U32 lkt_estp_en : 1; 58*437bfbebSnyanmisaka // Link cmd force pause interrupt enable 59*437bfbebSnyanmisaka RK_U32 lkt_fstp_en : 1; 60*437bfbebSnyanmisaka // Link table note stop interrupt enable 61*437bfbebSnyanmisaka RK_U32 lkt_note_stp_en : 1; 62*437bfbebSnyanmisaka RK_U32 lkt_data_error_en : 1; 63*437bfbebSnyanmisaka RK_U32 : 19; 64*437bfbebSnyanmisaka } reg004_int_en; 65*437bfbebSnyanmisaka 66*437bfbebSnyanmisaka // 0x0014, Interrupt Mask 67*437bfbebSnyanmisaka struct { 68*437bfbebSnyanmisaka RK_U32 fenc_done_msk : 1; 69*437bfbebSnyanmisaka RK_U32 lkt_node_done_msk : 1; 70*437bfbebSnyanmisaka RK_U32 sclr_done_msk : 1; 71*437bfbebSnyanmisaka RK_U32 vslc_done_msk : 1; 72*437bfbebSnyanmisaka RK_U32 vbsb_oflw_msk : 1; 73*437bfbebSnyanmisaka RK_U32 vbsb_sct_msk : 1; 74*437bfbebSnyanmisaka RK_U32 fenc_err_msk : 1; 75*437bfbebSnyanmisaka RK_U32 wdg_msk : 1; 76*437bfbebSnyanmisaka RK_U32 lkt_oerr_msk : 1; 77*437bfbebSnyanmisaka RK_U32 lkt_estp_msk : 1; 78*437bfbebSnyanmisaka RK_U32 lkt_fstp_msk : 1; 79*437bfbebSnyanmisaka RK_U32 lkt_note_stp_msk : 1; 80*437bfbebSnyanmisaka RK_U32 lkt_data_error_msk : 1; 81*437bfbebSnyanmisaka RK_U32 : 19; 82*437bfbebSnyanmisaka } reg005_int_msk; 83*437bfbebSnyanmisaka 84*437bfbebSnyanmisaka // 0x0018, Interrupt Clear 85*437bfbebSnyanmisaka struct { 86*437bfbebSnyanmisaka RK_U32 fenc_done_clr : 1; 87*437bfbebSnyanmisaka RK_U32 lkt_node_done_clr : 1; 88*437bfbebSnyanmisaka RK_U32 sclr_done_clr : 1; 89*437bfbebSnyanmisaka RK_U32 vslc_done_clr : 1; 90*437bfbebSnyanmisaka RK_U32 vbsb_oflw_clr : 1; 91*437bfbebSnyanmisaka RK_U32 vbsb_sct_clr : 1; 92*437bfbebSnyanmisaka RK_U32 fenc_err_clr : 1; 93*437bfbebSnyanmisaka RK_U32 wdg_clr : 1; 94*437bfbebSnyanmisaka RK_U32 lkt_oerr_clr : 1; 95*437bfbebSnyanmisaka RK_U32 lkt_estp_clr : 1; 96*437bfbebSnyanmisaka RK_U32 lkt_fstp_clr : 1; 97*437bfbebSnyanmisaka RK_U32 lkt_note_stp_clr : 1; 98*437bfbebSnyanmisaka RK_U32 lkt_data_error_clr : 1; 99*437bfbebSnyanmisaka RK_U32 : 19; 100*437bfbebSnyanmisaka } reg006_int_clr; 101*437bfbebSnyanmisaka 102*437bfbebSnyanmisaka // 0x001c, Interrupt State; 103*437bfbebSnyanmisaka struct { 104*437bfbebSnyanmisaka RK_U32 fenc_done_state : 1; 105*437bfbebSnyanmisaka RK_U32 lkt_node_done_state : 1; 106*437bfbebSnyanmisaka RK_U32 sclr_done_state : 1; 107*437bfbebSnyanmisaka RK_U32 vslc_done_state : 1; 108*437bfbebSnyanmisaka RK_U32 vbsb_oflw_state : 1; 109*437bfbebSnyanmisaka RK_U32 vbsb_sct_state : 1; 110*437bfbebSnyanmisaka RK_U32 fenc_err_state : 1; 111*437bfbebSnyanmisaka RK_U32 wdg_state : 1; 112*437bfbebSnyanmisaka RK_U32 lkt_oerr_state : 1; 113*437bfbebSnyanmisaka RK_U32 lkt_estp_state : 1; 114*437bfbebSnyanmisaka RK_U32 lkt_fstp_state : 1; 115*437bfbebSnyanmisaka RK_U32 lkt_note_stp_state : 1; 116*437bfbebSnyanmisaka RK_U32 lkt_data_error_state : 1; 117*437bfbebSnyanmisaka RK_U32 : 19; 118*437bfbebSnyanmisaka } reg007_int_state; 119*437bfbebSnyanmisaka 120*437bfbebSnyanmisaka // 0x0020, Clock and RST CTRL 121*437bfbebSnyanmisaka struct { 122*437bfbebSnyanmisaka // Encoder auto reset core clock domain when frame finished 123*437bfbebSnyanmisaka RK_U32 resetn_hw_en : 1; 124*437bfbebSnyanmisaka // Encoder SRAM auto clock gating enable 125*437bfbebSnyanmisaka RK_U32 sram_ckg_en : 1; 126*437bfbebSnyanmisaka // Auto clock gating enable 127*437bfbebSnyanmisaka RK_U32 cke : 1; 128*437bfbebSnyanmisaka RK_U32 : 29; 129*437bfbebSnyanmisaka } reg008_cru_ctrl; 130*437bfbebSnyanmisaka 131*437bfbebSnyanmisaka // 0x0024, Fast link table cfg buffer addr, 128 byte aligned 132*437bfbebSnyanmisaka RK_U32 reg009_lkt_base_addr; 133*437bfbebSnyanmisaka 134*437bfbebSnyanmisaka // 0x0028, Link table node operation configuration 135*437bfbebSnyanmisaka struct { 136*437bfbebSnyanmisaka // Only the ejpeg with the same core ID can use this node 137*437bfbebSnyanmisaka RK_U32 core_id : 4; 138*437bfbebSnyanmisaka // The enable of lkt error stop next frame 139*437bfbebSnyanmisaka RK_U32 lkt_err_stop_en : 1; 140*437bfbebSnyanmisaka // The enable of lkt frame stop when the frame end 141*437bfbebSnyanmisaka RK_U32 lkt_node_stop_en : 1; 142*437bfbebSnyanmisaka RK_U32 : 10; 143*437bfbebSnyanmisaka /** 144*437bfbebSnyanmisaka * @brief Data swap for link table read channel. 145*437bfbebSnyanmisaka * bit[3] -- swap 64 bits in 128 bits 146*437bfbebSnyanmisaka * bit[2] -- swap 32 bits in 64 bits; 147*437bfbebSnyanmisaka * bit[1] -- swap 16 bits in 32 bits; 148*437bfbebSnyanmisaka * bit[0] -- swap 8 bits in 16 bits; 149*437bfbebSnyanmisaka */ 150*437bfbebSnyanmisaka RK_U32 lktr_bus_edin : 4; 151*437bfbebSnyanmisaka /** 152*437bfbebSnyanmisaka * @brief 153*437bfbebSnyanmisaka * Data swap for link table write channel. 154*437bfbebSnyanmisaka * bit[3] -- swap 64 bits in 128 bits 155*437bfbebSnyanmisaka * bit[2] -- swap 32 bits in 64 bits; 156*437bfbebSnyanmisaka * bit[1] -- swap 16 bits in 32 bits; 157*437bfbebSnyanmisaka * bit[0] -- swap 8 bits in 16 bits; 158*437bfbebSnyanmisaka */ 159*437bfbebSnyanmisaka RK_U32 lktw_bus_edin : 4; 160*437bfbebSnyanmisaka RK_U32 : 8; 161*437bfbebSnyanmisaka } reg010_node_ocfg; 162*437bfbebSnyanmisaka 163*437bfbebSnyanmisaka // 0x002c, watch dog configure register 164*437bfbebSnyanmisaka RK_U32 reg011_wdg_jpeg; 165*437bfbebSnyanmisaka 166*437bfbebSnyanmisaka // reserved, 0x0030 167*437bfbebSnyanmisaka RK_U32 reg012; 168*437bfbebSnyanmisaka 169*437bfbebSnyanmisaka // 0x0034, low delay esc operation configuration. Bit[0-30] : read ecs num. 170*437bfbebSnyanmisaka RK_U32 reg013_low_delay_ecs_ocfg; 171*437bfbebSnyanmisaka // 0x0038, low delay packet operation configuration. Bit[0-30] : read packet num. 172*437bfbebSnyanmisaka RK_U32 reg014_low_delay_packet_ocfg; 173*437bfbebSnyanmisaka 174*437bfbebSnyanmisaka // reserved, 0x003c 175*437bfbebSnyanmisaka RK_U32 reg015; 176*437bfbebSnyanmisaka 177*437bfbebSnyanmisaka // 0x0040, Address of JPEG Q table buffer, 128 byte aligned 178*437bfbebSnyanmisaka RK_U32 reg016_adr_qtbl; 179*437bfbebSnyanmisaka // 0x0044, Top address of JPEG Bit stream buffer, 16 byte aligned 180*437bfbebSnyanmisaka RK_U32 reg017_adr_bsbt; 181*437bfbebSnyanmisaka // 0x0048, Bottom address of JPEG bit stream buffer, 16 byte aligned 182*437bfbebSnyanmisaka RK_U32 reg018_adr_bsbb; 183*437bfbebSnyanmisaka // 0x004c, Read Address of JPEG bit stream buffer, 1 byte aligned 184*437bfbebSnyanmisaka RK_U32 reg019_adr_bsbr; 185*437bfbebSnyanmisaka // 0x0050, Start address of JPEG bit stream buffer, 1 byte aligned 186*437bfbebSnyanmisaka RK_U32 reg020_adr_bsbs; 187*437bfbebSnyanmisaka // 0x0054, Base address of ECS length buffer, 8 byte align 188*437bfbebSnyanmisaka RK_U32 reg021_adr_ecs_len; 189*437bfbebSnyanmisaka // 0x0058, Base address of the 1st storage area for video source buffer 190*437bfbebSnyanmisaka RK_U32 reg022_adr_src0; 191*437bfbebSnyanmisaka // 0x005c, Base address of the 2nd storage area for video source buffer 192*437bfbebSnyanmisaka RK_U32 reg023_adr_src1; 193*437bfbebSnyanmisaka // 0x0060, Base address of the 3rd storage area for video source buffer 194*437bfbebSnyanmisaka RK_U32 reg024_adr_src2; 195*437bfbebSnyanmisaka 196*437bfbebSnyanmisaka // reserved, 0x0064 197*437bfbebSnyanmisaka RK_U32 reg025; 198*437bfbebSnyanmisaka 199*437bfbebSnyanmisaka // 0x0068, rk jpeg encoder axi performance ctrl0 description 200*437bfbebSnyanmisaka struct { 201*437bfbebSnyanmisaka RK_U32 perf_work_e : 1; 202*437bfbebSnyanmisaka RK_U32 perf_clr_e : 1; 203*437bfbebSnyanmisaka RK_U32 perf_frm_type : 1; 204*437bfbebSnyanmisaka RK_U32 cnt_type : 1; 205*437bfbebSnyanmisaka RK_U32 rd_latency_id : 4; 206*437bfbebSnyanmisaka RK_U32 rd_latency_thr : 12; 207*437bfbebSnyanmisaka RK_U32 : 12; 208*437bfbebSnyanmisaka } reg026_axi_perf_ctrl0; 209*437bfbebSnyanmisaka 210*437bfbebSnyanmisaka // 0x006c, rk jpeg encoder axi performance ctrl1 description 211*437bfbebSnyanmisaka struct { 212*437bfbebSnyanmisaka RK_U32 addr_align_type : 2; 213*437bfbebSnyanmisaka RK_U32 ar_cnt_id_type : 1; 214*437bfbebSnyanmisaka RK_U32 aw_cnt_id_type : 1; 215*437bfbebSnyanmisaka RK_U32 ar_count_id : 4; 216*437bfbebSnyanmisaka RK_U32 aw_count_id : 4; 217*437bfbebSnyanmisaka RK_U32 rd_total_bytes_mode : 1; 218*437bfbebSnyanmisaka RK_U32 : 19; 219*437bfbebSnyanmisaka } reg027_axi_perf_ctrl1; 220*437bfbebSnyanmisaka 221*437bfbebSnyanmisaka // 0x0070, reserved 222*437bfbebSnyanmisaka RK_U32 reg028; 223*437bfbebSnyanmisaka 224*437bfbebSnyanmisaka // 0x0074, picture size 225*437bfbebSnyanmisaka struct { 226*437bfbebSnyanmisaka // Ceil(encoding picture height / 8) -1 227*437bfbebSnyanmisaka RK_U32 pic_wd8_m1 : 13; 228*437bfbebSnyanmisaka RK_U32 : 3; 229*437bfbebSnyanmisaka // Ceil(encoding picture height / 8) -1 230*437bfbebSnyanmisaka RK_U32 pic_hd8_m1 : 13; 231*437bfbebSnyanmisaka RK_U32 : 3; 232*437bfbebSnyanmisaka } reg029_sw_enc_rsl; 233*437bfbebSnyanmisaka 234*437bfbebSnyanmisaka // 0x0078, JPEG source filling pixels for align 235*437bfbebSnyanmisaka struct { 236*437bfbebSnyanmisaka RK_U32 pic_wfill_jpeg : 6; 237*437bfbebSnyanmisaka RK_U32 : 10; 238*437bfbebSnyanmisaka RK_U32 pic_hfill_jpeg : 6; 239*437bfbebSnyanmisaka RK_U32 : 10; 240*437bfbebSnyanmisaka } reg030_sw_src_fill; 241*437bfbebSnyanmisaka 242*437bfbebSnyanmisaka /* reserved 0x7c */ 243*437bfbebSnyanmisaka RK_U32 reg031; 244*437bfbebSnyanmisaka 245*437bfbebSnyanmisaka // 0x0080, JPEG source format 246*437bfbebSnyanmisaka struct { 247*437bfbebSnyanmisaka RK_U32 : 1; 248*437bfbebSnyanmisaka RK_U32 rbuv_swap_jpeg : 1; 249*437bfbebSnyanmisaka /** 250*437bfbebSnyanmisaka * @brief srouce color format 251*437bfbebSnyanmisaka * 4'h0: tile400 252*437bfbebSnyanmisaka * 4'h1: tile420 253*437bfbebSnyanmisaka * 4'h2: tile422 254*437bfbebSnyanmisaka * 4'h3: tile444 255*437bfbebSnyanmisaka * 4'h4: YUV422SP 256*437bfbebSnyanmisaka * 4'h5: YUV422P 257*437bfbebSnyanmisaka * 4'h6: YUV420SP 258*437bfbebSnyanmisaka * 4'h7: YUV420P 259*437bfbebSnyanmisaka * 4'h8: YUYV422 260*437bfbebSnyanmisaka * 4'h9: UYVY422 261*437bfbebSnyanmisaka * 4'ha: YUV400 262*437bfbebSnyanmisaka * 4'hc: YUV444SP 263*437bfbebSnyanmisaka * 4'hd: YUV444P 264*437bfbebSnyanmisaka * Others: Reserved 265*437bfbebSnyanmisaka */ 266*437bfbebSnyanmisaka RK_U32 src_fmt : 4; 267*437bfbebSnyanmisaka /** 268*437bfbebSnyanmisaka * @brief color format of output from preprocess 269*437bfbebSnyanmisaka * 2'h0: YUV400; 270*437bfbebSnyanmisaka * 2'h1: YUV420; 271*437bfbebSnyanmisaka * 2'h2: YUV422; 272*437bfbebSnyanmisaka * 2'h3: YUV444; 273*437bfbebSnyanmisaka * 274*437bfbebSnyanmisaka */ 275*437bfbebSnyanmisaka RK_U32 out_fmt : 2; 276*437bfbebSnyanmisaka RK_U32 : 1; 277*437bfbebSnyanmisaka RK_U32 src_range_trns_en : 1; 278*437bfbebSnyanmisaka RK_U32 src_range_trns_sel : 1; 279*437bfbebSnyanmisaka /** 280*437bfbebSnyanmisaka * @brief Chroma downsample mode 281*437bfbebSnyanmisaka * 0 -- Average 282*437bfbebSnyanmisaka * 1 -- Drop 283*437bfbebSnyanmisaka */ 284*437bfbebSnyanmisaka RK_U32 chroma_ds_mode : 1; 285*437bfbebSnyanmisaka // Chroma value will be force to some value 286*437bfbebSnyanmisaka RK_U32 chroma_force_en : 1; 287*437bfbebSnyanmisaka RK_U32 : 2; 288*437bfbebSnyanmisaka // 1 00 src mirror image 289*437bfbebSnyanmisaka RK_U32 src_mirr_jpeg : 1; 290*437bfbebSnyanmisaka RK_U32 u_force_value : 8; 291*437bfbebSnyanmisaka RK_U32 v_force_value : 8; 292*437bfbebSnyanmisaka } reg032_sw_src_fmt; 293*437bfbebSnyanmisaka 294*437bfbebSnyanmisaka // 0x0084, encoding picture offset 295*437bfbebSnyanmisaka struct { 296*437bfbebSnyanmisaka RK_U32 pic_ofst_x : 16; 297*437bfbebSnyanmisaka RK_U32 pic_ofst_y : 16; 298*437bfbebSnyanmisaka } reg033_sw_pic_ofst; 299*437bfbebSnyanmisaka 300*437bfbebSnyanmisaka // 0x0088, JPEG source stride0 301*437bfbebSnyanmisaka struct { 302*437bfbebSnyanmisaka RK_U32 src_strd_0 : 20; 303*437bfbebSnyanmisaka RK_U32 : 12; 304*437bfbebSnyanmisaka } reg034_sw_src_strd_0; 305*437bfbebSnyanmisaka 306*437bfbebSnyanmisaka // 0x008c, JPEG source stride1 307*437bfbebSnyanmisaka struct { 308*437bfbebSnyanmisaka RK_U32 src_strd_1 : 19; 309*437bfbebSnyanmisaka RK_U32 : 13; 310*437bfbebSnyanmisaka } reg035_sw_src_strd_1; 311*437bfbebSnyanmisaka 312*437bfbebSnyanmisaka // 0x0090, JPEG common config 313*437bfbebSnyanmisaka struct { 314*437bfbebSnyanmisaka /* the number of MCU in the restart interval */ 315*437bfbebSnyanmisaka RK_U32 rst_intv : 16; 316*437bfbebSnyanmisaka RK_U32 : 9; 317*437bfbebSnyanmisaka /** 318*437bfbebSnyanmisaka * @brief JPEG encoder output mode 319*437bfbebSnyanmisaka * 1'b0: frame by frame, without interrupt at any ECS; 320*437bfbebSnyanmisaka * 1'b1: low latency mode, with interrupt per ECS, flush all the 321*437bfbebSnyanmisaka * bit stream after each ECS finished. 322*437bfbebSnyanmisaka */ 323*437bfbebSnyanmisaka RK_U32 out_mode : 1; 324*437bfbebSnyanmisaka /* the number of the fisrt RSTm */ 325*437bfbebSnyanmisaka RK_U32 rst_m : 3; 326*437bfbebSnyanmisaka /** 327*437bfbebSnyanmisaka * @brief Indicate if the current ECS is the last ECS of the whole picture. 328*437bfbebSnyanmisaka * If it is the last ecs, add EOI. 329*437bfbebSnyanmisaka */ 330*437bfbebSnyanmisaka RK_U32 pic_last_ecs : 1; 331*437bfbebSnyanmisaka /** 332*437bfbebSnyanmisaka * @brief reload Q table or not 333*437bfbebSnyanmisaka * 0 -- load Q table for current task 334*437bfbebSnyanmisaka * 1 -- no need to load Q table 335*437bfbebSnyanmisaka */ 336*437bfbebSnyanmisaka RK_U32 jpeg_qtble_noload : 1; 337*437bfbebSnyanmisaka RK_U32 : 1; 338*437bfbebSnyanmisaka } reg036_sw_jpeg_enc_cfg; 339*437bfbebSnyanmisaka 340*437bfbebSnyanmisaka // 0x0094, Low dealy packet size config 341*437bfbebSnyanmisaka RK_U32 reg037_bsp_size_jpeg; 342*437bfbebSnyanmisaka 343*437bfbebSnyanmisaka // 0x0098, Bit stream output padding config 344*437bfbebSnyanmisaka struct { 345*437bfbebSnyanmisaka RK_U32 uvc_partition0_len : 12; 346*437bfbebSnyanmisaka RK_U32 uvc_partition_len : 12; 347*437bfbebSnyanmisaka RK_U32 uvc_skip_len : 6; 348*437bfbebSnyanmisaka RK_U32 : 2; 349*437bfbebSnyanmisaka } reg038_sw_uvc_cfg; 350*437bfbebSnyanmisaka 351*437bfbebSnyanmisaka // 0x009c, Y Quantify rounding 352*437bfbebSnyanmisaka struct { 353*437bfbebSnyanmisaka /* bias for Y at quantization */ 354*437bfbebSnyanmisaka RK_U32 bias_y : 15; 355*437bfbebSnyanmisaka RK_U32 : 17; 356*437bfbebSnyanmisaka } reg039_sw_jpeg_y_cfg; 357*437bfbebSnyanmisaka 358*437bfbebSnyanmisaka // 0x00a0, U Quantify rounding 359*437bfbebSnyanmisaka struct { 360*437bfbebSnyanmisaka 361*437bfbebSnyanmisaka /* bias for U at quantization */ 362*437bfbebSnyanmisaka RK_U32 bias_u : 15; 363*437bfbebSnyanmisaka RK_U32 : 17; 364*437bfbebSnyanmisaka } reg040_sw_jpeg_u_cfg; 365*437bfbebSnyanmisaka 366*437bfbebSnyanmisaka // 0x00a4, V Quantify rounding 367*437bfbebSnyanmisaka struct { 368*437bfbebSnyanmisaka /* bias for V at quantization */ 369*437bfbebSnyanmisaka RK_U32 bias_v : 15; 370*437bfbebSnyanmisaka RK_U32 : 17; 371*437bfbebSnyanmisaka } reg041_sw_jpeg_v_cfg; 372*437bfbebSnyanmisaka 373*437bfbebSnyanmisaka // 0x00a8, Data bus endian 374*437bfbebSnyanmisaka struct { 375*437bfbebSnyanmisaka /** 376*437bfbebSnyanmisaka * @brief Data swap for jpeg bit stream write channel 377*437bfbebSnyanmisaka * [3]: Swap 64 bits in 128 bits 378*437bfbebSnyanmisaka * [2]: Swap 32 bits in 64 bits 379*437bfbebSnyanmisaka * [1]: Swap 16 bits in 32 bits 380*437bfbebSnyanmisaka * [0]: Swap 8 bits in 16 bits 381*437bfbebSnyanmisaka */ 382*437bfbebSnyanmisaka RK_U32 jbsw_bus_edin : 4; 383*437bfbebSnyanmisaka // Data swap for video source loading channel. 384*437bfbebSnyanmisaka RK_U32 vsl_bus_edin : 4; 385*437bfbebSnyanmisaka // Data swap for lkt state write channel 386*437bfbebSnyanmisaka RK_U32 ecs_len_edin : 4; 387*437bfbebSnyanmisaka // Data swap for qtbl read channel 388*437bfbebSnyanmisaka RK_U32 sw_qtbl_edin : 4; 389*437bfbebSnyanmisaka } reg042_dbus_endn; 390*437bfbebSnyanmisaka 391*437bfbebSnyanmisaka } JpegeVpu720BaseReg; 392*437bfbebSnyanmisaka 393*437bfbebSnyanmisaka typedef struct JpegeVpu720StatusReg_t { 394*437bfbebSnyanmisaka // 0x00c0, Low 32 bits of JPEG header bits length. 395*437bfbebSnyanmisaka RK_U32 st_bsl_l32_jpeg_head_bits; 396*437bfbebSnyanmisaka // 0x00c4, High 32 bits of JPEG header bits length 397*437bfbebSnyanmisaka RK_U32 st_bsl_h32_jpeg_head_bits; 398*437bfbebSnyanmisaka 399*437bfbebSnyanmisaka // 0x00c8, Y and U source range 400*437bfbebSnyanmisaka struct { 401*437bfbebSnyanmisaka RK_U32 y_max_value : 8; 402*437bfbebSnyanmisaka RK_U32 y_min_value : 8; 403*437bfbebSnyanmisaka RK_U32 u_max_value : 8; 404*437bfbebSnyanmisaka RK_U32 u_min_vlaue : 8; 405*437bfbebSnyanmisaka } st_vsp_value0; 406*437bfbebSnyanmisaka 407*437bfbebSnyanmisaka // 0x00cc, V source range and total_ecs_num_minus 408*437bfbebSnyanmisaka struct { 409*437bfbebSnyanmisaka RK_U32 v_max_value : 8; 410*437bfbebSnyanmisaka RK_U32 v_min_vlaue : 8; 411*437bfbebSnyanmisaka RK_U32 total_ecs_num_minus1 : 8; 412*437bfbebSnyanmisaka } st_vsp_value1; 413*437bfbebSnyanmisaka 414*437bfbebSnyanmisaka // 0x00d0, bit[0-15] 415*437bfbebSnyanmisaka RK_U32 st_perf_rd_max_latency_num0; 416*437bfbebSnyanmisaka // 0x00d4 417*437bfbebSnyanmisaka RK_U32 st_perf_rd_latency_samp_num; 418*437bfbebSnyanmisaka // 0x00d8 419*437bfbebSnyanmisaka RK_U32 st_perf_rd_latency_acc_sum; 420*437bfbebSnyanmisaka // 0x00dc 421*437bfbebSnyanmisaka RK_U32 st_perf_rd_axi_total_byte; 422*437bfbebSnyanmisaka // 0x00e0 423*437bfbebSnyanmisaka RK_U32 st_perf_wr_axi_total_byte; 424*437bfbebSnyanmisaka // 0x00e4 425*437bfbebSnyanmisaka RK_U32 st_perf_working_cnt; 426*437bfbebSnyanmisaka 427*437bfbebSnyanmisaka RK_U32 sw_reserved_00e8_00ec[2]; 428*437bfbebSnyanmisaka 429*437bfbebSnyanmisaka // 0x00f0 430*437bfbebSnyanmisaka struct { 431*437bfbebSnyanmisaka RK_U32 vsp_work_flag : 1; 432*437bfbebSnyanmisaka RK_U32 jpeg_core_work_flag : 1; 433*437bfbebSnyanmisaka RK_U32 dma_wr_work_flag : 1; 434*437bfbebSnyanmisaka RK_U32 dma_work_flag : 1; 435*437bfbebSnyanmisaka } st_wdg; 436*437bfbebSnyanmisaka 437*437bfbebSnyanmisaka // 0x00f4 438*437bfbebSnyanmisaka RK_U32 st_ppl_pos; 439*437bfbebSnyanmisaka // 0x00f8 440*437bfbebSnyanmisaka RK_U32 st_core_pos; 441*437bfbebSnyanmisaka 442*437bfbebSnyanmisaka // 0x00fc, Bus status 443*437bfbebSnyanmisaka struct { 444*437bfbebSnyanmisaka RK_U32 ejpeg_arready : 1; 445*437bfbebSnyanmisaka RK_U32 ejpeg_cfg_arvalid : 1; 446*437bfbebSnyanmisaka RK_U32 ejpeg_cfg_arvalid_type : 1; 447*437bfbebSnyanmisaka RK_U32 ejpeg_cfg_arready : 1; 448*437bfbebSnyanmisaka RK_U32 ejpeg_vsp_arvalid : 1; 449*437bfbebSnyanmisaka RK_U32 ejpeg_vsp_arready : 1; 450*437bfbebSnyanmisaka RK_U32 rkejpeg_arvalid : 1; 451*437bfbebSnyanmisaka RK_U32 ejpeg_cfg_ar_cnt : 2; 452*437bfbebSnyanmisaka RK_U32 rkejpeg_arready : 1; 453*437bfbebSnyanmisaka RK_U32 rkejpeg_ravlid : 1; 454*437bfbebSnyanmisaka RK_U32 rkejpeg_rid : 4; 455*437bfbebSnyanmisaka RK_U32 rkejpeg_rresp : 2; 456*437bfbebSnyanmisaka RK_U32 rkejpeg_rready : 1; 457*437bfbebSnyanmisaka RK_U32 axi_wr_state_cs : 1; 458*437bfbebSnyanmisaka RK_U32 ejpeg_strmd_awvalid : 1; 459*437bfbebSnyanmisaka RK_U32 ejpeg_strmd_awtype : 1; 460*437bfbebSnyanmisaka RK_U32 ejpeg_strmd_awready : 1; 461*437bfbebSnyanmisaka RK_U32 ejpeg_strmd_wvalid : 1; 462*437bfbebSnyanmisaka RK_U32 ejpeg_strmd_wready : 1; 463*437bfbebSnyanmisaka RK_U32 ejpeg_cfg_awvalid : 1; 464*437bfbebSnyanmisaka RK_U32 ejpeg_cfg_awready : 1; 465*437bfbebSnyanmisaka RK_U32 rkejpeg_awvalid : 1; 466*437bfbebSnyanmisaka RK_U32 rkejpeg_awid : 1; 467*437bfbebSnyanmisaka RK_U32 rkejpeg_wvalid : 1; 468*437bfbebSnyanmisaka RK_U32 rkejpeg_wready : 1; 469*437bfbebSnyanmisaka RK_U32 ejpeg_freeze_flag : 1; 470*437bfbebSnyanmisaka RK_U32 : 1; 471*437bfbebSnyanmisaka } st_bus; 472*437bfbebSnyanmisaka 473*437bfbebSnyanmisaka // 0x0100, vsp_dbg_status 474*437bfbebSnyanmisaka RK_U32 dbg_ppl; 475*437bfbebSnyanmisaka // 0x0104, jpeg core dbg status 476*437bfbebSnyanmisaka RK_U32 dbg_jpeg_core; 477*437bfbebSnyanmisaka // reserved, 0x0108 478*437bfbebSnyanmisaka RK_U32 sw_reserved_0108; 479*437bfbebSnyanmisaka // 0x010c, The bit stream write address status 480*437bfbebSnyanmisaka RK_U32 st_adr_jbsbw; 481*437bfbebSnyanmisaka // 0x0110, ECS length buffer write address status 482*437bfbebSnyanmisaka RK_U32 st_adr_ecs_len; 483*437bfbebSnyanmisaka // 0x0114, the 1st storage aread for video source buffer read address status 484*437bfbebSnyanmisaka RK_U32 st_adr_src0_jpeg; 485*437bfbebSnyanmisaka // 0x0118, the 2nd storage aread for video source buffer read address status 486*437bfbebSnyanmisaka RK_U32 st_adr_src1_jpeg; 487*437bfbebSnyanmisaka // 0x011c, the 3rd storage aread for video source buffer read address status 488*437bfbebSnyanmisaka RK_U32 st_adr_src2_jpeg; 489*437bfbebSnyanmisaka 490*437bfbebSnyanmisaka // 0x0120, low delay packet num status 491*437bfbebSnyanmisaka struct { 492*437bfbebSnyanmisaka RK_U32 bs_packet_num : 16; 493*437bfbebSnyanmisaka RK_U32 bs_packet_lst : 1; 494*437bfbebSnyanmisaka } st_low_delay_packet_num; 495*437bfbebSnyanmisaka 496*437bfbebSnyanmisaka // 0x0124, low delay ecs_len num status 497*437bfbebSnyanmisaka struct { 498*437bfbebSnyanmisaka RK_U32 ecs_len_num : 16; 499*437bfbebSnyanmisaka RK_U32 ecs_len_lst : 1; 500*437bfbebSnyanmisaka } st_ecs_len_num; 501*437bfbebSnyanmisaka 502*437bfbebSnyanmisaka // 0x0128, JPEG common status 503*437bfbebSnyanmisaka struct { 504*437bfbebSnyanmisaka /** 505*437bfbebSnyanmisaka * @brief 506*437bfbebSnyanmisaka * 0: idle 507*437bfbebSnyanmisaka * 1: cru open 508*437bfbebSnyanmisaka * 2: lkt cfg load 509*437bfbebSnyanmisaka * 3: qtbl_cfg_load 510*437bfbebSnyanmisaka * 4:enc 511*437bfbebSnyanmisaka * 5:frame end 512*437bfbebSnyanmisaka * 6:cru_close 513*437bfbebSnyanmisaka * 7:lkt_error_stop 514*437bfbebSnyanmisaka * 8:lkt_force_stop 515*437bfbebSnyanmisaka * 9:lkt_node_stop 516*437bfbebSnyanmisaka */ 517*437bfbebSnyanmisaka RK_U32 jpeg_enc_state : 4; 518*437bfbebSnyanmisaka RK_U32 lkt_mode_en : 1; 519*437bfbebSnyanmisaka } st_enc; 520*437bfbebSnyanmisaka 521*437bfbebSnyanmisaka // 0x012c, Link table num 522*437bfbebSnyanmisaka struct { 523*437bfbebSnyanmisaka RK_U32 lkt_cfg_num : 8; 524*437bfbebSnyanmisaka RK_U32 lkt_done_num : 8; 525*437bfbebSnyanmisaka RK_U32 lkt_int_num : 8; 526*437bfbebSnyanmisaka RK_U32 lkt_cfg_load_num : 8; 527*437bfbebSnyanmisaka } st_lkt_num; 528*437bfbebSnyanmisaka 529*437bfbebSnyanmisaka // 0x0130, link table cfg info 530*437bfbebSnyanmisaka struct { 531*437bfbebSnyanmisaka RK_U32 lkt_core_id : 4; 532*437bfbebSnyanmisaka RK_U32 : 4; 533*437bfbebSnyanmisaka RK_U32 lkt_stop_flag : 1; 534*437bfbebSnyanmisaka RK_U32 lkt_node_int : 1; 535*437bfbebSnyanmisaka RK_U32 lkt_task_id : 12; 536*437bfbebSnyanmisaka RK_U32 : 10; 537*437bfbebSnyanmisaka } st_lkt_info; 538*437bfbebSnyanmisaka 539*437bfbebSnyanmisaka //0x0134, next read addr for lkt_cfg 540*437bfbebSnyanmisaka RK_U32 st_lkt_cfg_next_addr; 541*437bfbebSnyanmisaka //0x0138, lkt state buffer write addr 542*437bfbebSnyanmisaka RK_U32 st_lkt_waddr; 543*437bfbebSnyanmisaka } JpegeVpu720StatusReg; 544*437bfbebSnyanmisaka 545*437bfbebSnyanmisaka 546*437bfbebSnyanmisaka #define JPEGE_VPU720_REG_BASE_INT_STATE (0x1c) 547*437bfbebSnyanmisaka #define JPEGE_VPU720_REG_STATUS_OFFSET (0xc0) 548*437bfbebSnyanmisaka 549*437bfbebSnyanmisaka typedef struct JpegeVpu720RegSet_t { 550*437bfbebSnyanmisaka JpegeVpu720BaseReg reg_base; 551*437bfbebSnyanmisaka JpegeVpu720StatusReg reg_st; 552*437bfbebSnyanmisaka RK_U32 int_state; 553*437bfbebSnyanmisaka } JpegeVpu720Reg; 554*437bfbebSnyanmisaka 555*437bfbebSnyanmisaka #endif /* __HAL_JPEGE_VPU720_REG_H__ */