/*
|
* Copyright 2020 Rockchip Electronics Co. LTD
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
#ifndef __VDPU34X_COM_H__
|
#define __VDPU34X_COM_H__
|
|
#include "mpp_device.h"
|
#include "vdpu34x.h"
|
|
#define OFFSET_COMMON_REGS (8 * sizeof(RK_U32))
|
#define OFFSET_CODEC_PARAMS_REGS (64 * sizeof(RK_U32))
|
#define OFFSET_COMMON_ADDR_REGS (128 * sizeof(RK_U32))
|
#define OFFSET_CODEC_ADDR_REGS (160 * sizeof(RK_U32))
|
#define OFFSET_POC_HIGHBIT_REGS (200 * sizeof(RK_U32))
|
#define OFFSET_INTERRUPT_REGS (224 * sizeof(RK_U32))
|
#define OFFSET_STATISTIC_REGS (256 * sizeof(RK_U32))
|
|
#define RCB_ALLINE_SIZE (64)
|
|
#define MPP_RCB_BYTES(bits) MPP_ALIGN((bits + 7) / 8, RCB_ALLINE_SIZE)
|
|
typedef enum Vdpu34x_RCB_TYPE_E {
|
RCB_DBLK_ROW,
|
RCB_INTRA_ROW,
|
RCB_TRANSD_ROW,
|
RCB_STRMD_ROW,
|
RCB_INTER_ROW,
|
RCB_SAO_ROW,
|
RCB_FBC_ROW,
|
RCB_TRANSD_COL,
|
RCB_INTER_COL,
|
RCB_FILT_COL,
|
|
RCB_BUF_COUNT,
|
} Vdpu34xRcbType_e;
|
|
/* base: OFFSET_COMMON_REGS */
|
typedef struct Vdpu34xRegCommon_t {
|
struct SWREG8_IN_OUT {
|
RK_U32 in_endian : 1;
|
RK_U32 in_swap32_e : 1;
|
RK_U32 in_swap64_e : 1;
|
RK_U32 str_endian : 1;
|
RK_U32 str_swap32_e : 1;
|
RK_U32 str_swap64_e : 1;
|
RK_U32 out_endian : 1;
|
RK_U32 out_swap32_e : 1;
|
RK_U32 out_cbcr_swap : 1;
|
RK_U32 reserve : 23;
|
} reg008;
|
|
struct SWREG9_DEC_MODE {
|
RK_U32 dec_mode : 10;
|
RK_U32 reserve : 22;
|
} reg009;
|
|
struct SWREG10_DEC_E {
|
RK_U32 dec_e : 1;
|
RK_U32 reserve : 31;
|
} reg010;
|
|
struct SWREG11_IMPORTANT_EN {
|
RK_U32 reserver : 1;
|
RK_U32 dec_clkgate_e : 1;
|
RK_U32 dec_e_strmd_clkgate_dis : 1;
|
RK_U32 reserve0 : 1;
|
|
RK_U32 dec_irq_dis : 1;
|
RK_U32 dec_timeout_e : 1;
|
RK_U32 buf_empty_en : 1;
|
RK_U32 reserve1 : 3;
|
|
RK_U32 dec_e_rewrite_valid : 1;
|
RK_U32 reserve2 : 9;
|
RK_U32 softrst_en_p : 1;
|
RK_U32 force_softreset_valid : 1;
|
RK_U32 reserve3 : 2;
|
RK_U32 pix_range_detection_e : 1;
|
RK_U32 reserve4 : 7;
|
} reg011;
|
|
struct SWREG12_SENCODARY_EN {
|
RK_U32 wr_ddr_align_en : 1;
|
RK_U32 colmv_compress_en : 1;
|
RK_U32 fbc_e : 1;
|
RK_U32 reserve0 : 1;
|
|
RK_U32 buspr_slot_disable : 1;
|
RK_U32 error_info_en : 1;
|
RK_U32 info_collect_en : 1;
|
RK_U32 wait_reset_en : 1;
|
|
RK_U32 scanlist_addr_valid_en : 1;
|
RK_U32 reserve1 : 23;
|
} reg012;
|
|
struct SWREG13_EN_MODE_SET {
|
RK_U32 timeout_mode : 1;
|
RK_U32 req_timeout_rst_sel : 1;
|
RK_U32 reserve0 : 1;
|
RK_U32 dec_commonirq_mode : 1;
|
RK_U32 reserve1 : 2;
|
RK_U32 stmerror_waitdecfifo_empty : 1;
|
RK_U32 reserve2 : 2;
|
RK_U32 h26x_streamd_error_mode : 1;
|
RK_U32 reserve3 : 2;
|
RK_U32 allow_not_wr_unref_bframe : 1;
|
RK_U32 fbc_output_wr_disable : 1;
|
RK_U32 reserve4 : 1;
|
RK_U32 colmv_error_mode : 1;
|
|
RK_U32 reserve5 : 2;
|
RK_U32 h26x_error_mode : 1;
|
RK_U32 reserve6 : 2;
|
RK_U32 ycacherd_prior : 1;
|
RK_U32 reserve7 : 2;
|
RK_U32 cur_pic_is_idr : 1;
|
RK_U32 reserve8 : 1;
|
RK_U32 right_auto_rst_disable : 1;
|
RK_U32 frame_end_err_rst_flag : 1;
|
RK_U32 rd_prior_mode : 1;
|
RK_U32 rd_ctrl_prior_mode : 1;
|
RK_U32 reserve9 : 1;
|
RK_U32 filter_outbuf_mode : 1;
|
} reg013;
|
|
struct SWREG14_FBC_PARAM_SET {
|
RK_U32 fbc_force_uncompress : 1;
|
|
RK_U32 reserve0 : 2;
|
RK_U32 allow_16x8_cp_flag : 1;
|
RK_U32 reserve1 : 2;
|
|
RK_U32 fbc_h264_exten_4or8_flag: 1;
|
RK_U32 reserve2 : 25;
|
} reg014;
|
|
struct SWREG15_STREAM_PARAM_SET {
|
RK_U32 rlc_mode_direct_write : 1;
|
RK_U32 rlc_mode : 1;
|
RK_U32 reserve0 : 3;
|
|
RK_U32 strm_start_bit : 7;
|
RK_U32 reserve1 : 20;
|
} reg015;
|
|
RK_U32 reg016_str_len;
|
|
struct SWREG17_SLICE_NUMBER {
|
RK_U32 slice_num : 25;
|
RK_U32 reserve : 7;
|
} reg017;
|
|
struct SWREG18_Y_HOR_STRIDE {
|
RK_U32 y_hor_virstride : 16;
|
RK_U32 reserve : 16;
|
} reg018;
|
|
struct SWREG19_UV_HOR_STRIDE {
|
RK_U32 uv_hor_virstride : 16;
|
RK_U32 reserve : 16;
|
} reg019;
|
|
union {
|
struct SWREG20_Y_STRIDE {
|
RK_U32 y_virstride : 28;
|
RK_U32 reserve : 4;
|
} reg020_y_virstride;
|
|
struct SWREG20_FBC_PAYLOAD_OFFSET {
|
RK_U32 reserve : 4;
|
RK_U32 payload_st_offset : 28;
|
} reg020_fbc_payload_off;
|
};
|
|
|
struct SWREG21_ERROR_CTRL_SET {
|
RK_U32 inter_error_prc_mode : 1;
|
RK_U32 error_intra_mode : 1;
|
RK_U32 error_deb_en : 1;
|
RK_U32 picidx_replace : 5;
|
|
RK_U32 reserve0 : 16;
|
|
RK_U32 roi_error_ctu_cal_en : 1;
|
RK_U32 reserve1 : 7;
|
} reg021;
|
|
struct SWREG22_ERR_ROI_CTU_OFFSET_START {
|
RK_U32 roi_x_ctu_offset_st : 12;
|
RK_U32 reserve0 : 4;
|
RK_U32 roi_y_ctu_offset_st : 12;
|
RK_U32 reserve1 : 4;
|
} reg022;
|
|
struct SWREG23_ERR_ROI_CTU_OFFSET_END {
|
RK_U32 roi_x_ctu_offset_end : 12;
|
RK_U32 reserve0 : 4;
|
RK_U32 roi_y_ctu_offset_end : 12;
|
RK_U32 reserve1 : 4;
|
} reg023;
|
|
struct SWREG24_CABAC_ERROR_EN_LOWBITS {
|
RK_U32 cabac_err_en_lowbits : 32;
|
} reg024;
|
|
struct SWREG25_CABAC_ERROR_EN_HIGHBITS {
|
RK_U32 cabac_err_en_highbits : 30;
|
RK_U32 reserve : 2;
|
} reg025;
|
|
struct SWREG26_BLOCK_GATING_EN {
|
RK_U32 swreg_block_gating_e : 20;
|
RK_U32 reserve : 11;
|
RK_U32 reg_cfg_gating_en : 1;
|
} reg026;
|
RK_U32 reg027;
|
struct SWREG28_MULTIPLY_CORE_CTRL {
|
RK_U32 swreg_vp9_wr_prob_idx : 3;
|
RK_U32 reserve0 : 1;
|
RK_U32 swreg_vp9_rd_prob_idx : 3;
|
RK_U32 reserve1 : 1;
|
|
RK_U32 swreg_ref_req_advance_flag : 1;
|
RK_U32 sw_colmv_req_advance_flag : 1;
|
RK_U32 sw_poc_only_highbit_flag : 1;
|
RK_U32 sw_poc_arb_flag : 1;
|
|
RK_U32 reserve2 : 4;
|
RK_U32 sw_film_idx : 10;
|
RK_U32 reserve3 : 2;
|
RK_U32 sw_pu_req_mismatch_dis : 1;
|
RK_U32 sw_colmv_req_mismatch_dis : 1;
|
RK_U32 reserve4 : 2;
|
} reg028;
|
/* NOTE: reg027 ~ reg032 are added in vdpu38x at rk3588 */
|
RK_U32 reg029_031[3];
|
/* NOTE: timeout must be config in vdpu38x */
|
RK_U32 reg032_timeout_threshold;
|
} Vdpu34xRegCommon;
|
|
/* base: OFFSET_COMMON_ADDR_REGS */
|
typedef struct Vdpu34xRegCommonAddr_t {
|
/* offset 128 */
|
RK_U32 reg128_rlc_base;
|
|
RK_U32 reg129_rlcwrite_base;
|
|
RK_U32 reg130_decout_base;
|
|
RK_U32 reg131_colmv_cur_base;
|
|
RK_U32 reg132_error_ref_base;
|
|
RK_U32 reg133_rcb_intra_base;
|
|
RK_U32 reg134_rcb_transd_row_base;
|
|
RK_U32 reg135_rcb_transd_col_base;
|
|
RK_U32 reg136_rcb_streamd_row_base;
|
|
RK_U32 reg137_rcb_inter_row_base;
|
|
RK_U32 reg138_rcb_inter_col_base;
|
|
RK_U32 reg139_rcb_dblk_base;
|
|
RK_U32 reg140_rcb_sao_base;
|
|
RK_U32 reg141_rcb_fbc_base;
|
|
RK_U32 reg142_rcb_filter_col_base;
|
} Vdpu34xRegCommonAddr;
|
|
/* base: OFFSET_COMMON_ADDR_REGS */
|
typedef struct Vdpu34xRegIrqStatus_t {
|
struct SWREG224_STA_INT {
|
RK_U32 dec_irq : 1;
|
RK_U32 dec_irq_raw : 1;
|
|
RK_U32 dec_rdy_sta : 1;
|
RK_U32 dec_bus_sta : 1;
|
RK_U32 dec_error_sta : 1;
|
RK_U32 dec_timeout_sta : 1;
|
RK_U32 buf_empty_sta : 1;
|
RK_U32 colmv_ref_error_sta : 1;
|
RK_U32 cabu_end_sta : 1;
|
|
RK_U32 softreset_rdy : 1;
|
|
RK_U32 reserve : 22;
|
} reg224;
|
|
struct SWREG225_STA_ERR_INFO {
|
RK_U32 all_frame_error_flag : 1;
|
RK_U32 strmd_detect_error_flag : 1;
|
RK_U32 reserve : 30;
|
} reg225;
|
|
struct SWREG226_STA_CABAC_ERROR_STATUS {
|
RK_U32 strmd_error_status : 28;
|
RK_U32 reserve : 4;
|
} reg226;
|
|
struct SWREG227_STA_COLMV_ERROR_REF_PICIDX {
|
RK_U32 colmv_error_ref_picidx : 4;
|
RK_U32 reserve : 28;
|
} reg227;
|
|
struct SWREG228_STA_CABAC_ERROR_CTU_OFFSET {
|
RK_U32 cabac_error_ctu_offset : 32;
|
} reg228;
|
|
struct SWREG229_STA_SAOWR_CTU_OFFSET {
|
RK_U32 saowr_xoffset : 16;
|
RK_U32 saowr_yoffset : 16;
|
} reg229;
|
|
struct SWREG230_STA_SLICE_DEC_NUM {
|
RK_U32 slicedec_num : 25;
|
RK_U32 reserve : 7;
|
} reg230;
|
|
struct SWREG231_STA_FRAME_ERROR_CTU_NUM {
|
RK_U32 frame_ctu_err_num : 32;
|
} reg231;
|
|
struct SWREG232_STA_ERROR_PACKET_NUM {
|
RK_U32 packet_err_num : 16;
|
RK_U32 reserve : 16;
|
} reg232;
|
|
struct SWREG233_STA_ERR_CTU_NUM_IN_RO {
|
RK_U32 error_ctu_num_in_roi : 24;
|
RK_U32 reserve : 8;
|
} reg233;
|
|
RK_U32 reserve_reg234_237[4];
|
} Vdpu34xRegIrqStatus;
|
|
typedef struct Vdpu34xRegStatistic_t {
|
struct SWREG256_DEBUG_PERF_LATENCY_CTRL0 {
|
RK_U32 axi_perf_work_e : 1;
|
RK_U32 axi_perf_clr_e : 1;
|
RK_U32 reserve0 : 1;
|
RK_U32 axi_cnt_type : 1;
|
RK_U32 rd_latency_id : 4;
|
RK_U32 rd_latency_thr : 12;
|
RK_U32 reserve1 : 12;
|
} reg256;
|
|
struct SWREG257_DEBUG_PERF_LATENCY_CTRL1 {
|
RK_U32 addr_align_type : 2;
|
RK_U32 ar_cnt_id_type : 1;
|
RK_U32 aw_cnt_id_type : 1;
|
RK_U32 ar_count_id : 4;
|
RK_U32 aw_count_id : 4;
|
RK_U32 rd_band_width_mode : 1;
|
RK_U32 reserve : 19;
|
} reg257;
|
|
struct SWREG258_DEBUG_PERF_RD_MAX_LATENCY_NUM {
|
RK_U32 rd_max_latency_num : 16;
|
RK_U32 reserve : 16;
|
} reg258;
|
|
RK_U32 reg259_rd_latency_thr_num_ch0;
|
RK_U32 reg260_rd_latency_acc_sum;
|
RK_U32 reg261_perf_rd_axi_total_byte;
|
RK_U32 reg262_perf_wr_axi_total_byte;
|
RK_U32 reg263_perf_working_cnt;
|
|
RK_U32 reserve_reg264;
|
|
struct SWREG265_DEBUG_PERF_SEL {
|
RK_U32 perf_cnt0_sel : 6;
|
RK_U32 reserve0 : 2;
|
RK_U32 perf_cnt1_sel : 6;
|
RK_U32 reserve1 : 2;
|
RK_U32 perf_cnt2_sel : 6;
|
RK_U32 reserve2 : 10;
|
} reg265;
|
|
RK_U32 reg266_perf_cnt0;
|
RK_U32 reg267_perf_cnt1;
|
RK_U32 reg268_perf_cnt2;
|
|
RK_U32 reserve_reg269;
|
|
struct SWREG270_DEBUG_QOS_CTRL {
|
RK_U32 bus2mc_buffer_qos_level : 8;
|
RK_U32 reserve0 : 8;
|
RK_U32 axi_rd_hurry_level : 2;
|
RK_U32 reserve1 : 2;
|
RK_U32 axi_wr_qos : 2;
|
RK_U32 reserve2 : 2;
|
RK_U32 axi_wr_hurry_level : 2;
|
RK_U32 reserve3 : 2;
|
RK_U32 axi_rd_qos : 2;
|
RK_U32 reserve4 : 2;
|
} reg270;
|
|
RK_U32 reg271_wr_wait_cycle_qos;
|
|
struct SWREG272_DEBUG_INT {
|
RK_U32 bu_rw_clean : 1;
|
RK_U32 saowr_frame_rdy : 1;
|
RK_U32 saobu_frame_rdy_valid : 1;
|
RK_U32 colmvwr_frame_rdy_real : 1;
|
RK_U32 cabu_rlcend_valid_real : 1;
|
RK_U32 stream_rdburst_cnteq0_towr : 1;
|
RK_U32 wr_tansfer_cnt : 6;
|
RK_U32 reserve0 : 4;
|
RK_U32 streamfifo_space2full : 7;
|
RK_U32 reserve1 : 9;
|
} reg272;
|
|
struct SWREG273 {
|
RK_U32 bus_status_flag : 19;
|
RK_U32 reserve0 : 12;
|
RK_U32 pps_no_ref_bframe_dec_r : 1;
|
} reg273;
|
|
RK_U16 reg274_y_min_value;
|
RK_U16 reg274_y_max_value;
|
RK_U16 reg275_u_min_value;
|
RK_U16 reg275_u_max_value;
|
RK_U16 reg276_v_min_value;
|
RK_U16 reg276_v_max_value;
|
} Vdpu34xRegStatistic;
|
|
typedef struct vdpu34x_rcb_info_t {
|
RK_S32 reg;
|
RK_S32 size;
|
RK_S32 offset;
|
} Vdpu34xRcbInfo;
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
RK_S32 get_rcb_buf_size(Vdpu34xRcbInfo *info, RK_S32 width, RK_S32 height);
|
void vdpu34x_setup_rcb(Vdpu34xRegCommonAddr *reg, MppDev dev, MppBuffer buf, Vdpu34xRcbInfo *info);
|
RK_S32 vdpu34x_compare_rcb_size(const void *a, const void *b);
|
void vdpu34x_setup_statistic(Vdpu34xRegCommon *com, Vdpu34xRegStatistic *sta);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif /* __VDPU34X_COM_H__ */
|