#ifndef RKVDEC_REGS_H_
#define RKVDEC_REGS_H_
#include <linux/types.h>
#define RKVDEC_REG_INTERRUPT 0x004
#define RKVDEC_INTERRUPT_DEC_E BIT(0)
#define RKVDEC_CONFIG_DEC_CLK_GATE_E BIT(1)
#define RKVDEC_E_STRMD_CLKGATE_DIS BIT(2)
#define RKVDEC_TIMEOUT_MODE BIT(3)
#define RKVDEC_IRQ_DIS BIT(4)
#define RKVDEC_TIMEOUT_E BIT(5)
#define RKVDEC_BUF_EMPTY_E BIT(6)
#define RKVDEC_STRM_E_WAITDECFIFO_EMPTY BIT(7)
#define RKVDEC_IRQ BIT(8)
#define RKVDEC_IRQ_RAW BIT(9)
#define RKVDEC_E_REWRITE_VALID BIT(10)
#define RKVDEC_COMMONIRQ_MODE BIT(11)
#define RKVDEC_RDY_STA BIT(12)
#define RKVDEC_BUS_STA BIT(13)
#define RKVDEC_ERR_STA BIT(14)
#define RKVDEC_TIMEOUT_STA BIT(15)
#define RKVDEC_BUF_EMPTY_STA BIT(16)
#define RKVDEC_COLMV_REF_ERR_STA BIT(17)
#define RKVDEC_CABU_END_STA BIT(18)
#define RKVDEC_H264ORVP9_ERR_MODE BIT(19)
#define RKVDEC_SOFTRST_EN_P BIT(20)
#define RKVDEC_FORCE_SOFTRESET_VALID BIT(21)
#define RKVDEC_SOFTRESET_RDY BIT(22)
#define RKVDEC_WR_DDR_ALIGN_EN BIT(23)
#define RKVDEC_REG_QOS_CTRL 0x18C
#define RKVDEC_REG_PREF_LUMA_CACHE_COMMAND 0x410
#define RKVDEC_REG_PREF_CHR_CACHE_COMMAND 0x450
#define RKVDEC_MODE_HEVC 0
#define RKVDEC_MODE_H264 1
#define RKVDEC_MODE_VP9 2
struct rkvdec_common_regs {
struct rkvdec_id {
u32 minor_ver : 8;
u32 level : 1;
u32 dec_support : 3;
u32 profile : 1;
u32 reserved0 : 1;
u32 codec_flag : 1;
u32 reserved1 : 1;
u32 prod_num : 16;
} reg00;
struct rkvdec_int {
u32 dec_e : 1;
u32 dec_clkgate_e : 1;
u32 dec_e_strmd_clkgate_dis : 1;
u32 timeout_mode : 1;
u32 dec_irq_dis : 1;
u32 dec_timeout_e : 1;
u32 buf_empty_en : 1;
u32 stmerror_waitdecfifo_empty : 1;
u32 dec_irq : 1;
u32 dec_irq_raw : 1;
u32 reserved2 : 2;
u32 dec_rdy_sta : 1;
u32 dec_bus_sta : 1;
u32 dec_error_sta : 1;
u32 dec_timeout_sta : 1;
u32 dec_empty_sta : 1;
u32 colmv_ref_error_sta : 1;
u32 cabu_end_sta : 1;
u32 h264orvp9_error_mode : 1;
u32 softrst_en_p : 1;
u32 force_softreset_valid : 1;
u32 softreset_rdy : 1;
u32 wr_ddr_align_en : 1;
u32 scl_down_en : 1;
u32 allow_not_wr_unref_bframe : 1;
u32 reserved1 : 6;
} reg01;
struct rkvdec_sysctrl {
u32 in_endian : 1;
u32 in_swap32_e : 1;
u32 in_swap64_e : 1;
u32 str_endian : 1;
u32 str_swap32_e : 1;
u32 str_swap64_e : 1;
u32 out_endian : 1;
u32 out_swap32_e : 1;
u32 out_cbcr_swap : 1;
u32 reserved0 : 1;
u32 rlc_mode_direct_write : 1;
u32 rlc_mode : 1;
u32 strm_start_bit : 7;
u32 reserved1 : 1;
u32 dec_mode : 2;
u32 reserved2 : 2;
u32 rps_mode : 1;
u32 stream_mode : 1;
u32 stream_lastpacket : 1;
u32 firstslice_flag : 1;
u32 frame_orslice : 1;
u32 buspr_slot_disable : 1;
u32 colmv_mode : 1;
u32 ycacherd_prior : 1;
} reg02;
struct rkvdec_picpar {
u32 y_hor_virstride : 9;
u32 reserved : 2;
u32 slice_num_highbit : 1;
u32 uv_hor_virstride : 9;
u32 slice_num_lowbits : 11;
} reg03;
u32 strm_rlc_base;
u32 stream_len;
u32 cabactbl_base;
u32 decout_base;
struct rkvdec_y_virstride {
u32 y_virstride : 20;
u32 reserved0 : 12;
} reg08;
struct rkvdec_yuv_virstride {
u32 yuv_virstride : 21;
u32 reserved0 : 11;
} reg09;
} __packed;
struct ref_base {
u32 field_ref : 1;
u32 topfield_used_ref : 1;
u32 botfield_used_ref : 1;
u32 colmv_use_flag_ref : 1;
u32 base_addr : 28;
};
struct rkvdec_h26x_regs {
struct ref_base ref0_14_base[15];
u32 ref0_14_poc[15];
u32 cur_poc;
u32 rlcwrite_base;
u32 pps_base;
u32 rps_base;
u32 strmd_error_e;
struct {
u32 strmd_error_status : 28;
u32 colmv_error_ref_picidx : 4;
} reg45;
struct {
u32 strmd_error_ctu_xoffset : 8;
u32 strmd_error_ctu_yoffset : 8;
u32 streamfifo_space2full : 7;
u32 reserved0 : 1;
u32 vp9_error_ctu0_en : 1;
u32 reserved1 : 7;
} reg46;
struct {
u32 saowr_xoffet : 9;
u32 reserved0 : 7;
u32 saowr_yoffset : 10;
u32 reserved1 : 6;
} reg47;
struct ref_base ref15_base;
u32 ref15_29_poc[15];
u32 performance_cycle;
u32 axi_ddr_rdata;
u32 axi_ddr_wdata;
struct {
u32 busifd_resetn : 1;
u32 cabac_resetn : 1;
u32 dec_ctrl_resetn : 1;
u32 transd_resetn : 1;
u32 intra_resetn : 1;
u32 inter_resetn : 1;
u32 recon_resetn : 1;
u32 filer_resetn : 1;
u32 reserved0 : 24;
} reg67;
struct {
u32 perf_cnt0_sel : 6;
u32 reserved0 : 2;
u32 perf_cnt1_sel : 6;
u32 reserved1 : 2;
u32 perf_cnt2_sel : 6;
u32 reserved2 : 10;
} reg68;
u32 perf_cnt0;
u32 perf_cnt1;
u32 perf_cnt2;
u32 ref30_poc;
u32 ref31_poc;
u32 cur_poc1;
u32 errorinfo_base;
struct {
u32 slicedec_num : 14;
u32 reserved0 : 1;
u32 strmd_detect_error_flag : 1;
u32 error_packet_num : 14;
u32 reserved1 : 2;
} reg76;
struct {
u32 error_en_highbits : 30;
u32 strmd_error_slice_en : 1;
u32 strmd_error_frame_en : 1;
} reg77;
u32 colmv_cur_base;
u32 colmv_ref_base[16];
u32 scanlist_addr;
u32 reg96_sd_decout_base;
u32 sd_y_virstride;
u32 sd_hor_stride;
u32 qos_ctrl;
u32 perf[8];
u32 qos1;
} __packed;
struct rkvdec_vp9_regs {
struct cprheader_offset {
u32 cprheader_offset : 16;
u32 reserved : 16;
} reg10;
u32 refer_bases[3];
u32 count_base;
u32 segidlast_base;
u32 segidcur_base;
struct frame_sizes {
u32 framewidth : 16;
u32 frameheight : 16;
} reg17_19[3];
struct segid_grp {
u32 segid_abs_delta : 1;
u32 segid_frame_qp_delta_en : 1;
u32 segid_frame_qp_delta : 9;
u32 segid_frame_loopfilter_value_en : 1;
u32 segid_frame_loopfilter_value : 7;
u32 segid_referinfo_en : 1;
u32 segid_referinfo : 2;
u32 segid_frame_skip_en : 1;
u32 reserved : 9;
} reg20_27[8];
struct cprheader_config {
u32 tx_mode : 3;
u32 frame_reference_mode : 2;
u32 reserved : 27;
} reg28;
struct ref_scale {
u32 ref_hor_scale : 16;
u32 ref_ver_scale : 16;
} reg29_31[3];
struct ref_deltas_lastframe {
u32 ref_deltas_lastframe0 : 7;
u32 ref_deltas_lastframe1 : 7;
u32 ref_deltas_lastframe2 : 7;
u32 ref_deltas_lastframe3 : 7;
u32 reserved : 4;
} reg32;
struct info_lastframe {
u32 mode_deltas_lastframe0 : 7;
u32 mode_deltas_lastframe1 : 7;
u32 reserved0 : 2;
u32 segmentation_enable_lstframe : 1;
u32 last_show_frame : 1;
u32 last_intra_only : 1;
u32 last_widthheight_eqcur : 1;
u32 color_space_lastkeyframe : 3;
u32 reserved1 : 9;
} reg33;
u32 intercmd_base;
struct intercmd_num {
u32 intercmd_num : 24;
u32 reserved : 8;
} reg35;
struct lasttile_size {
u32 lasttile_size : 24;
u32 reserved : 8;
} reg36;
struct hor_virstride {
u32 y_hor_virstride : 9;
u32 reserved0 : 7;
u32 uv_hor_virstride : 9;
u32 reserved1 : 7;
} reg37_39[3];
u32 cur_poc;
struct rlcwrite_base {
u32 reserved : 3;
u32 rlcwrite_base : 29;
} reg41;
struct pps_base {
u32 reserved : 4;
u32 pps_base : 28;
} reg42;
struct rps_base {
u32 reserved : 4;
u32 rps_base : 28;
} reg43;
struct strmd_error_en {
u32 strmd_error_e : 28;
u32 reserved : 4;
} reg44;
u32 vp9_error_info0;
struct strmd_error_ctu {
u32 strmd_error_ctu_xoffset : 8;
u32 strmd_error_ctu_yoffset : 8;
u32 streamfifo_space2full : 7;
u32 reserved0 : 1;
u32 error_ctu0_en : 1;
u32 reserved1 : 7;
} reg46;
struct sao_ctu_position {
u32 saowr_xoffet : 9;
u32 reserved0 : 7;
u32 saowr_yoffset : 10;
u32 reserved1 : 6;
} reg47;
struct ystride {
u32 virstride : 20;
u32 reserved : 12;
} reg48_50[3];
struct lastref_yuvstride {
u32 lastref_yuv_virstride : 21;
u32 reserved : 11;
} reg51;
u32 refcolmv_base;
u32 reserved0[11];
u32 performance_cycle;
u32 axi_ddr_rdata;
u32 axi_ddr_wdata;
struct fpgadebug_reset {
u32 busifd_resetn : 1;
u32 cabac_resetn : 1;
u32 dec_ctrl_resetn : 1;
u32 transd_resetn : 1;
u32 intra_resetn : 1;
u32 inter_resetn : 1;
u32 recon_resetn : 1;
u32 filer_resetn : 1;
u32 reserved : 24;
} reg67;
struct performance_sel {
u32 perf_cnt0_sel : 6;
u32 reserved0 : 2;
u32 perf_cnt1_sel : 6;
u32 reserved1 : 2;
u32 perf_cnt2_sel : 6;
u32 reserved : 10;
} reg68;
u32 perf_cnt0;
u32 perf_cnt1;
u32 perf_cnt2;
u32 reserved1[3];
u32 vp9_error_info1;
struct error_ctu1 {
u32 vp9_error_ctu1_x : 6;
u32 reserved0 : 2;
u32 vp9_error_ctu1_y : 6;
u32 reserved1 : 1;
u32 vp9_error_ctu1_en : 1;
u32 reserved2 : 16;
} reg76;
u32 reserved2;
} __packed;
struct rkvdec_regs {
struct rkvdec_common_regs common;
union {
struct rkvdec_h26x_regs h26x;
struct rkvdec_vp9_regs vp9;
};
} __packed;
#endif