1158 lines
39 KiB
C
1158 lines
39 KiB
C
|
/* Copyright (c) 2010-2012, The Linux Foundation. All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License version 2 and
|
||
|
* only version 2 as published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "vidc.h"
|
||
|
#include "vidc_hwio.h"
|
||
|
|
||
|
|
||
|
#define VIDC_1080P_INIT_CH_INST_ID 0x0000ffff
|
||
|
#define VIDC_1080P_RESET_VI 0x3f7
|
||
|
#define VIDC_1080P_RESET_VI_RISC 0x3f6
|
||
|
#define VIDC_1080P_RESET_VI_VIDC_RISC 0x3f2
|
||
|
#define VIDC_1080P_RESET_ALL 0
|
||
|
#define VIDC_1080P_RESET_RISC 0x3fe
|
||
|
#define VIDC_1080P_RESET_NONE 0x3ff
|
||
|
#define VIDC_1080P_INTERRUPT_CLEAR 0
|
||
|
#define VIDC_1080P_MAX_H264DECODER_DPB 32
|
||
|
#define VIDC_1080P_MAX_DEC_RECON_BUF 32
|
||
|
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_STATUS_MASK 0x00000007
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_STATUS_SHIFT 0
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_CODING_MASK 0x00000008
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_CODING_SHIFT 3
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_RES_MASK 0x00000030
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_RES_SHIFT 4
|
||
|
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_CROP_MASK 0x00000040
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_CROP_SHIFT 6
|
||
|
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_CORRECT_MASK 0x00000180
|
||
|
#define VIDC_1080P_SI_RG7_DISPLAY_CORRECT_SHIFT 7
|
||
|
#define VIDC_1080P_SI_RG8_DECODE_FRAMETYPE_MASK 0x00000007
|
||
|
|
||
|
#define VIDC_1080P_SI_RG10_NUM_DPB_BMSK 0x00003fff
|
||
|
#define VIDC_1080P_SI_RG10_NUM_DPB_SHFT 0
|
||
|
#define VIDC_1080P_SI_RG10_DPB_FLUSH_BMSK 0x00004000
|
||
|
#define VIDC_1080P_SI_RG10_DPB_FLUSH_SHFT 14
|
||
|
#define VIDC_1080P_SI_RG10_DMX_DISABLE_BMSK 0x00008000
|
||
|
#define VIDC_1080P_SI_RG10_DMX_DISABLE_SHFT 15
|
||
|
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_STATUS_MASK 0x00000007
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_STATUS_SHIFT 0
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_CODING_MASK 0x00000008
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_CODING_SHIFT 3
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_RES_MASK 0x000000C0
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_RES_SHIFT 6
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_CROPP_MASK 0x00000100
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_CROPP_SHIFT 8
|
||
|
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_CORRECT_MASK 0x00000600
|
||
|
#define VIDC_1080P_SI_RG11_DECODE_CORRECT_SHIFT 9
|
||
|
#define VIDC_1080P_BASE_OFFSET_SHIFT 11
|
||
|
|
||
|
|
||
|
#define VIDC_1080P_H264DEC_LUMA_ADDR HWIO_REG_759068_ADDR
|
||
|
#define VIDC_1080P_H264DEC_CHROMA_ADDR HWIO_REG_515200_ADDR
|
||
|
#define VIDC_1080P_H264DEC_MV_PLANE_ADDR HWIO_REG_466192_ADDR
|
||
|
|
||
|
#define VIDC_1080P_DEC_LUMA_ADDR HWIO_REG_759068_ADDR
|
||
|
#define VIDC_1080P_DEC_CHROMA_ADDR HWIO_REG_515200_ADDR
|
||
|
|
||
|
#define VIDC_1080P_DEC_TYPE_SEQ_HEADER 0x00010000
|
||
|
#define VIDC_1080P_DEC_TYPE_FRAME_DATA 0x00020000
|
||
|
#define VIDC_1080P_DEC_TYPE_LAST_FRAME_DATA 0x00030000
|
||
|
#define VIDC_1080P_DEC_TYPE_INIT_BUFFERS 0x00040000
|
||
|
|
||
|
#define VIDC_1080P_ENC_TYPE_SEQ_HEADER 0x00010000
|
||
|
#define VIDC_1080P_ENC_TYPE_FRAME_DATA 0x00020000
|
||
|
#define VIDC_1080P_ENC_TYPE_LAST_FRAME_DATA 0x00030000
|
||
|
|
||
|
#define VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_BMSK 0x00004000
|
||
|
#define VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_SHFT 14
|
||
|
#define VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_BMSK 0x80000000
|
||
|
#define VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_SHFT 31
|
||
|
#define VIDC_1080P_MAX_INTRA_PERIOD 0xffff
|
||
|
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_I_FRAME_BMASK 0x00000001
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_I_FRAME_SHIFT 0
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_STORE_LTR0_BMASK 0x00000008
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_STORE_LTR0_SHIFT 3
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_STORE_LTR1_BMASK 0x00000010
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_STORE_LTR1_SHIFT 4
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_USE_LTR0_BMASK 0x00000020
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_USE_LTR0_SHIFT 5
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_USE_LTR1_BMASK 0x00000040
|
||
|
#define VIDC_1080P_COMMON_CHX_RG6_USE_LTR1_SHIFT 6
|
||
|
|
||
|
u8 *VIDC_BASE_PTR;
|
||
|
|
||
|
void vidc_1080p_do_sw_reset(enum vidc_1080p_reset init_flag)
|
||
|
{
|
||
|
if (init_flag == VIDC_1080P_RESET_IN_SEQ_FIRST_STAGE) {
|
||
|
u32 sw_reset_value = 0;
|
||
|
|
||
|
VIDC_HWIO_IN(REG_557899, &sw_reset_value);
|
||
|
sw_reset_value &= (~HWIO_REG_557899_RSTN_VI_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_557899, sw_reset_value);
|
||
|
sw_reset_value &= (~HWIO_REG_557899_RSTN_RISC_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_557899, sw_reset_value);
|
||
|
sw_reset_value &= (~(HWIO_REG_557899_RSTN_VIDCCORE_BMSK |
|
||
|
HWIO_REG_557899_RSTN_DMX_BMSK));
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_557899, sw_reset_value);
|
||
|
} else if (init_flag == VIDC_1080P_RESET_IN_SEQ_SECOND_STAGE) {
|
||
|
VIDC_HWIO_OUT(REG_557899, VIDC_1080P_RESET_ALL);
|
||
|
VIDC_HWIO_OUT(REG_557899, VIDC_1080P_RESET_RISC);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_release_sw_reset(void)
|
||
|
{
|
||
|
u32 nAxiCtl;
|
||
|
u32 nAxiStatus;
|
||
|
u32 nRdWrBurst;
|
||
|
u32 nOut_Order;
|
||
|
|
||
|
nOut_Order = VIDC_SETFIELD(1, HWIO_REG_5519_AXI_AOOORD_SHFT,
|
||
|
HWIO_REG_5519_AXI_AOOORD_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_5519, nOut_Order);
|
||
|
|
||
|
nOut_Order = VIDC_SETFIELD(1, HWIO_REG_606364_AXI_AOOOWR_SHFT,
|
||
|
HWIO_REG_606364_AXI_AOOOWR_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_606364, nOut_Order);
|
||
|
|
||
|
nAxiCtl = VIDC_SETFIELD(1, HWIO_REG_471159_AXI_HALT_REQ_SHFT,
|
||
|
HWIO_REG_471159_AXI_HALT_REQ_BMSK);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_471159, nAxiCtl);
|
||
|
|
||
|
do {
|
||
|
VIDC_HWIO_IN(REG_437878, &nAxiStatus);
|
||
|
nAxiStatus = VIDC_GETFIELD(nAxiStatus,
|
||
|
HWIO_REG_437878_AXI_HALT_ACK_BMSK,
|
||
|
HWIO_REG_437878_AXI_HALT_ACK_SHFT);
|
||
|
} while (0x3 != nAxiStatus);
|
||
|
|
||
|
nAxiCtl = VIDC_SETFIELD(1,
|
||
|
HWIO_REG_471159_AXI_RESET_SHFT,
|
||
|
HWIO_REG_471159_AXI_RESET_BMSK);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_471159, nAxiCtl);
|
||
|
VIDC_HWIO_OUT(REG_471159, 0);
|
||
|
|
||
|
nRdWrBurst = VIDC_SETFIELD(8,
|
||
|
HWIO_REG_922106_XBAR_OUT_MAX_RD_BURST_SHFT,
|
||
|
HWIO_REG_922106_XBAR_OUT_MAX_RD_BURST_BMSK) |
|
||
|
VIDC_SETFIELD(8, HWIO_REG_922106_XBAR_OUT_MAX_WR_BURST_SHFT,
|
||
|
HWIO_REG_922106_XBAR_OUT_MAX_WR_BURST_BMSK);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_922106, nRdWrBurst);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_611794, VIDC_1080P_HOST2RISC_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_557899, VIDC_1080P_RESET_NONE);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_clear_interrupt(void)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_575377, VIDC_1080P_INTERRUPT_CLEAR);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_host2risc_cmd(enum vidc_1080p_host2risc_cmd
|
||
|
host2risc_command, u32 host2risc_arg1, u32 host2risc_arg2,
|
||
|
u32 host2risc_arg3, u32 host2risc_arg4)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_611794, VIDC_1080P_HOST2RISC_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_356340, host2risc_arg1);
|
||
|
VIDC_HWIO_OUT(REG_899023, host2risc_arg2);
|
||
|
VIDC_HWIO_OUT(REG_987762, host2risc_arg3);
|
||
|
VIDC_HWIO_OUT(REG_544000, host2risc_arg4);
|
||
|
VIDC_HWIO_OUT(REG_611794, host2risc_command);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_risc2host_cmd(u32 *pn_risc2host_command,
|
||
|
u32 *pn_risc2host_arg1, u32 *pn_risc2host_arg2,
|
||
|
u32 *pn_risc2host_arg3, u32 *pn_risc2host_arg4)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_695082, pn_risc2host_command);
|
||
|
VIDC_HWIO_IN(REG_156596, pn_risc2host_arg1);
|
||
|
VIDC_HWIO_IN(REG_222292, pn_risc2host_arg2);
|
||
|
VIDC_HWIO_IN(REG_790962, pn_risc2host_arg3);
|
||
|
VIDC_HWIO_IN(REG_679882, pn_risc2host_arg4);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_risc2host_cmd_status(u32 err_status,
|
||
|
u32 *dec_err_status, u32 *disp_err_status)
|
||
|
{
|
||
|
*dec_err_status = VIDC_GETFIELD(err_status,
|
||
|
VIDC_RISC2HOST_ARG2_VIDC_DEC_ERROR_STATUS_BMSK,
|
||
|
VIDC_RISC2HOST_ARG2_VIDC_DEC_ERROR_STATUS_SHFT);
|
||
|
*disp_err_status = VIDC_GETFIELD(err_status,
|
||
|
VIDC_RISC2HOST_ARG2_VIDC_DISP_ERROR_STATUS_BMSK,
|
||
|
VIDC_RISC2HOST_ARG2_VIDC_DISP_ERROR_STATUS_SHFT);
|
||
|
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_clear_risc2host_cmd(void)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_fw_version(u32 *pn_fw_version)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_653206, pn_fw_version);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_fw_status(u32 *pn_fw_status)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_350619, pn_fw_status);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_init_memory_controller(u32 dram_base_addr_a,
|
||
|
u32 dram_base_addr_b)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_64440, dram_base_addr_a);
|
||
|
VIDC_HWIO_OUT(REG_675915, dram_base_addr_b);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_memory_controller_status(u32 *pb_mc_abusy,
|
||
|
u32 *pb_mc_bbusy)
|
||
|
{
|
||
|
u32 mc_status = 0;
|
||
|
|
||
|
VIDC_HWIO_IN(REG_399911, &mc_status);
|
||
|
*pb_mc_abusy = (u32) ((mc_status &
|
||
|
HWIO_REG_399911_MC_BUSY_A_BMSK) >>
|
||
|
HWIO_REG_399911_MC_BUSY_A_SHFT);
|
||
|
*pb_mc_bbusy = (u32) ((mc_status &
|
||
|
HWIO_REG_399911_MC_BUSY_B_BMSK) >>
|
||
|
HWIO_REG_399911_MC_BUSY_B_SHFT);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h264_decode_buffers(u32 dpb, u32 dec_vert_nb_mv_offset,
|
||
|
u32 dec_nb_ip_offset, u32 *pn_dpb_luma_offset,
|
||
|
u32 *pn_dpb_chroma_offset, u32 *pn_mv_buffer_offset)
|
||
|
{
|
||
|
u32 count = 0, num_dpb_used = dpb;
|
||
|
u8 *vidc_dpb_luma_reg = (u8 *) VIDC_1080P_H264DEC_LUMA_ADDR;
|
||
|
u8 *vidc_dpb_chroma_reg = (u8 *) VIDC_1080P_H264DEC_CHROMA_ADDR;
|
||
|
u8 *vidc_mv_buffer_reg = (u8 *) VIDC_1080P_H264DEC_MV_PLANE_ADDR;
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_931311, (dec_vert_nb_mv_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_16277, (dec_nb_ip_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
if (num_dpb_used > VIDC_1080P_MAX_H264DECODER_DPB)
|
||
|
num_dpb_used = VIDC_1080P_MAX_H264DECODER_DPB;
|
||
|
for (count = 0; count < num_dpb_used; count++) {
|
||
|
VIDC_OUT_DWORD(vidc_dpb_luma_reg,
|
||
|
(pn_dpb_luma_offset[count] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_OUT_DWORD(vidc_dpb_chroma_reg,
|
||
|
(pn_dpb_chroma_offset[count] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_OUT_DWORD(vidc_mv_buffer_reg,
|
||
|
(pn_mv_buffer_offset[count] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
vidc_dpb_luma_reg += 4;
|
||
|
vidc_dpb_chroma_reg += 4;
|
||
|
vidc_mv_buffer_reg += 4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_decode_recon_buffers(u32 recon_buffer,
|
||
|
u32 *pn_dec_luma, u32 *pn_dec_chroma)
|
||
|
{
|
||
|
u32 count = 0, recon_buf_to_program = recon_buffer;
|
||
|
u8 *dec_recon_luma_reg = (u8 *) VIDC_1080P_DEC_LUMA_ADDR;
|
||
|
u8 *dec_recon_chroma_reg = (u8 *) VIDC_1080P_DEC_CHROMA_ADDR;
|
||
|
|
||
|
if (recon_buf_to_program > VIDC_1080P_MAX_DEC_RECON_BUF)
|
||
|
recon_buf_to_program = VIDC_1080P_MAX_DEC_RECON_BUF;
|
||
|
for (count = 0; count < recon_buf_to_program; count++) {
|
||
|
VIDC_OUT_DWORD(dec_recon_luma_reg, (pn_dec_luma[count] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_OUT_DWORD(dec_recon_chroma_reg,
|
||
|
(pn_dec_chroma[count] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
dec_recon_luma_reg += 4;
|
||
|
dec_recon_chroma_reg += 4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_mpeg4_divx_decode_work_buffers(u32 nb_dcac_buffer_offset,
|
||
|
u32 upnb_mv_buffer_offset, u32 sub_anchor_buffer_offset,
|
||
|
u32 overlay_transform_buffer_offset, u32 stx_parser_buffer_offset)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_931311, (nb_dcac_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_16277, (upnb_mv_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_654169, (sub_anchor_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_802794,
|
||
|
(overlay_transform_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_252167, (stx_parser_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h263_decode_work_buffers(u32 nb_dcac_buffer_offset,
|
||
|
u32 upnb_mv_buffer_offset, u32 sub_anchor_buffer_offset,
|
||
|
u32 overlay_transform_buffer_offset)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_931311, (nb_dcac_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_16277, (upnb_mv_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_654169, (sub_anchor_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_802794,
|
||
|
(overlay_transform_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_vc1_decode_work_buffers(u32 nb_dcac_buffer_offset,
|
||
|
u32 upnb_mv_buffer_offset, u32 sub_anchor_buffer_offset,
|
||
|
u32 overlay_transform_buffer_offset, u32 bitplain1Buffer_offset,
|
||
|
u32 bitplain2Buffer_offset, u32 bitplain3Buffer_offset)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_931311, (nb_dcac_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_16277, (upnb_mv_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_654169, (sub_anchor_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_802794,
|
||
|
(overlay_transform_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_724376, (bitplain3Buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_551674, (bitplain2Buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_115991, (bitplain1Buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_recon_buffers(u32 recon_buffer,
|
||
|
u32 *pn_enc_luma, u32 *pn_enc_chroma)
|
||
|
{
|
||
|
if (recon_buffer > 0) {
|
||
|
VIDC_HWIO_OUT(REG_294579, (pn_enc_luma[0] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_759068, (pn_enc_chroma[0] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
if (recon_buffer > 1) {
|
||
|
VIDC_HWIO_OUT(REG_616802, (pn_enc_luma[1] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_833502, (pn_enc_chroma[1] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
if (recon_buffer > 2) {
|
||
|
VIDC_HWIO_OUT(REG_61427, (pn_enc_luma[2] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_68356, (pn_enc_chroma[2] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
if (recon_buffer > 3) {
|
||
|
VIDC_HWIO_OUT(REG_23318, (pn_enc_luma[3] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_127855, (pn_enc_chroma[3] >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h264_encode_work_buffers(u32 up_row_mv_buffer_offset,
|
||
|
u32 direct_colzero_flag_buffer_offset,
|
||
|
u32 upper_intra_md_buffer_offset,
|
||
|
u32 upper_intra_pred_buffer_offset, u32 nbor_infor_buffer_offset,
|
||
|
u32 mb_info_offset)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_515200, (up_row_mv_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_69832,
|
||
|
(direct_colzero_flag_buffer_offset>>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_256132,
|
||
|
(upper_intra_md_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_475648,
|
||
|
(upper_intra_pred_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_29510, (nbor_infor_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_175929, (mb_info_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h263_encode_work_buffers(u32 up_row_mv_buffer_offset,
|
||
|
u32 up_row_inv_quanti_coeff_buffer_offset)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_515200, (up_row_mv_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_29510, (
|
||
|
up_row_inv_quanti_coeff_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_mpeg4_encode_work_buffers(u32 skip_flag_buffer_offset,
|
||
|
u32 up_row_inv_quanti_coeff_buffer_offset, u32 upper_mv_offset)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_69832, (skip_flag_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_29510, (
|
||
|
up_row_inv_quanti_coeff_buffer_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
VIDC_HWIO_OUT(REG_515200, (upper_mv_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT));
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_frame_size(u32 hori_size, u32 vert_size)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_934655, hori_size);
|
||
|
VIDC_HWIO_OUT(REG_179070, vert_size);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_profile_level(u32 encode_profile, u32 enc_level)
|
||
|
{
|
||
|
u32 profile_level = 0;
|
||
|
|
||
|
profile_level = VIDC_SETFIELD(enc_level,
|
||
|
HWIO_REG_63643_LEVEL_SHFT,
|
||
|
HWIO_REG_63643_LEVEL_BMSK) |
|
||
|
VIDC_SETFIELD(encode_profile,
|
||
|
HWIO_REG_63643_PROFILE_SHFT,
|
||
|
HWIO_REG_63643_PROFILE_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_63643, profile_level);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_field_picture_structure(u32 enc_field_picture)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_786024, enc_field_picture);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_decode_mpeg4_pp_filter(u32 lf_enables)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_152500, lf_enables);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_decode_qp_save_control(u32 enable_q_pout)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_143629, enable_q_pout);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_returned_channel_inst_id(u32 *pn_rtn_chid)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_607589, pn_rtn_chid);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_clear_returned_channel_inst_id(void)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_607589, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_decode_seq_start_result(
|
||
|
struct vidc_1080p_seq_hdr_info *seq_hdr_info)
|
||
|
{
|
||
|
u32 dec_disp_result;
|
||
|
u32 frame = 0;
|
||
|
VIDC_HWIO_IN(REG_845544, &seq_hdr_info->img_size_y);
|
||
|
VIDC_HWIO_IN(REG_859906, &seq_hdr_info->img_size_x);
|
||
|
VIDC_HWIO_IN(REG_490078, &seq_hdr_info->min_num_dpb);
|
||
|
VIDC_HWIO_IN(REG_489688, &seq_hdr_info->dec_frm_size);
|
||
|
VIDC_HWIO_IN(REG_853667, &dec_disp_result);
|
||
|
seq_hdr_info->disp_progressive = VIDC_GETFIELD(dec_disp_result,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CODING_MASK,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CODING_SHIFT);
|
||
|
seq_hdr_info->disp_crop_exists = VIDC_GETFIELD(dec_disp_result,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CROP_MASK,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CROP_SHIFT);
|
||
|
VIDC_HWIO_IN(REG_692991, &dec_disp_result);
|
||
|
seq_hdr_info->dec_progressive = VIDC_GETFIELD(dec_disp_result,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CODING_MASK,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CODING_SHIFT);
|
||
|
seq_hdr_info->dec_crop_exists = VIDC_GETFIELD(dec_disp_result,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CROPP_MASK,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CROPP_SHIFT);
|
||
|
VIDC_HWIO_IN(REG_760102, &frame);
|
||
|
seq_hdr_info->data_partition = ((frame & 0x8) >> 3);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_decoded_frame_size(u32 *pn_decoded_size)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_489688, pn_decoded_size);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_display_frame_result(
|
||
|
struct vidc_1080p_dec_disp_info *dec_disp_info)
|
||
|
{
|
||
|
u32 display_result;
|
||
|
VIDC_HWIO_IN(REG_640904, &dec_disp_info->display_y_addr);
|
||
|
VIDC_HWIO_IN(REG_60114, &dec_disp_info->display_c_addr);
|
||
|
VIDC_HWIO_IN(REG_853667, &display_result);
|
||
|
VIDC_HWIO_IN(REG_845544, &dec_disp_info->img_size_y);
|
||
|
VIDC_HWIO_IN(REG_859906, &dec_disp_info->img_size_x);
|
||
|
dec_disp_info->display_status =
|
||
|
(enum vidc_1080p_display_status)
|
||
|
VIDC_GETFIELD(display_result,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_STATUS_MASK,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_STATUS_SHIFT);
|
||
|
dec_disp_info->display_coding =
|
||
|
(enum vidc_1080p_display_coding)
|
||
|
VIDC_GETFIELD(display_result, VIDC_1080P_SI_RG7_DISPLAY_CODING_MASK,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CODING_SHIFT);
|
||
|
dec_disp_info->disp_resl_change = VIDC_GETFIELD(display_result,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_RES_MASK,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_RES_SHIFT);
|
||
|
dec_disp_info->disp_crop_exists = VIDC_GETFIELD(display_result,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CROP_MASK,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CROP_SHIFT);
|
||
|
dec_disp_info->display_correct = VIDC_GETFIELD(display_result,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CORRECT_MASK,
|
||
|
VIDC_1080P_SI_RG7_DISPLAY_CORRECT_SHIFT);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_decode_frame(
|
||
|
enum vidc_1080p_decode_frame *pe_frame)
|
||
|
{
|
||
|
u32 frame = 0;
|
||
|
|
||
|
VIDC_HWIO_IN(REG_760102, &frame);
|
||
|
if (frame & 0x10)
|
||
|
*pe_frame = (enum vidc_1080p_decode_frame)
|
||
|
VIDC_1080P_DECODE_FRAMETYPE_IDR;
|
||
|
else
|
||
|
*pe_frame = (enum vidc_1080p_decode_frame)
|
||
|
(frame & VIDC_1080P_SI_RG8_DECODE_FRAMETYPE_MASK);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_decode_frame_result(
|
||
|
struct vidc_1080p_dec_disp_info *dec_disp_info)
|
||
|
{
|
||
|
u32 decode_result;
|
||
|
|
||
|
VIDC_HWIO_IN(REG_378318, &dec_disp_info->decode_y_addr);
|
||
|
VIDC_HWIO_IN(REG_203487, &dec_disp_info->decode_c_addr);
|
||
|
VIDC_HWIO_IN(REG_692991, &decode_result);
|
||
|
dec_disp_info->decode_status = (enum vidc_1080p_display_status)
|
||
|
VIDC_GETFIELD(decode_result,
|
||
|
VIDC_1080P_SI_RG11_DECODE_STATUS_MASK,
|
||
|
VIDC_1080P_SI_RG11_DECODE_STATUS_SHIFT);
|
||
|
dec_disp_info->decode_coding = (enum vidc_1080p_display_coding)
|
||
|
VIDC_GETFIELD(decode_result,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CODING_MASK,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CODING_SHIFT);
|
||
|
dec_disp_info->dec_resl_change = VIDC_GETFIELD(decode_result,
|
||
|
VIDC_1080P_SI_RG11_DECODE_RES_MASK,
|
||
|
VIDC_1080P_SI_RG11_DECODE_RES_SHIFT);
|
||
|
dec_disp_info->dec_crop_exists = VIDC_GETFIELD(decode_result,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CROPP_MASK,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CROPP_SHIFT);
|
||
|
dec_disp_info->decode_correct = VIDC_GETFIELD(decode_result,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CORRECT_MASK,
|
||
|
VIDC_1080P_SI_RG11_DECODE_CORRECT_SHIFT);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_decode_seq_start_ch0(
|
||
|
struct vidc_1080p_dec_seq_start_param *param)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_117192,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_145068, param->stream_frame_size);
|
||
|
VIDC_HWIO_OUT(REG_921356,
|
||
|
param->descriptor_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_190381, param->stream_buffersize);
|
||
|
VIDC_HWIO_OUT(REG_85655, param->descriptor_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_889944, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_404623, 0);
|
||
|
VIDC_HWIO_OUT(REG_397087, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_DEC_TYPE_SEQ_HEADER |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_decode_seq_start_ch1(
|
||
|
struct vidc_1080p_dec_seq_start_param *param)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_980194,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_936704, param->stream_frame_size);
|
||
|
VIDC_HWIO_OUT(REG_821977,
|
||
|
param->descriptor_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_887095, param->stream_buffersize);
|
||
|
VIDC_HWIO_OUT(REG_576987, param->descriptor_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_652528, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_404623, 0);
|
||
|
VIDC_HWIO_OUT(REG_254093, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_DEC_TYPE_SEQ_HEADER |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_decode_frame_start_ch0(
|
||
|
struct vidc_1080p_dec_frame_start_param *param)
|
||
|
{
|
||
|
u32 dpb_config;
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
if ((param->decode == VIDC_1080P_DEC_TYPE_LAST_FRAME_DATA) &&
|
||
|
((!param->stream_buffer_addr_offset) ||
|
||
|
(!param->stream_frame_size))) {
|
||
|
VIDC_HWIO_OUT(REG_117192, 0);
|
||
|
VIDC_HWIO_OUT(REG_145068, 0);
|
||
|
VIDC_HWIO_OUT(REG_190381, 0);
|
||
|
} else {
|
||
|
VIDC_HWIO_OUT(REG_117192,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_145068,
|
||
|
param->stream_frame_size);
|
||
|
VIDC_HWIO_OUT(REG_190381,
|
||
|
param->stream_buffersize);
|
||
|
}
|
||
|
dpb_config = VIDC_SETFIELD(param->dmx_disable,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_BMSK) |
|
||
|
VIDC_SETFIELD(param->dpb_flush,
|
||
|
VIDC_1080P_SI_RG10_DPB_FLUSH_SHFT,
|
||
|
VIDC_1080P_SI_RG10_DPB_FLUSH_BMSK) |
|
||
|
VIDC_SETFIELD(param->dpb_count,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_SHFT,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_921356,
|
||
|
param->descriptor_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_85655, param->descriptor_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_86830, param->release_dpb_bit_mask);
|
||
|
VIDC_HWIO_OUT(REG_889944, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_404623, dpb_config);
|
||
|
VIDC_HWIO_OUT(REG_397087, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_666957, (u32)param->decode |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
|
||
|
void vidc_1080p_decode_frame_start_ch1(
|
||
|
struct vidc_1080p_dec_frame_start_param *param)
|
||
|
{
|
||
|
u32 dpb_config;
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
if ((param->decode == VIDC_1080P_DEC_TYPE_LAST_FRAME_DATA) &&
|
||
|
((!param->stream_buffer_addr_offset) ||
|
||
|
(!param->stream_frame_size))) {
|
||
|
VIDC_HWIO_OUT(REG_980194, 0);
|
||
|
VIDC_HWIO_OUT(REG_936704, 0);
|
||
|
VIDC_HWIO_OUT(REG_887095, 0);
|
||
|
} else {
|
||
|
VIDC_HWIO_OUT(REG_980194,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_936704,
|
||
|
param->stream_frame_size);
|
||
|
VIDC_HWIO_OUT(REG_887095,
|
||
|
param->stream_buffersize);
|
||
|
}
|
||
|
dpb_config = VIDC_SETFIELD(param->dmx_disable,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_BMSK) |
|
||
|
VIDC_SETFIELD(param->dpb_flush,
|
||
|
VIDC_1080P_SI_RG10_DPB_FLUSH_SHFT,
|
||
|
VIDC_1080P_SI_RG10_DPB_FLUSH_BMSK) |
|
||
|
VIDC_SETFIELD(param->dpb_count,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_SHFT,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_821977,
|
||
|
param->descriptor_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_576987, param->descriptor_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_70448, param->release_dpb_bit_mask);
|
||
|
VIDC_HWIO_OUT(REG_652528, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_220637, dpb_config);
|
||
|
VIDC_HWIO_OUT(REG_254093, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_313350, (u32)param->decode |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_decode_init_buffers_ch0(
|
||
|
struct vidc_1080p_dec_init_buffers_param *param)
|
||
|
{
|
||
|
u32 dpb_config;
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
dpb_config = VIDC_SETFIELD(param->dmx_disable,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_BMSK) |
|
||
|
VIDC_SETFIELD(param->dpb_count,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_SHFT,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_889944, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_404623, dpb_config);
|
||
|
VIDC_HWIO_OUT(REG_397087, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_DEC_TYPE_INIT_BUFFERS |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_decode_init_buffers_ch1(
|
||
|
struct vidc_1080p_dec_init_buffers_param *param)
|
||
|
{
|
||
|
u32 dpb_config;
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
dpb_config = VIDC_SETFIELD(param->dmx_disable,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_DMX_DISABLE_BMSK) |
|
||
|
VIDC_SETFIELD(param->dpb_count,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_SHFT,
|
||
|
VIDC_1080P_SI_RG10_NUM_DPB_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_652528, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_220637, dpb_config);
|
||
|
VIDC_HWIO_OUT(REG_254093, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_DEC_TYPE_INIT_BUFFERS |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_dec_resolution_ch0(u32 width, u32 height)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_612810, height);
|
||
|
VIDC_HWIO_OUT(REG_175608, width);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_dec_resolution_ch1(u32 width, u32 height)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_655721, height);
|
||
|
VIDC_HWIO_OUT(REG_548308, width);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_encode_frame_info(
|
||
|
struct vidc_1080p_enc_frame_info *frame_info)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_845544, &(frame_info->enc_frame_size));
|
||
|
VIDC_HWIO_IN(REG_859906,
|
||
|
&(frame_info->enc_picture_count));
|
||
|
VIDC_HWIO_IN(REG_490078,
|
||
|
&(frame_info->enc_write_pointer));
|
||
|
VIDC_HWIO_IN(REG_640904,
|
||
|
(u32 *)(&(frame_info->enc_frame)));
|
||
|
VIDC_HWIO_IN(REG_60114,
|
||
|
&(frame_info->enc_luma_address));
|
||
|
frame_info->enc_luma_address = frame_info->enc_luma_address <<
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT;
|
||
|
VIDC_HWIO_IN(REG_489688,
|
||
|
&(frame_info->enc_chroma_address));
|
||
|
frame_info->enc_chroma_address = frame_info->\
|
||
|
enc_chroma_address << VIDC_1080P_BASE_OFFSET_SHIFT;
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_seq_start_ch0(
|
||
|
struct vidc_1080p_enc_seq_start_param *param)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_117192,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_921356, param->stream_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_889944, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_397087, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_ENC_TYPE_SEQ_HEADER |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_seq_start_ch1(
|
||
|
struct vidc_1080p_enc_seq_start_param *param)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_980194,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_821977, param->stream_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_652528, param->shared_mem_addr_offset);
|
||
|
VIDC_HWIO_OUT(REG_254093, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_ENC_TYPE_SEQ_HEADER |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_frame_start_ch0(
|
||
|
struct vidc_1080p_enc_frame_start_param *param)
|
||
|
{
|
||
|
u32 input_flush = 0;
|
||
|
u32 frame_insertion = 0;
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_117192,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_921356, param->stream_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_612810, param->current_y_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_175608, param->current_c_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
frame_insertion = VIDC_SETFIELD(param->intra_frame,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_I_FRAME_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_I_FRAME_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->store_ltr0,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR0_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR0_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->store_ltr1,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR1_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR1_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->use_ltr0,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR0_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR0_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->use_ltr1,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR1_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR1_BMASK);
|
||
|
VIDC_HWIO_OUT(REG_190381, frame_insertion);
|
||
|
VIDC_HWIO_OUT(REG_889944, param->shared_mem_addr_offset);
|
||
|
input_flush = VIDC_SETFIELD(param->input_flush,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_BMSK);
|
||
|
input_flush |= VIDC_SETFIELD(param->slice_enable,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_404623, input_flush);
|
||
|
VIDC_HWIO_OUT(REG_397087, param->cmd_seq_num);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_666957, (u32)param->encode |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_frame_start_ch1(
|
||
|
struct vidc_1080p_enc_frame_start_param *param)
|
||
|
{
|
||
|
u32 input_flush = 0;
|
||
|
u32 frame_insertion = 0;
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_980194,
|
||
|
param->stream_buffer_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_821977, param->stream_buffer_size);
|
||
|
VIDC_HWIO_OUT(REG_655721, param->current_y_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_548308, param->current_c_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
frame_insertion = VIDC_SETFIELD(param->intra_frame,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_I_FRAME_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_I_FRAME_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->store_ltr0,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR0_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR0_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->store_ltr1,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR1_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_STORE_LTR1_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->use_ltr0,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR0_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR0_BMASK);
|
||
|
frame_insertion |= VIDC_SETFIELD(param->use_ltr1,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR1_SHIFT,
|
||
|
VIDC_1080P_COMMON_CHX_RG6_USE_LTR1_BMASK);
|
||
|
VIDC_HWIO_OUT(REG_887095, frame_insertion);
|
||
|
VIDC_HWIO_OUT(REG_652528, param->shared_mem_addr_offset);
|
||
|
input_flush = VIDC_SETFIELD(param->input_flush,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_BMSK);
|
||
|
input_flush |= VIDC_SETFIELD(param->slice_enable,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_BMSK);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_404623, input_flush);
|
||
|
VIDC_HWIO_OUT(REG_254093, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_313350, (u32)param->encode |
|
||
|
param->inst_id);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_slice_batch_start_ch0(
|
||
|
struct vidc_1080p_enc_frame_start_param *param)
|
||
|
{
|
||
|
u32 input_flush;
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_612810, param->current_y_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_175608, param->current_c_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_190381, param->intra_frame);
|
||
|
VIDC_HWIO_OUT(REG_889944, param->shared_mem_addr_offset);
|
||
|
input_flush = VIDC_SETFIELD(param->input_flush,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_BMSK);
|
||
|
input_flush |= VIDC_SETFIELD(param->slice_enable,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_404623, input_flush);
|
||
|
VIDC_HWIO_OUT(REG_397087, param->cmd_seq_num);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_666957, (u32)param->encode |
|
||
|
param->inst_id);
|
||
|
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_slice_batch_start_ch1(
|
||
|
struct vidc_1080p_enc_frame_start_param *param)
|
||
|
{
|
||
|
u32 input_flush;
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_313350, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_655721, param->current_y_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_548308, param->current_c_addr_offset >>
|
||
|
VIDC_1080P_BASE_OFFSET_SHIFT);
|
||
|
VIDC_HWIO_OUT(REG_887095, param->intra_frame);
|
||
|
VIDC_HWIO_OUT(REG_652528, param->shared_mem_addr_offset);
|
||
|
input_flush = VIDC_SETFIELD(param->input_flush,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_INPUT_BUFFER_FLUSH_BMSK);
|
||
|
input_flush |= VIDC_SETFIELD(param->slice_enable,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_SHFT,
|
||
|
VIDC_1080P_SI_RG10_ENCODE_SLICE_IF_ENABLE_BMSK);
|
||
|
|
||
|
VIDC_HWIO_OUT(REG_404623, input_flush);
|
||
|
VIDC_HWIO_OUT(REG_254093, param->cmd_seq_num);
|
||
|
VIDC_HWIO_OUT(REG_313350, (u32)param->encode |
|
||
|
param->inst_id);
|
||
|
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_picture(u32 number_p, u32 number_b)
|
||
|
{
|
||
|
u32 picture, ifrm_ctrl;
|
||
|
if (number_p >= VIDC_1080P_MAX_INTRA_PERIOD)
|
||
|
ifrm_ctrl = 0;
|
||
|
else
|
||
|
ifrm_ctrl = number_p + 1;
|
||
|
picture = VIDC_SETFIELD(1 ,
|
||
|
HWIO_REG_783891_ENC_PIC_TYPE_USE_SHFT,
|
||
|
HWIO_REG_783891_ENC_PIC_TYPE_USE_BMSK) |
|
||
|
VIDC_SETFIELD(ifrm_ctrl,
|
||
|
HWIO_REG_783891_I_FRM_CTRL_SHFT,
|
||
|
HWIO_REG_783891_I_FRM_CTRL_BMSK)
|
||
|
| VIDC_SETFIELD(number_b ,
|
||
|
HWIO_REG_783891_B_FRM_CTRL_SHFT ,
|
||
|
HWIO_REG_783891_B_FRM_CTRL_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_783891, picture);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_multi_slice_control(
|
||
|
enum vidc_1080p_MSlice_selection multiple_slice_selection,
|
||
|
u32 mslice_mb, u32 mslice_byte)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_226332, multiple_slice_selection);
|
||
|
VIDC_HWIO_OUT(REG_696136, mslice_mb);
|
||
|
VIDC_HWIO_OUT(REG_515564, mslice_byte);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_circular_intra_refresh(u32 cir_num)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_886210, cir_num);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_input_frame_format(
|
||
|
enum vidc_1080p_memory_access_method memory_format)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_645603, memory_format);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_encode_padding_control(u32 pad_ctrl_on,
|
||
|
u32 cr_pad_val, u32 cb_pad_val, u32 luma_pad_val)
|
||
|
{
|
||
|
u32 padding = VIDC_SETFIELD(pad_ctrl_on ,
|
||
|
HWIO_REG_811733_PAD_CTRL_ON_SHFT,
|
||
|
HWIO_REG_811733_PAD_CTRL_ON_BMSK) |
|
||
|
VIDC_SETFIELD(cr_pad_val ,
|
||
|
HWIO_REG_811733_CR_PAD_VIDC_SHFT ,
|
||
|
HWIO_REG_811733_CR_PAD_VIDC_BMSK) |
|
||
|
VIDC_SETFIELD(cb_pad_val ,
|
||
|
HWIO_REG_811733_CB_PAD_VIDC_SHFT ,
|
||
|
HWIO_REG_811733_CB_PAD_VIDC_BMSK) |
|
||
|
VIDC_SETFIELD(luma_pad_val ,
|
||
|
HWIO_REG_811733_LUMA_PAD_VIDC_SHFT ,
|
||
|
HWIO_REG_811733_LUMA_PAD_VIDC_BMSK) ;
|
||
|
VIDC_HWIO_OUT(REG_811733, padding);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_set_rc_config(u32 enable_frame_level_rc,
|
||
|
u32 enable_mb_level_rc_flag, u32 frame_qp)
|
||
|
{
|
||
|
u32 rc_config = VIDC_SETFIELD(enable_frame_level_rc ,
|
||
|
HWIO_REG_559908_FR_RC_EN_SHFT ,
|
||
|
HWIO_REG_559908_FR_RC_EN_BMSK) |
|
||
|
VIDC_SETFIELD(enable_mb_level_rc_flag ,
|
||
|
HWIO_REG_559908_MB_RC_EN_SHFT,
|
||
|
HWIO_REG_559908_MB_RC_EN_BMSK) |
|
||
|
VIDC_SETFIELD(frame_qp ,
|
||
|
HWIO_REG_559908_FRAME_QP_SHFT ,
|
||
|
HWIO_REG_559908_FRAME_QP_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_559908, rc_config);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_set_frame_level_rc_params(u32 rc_frame_rate,
|
||
|
u32 target_bitrate, u32 reaction_coeff)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_977937, rc_frame_rate);
|
||
|
VIDC_HWIO_OUT(REG_166135, target_bitrate);
|
||
|
VIDC_HWIO_OUT(REG_550322, reaction_coeff);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_set_qp_params(u32 max_qp, u32 min_qp)
|
||
|
{
|
||
|
u32 qbound = VIDC_SETFIELD(max_qp , HWIO_REG_109072_MAX_QP_SHFT,
|
||
|
HWIO_REG_109072_MAX_QP_BMSK) |
|
||
|
VIDC_SETFIELD(min_qp,
|
||
|
HWIO_REG_109072_MIN_QP_SHFT ,
|
||
|
HWIO_REG_109072_MIN_QP_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_109072, qbound);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_encode_set_mb_level_rc_params(u32 disable_dark_region_as_flag,
|
||
|
u32 disable_smooth_region_as_flag , u32 disable_static_region_as_flag,
|
||
|
u32 disable_activity_region_flag)
|
||
|
{
|
||
|
u32 rc_active_feature = VIDC_SETFIELD(
|
||
|
disable_dark_region_as_flag,
|
||
|
HWIO_REG_949086_DARK_DISABLE_SHFT,
|
||
|
HWIO_REG_949086_DARK_DISABLE_BMSK) |
|
||
|
VIDC_SETFIELD(
|
||
|
disable_smooth_region_as_flag,
|
||
|
HWIO_REG_949086_SMOOTH_DISABLE_SHFT,
|
||
|
HWIO_REG_949086_SMOOTH_DISABLE_BMSK) |
|
||
|
VIDC_SETFIELD(
|
||
|
disable_static_region_as_flag,
|
||
|
HWIO_REG_949086_STATIC_DISABLE_SHFT,
|
||
|
HWIO_REG_949086_STATIC_DISABLE_BMSK) |
|
||
|
VIDC_SETFIELD(
|
||
|
disable_activity_region_flag,
|
||
|
HWIO_REG_949086_ACT_DISABLE_SHFT,
|
||
|
HWIO_REG_949086_ACT_DISABLE_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_949086, rc_active_feature);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h264_encode_entropy(
|
||
|
enum vidc_1080p_entropy_sel entropy_sel)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_447796, entropy_sel);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h264_encode_loop_filter(
|
||
|
enum vidc_1080p_DBConfig db_config, u32 slice_alpha_offset,
|
||
|
u32 slice_beta_offset)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_152500, db_config);
|
||
|
VIDC_HWIO_OUT(REG_266285, slice_alpha_offset);
|
||
|
VIDC_HWIO_OUT(REG_964731, slice_beta_offset);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h264_encoder_p_frame_ref_count(u32 max_reference)
|
||
|
{
|
||
|
u32 ref_frames;
|
||
|
ref_frames = VIDC_SETFIELD(max_reference,
|
||
|
HWIO_REG_744348_P_SHFT,
|
||
|
HWIO_REG_744348_P_BMSK);
|
||
|
VIDC_HWIO_OUT(REG_744348, ref_frames);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_h264_encode_8x8transform_control(u32 enable_8x8transform)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_672163, enable_8x8transform);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_mpeg4_encode_quarter_pel_control(
|
||
|
u32 enable_mpeg4_quarter_pel)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_330132, enable_mpeg4_quarter_pel);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_device_base_addr(u8 *mapped_va)
|
||
|
{
|
||
|
VIDC_BASE_PTR = mapped_va;
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_intra_bias(u32 *bias)
|
||
|
{
|
||
|
u32 intra_bias;
|
||
|
|
||
|
VIDC_HWIO_IN(REG_676866, &intra_bias);
|
||
|
*bias = VIDC_GETFIELD(intra_bias,
|
||
|
HWIO_REG_676866_RMSK,
|
||
|
HWIO_REG_676866_SHFT);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_intra_bias(u32 bias)
|
||
|
{
|
||
|
u32 intra_bias;
|
||
|
|
||
|
intra_bias = VIDC_SETFIELD(bias,
|
||
|
HWIO_REG_676866_SHFT,
|
||
|
HWIO_REG_676866_RMSK);
|
||
|
VIDC_HWIO_OUT(REG_676866, intra_bias);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_bi_directional_bias(u32 *bi_directional_bias)
|
||
|
{
|
||
|
u32 nbi_direct_bias;
|
||
|
|
||
|
VIDC_HWIO_IN(REG_54267, &nbi_direct_bias);
|
||
|
*bi_directional_bias = VIDC_GETFIELD(nbi_direct_bias,
|
||
|
HWIO_REG_54267_RMSK,
|
||
|
HWIO_REG_54267_SHFT);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_set_bi_directional_bias(u32 bi_directional_bias)
|
||
|
{
|
||
|
u32 nbi_direct_bias;
|
||
|
|
||
|
nbi_direct_bias = VIDC_SETFIELD(bi_directional_bias,
|
||
|
HWIO_REG_54267_SHFT,
|
||
|
HWIO_REG_54267_RMSK);
|
||
|
VIDC_HWIO_OUT(REG_54267, nbi_direct_bias);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_encoder_sequence_header_size(u32 *seq_header_size)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_845544, seq_header_size);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_intermedia_stage_debug_counter(
|
||
|
u32 *intermediate_stage_counter)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_805993, intermediate_stage_counter);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_get_exception_status(u32 *exception_status)
|
||
|
{
|
||
|
VIDC_HWIO_IN(REG_493355, exception_status);
|
||
|
}
|
||
|
|
||
|
void vidc_1080p_frame_start_realloc(u32 instance_id)
|
||
|
{
|
||
|
VIDC_HWIO_OUT(REG_695082, VIDC_1080P_RISC2HOST_CMD_EMPTY);
|
||
|
VIDC_HWIO_OUT(REG_666957, VIDC_1080P_INIT_CH_INST_ID);
|
||
|
VIDC_HWIO_OUT(REG_666957,
|
||
|
VIDC_1080P_DEC_TYPE_FRAME_START_REALLOC | instance_id);
|
||
|
}
|