fix rgb / yuv switch rga sync error bug

This commit is contained in:
zsq
2012-03-30 02:04:23 -08:00
parent 1aafb3e266
commit 34046f2bc3
3 changed files with 12 additions and 12 deletions

View File

@@ -71,8 +71,6 @@
ktime_t rga_start;
ktime_t rga_end;
dev_t rga_devi;
struct rga_drvdata {
struct miscdevice miscdev;
struct device dev;
@@ -596,7 +594,6 @@ static void rga_try_set_reg(uint32_t num)
/* All CMD finish int */
rga_write(0x1<<10, RGA_INT);
#if RGA_TEST_TIME
rga_start = ktime_get();
@@ -712,7 +709,7 @@ static int rga_blit_sync(rga_session *session, struct rga_req *req)
sah = req->src.act_h;
daw = req->dst.act_w;
dah = req->dst.act_h;
#if RGA_TEST
printk("src.yrgb_addr = %.8x, src.uv_addr = %.8x, src.v_addr = %.8x\n",
@@ -761,8 +758,10 @@ static int rga_blit_sync(rga_session *session, struct rga_req *req)
//rga_power_on();
atomic_set(&reg->int_enable, 1);
rga_try_set_reg(num);
ret_timeout = wait_event_interruptible_timeout(session->wait, atomic_read(&session->done), RGA_TIMEOUT_DELAY);
rga_soft_reset();
if (unlikely(ret_timeout< 0))
{
pr_err("pid %d wait task ret %d\n", session->pid, ret_timeout);
@@ -922,6 +921,8 @@ static irqreturn_t rga_irq(int irq, void *dev_id)
printk(" INT ERROR RGA is not idle!\n");
rga_soft_reset();
}
rga_soft_reset();
spin_lock(&rga_service.lock);
do

View File

@@ -18,6 +18,7 @@
#include "rga_mmu_info.h"
extern rga_service_info rga_service;
extern int mmu_buff_temp[1024];
#define KERNEL_SPACE_VALID 0xc0000000
@@ -416,7 +417,7 @@ static int rga_mmu_info_BitBlt_mode(struct rga_reg *reg, struct rga_req *req)
break;
}
MMU_Base = (uint32_t *)kmalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);
MMU_Base = (uint32_t *)kmalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);
if(MMU_Base == NULL) {
pr_err("RGA MMU malloc MMU_Base point failed\n");
status = RGA_MALLOC_ERROR;
@@ -428,15 +429,13 @@ static int rga_mmu_info_BitBlt_mode(struct rga_reg *reg, struct rga_req *req)
}
if(req->src.yrgb_addr < KERNEL_SPACE_VALID)
{
{
ret = rga_MapUserMemory(&pages[CMDMemSize], &MMU_Base[CMDMemSize], SrcStart, SrcMemSize);
if (ret < 0) {
pr_err("rga map src memory failed\n");
status = ret;
break;
}
}
}
else
{

View File

@@ -1421,8 +1421,8 @@ RGA_set_mmu_ctrl_reg_info(u8 *base, const struct rga_req *msg)
reg = *RGA_MMU_CTRL_ADDR;
reg = ((reg & (~m_RGA_MMU_CTRL_PAGE_TABLE_SIZE)) | s_RGA_MMU_CTRL_PAGE_TABLE_SIZE(TLB_size));
reg = ((reg & (~m_RGA_MMU_CTRL_MMU_ENABLE)) | s_RGA_MMU_CTRL_MMU_ENABLE(mmu_enable));
reg = ((reg & (~m_RGA_MMU_CTRL_SRC_FLUSH)) | s_RGA_MMU_CTRL_SRC_FLUSH(src_flag));
reg = ((reg & (~m_RGA_MMU_CTRL_DST_FLUSH)) | s_RGA_MMU_CTRL_DST_FLUSH(dst_flag));
reg = ((reg & (~m_RGA_MMU_CTRL_SRC_FLUSH)) | s_RGA_MMU_CTRL_SRC_FLUSH(1));
reg = ((reg & (~m_RGA_MMU_CTRL_DST_FLUSH)) | s_RGA_MMU_CTRL_DST_FLUSH(1));
reg = ((reg & (~m_RGA_MMU_CTRL_CMD_CHAN_FLUSH)) | s_RGA_MMU_CTRL_CMD_CHAN_FLUSH(CMD_flag));
*RGA_MMU_CTRL_ADDR = reg;