fix rga2 mmu addr bug | add pd_rga2 clk

This commit is contained in:
zsq
2014-04-15 10:13:16 +08:00
parent 3ee7d75759
commit 6b70176a64
2 changed files with 11 additions and 9 deletions

View File

@@ -264,6 +264,7 @@ static void rga2_power_on(void)
return;
clk_prepare_enable(rga2_drvdata->rga2);
clk_prepare_enable(rga2_drvdata->pd_rga2);
clk_prepare_enable(rga2_drvdata->aclk_rga2);
clk_prepare_enable(rga2_drvdata->hclk_rga2);
//clk_enable(rga2_drvdata->pd_rga2);
@@ -290,6 +291,7 @@ static void rga2_power_off(void)
//clk_disable(rga2_drvdata->pd_rga2);
clk_disable_unprepare(rga2_drvdata->rga2);
clk_disable_unprepare(rga2_drvdata->pd_rga2);
clk_disable_unprepare(rga2_drvdata->aclk_rga2);
clk_disable_unprepare(rga2_drvdata->hclk_rga2);
wake_unlock(&rga2_drvdata->wake_lock);
@@ -1083,6 +1085,7 @@ static int rga2_drv_probe(struct platform_device *pdev)
//data->pd_rga2 = clk_get(NULL, "pd_rga");
data->rga2 = devm_clk_get(&pdev->dev, "clk_rga");
data->pd_rga2 = devm_clk_get(&pdev->dev, "pd_rga");
data->aclk_rga2 = devm_clk_get(&pdev->dev, "aclk_rga");
data->hclk_rga2 = devm_clk_get(&pdev->dev, "hclk_rga");

View File

@@ -448,7 +448,10 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
}
/* Cal out the needed mem size */
AllSize = ((Src0MemSize+3)&(~3)) + ((Src1MemSize+3)&(~3)) + ((DstMemSize+3)&(~3));
Src0MemSize = (Src0MemSize+15)&(~15);
Src1MemSize = (Src1MemSize+15)&(~15);
DstMemSize = (DstMemSize+15)&(~15);
AllSize = Src0MemSize + Src1MemSize + DstMemSize;
pages = kzalloc((AllSize)* sizeof(struct page *), GFP_KERNEL);
if(pages == NULL) {
@@ -486,8 +489,6 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
req->src.v_addr = (req->src.v_addr & (~PAGE_MASK)) | (v_size << PAGE_SHIFT);
}
Src0MemSize = (Src0MemSize + 3) & (~3);
if(Src1MemSize) {
ret = rga2_MapUserMemory(&pages[0], MMU_Base + Src0MemSize, Src1Start, Src1MemSize);
if (ret < 0) {
@@ -498,11 +499,9 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
/* change the buf address in req struct */
req->mmu_info.src1_base_addr = ((uint32_t)(MMU_Base_phys + Src0MemSize));
req->src1.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (Src1MemSize << PAGE_SHIFT);
req->src1.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK));
}
Src1MemSize = (Src1MemSize + 3) & (~3);
if(DstMemSize) {
ret = rga2_MapUserMemory(&pages[0], MMU_Base + Src0MemSize + Src1MemSize, DstStart, DstMemSize);
if (ret < 0) {
@@ -513,11 +512,11 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
/* change the buf address in req struct */
req->mmu_info.dst_base_addr = ((uint32_t)(MMU_Base_phys + Src0MemSize + Src1MemSize));
req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | ((Src0MemSize + Src1MemSize) << PAGE_SHIFT);
req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK));
uv_size = (req->dst.uv_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT;
v_size = (req->dst.v_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT;
req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((Src0MemSize + Src1MemSize + uv_size) << PAGE_SHIFT);
req->dst.v_addr = (req->dst.v_addr & (~PAGE_MASK)) | ((Src0MemSize + Src1MemSize + v_size) << PAGE_SHIFT);
req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((uv_size) << PAGE_SHIFT);
req->dst.v_addr = (req->dst.v_addr & (~PAGE_MASK)) | ((v_size) << PAGE_SHIFT);
}
/* flush data to DDR */