fix rga2 mmu addr bug | add pd_rga2 clk
authorzsq <zsq@rock-chips.com>
Tue, 15 Apr 2014 02:13:16 +0000 (10:13 +0800)
committerzsq <zsq@rock-chips.com>
Tue, 15 Apr 2014 02:13:16 +0000 (10:13 +0800)
drivers/video/rockchip/rga2/rga2_drv.c
drivers/video/rockchip/rga2/rga2_mmu_info.c

index 98bb3bd3adf26f6ab25e21f98ae59c75b778d4db..b21d5976bb4bb19e1431bb1c0f80f6b071a2b770 100755 (executable)
@@ -264,6 +264,7 @@ static void rga2_power_on(void)
                return;\r
 \r
     clk_prepare_enable(rga2_drvdata->rga2);\r
+    clk_prepare_enable(rga2_drvdata->pd_rga2);\r
        clk_prepare_enable(rga2_drvdata->aclk_rga2);\r
        clk_prepare_enable(rga2_drvdata->hclk_rga2);\r
        //clk_enable(rga2_drvdata->pd_rga2);\r
@@ -290,6 +291,7 @@ static void rga2_power_off(void)
 \r
        //clk_disable(rga2_drvdata->pd_rga2);\r
     clk_disable_unprepare(rga2_drvdata->rga2);\r
+    clk_disable_unprepare(rga2_drvdata->pd_rga2);\r
        clk_disable_unprepare(rga2_drvdata->aclk_rga2);\r
        clk_disable_unprepare(rga2_drvdata->hclk_rga2);\r
        wake_unlock(&rga2_drvdata->wake_lock);\r
@@ -1083,6 +1085,7 @@ static int rga2_drv_probe(struct platform_device *pdev)
 \r
        //data->pd_rga2 = clk_get(NULL, "pd_rga");\r
     data->rga2 = devm_clk_get(&pdev->dev, "clk_rga");\r
+    data->pd_rga2 = devm_clk_get(&pdev->dev, "pd_rga");\r
        data->aclk_rga2 = devm_clk_get(&pdev->dev, "aclk_rga");\r
     data->hclk_rga2 = devm_clk_get(&pdev->dev, "hclk_rga");\r
 \r
index 35529aeac04676c18b17cfcdf145f4f9a77fd817..03eecaa64699e603af5f50866e1ba7af85a2a573 100644 (file)
@@ -448,7 +448,10 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
         }\r
 \r
         /* Cal out the needed mem size */\r
-        AllSize = ((Src0MemSize+3)&(~3)) + ((Src1MemSize+3)&(~3)) + ((DstMemSize+3)&(~3));\r
+        Src0MemSize = (Src0MemSize+15)&(~15);\r
+        Src1MemSize = (Src1MemSize+15)&(~15);\r
+        DstMemSize  = (DstMemSize+15)&(~15);\r
+        AllSize = Src0MemSize + Src1MemSize + DstMemSize;\r
 \r
         pages = kzalloc((AllSize)* sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
@@ -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);\r
         }\r
 \r
-        Src0MemSize = (Src0MemSize + 3) & (~3);\r
-\r
         if(Src1MemSize) {\r
             ret = rga2_MapUserMemory(&pages[0], MMU_Base + Src0MemSize, Src1Start, Src1MemSize);\r
             if (ret < 0) {\r
@@ -498,11 +499,9 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
 \r
             /* change the buf address in req struct */\r
             req->mmu_info.src1_base_addr = ((uint32_t)(MMU_Base_phys + Src0MemSize));\r
-            req->src1.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK)) | (Src1MemSize << PAGE_SHIFT);\r
+            req->src1.yrgb_addr = (req->src.yrgb_addr & (~PAGE_MASK));\r
         }\r
 \r
-        Src1MemSize = (Src1MemSize + 3) & (~3);\r
-\r
         if(DstMemSize) {\r
             ret = rga2_MapUserMemory(&pages[0], MMU_Base + Src0MemSize + Src1MemSize, DstStart, DstMemSize);\r
             if (ret < 0) {\r
@@ -513,11 +512,11 @@ static int rga2_mmu_info_BitBlt_mode(struct rga2_reg *reg, struct rga2_req *req)
 \r
             /* change the buf address in req struct */\r
             req->mmu_info.dst_base_addr  = ((uint32_t)(MMU_Base_phys + Src0MemSize + Src1MemSize));\r
-            req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK)) | ((Src0MemSize + Src1MemSize) << PAGE_SHIFT);\r
+            req->dst.yrgb_addr = (req->dst.yrgb_addr & (~PAGE_MASK));\r
             uv_size = (req->dst.uv_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT;\r
             v_size = (req->dst.v_addr - (DstStart << PAGE_SHIFT)) >> PAGE_SHIFT;\r
-            req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((Src0MemSize + Src1MemSize + uv_size) << PAGE_SHIFT);\r
-            req->dst.v_addr = (req->dst.v_addr & (~PAGE_MASK)) | ((Src0MemSize + Src1MemSize + v_size) << PAGE_SHIFT);\r
+            req->dst.uv_addr = (req->dst.uv_addr & (~PAGE_MASK)) | ((uv_size) << PAGE_SHIFT);\r
+            req->dst.v_addr = (req->dst.v_addr & (~PAGE_MASK)) | ((v_size) << PAGE_SHIFT);\r
         }\r
 \r
         /* flush data to DDR */\r