Ejemplo n.º 1
0
static MFC_ERROR_CODE s3c_mfc_set_dec_frame_buffer(s3c_mfc_inst_ctx  *MfcCtx, int buf_addr, unsigned int buf_size)
{
	unsigned int    Width, Height, FrameSize, dec_dpb_addr;


	mfc_debug("buf_addr : 0x%08x  buf_size : %d\n", buf_addr, buf_size);

	Width = (MfcCtx->img_width + 15)/16*16;
	Height = (MfcCtx->img_height + 31)/32*32;
	FrameSize = (Width*Height*3)>>1;

	mfc_debug("width : %d height : %d framesize : %d buf_size : %d MfcCtx->DPBCnt :%d\n", \
								Width, Height, FrameSize, buf_size, MfcCtx->DPBCnt);
	if(buf_size < FrameSize*MfcCtx->totalDPBCnt){
		mfc_err("MFCINST_ERR_FRM_BUF_SIZE\n");
		return MFCINST_ERR_FRM_BUF_SIZE;
	}

	WRITEL(Align(buf_addr, BUF_ALIGN_UNIT), S3C_FIMV_DEC_DPB_ADR);
	dec_dpb_addr = READL(S3C_FIMV_DEC_DPB_ADR);
	WRITEL(Align(dec_dpb_addr + FrameSize*MfcCtx->DPBCnt, BUF_ALIGN_UNIT), S3C_FIMV_DPB_COMV_ADR);

	if((MfcCtx->MfcCodecType == MPEG4_DEC) 
			||(MfcCtx->MfcCodecType == MPEG2_DEC) 
			||(MfcCtx->MfcCodecType == XVID_DEC) 
			||(MfcCtx->MfcCodecType == DIVX_DEC) ) {
		dec_dpb_addr = READL(S3C_FIMV_DEC_DPB_ADR);
		WRITEL(Align(dec_dpb_addr + ((3*FrameSize*MfcCtx->DPBCnt)>>1), BUF_ALIGN_UNIT), S3C_FIMV_POST_ADR);
	}
Ejemplo n.º 2
0
void	mfc_interrupt_debug(int nCnt)
{
	int nn =0;
	for(nn = 0; nn <nCnt; nn++){
			mdelay(100);
			mfc_err("[%d] Timeout (0x64: 0x%08x) (0xF4: 0x%08x)\n", nn, READL(0x64), READL(0xF4));
	}
}
Ejemplo n.º 3
0
static void update_window(struct display_controller *disp_ctrl,
			  struct soc_nvidia_tegra124_config *config)
{
	u32 val;

	WRITEL(WINDOW_A_SELECT, &disp_ctrl->cmd.disp_win_header);

	WRITEL(((config->yres << 16) | config->xres), &disp_ctrl->win.size);
	WRITEL(((config->yres << 16) |
		(config->xres * config->framebuffer_bits_per_pixel / 8)),
		&disp_ctrl->win.prescaled_size);
	WRITEL(((config->xres * config->framebuffer_bits_per_pixel / 8 + 31) /
		32 * 32), &disp_ctrl->win.line_stride);

	WRITEL(config->color_depth, &disp_ctrl->win.color_depth);

	WRITEL(config->framebuffer_base, &disp_ctrl->winbuf.start_addr);
	WRITEL((V_DDA_INC(0x1000) | H_DDA_INC(0x1000)), &disp_ctrl->win.dda_increment);

	WRITEL(COLOR_WHITE, &disp_ctrl->disp.blend_background_color);
	WRITEL(DISP_CTRL_MODE_C_DISPLAY, &disp_ctrl->cmd.disp_cmd);

	WRITEL(WRITE_MUX_ACTIVE, &disp_ctrl->cmd.state_access);

	val = GENERAL_ACT_REQ | WIN_A_ACT_REQ;
	val |= GENERAL_UPDATE | WIN_A_UPDATE;
	WRITEL(val, &disp_ctrl->cmd.state_ctrl);

	// Enable win_a
	val = READL(&disp_ctrl->win.win_opt);
	WRITEL(val | WIN_ENABLE, &disp_ctrl->win.win_opt);
}
Ejemplo n.º 4
0
void tegra_dc_sor_attach(struct tegra_dc_sor_data *sor)
{
	u32 reg_val;
	struct display_controller *disp_ctrl = (void *)sor->dc->base;

	tegra_dc_sor_enable_dc(sor);
	tegra_dc_sor_config_panel(sor, 0);

	WRITEL(0x9f00, &disp_ctrl->cmd.state_ctrl);
	WRITEL(0x9f, &disp_ctrl->cmd.state_ctrl);

	WRITEL(PW0_ENABLE | PW1_ENABLE | PW2_ENABLE |
		PW3_ENABLE | PW4_ENABLE | PM0_ENABLE | PM1_ENABLE,
		&disp_ctrl->cmd.disp_pow_ctrl);

	reg_val = tegra_sor_readl(sor, NV_SOR_TEST);
	if (reg_val & NV_SOR_TEST_ATTACHED_TRUE)
		return;

	tegra_sor_writel(sor, NV_SOR_SUPER_STATE1,
			NV_SOR_SUPER_STATE1_ATTACHED_NO);

	/*
	 * Enable display2sor clock at least 2 cycles before DC start,
	 * to clear sor internal valid signal.
	 */
	WRITEL(SOR_ENABLE, &disp_ctrl->disp.disp_win_opt);
	WRITEL(GENERAL_ACT_REQ, &disp_ctrl->cmd.state_ctrl);
	WRITEL(0, &disp_ctrl->disp.disp_win_opt);
	WRITEL(GENERAL_ACT_REQ, &disp_ctrl->cmd.state_ctrl);

	/* Attach head */
	tegra_dc_sor_update(sor);
	tegra_sor_writel(sor, NV_SOR_SUPER_STATE1,
			NV_SOR_SUPER_STATE1_ATTACHED_YES);
	tegra_sor_writel(sor, NV_SOR_SUPER_STATE1,
		NV_SOR_SUPER_STATE1_ATTACHED_YES |
		NV_SOR_SUPER_STATE1_ASY_HEAD_OP_AWAKE |
		NV_SOR_SUPER_STATE1_ASY_ORMODE_NORMAL);
	tegra_dc_sor_super_update(sor);

	/* Enable dc */
	reg_val = READL(&disp_ctrl->cmd.state_access);
	WRITEL(reg_val | WRITE_MUX_ACTIVE, &disp_ctrl->cmd.state_access);
	WRITEL(DISP_CTRL_MODE_C_DISPLAY, &disp_ctrl->cmd.disp_cmd);
	WRITEL(SOR_ENABLE, &disp_ctrl->disp.disp_win_opt);
	WRITEL(reg_val, &disp_ctrl->cmd.state_access);

	if (tegra_dc_sor_poll_register(sor, NV_SOR_TEST,
			NV_SOR_TEST_ACT_HEAD_OPMODE_DEFAULT_MASK,
			NV_SOR_TEST_ACT_HEAD_OPMODE_AWAKE,
			100, TEGRA_SOR_ATTACH_TIMEOUT_MS * 1000))
		printk(BIOS_ERR, "dc timeout waiting for OPMOD = AWAKE\n");
	else
		printk(BIOS_INFO, "%s: sor is attached\n", __func__);

#if DEBUG_SOR
	dump_sor_reg(sor);
#endif
}
Ejemplo n.º 5
0
irqreturn_t mfc_irq(int irq, void *dev_id)
{
	unsigned int int_reason;
	unsigned int err_status;

	int_reason = READL(MFC_RISC2HOST_COMMAND) & 0x1FFFF;
	err_status = READL(MFC_RISC2HOST_ARG2);

	mfc_disp_err_status = err_status >> 16;
	mfc_dec_err_status = err_status & 0xFFFF;

	mfc_debug_L0("mfc_irq() : Interrupt !! : %d\n", int_reason);

	
	if(	((int_reason & R2H_CMD_EMPTY)     						== R2H_CMD_EMPTY)      					||
		((int_reason & R2H_CMD_OPEN_INSTANCE_RET)     	== R2H_CMD_OPEN_INSTANCE_RET)      	||
		((int_reason & R2H_CMD_CLOSE_INSTANCE_RET)     	== R2H_CMD_CLOSE_INSTANCE_RET)		||
		((int_reason & R2H_CMD_ERROR_RET)     				== R2H_CMD_ERROR_RET)      				||
		((int_reason & R2H_CMD_SEQ_DONE_RET)     			== R2H_CMD_SEQ_DONE_RET)      		||
		((int_reason & R2H_CMD_FRAME_DONE_RET)     		== R2H_CMD_FRAME_DONE_RET)     		||
		((int_reason & R2H_CMD_SLICE_DONE_RET)     		== R2H_CMD_SLICE_DONE_RET)      		||
		((int_reason & R2H_CMD_ENC_COMPLETE_RET)     	== R2H_CMD_ENC_COMPLETE_RET)  		||
		((int_reason & R2H_CMD_SYS_INIT_RET)     				== R2H_CMD_SYS_INIT_RET)      			||
		((int_reason & R2H_CMD_FW_STATUS_RET)     			== R2H_CMD_FW_STATUS_RET)      		||
		((int_reason & R2H_CMD_SLEEP_RET)     				== R2H_CMD_SLEEP_RET)      				||
		((int_reason & R2H_CMD_WAKEUP_RET)     				== R2H_CMD_WAKEUP_RET)      			||
		((int_reason & R2H_CMD_FLUSH_COMMAND_RET)    	== R2H_CMD_FLUSH_COMMAND_RET) 	||
		((int_reason & R2H_CMD_CMD_ABORT_RET)     		== R2H_CMD_CMD_ABORT_RET)      		||
		((int_reason & R2H_CMD_CMD_BATCH_ENC_RET)     	== R2H_CMD_CMD_BATCH_ENC_RET) 	||
		((int_reason & R2H_CMD_INIT_BUFFERS_RET)     		== R2H_CMD_INIT_BUFFERS_RET) 			||
		((int_reason & R2H_CMD_EDFU_INT_RET)     			== R2H_CMD_EDFU_INT_RET) 				||
		((int_reason & R2H_CMD_DECODE_ERR_RET)     		== R2H_CMD_DECODE_ERR_RET))
	{
		mfc_int_type = int_reason;
		wake_up_interruptible(&mfc_wait_queue);
	}
	else
		mfc_info("Strange Interrupt !! : %d\n", int_reason);


	WRITEL(0, MFC_RISC_HOST_INT);
	WRITEL(0, MFC_RISC2HOST_COMMAND);
	WRITEL(0xffff, MFC_SI_RTN_CHID);

	return IRQ_HANDLED;
}
Ejemplo n.º 6
0
static int mfc_resume(struct platform_device *pdev)
{
	int ret = 0;
	unsigned int mc_status;

#if	ENABLE_MONITORING_MFC_DD
	mfc_info("mfc_resume......#1\n");
#endif

	mutex_lock(&mfc_mutex);

	if (!mfc_is_running())
	{
#if	ENABLE_MONITORING_MFC_DD
	mfc_info("mfc_resume......#2-0\n");
#endif	
		mutex_unlock(&mfc_mutex);
		return 0;
	}

#if	ENABLE_MONITORING_MFC_DD
	mfc_info("mfc_resume......#2-1\n");
#endif	
	
#if	Frame_Base_Power_CTR_ON			
	clk_enable(mfc_clk);
#endif
	/*
	 * 1. MFC reset
	 */
	do {
		mc_status = READL(MFC_MC_STATUS);
	} while(mc_status != 0);	
	
	mfc_cmd_reset();

	WRITEL(mfc_port0_base_paddr, MFC_MC_DRAMBASE_ADDR_A);
	WRITEL(mfc_port1_base_paddr, MFC_MC_DRAMBASE_ADDR_B);
	WRITEL(1, MFC_NUM_MASTER);

	ret = mfc_set_wakeup();
	if(ret != MFCINST_RET_OK){
		mutex_unlock(&mfc_mutex);
		return ret;
	}

#if	Frame_Base_Power_CTR_ON			
	clk_disable(mfc_clk);
#endif

	mutex_unlock(&mfc_mutex);

	return 0;
}
Ejemplo n.º 7
0
static void tegra_dc_sor_io_set_dpd(struct tegra_dc_sor_data *sor, int up)
{
	u32 reg_val;
	void *pmc_base = sor->pmc_base;

	if (up) {
		WRITEL(APBDEV_PMC_DPD_SAMPLE_ON_ENABLE,
			pmc_base + APBDEV_PMC_DPD_SAMPLE);
		WRITEL(10, pmc_base + APBDEV_PMC_SEL_DPD_TIM);
	}

	reg_val = READL(pmc_base + APBDEV_PMC_IO_DPD2_REQ);
	reg_val &= ~(APBDEV_PMC_IO_DPD2_REQ_LVDS_ON ||
		APBDEV_PMC_IO_DPD2_REQ_CODE_DEFAULT_MASK);

	reg_val = up ? APBDEV_PMC_IO_DPD2_REQ_LVDS_ON |
		APBDEV_PMC_IO_DPD2_REQ_CODE_DPD_OFF :
		APBDEV_PMC_IO_DPD2_REQ_LVDS_OFF |
		APBDEV_PMC_IO_DPD2_REQ_CODE_DPD_ON;

	WRITEL(reg_val, pmc_base + APBDEV_PMC_IO_DPD2_REQ);

	/* Polling */
	u32 temp = 10*1000;
	do {
		udelay(20);
		reg_val = READL(pmc_base + APBDEV_PMC_IO_DPD2_STATUS);
		if (temp > 20)
			temp -= 20;
		else
			break;
	} while ((reg_val & APBDEV_PMC_IO_DPD2_STATUS_LVDS_ON) != 0);

	if ((reg_val & APBDEV_PMC_IO_DPD2_STATUS_LVDS_ON) != 0)
		printk(BIOS_ERR,
			"PMC_IO_DPD2 polling failed (0x%x)\n", reg_val);

	if (up)
		WRITEL(APBDEV_PMC_DPD_SAMPLE_ON_DISABLE,
			pmc_base + APBDEV_PMC_DPD_SAMPLE);
}
Ejemplo n.º 8
0
static void tegra_dc_sor_enable_dc(struct tegra_dc_sor_data *sor)
{
	struct tegra_dc		*dc   = sor->dc;
	struct display_controller *disp_ctrl = (void *)dc->base;

	u32	reg_val = READL(&disp_ctrl->cmd.state_access);

	WRITEL(reg_val | WRITE_MUX_ACTIVE, &disp_ctrl->cmd.state_access);
	WRITEL(VSYNC_H_POSITION(1), &disp_ctrl->disp.disp_timing_opt);

	/* Enable DC now - otherwise pure text console may not show. */
	WRITEL(DISP_CTRL_MODE_C_DISPLAY, &disp_ctrl->cmd.disp_cmd);
	WRITEL(reg_val, &disp_ctrl->cmd.state_access);
}
Ejemplo n.º 9
0
static int mfc_resume(struct platform_device *pdev)
{
	int ret = 0;
	unsigned int mc_status;

	mutex_lock(&mfc_mutex);

	if (!mfc_is_running()) {
		mutex_unlock(&mfc_mutex);
		return 0;
	}

	clk_enable(mfc_sclk);

	/*
	 * 1. MFC reset
	 */
	do {
		mc_status = READL(MFC_MC_STATUS);
	} while (mc_status != 0);

	if (mfc_cmd_reset() == false) {
		clk_disable(mfc_sclk);
		mutex_unlock(&mfc_mutex);
		mfc_err("MFCINST_ERR_INIT_FAIL\n");
		return MFCINST_ERR_INIT_FAIL;
	}

	WRITEL(mfc_port0_base_paddr, MFC_MC_DRAMBASE_ADDR_A);
	WRITEL(mfc_port1_base_paddr, MFC_MC_DRAMBASE_ADDR_B);
	WRITEL(1, MFC_NUM_MASTER);

	ret = mfc_set_wakeup();
	if (ret != MFCINST_RET_OK) {
		clk_disable(mfc_sclk);
		mutex_unlock(&mfc_mutex);
		return ret;
	}

	clk_disable(mfc_sclk);

	mutex_unlock(&mfc_mutex);

	return 0;
}
Ejemplo n.º 10
0
void configure_gpio_output(u32 gpio_num)
{
	u32 gpio_base_id = 0; 
	u32 gpio_offset = 0;
	u32 gpio_oe_address = 0;
	u32 oe_val = 0;

	// error validation
	if (!is_valid_gpio_number(gpio_num))
	{
		return;
	}

	// get basic gpio info
	gpio_base_id = gpio_num / 32;
	gpio_offset = gpio_num % 32;
	gpio_oe_address = gpio_base_addresses[gpio_base_id] + OMAP4_GPIO_OE;

	// read current value , mask in our single bit, then write
	oe_val = READL(gpio_oe_address);
	oe_val &= ~(1 << gpio_offset);
	WRITEL(oe_val, gpio_oe_address);
}
Ejemplo n.º 11
0
u32 get_gpio_value(u32 gpio_num)
{
	u32 gpio_base_id = gpio_num / 32;
        u32 gpio_offset = gpio_num % 32;
	u32 read_address = gpio_base_addresses[gpio_base_id];
        u32 value = 0;
        
	// error validation
	if (!is_valid_gpio_number(gpio_num))
	{
                printf("Error, invalid gpio number\n");
		return 0;
	}

        read_address += OMAP4_GPIO_DATAIN;
        
        value = READL(read_address);
        
        value  = value >> gpio_offset;
        value &= 1;
#if 0
        printf("GPIO_DATAIN  0x%x\n", READL(0x4a310138));
        printf("GPIO_IRQSTATUS  0x%x\n", READL(0x4a310020));
        printf("GPIO_IRQSTATUS  0x%x\n", READL(0x4a31002c));
        printf("GPIO_CONTROL  0x%x\n", READL(0x4a310010));
        
        if (once){
                volatile u8 reg = READL(0x4a310010);   //enable wakeup pin
                reg |= (1 << 2);
                WRITEL(reg, 0x4a310010);
                reg = READL(0x4a310044);   //enable wakeup pin
                reg |= (1 << 2);
                WRITEL(reg, 0x4a310044);
                once = 0;
        }
#endif
	return value;
}
/* Initialize decoding */
int hevc_init_decode(struct hevc_ctx *ctx)
{
	struct hevc_dev *dev;
	struct hevc_dec *dec;
	unsigned int reg = 0, pix_val;
	int fmo_aso_ctrl = 0;

	hevc_debug_enter();
	if (!ctx) {
		hevc_err("no hevc context to run\n");
		return -EINVAL;
	}
	dev = ctx->dev;
	if (!dev) {
		hevc_err("no hevc device to run\n");
		return -EINVAL;
	}
	dec = ctx->dec_priv;
	if (!dec) {
		hevc_err("no hevc decoder to run\n");
		return -EINVAL;
	}
	hevc_debug(2, "InstNo: %d/%d\n", ctx->inst_no, HEVC_CH_SEQ_HEADER);
	hevc_debug(2, "BUFs: %08x %08x %08x\n",
		  READL(HEVC_D_CPB_BUFFER_ADDR),
		  READL(HEVC_D_CPB_BUFFER_ADDR),
		  READL(HEVC_D_CPB_BUFFER_ADDR));

	reg |= (dec->idr_decoding << HEVC_D_OPT_IDR_DECODING_SHFT);
	/* FMO_ASO_CTRL - 0: Enable, 1: Disable */
	reg |= (fmo_aso_ctrl << HEVC_D_OPT_FMO_ASO_CTRL_MASK);
	/* When user sets desplay_delay to 0,
	 * It works as "display_delay enable" and delay set to 0.
	 * If user wants display_delay disable, It should be
	 * set to negative value. */
	if (dec->display_delay >= 0) {
		reg |= (0x1 << HEVC_D_OPT_DDELAY_EN_SHIFT);
		WRITEL(dec->display_delay, HEVC_D_DISPLAY_DELAY);
	}

	if (ctx->dst_fmt->fourcc == V4L2_PIX_FMT_NV12MT_16X16)
		reg |= (0x1 << HEVC_D_OPT_TILE_MODE_SHIFT);

	hevc_debug(2, "HEVC_D_DEC_OPTIONS : 0x%x\n", reg);

	WRITEL(0x20, HEVC_D_DEC_OPTIONS);

	switch (ctx->dst_fmt->fourcc) {
	case V4L2_PIX_FMT_NV12M:
	case V4L2_PIX_FMT_NV12MT_16X16:
		pix_val = 0;
		break;
	case V4L2_PIX_FMT_NV21M:
		pix_val = 1;
		break;
	case V4L2_PIX_FMT_YVU420M:
		pix_val = 2;
		break;
	case V4L2_PIX_FMT_YUV420M:
		pix_val = 3;
		break;
	default:
		pix_val = 0;
		break;
	}

	hevc_debug(2, "pixel format: %d\n", pix_val);
	WRITEL(pix_val, HEVC_PIXEL_FORMAT);

	/* sei parse */
	reg = dec->sei_parse;
	hevc_debug(2, "sei parse: %d\n", dec->sei_parse);
	/* Enable realloc interface if SEI is enabled */
	if (dec->sei_parse)
		reg |= (0x1 << HEVC_D_SEI_NEED_INIT_BUFFER_SHIFT);
	WRITEL(reg, HEVC_D_SEI_ENABLE);

	WRITEL(ctx->inst_no, HEVC_INSTANCE_ID);
	WRITEL(0xffffffff, HEVC_D_AVAILABLE_DPB_FLAG_UPPER);
	WRITEL(0xffffffff, HEVC_D_AVAILABLE_DPB_FLAG_LOWER);
	hevc_cmd_host2risc(HEVC_CH_SEQ_HEADER, NULL);

	hevc_debug_leave();
	return 0;
}
Ejemplo n.º 13
0
int mfc_wait_for_done(mfc_wait_done_type command)
{
	unsigned int nwait_time = 100;	
	unsigned int ret_val = 1;
	if((command == R2H_CMD_CLOSE_INSTANCE_RET) ||
	   (command == R2H_CMD_OPEN_INSTANCE_RET) ||
	   (command == R2H_CMD_FW_STATUS_RET))
		nwait_time = MFC_WAIT_4_TIME;
	else
		nwait_time = MFC_WAIT_2_TIME;	
	
#if defined(MFC_REQUEST_TIME)
	long sec, msec;
#endif

#if defined(MFC_POLLING)
	unsigned long timeo = jiffies;
	timeo += 20;    /* waiting for 100ms */
#endif

	//set_user_nice(current, -20);
#if defined(MFC_REQUEST_TIME)
	do_gettimeofday(&mfc_wakeup_before);
	if (mfc_wakeup_before.tv_usec - mfc_wakeup_after.tv_usec < 0)
	{
		msec = 1000000 + mfc_wakeup_before.tv_usec - mfc_wakeup_after.tv_usec;
		sec = mfc_wakeup_before.tv_sec - mfc_wakeup_after.tv_sec - 1;
	}
	else
	{
		msec = mfc_wakeup_before.tv_usec - mfc_wakeup_after.tv_usec;
		sec = mfc_wakeup_before.tv_sec - mfc_wakeup_after.tv_sec;
	}
#endif

#if defined(MFC_POLLING)
	while (time_before(jiffies, timeo))
	{
		ret_val = READL(MFC_RISC2HOST_COMMAND) & 0x1ffff;
		if (ret_val != 0)
		{
			WRITEL(0, MFC_RISC_HOST_INT);
			WRITEL(0, MFC_RISC2HOST_COMMAND);
			WRITEL(0xffff, MFC_SI_RTN_CHID);
			mfc_int_type = ret_val;
			break;
		}
		msleep_interruptible(2);
	}

	if (ret_val == 0)
	   printk("MFC timeouted!\n");
#else
	if (interruptible_sleep_on_timeout(&mfc_wait_queue, nwait_time) == 0)
	{
		ret_val = R2H_CMD_TIMEOUT;
		mfc_err("Interrupt Time Out(Cmd: %d)	(Ver: 0x%08x) (0x64: 0x%08x) (0xF4: 0x%08x) (0x80: 0x%08x)\n", command, READL(0x58), READL(0x64), READL(0xF4),READL(0x80));
		
#if	ENABLE_MFC_INTERRUPT_DEBUG		// For MFC Interrupt Debugging.
		mfc_interrupt_debug(10);
#endif

		mfc_int_type = ret_val;
		return ret_val;
	}
	else if (mfc_int_type == R2H_CMD_DECODE_ERR_RET)
	{
		mfc_err("MFC Error Returned Disp Error Status(%d), Dec Error Status(%d)\n", mfc_disp_err_status, mfc_dec_err_status );
	}
	else if (command != mfc_int_type)
	{
		mfc_err("Interrupt Error Returned (%d) waiting for (%d)\n", mfc_int_type, command);
	}
#endif

#if defined(MFC_REQUEST_TIME)
	do_gettimeofday(&mfc_wakeup_after);
	if (mfc_wakeup_after.tv_usec - mfc_wakeup_before.tv_usec < 0)
	{
		msec = 1000000 + mfc_wakeup_after.tv_usec - mfc_wakeup_before.tv_usec;
		sec = mfc_wakeup_after.tv_sec - mfc_wakeup_before.tv_sec - 1;
	}
	else
	{
		msec = mfc_wakeup_after.tv_usec - mfc_wakeup_before.tv_usec;
		sec = mfc_wakeup_after.tv_sec - mfc_wakeup_before.tv_sec;
	}

	mfc_info("mfc_wait_for_done: mfc request interval time is %ld(sec), %ld(msec)\n", sec, msec);
#endif

	ret_val = mfc_int_type;
	mfc_int_type = 0;

	return ret_val;
}
Ejemplo n.º 14
0
	}

	WRITEL(Align(buf_addr, BUF_ALIGN_UNIT), S3C_FIMV_DEC_DPB_ADR);
	dec_dpb_addr = READL(S3C_FIMV_DEC_DPB_ADR);
	WRITEL(Align(dec_dpb_addr + FrameSize*MfcCtx->DPBCnt, BUF_ALIGN_UNIT), S3C_FIMV_DPB_COMV_ADR);

	if((MfcCtx->MfcCodecType == MPEG4_DEC) 
			||(MfcCtx->MfcCodecType == MPEG2_DEC) 
			||(MfcCtx->MfcCodecType == XVID_DEC) 
			||(MfcCtx->MfcCodecType == DIVX_DEC) ) {
		dec_dpb_addr = READL(S3C_FIMV_DEC_DPB_ADR);
		WRITEL(Align(dec_dpb_addr + ((3*FrameSize*MfcCtx->DPBCnt)>>1), BUF_ALIGN_UNIT), S3C_FIMV_POST_ADR);
	}

	mfc_debug("DEC_DPB_ADR : 0x%08x DPB_COMV_ADR : 0x%08x POST_ADR : 0x%08x\n",	\
		READL(S3C_FIMV_DEC_DPB_ADR), READL(S3C_FIMV_DPB_COMV_ADR), READL(S3C_FIMV_POST_ADR));


	return MFCINST_RET_OK;
}

static MFC_ERROR_CODE s3c_mfc_set_vsp_buffer(int InstNo)
{
	unsigned int VSPPhyBuf;

	VSPPhyBuf = s3c_mfc_get_vsp_buf_phys_addr(InstNo);
	WRITEL(Align(VSPPhyBuf, BUF_ALIGN_UNIT), S3C_FIMV_VSP_BUF_ADDR);
	WRITEL(Align(VSPPhyBuf + VSP_BUF_SIZE, BUF_ALIGN_UNIT), S3C_FIMV_DB_STT_ADDR);

	mfc_debug("InstNo : %d VSP_BUF_ADDR : 0x%08x DB_STT_ADDR : 0x%08x\n",	\
			InstNo, READL(S3C_FIMV_VSP_BUF_ADDR), READL(S3C_FIMV_DB_STT_ADDR));
Ejemplo n.º 15
0
Archivo: dp.c Proyecto: 0ida/coreboot
static inline u32 tegra_dpaux_readl(struct tegra_dc_dp_data *dp, u32 reg)
{
	void *addr = dp->aux_base + (u32)(reg <<2);
	u32 reg_val = READL(addr);
	return reg_val;
}
Ejemplo n.º 16
0
static inline u32 tegra_sor_readl(struct tegra_dc_sor_data *sor, u32 reg)
{
	void *addr = sor->base + (u32) (reg << 2);
	u32 reg_val = READL(addr);
	return reg_val;
}