mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
fix rgb / yuv switch rga sync error bug
This commit is contained in:
@@ -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(®->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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user