1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2020 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka #ifndef __HAL_JPEGD_RKV_REG_H__ 17*437bfbebSnyanmisaka #define __HAL_JPEGD_RKV_REG_H__ 18*437bfbebSnyanmisaka 19*437bfbebSnyanmisaka #define JPEGD_REG_NUM (42) 20*437bfbebSnyanmisaka 21*437bfbebSnyanmisaka #define RKV_JPEGD_LITTLE_ENDIAN (0) 22*437bfbebSnyanmisaka #define RKV_JPEGD_BIG_ENDIAN (1) 23*437bfbebSnyanmisaka 24*437bfbebSnyanmisaka #define SCALEDOWN_DISABLE (0) 25*437bfbebSnyanmisaka #define SCALEDOWN_HALF (1) 26*437bfbebSnyanmisaka #define SCALEDOWN_QUARTER (2) 27*437bfbebSnyanmisaka #define SCALEDOWN_ONE_EIGHTS (3) 28*437bfbebSnyanmisaka 29*437bfbebSnyanmisaka #define OUTPUT_RASTER (0) 30*437bfbebSnyanmisaka #define OUTPUT_TILE (1) 31*437bfbebSnyanmisaka 32*437bfbebSnyanmisaka #define TIMEOUT_MODE_CYCLE_24 (0) 33*437bfbebSnyanmisaka #define TIMEOUT_MODE_CYCLE_18 (1) 34*437bfbebSnyanmisaka 35*437bfbebSnyanmisaka #define OUT_SEQUENCE_RASTER (0) 36*437bfbebSnyanmisaka #define OUT_SEQUENCE_TILE (1) 37*437bfbebSnyanmisaka 38*437bfbebSnyanmisaka #define YUV_TO_RGB_REC_BT601 (0) 39*437bfbebSnyanmisaka #define YUV_TO_RGB_REC_BT709 (1) 40*437bfbebSnyanmisaka 41*437bfbebSnyanmisaka #define YUV_TO_RGB_FULL_RANGE (1) 42*437bfbebSnyanmisaka #define YUV_TO_RGB_LIMIT_RANGE (0) 43*437bfbebSnyanmisaka 44*437bfbebSnyanmisaka #define YUV_OUT_FMT_NO_TRANS (0) 45*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_RGB888 (1) 46*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_RGB565 (2) 47*437bfbebSnyanmisaka // Not support YUV400 transmit to NV12 48*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_NV12 (3) 49*437bfbebSnyanmisaka // Only support YUV422 or YUV444, YUV444 should scaledown uv 50*437bfbebSnyanmisaka #define YUV_OUT_FMT_2_YUYV (4) 51*437bfbebSnyanmisaka 52*437bfbebSnyanmisaka #define YUV_MODE_400 (0) 53*437bfbebSnyanmisaka #define YUV_MODE_411 (1) 54*437bfbebSnyanmisaka #define YUV_MODE_420 (2) 55*437bfbebSnyanmisaka #define YUV_MODE_422 (3) 56*437bfbebSnyanmisaka #define YUV_MODE_440 (4) 57*437bfbebSnyanmisaka #define YUV_MODE_444 (5) 58*437bfbebSnyanmisaka 59*437bfbebSnyanmisaka #define BIT_DEPTH_8 (0) 60*437bfbebSnyanmisaka #define BIT_DEPTH_12 (1) 61*437bfbebSnyanmisaka 62*437bfbebSnyanmisaka // No quantization/huffman table or table is the same as previous 63*437bfbebSnyanmisaka #define TBL_ENTRY_0 (0) 64*437bfbebSnyanmisaka // Grayscale picture with only 1 quantization/huffman table 65*437bfbebSnyanmisaka #define TBL_ENTRY_1 (1) 66*437bfbebSnyanmisaka // Common case, one table for luma, one for chroma 67*437bfbebSnyanmisaka #define TBL_ENTRY_2 (2) 68*437bfbebSnyanmisaka // 3 table entries, one for luma, one for cb, one for cr 69*437bfbebSnyanmisaka #define TBL_ENTRY_3 (3) 70*437bfbebSnyanmisaka 71*437bfbebSnyanmisaka // Restart interval marker disable 72*437bfbebSnyanmisaka #define RST_DISABLE (0) 73*437bfbebSnyanmisaka // Restart interval marker enable 74*437bfbebSnyanmisaka #define RST_ENABLE (1) 75*437bfbebSnyanmisaka 76*437bfbebSnyanmisaka typedef struct { 77*437bfbebSnyanmisaka struct { 78*437bfbebSnyanmisaka RK_U32 minor_ver : 8; 79*437bfbebSnyanmisaka RK_U32 bit_depth : 1; 80*437bfbebSnyanmisaka RK_U32 : 7; 81*437bfbebSnyanmisaka RK_U32 prod_num : 16; 82*437bfbebSnyanmisaka } reg0_id; 83*437bfbebSnyanmisaka 84*437bfbebSnyanmisaka struct { 85*437bfbebSnyanmisaka RK_U32 dec_e : 1; 86*437bfbebSnyanmisaka RK_U32 dec_irq_dis : 1; 87*437bfbebSnyanmisaka RK_U32 dec_timeout_e : 1; 88*437bfbebSnyanmisaka RK_U32 buf_empty_e : 1; 89*437bfbebSnyanmisaka RK_U32 buf_empty_reload_p : 1; 90*437bfbebSnyanmisaka RK_U32 soft_rst_en_p : 1; 91*437bfbebSnyanmisaka RK_U32 dec_irq_raw : 1; 92*437bfbebSnyanmisaka RK_U32 wait_reset_e : 1; 93*437bfbebSnyanmisaka RK_U32 dec_irq : 1; 94*437bfbebSnyanmisaka RK_U32 dec_rdy_sta : 1; 95*437bfbebSnyanmisaka RK_U32 dec_bus_sta : 1; 96*437bfbebSnyanmisaka RK_U32 dec_error_sta : 1; 97*437bfbebSnyanmisaka RK_U32 dec_timeout_sta : 1; 98*437bfbebSnyanmisaka RK_U32 dec_buf_empty_sta : 1; 99*437bfbebSnyanmisaka RK_U32 soft_rest_rdy : 1; 100*437bfbebSnyanmisaka RK_U32 buf_empty_force_end_flag : 1; 101*437bfbebSnyanmisaka RK_U32 care_strm_error_e : 1; 102*437bfbebSnyanmisaka RK_U32 low_delay_out_sta : 1; 103*437bfbebSnyanmisaka RK_U32 lkt_operation_error_sta : 1; 104*437bfbebSnyanmisaka RK_U32 lkt_mode_int_sta : 1; 105*437bfbebSnyanmisaka RK_U32 lkt_force_stop_sta : 1; 106*437bfbebSnyanmisaka RK_U32 lkt_node_int_sta : 1; 107*437bfbebSnyanmisaka RK_U32 lkt_err_stop_sta : 1; 108*437bfbebSnyanmisaka RK_U32 lkt_data_err_sta : 1; 109*437bfbebSnyanmisaka RK_U32 : 8; 110*437bfbebSnyanmisaka } reg1_int; 111*437bfbebSnyanmisaka 112*437bfbebSnyanmisaka struct { 113*437bfbebSnyanmisaka RK_U32 in_endian : 1; 114*437bfbebSnyanmisaka RK_U32 in_swap32_e : 1; 115*437bfbebSnyanmisaka RK_U32 in_swap64_e : 1; 116*437bfbebSnyanmisaka RK_U32 str_endian : 1; 117*437bfbebSnyanmisaka RK_U32 str_swap32_e : 1; 118*437bfbebSnyanmisaka RK_U32 str_swap64_e : 1; 119*437bfbebSnyanmisaka RK_U32 out_endian : 1; 120*437bfbebSnyanmisaka RK_U32 out_swap32_e : 1; 121*437bfbebSnyanmisaka RK_U32 out_swap64_e : 1; 122*437bfbebSnyanmisaka RK_U32 out_cbcr_swap : 1; 123*437bfbebSnyanmisaka RK_U32 out_byte_swap : 1; 124*437bfbebSnyanmisaka RK_U32 : 1; 125*437bfbebSnyanmisaka RK_U32 scaledown_mode : 2; 126*437bfbebSnyanmisaka RK_U32 : 2; 127*437bfbebSnyanmisaka RK_U32 time_out_mode : 1; 128*437bfbebSnyanmisaka RK_U32 force_softrest_valid : 1; 129*437bfbebSnyanmisaka RK_U32 : 2; 130*437bfbebSnyanmisaka RK_U32 fbc_e : 1; 131*437bfbebSnyanmisaka RK_U32 allow_16x8_cp_flag : 1; 132*437bfbebSnyanmisaka RK_U32 fbc_force_uncompress : 1; 133*437bfbebSnyanmisaka // 0 -- rgb565/rgb888, 1 -- bgr565, bgr888 134*437bfbebSnyanmisaka RK_U32 bgr_sequence : 1; 135*437bfbebSnyanmisaka RK_U32 fill_down_e : 1; 136*437bfbebSnyanmisaka RK_U32 fill_right_e : 1; 137*437bfbebSnyanmisaka RK_U32 dec_out_sequence : 1; 138*437bfbebSnyanmisaka RK_U32 yuv_out_format : 3; 139*437bfbebSnyanmisaka RK_U32 yuv2rgb_rec : 1; 140*437bfbebSnyanmisaka RK_U32 yuv2rgb_range : 1; 141*437bfbebSnyanmisaka 142*437bfbebSnyanmisaka } reg2_sys; 143*437bfbebSnyanmisaka 144*437bfbebSnyanmisaka struct { 145*437bfbebSnyanmisaka RK_U32 pic_width_m1 : 16; 146*437bfbebSnyanmisaka RK_U32 pic_height_m1 : 16; 147*437bfbebSnyanmisaka } reg3_pic_size; 148*437bfbebSnyanmisaka 149*437bfbebSnyanmisaka struct { 150*437bfbebSnyanmisaka RK_U32 jpeg_mode : 3; 151*437bfbebSnyanmisaka RK_U32 : 1; 152*437bfbebSnyanmisaka RK_U32 pixel_depth : 3; 153*437bfbebSnyanmisaka RK_U32 : 1; 154*437bfbebSnyanmisaka RK_U32 qtables_sel : 2; 155*437bfbebSnyanmisaka RK_U32 : 2; 156*437bfbebSnyanmisaka RK_U32 htables_sel : 2; 157*437bfbebSnyanmisaka RK_U32 : 1; 158*437bfbebSnyanmisaka RK_U32 dri_e : 1; 159*437bfbebSnyanmisaka RK_U32 dri_mcu_num_m1 : 16; 160*437bfbebSnyanmisaka } reg4_pic_fmt; 161*437bfbebSnyanmisaka 162*437bfbebSnyanmisaka struct { 163*437bfbebSnyanmisaka RK_U32 y_hor_virstride : 16; 164*437bfbebSnyanmisaka RK_U32 uv_hor_virstride : 16; 165*437bfbebSnyanmisaka } reg5_hor_virstride; 166*437bfbebSnyanmisaka 167*437bfbebSnyanmisaka struct { 168*437bfbebSnyanmisaka RK_U32 : 4; 169*437bfbebSnyanmisaka RK_U32 y_virstride : 28; 170*437bfbebSnyanmisaka } reg6_y_virstride; 171*437bfbebSnyanmisaka 172*437bfbebSnyanmisaka struct { 173*437bfbebSnyanmisaka RK_U32 qtbl_len : 5; 174*437bfbebSnyanmisaka RK_U32 : 3; 175*437bfbebSnyanmisaka RK_U32 htbl_mincode_len : 5; 176*437bfbebSnyanmisaka RK_U32 : 3; 177*437bfbebSnyanmisaka RK_U32 htbl_value_len : 6; 178*437bfbebSnyanmisaka RK_U32 : 2; 179*437bfbebSnyanmisaka RK_U32 y_hor_virstride_h : 1; 180*437bfbebSnyanmisaka RK_U32 : 7; 181*437bfbebSnyanmisaka } reg7_tbl_len; 182*437bfbebSnyanmisaka 183*437bfbebSnyanmisaka struct { 184*437bfbebSnyanmisaka RK_U32 strm_start_byte : 4; 185*437bfbebSnyanmisaka RK_U32 stream_len : 28; 186*437bfbebSnyanmisaka } reg8_strm_len; 187*437bfbebSnyanmisaka 188*437bfbebSnyanmisaka RK_U32 reg9_qtbl_base; //64 bytes align 189*437bfbebSnyanmisaka 190*437bfbebSnyanmisaka RK_U32 reg10_htbl_mincode_base; //64 bytes align 191*437bfbebSnyanmisaka 192*437bfbebSnyanmisaka RK_U32 reg11_htbl_value_base; //64 bytes align 193*437bfbebSnyanmisaka 194*437bfbebSnyanmisaka RK_U32 reg12_strm_base; //16 bytes align 195*437bfbebSnyanmisaka 196*437bfbebSnyanmisaka RK_U32 reg13_dec_out_base; //64 bytes align 197*437bfbebSnyanmisaka 198*437bfbebSnyanmisaka struct { 199*437bfbebSnyanmisaka RK_U32 error_prc_mode : 1; 200*437bfbebSnyanmisaka RK_U32 strm_r0_err_mode : 2; 201*437bfbebSnyanmisaka RK_U32 strm_r1_err_mode : 2; 202*437bfbebSnyanmisaka RK_U32 strm_ffff_err_mode : 2;//default skip 0xffff 203*437bfbebSnyanmisaka RK_U32 strm_other_mark_mode : 2; 204*437bfbebSnyanmisaka RK_U32 strm_dri_seq_err_mode : 1; 205*437bfbebSnyanmisaka RK_U32 : 6; 206*437bfbebSnyanmisaka RK_U32 hfm_force_stop : 5; 207*437bfbebSnyanmisaka RK_U32 : 11; 208*437bfbebSnyanmisaka } reg14_strm_error; 209*437bfbebSnyanmisaka 210*437bfbebSnyanmisaka struct { 211*437bfbebSnyanmisaka RK_U32 strm_r0_marker : 8; 212*437bfbebSnyanmisaka RK_U32 strm_r0_mask : 8; 213*437bfbebSnyanmisaka RK_U32 strm_r1_marker : 8; 214*437bfbebSnyanmisaka RK_U32 strm_r1_mask : 8; 215*437bfbebSnyanmisaka } reg15_strm_mask; 216*437bfbebSnyanmisaka 217*437bfbebSnyanmisaka union { 218*437bfbebSnyanmisaka struct { 219*437bfbebSnyanmisaka RK_U32 dec_clkgate_e : 1; 220*437bfbebSnyanmisaka RK_U32 dec_strm_gate_e : 1; 221*437bfbebSnyanmisaka RK_U32 dec_huffman_gate_e : 1; 222*437bfbebSnyanmisaka RK_U32 dec_izq_gate_e : 1; 223*437bfbebSnyanmisaka RK_U32 dec_idct_gate_e : 1; 224*437bfbebSnyanmisaka RK_U32 busifd_gate_e : 1; 225*437bfbebSnyanmisaka RK_U32 post_prs_get_e : 1; 226*437bfbebSnyanmisaka RK_U32 dec_sram_gate_e : 1; 227*437bfbebSnyanmisaka RK_U32 : 24; 228*437bfbebSnyanmisaka }; 229*437bfbebSnyanmisaka RK_U32 val; 230*437bfbebSnyanmisaka } reg16_clk_gate; 231*437bfbebSnyanmisaka 232*437bfbebSnyanmisaka // 0x0044, bit[16:0] 233*437bfbebSnyanmisaka RK_U32 reg17_low_delay_output; 234*437bfbebSnyanmisaka // 0x0048, bit[16:0] 235*437bfbebSnyanmisaka RK_U32 reg18_low_delay_output_status; 236*437bfbebSnyanmisaka 237*437bfbebSnyanmisaka // 0x004c ~ 0x0074 238*437bfbebSnyanmisaka RK_U32 reg19_29[11]; 239*437bfbebSnyanmisaka 240*437bfbebSnyanmisaka // 0x0078 241*437bfbebSnyanmisaka struct { 242*437bfbebSnyanmisaka RK_U32 axi_per_work_e : 1; 243*437bfbebSnyanmisaka RK_U32 axi_per_clr_e : 1; 244*437bfbebSnyanmisaka RK_U32 axi_perf_frm_tyep : 1; 245*437bfbebSnyanmisaka RK_U32 axi_cnt_type : 1; 246*437bfbebSnyanmisaka RK_U32 rd_latency_id : 4; 247*437bfbebSnyanmisaka RK_U32 rd_latency_thr : 12; 248*437bfbebSnyanmisaka RK_U32 : 12; 249*437bfbebSnyanmisaka } reg30_perf_latency_ctrl0; 250*437bfbebSnyanmisaka 251*437bfbebSnyanmisaka struct { 252*437bfbebSnyanmisaka RK_U32 addr_align_type : 2; 253*437bfbebSnyanmisaka RK_U32 ar_cnt_id_type : 1; 254*437bfbebSnyanmisaka RK_U32 aw_cnt_id_type : 1; 255*437bfbebSnyanmisaka RK_U32 ar_count_id : 4; 256*437bfbebSnyanmisaka RK_U32 aw_count_id : 4; 257*437bfbebSnyanmisaka RK_U32 rd_totoal_bytes_mode : 1; 258*437bfbebSnyanmisaka RK_U32 : 19; 259*437bfbebSnyanmisaka } reg31_perf_latency_ctrl1; 260*437bfbebSnyanmisaka 261*437bfbebSnyanmisaka struct { 262*437bfbebSnyanmisaka RK_U32 mcu_pos_x : 16; 263*437bfbebSnyanmisaka RK_U32 mcu_pos_y : 16; 264*437bfbebSnyanmisaka } reg32_dbg_mcu_pos; 265*437bfbebSnyanmisaka 266*437bfbebSnyanmisaka struct { 267*437bfbebSnyanmisaka RK_U32 stream_dri_seq_err_sta : 1; 268*437bfbebSnyanmisaka RK_U32 stream_r0_err_sta : 1; 269*437bfbebSnyanmisaka RK_U32 stream_r1_err_sta : 1; 270*437bfbebSnyanmisaka RK_U32 stream_ffff_err_sta : 1; 271*437bfbebSnyanmisaka RK_U32 stream_other_mark_err_sta : 1; 272*437bfbebSnyanmisaka RK_U32 : 3; 273*437bfbebSnyanmisaka RK_U32 huffman_mcu_cnt_l : 1; 274*437bfbebSnyanmisaka RK_U32 huffman_mcu_cnt_m : 1; 275*437bfbebSnyanmisaka RK_U32 huffman_eoi_without_end : 1; 276*437bfbebSnyanmisaka RK_U32 huffman_end_without_eoi : 1; 277*437bfbebSnyanmisaka RK_U32 huffman_overflow : 1; 278*437bfbebSnyanmisaka RK_U32 huffman_buf_empty : 1; 279*437bfbebSnyanmisaka RK_U32 : 2; 280*437bfbebSnyanmisaka RK_U32 first_error_idx : 4; 281*437bfbebSnyanmisaka RK_U32 : 12; 282*437bfbebSnyanmisaka } regs33_dbg_error_info; 283*437bfbebSnyanmisaka 284*437bfbebSnyanmisaka struct { 285*437bfbebSnyanmisaka RK_U32 rd_max_latency_num_ch0 : 16; 286*437bfbebSnyanmisaka RK_U32 : 16; 287*437bfbebSnyanmisaka } reg34_perf_rd_max_latency_num0; 288*437bfbebSnyanmisaka 289*437bfbebSnyanmisaka RK_U32 reg35_perf_rd_latency_samp_num; 290*437bfbebSnyanmisaka 291*437bfbebSnyanmisaka RK_U32 reg36_perf_rd_latency_acc_sum; 292*437bfbebSnyanmisaka 293*437bfbebSnyanmisaka RK_U32 reg37_perf_rd_axi_total_byte; 294*437bfbebSnyanmisaka 295*437bfbebSnyanmisaka RK_U32 reg38_perf_wr_axi_total_byte; 296*437bfbebSnyanmisaka 297*437bfbebSnyanmisaka RK_U32 reg39_perf_working_cnt; 298*437bfbebSnyanmisaka 299*437bfbebSnyanmisaka struct { 300*437bfbebSnyanmisaka RK_U32 bus_status_flag : 19; 301*437bfbebSnyanmisaka RK_U32 : 13; 302*437bfbebSnyanmisaka } reg40_dbg_bus_sta; 303*437bfbebSnyanmisaka 304*437bfbebSnyanmisaka struct { 305*437bfbebSnyanmisaka RK_U32 work_status_flag : 18; 306*437bfbebSnyanmisaka RK_U32 : 12; 307*437bfbebSnyanmisaka } reg41_dbg_work_sta; 308*437bfbebSnyanmisaka 309*437bfbebSnyanmisaka } JpegRegSet; 310*437bfbebSnyanmisaka 311*437bfbebSnyanmisaka #endif /* __HAL_JPEGD_RKV_REG_H__ */