rga use kzalloc instead of kmalloc
authorzsq <zsq@rock-chips.com>
Thu, 10 May 2012 03:43:15 +0000 (11:43 +0800)
committerzsq <zsq@rock-chips.com>
Thu, 10 May 2012 03:43:15 +0000 (11:43 +0800)
drivers/video/rockchip/rga/rga.h
drivers/video/rockchip/rga/rga_drv.c
drivers/video/rockchip/rga/rga_mmu_info.c
drivers/video/rockchip/rga/rga_reg_info.c

index 3b58ea35322dd9abde88f424a8b67ae850f1978d..fd8f4b4ceb8172755ef87a127ac1796fb6a3c8f6 100755 (executable)
@@ -356,7 +356,7 @@ struct rga_reg {
     uint32_t *MMU_base;\r
     //atomic_t int_enable;\r
         \r
-    struct rga_req req;\r
+    //struct rga_req req;\r
 };\r
 \r
 \r
index 47c187a59df61356ed11ac540b8ebf9bc60a4abd..5cabff17c50db5f31728af4b0542160140d046c7 100755 (executable)
@@ -90,6 +90,7 @@ rga_service_info rga_service;
 \r
 static struct clk *aclk_rga;\r
 static struct clk *hclk_rga;\r
+static struct clk *pd_rga;\r
 \r
 \r
 static int rga_blit_async(rga_session *session, struct rga_req *req);\r
@@ -211,13 +212,15 @@ static void rga_power_on(void)
 {\r
        //printk("rga_power_on\n");\r
        //cancel_delayed_work_sync(&drvdata->power_off_work);\r
+    spin_lock_bh(&rga_service.lock_power);\r
        if (rga_service.enable)\r
-               return;\r
+               goto out;\r
 \r
-    spin_lock_bh(&rga_service.lock_power);\r
        clk_enable(aclk_rga);\r
        clk_enable(hclk_rga);\r
+       clk_enable(pd_rga);\r
        rga_service.enable = true;\r
+out:\r
     spin_unlock_bh(&rga_service.lock_power);\r
 }\r
 \r
@@ -245,6 +248,7 @@ static void rga_power_off(struct work_struct *work)
         rga_dump();\r
        }\r
     \r
+       clk_disable(pd_rga);\r
        clk_disable(aclk_rga);\r
        clk_disable(hclk_rga);\r
     spin_unlock_bh(&rga_service.lock_power);\r
@@ -391,7 +395,7 @@ static struct rga_reg * rga_reg_init(rga_session *session, struct rga_req *req)
 {\r
     unsigned long flag;\r
     uint32_t ret;\r
-       struct rga_reg *reg = kmalloc(sizeof(struct rga_reg), GFP_KERNEL);\r
+       struct rga_reg *reg = kzalloc(sizeof(struct rga_reg), GFP_KERNEL);\r
        if (NULL == reg) {\r
                pr_err("kmalloc fail in rga_reg_init\n");\r
                return NULL;\r
@@ -401,7 +405,7 @@ static struct rga_reg * rga_reg_init(rga_session *session, struct rga_req *req)
        INIT_LIST_HEAD(&reg->session_link);\r
        INIT_LIST_HEAD(&reg->status_link);\r
 \r
-    memcpy(&reg->req, req, sizeof(struct rga_req));\r
+    //memcpy(&reg->req, req, sizeof(struct rga_req));\r
 \r
     reg->MMU_base = NULL;\r
             \r
@@ -449,13 +453,13 @@ static struct rga_reg * rga_reg_init_2(rga_session *session, struct rga_req *req
 \r
     do\r
     {    \r
-       reg0 = kmalloc(sizeof(struct rga_reg), GFP_KERNEL);\r
+        reg0 = kzalloc(sizeof(struct rga_reg), GFP_KERNEL);\r
        if (NULL == reg0) {\r
                pr_err("%s [%d] kmalloc fail in rga_reg_init\n", __FUNCTION__, __LINE__);\r
             break;\r
        }\r
 \r
-        reg1 = kmalloc(sizeof(struct rga_reg), GFP_KERNEL);\r
+        reg1 = kzalloc(sizeof(struct rga_reg), GFP_KERNEL);\r
        if (NULL == reg1) {\r
                pr_err("%s [%d] kmalloc fail in rga_reg_init\n", __FUNCTION__, __LINE__);\r
             break;\r
@@ -469,8 +473,8 @@ static struct rga_reg * rga_reg_init_2(rga_session *session, struct rga_req *req
         INIT_LIST_HEAD(&reg1->session_link);\r
        INIT_LIST_HEAD(&reg1->status_link);\r
 \r
-        memcpy(&reg0->req, req0, sizeof(struct rga_req));\r
-        memcpy(&reg1->req, req1, sizeof(struct rga_req));\r
+        //memcpy(&reg0->req, req0, sizeof(struct rga_req));\r
+        //memcpy(&reg1->req, req1, sizeof(struct rga_req));\r
 \r
         if(req0->mmu_info.mmu_en)\r
         {\r
@@ -548,7 +552,6 @@ static void rga_service_session_clear(rga_session *session)
        }\r
 }\r
 \r
-\r
 static void rga_try_set_reg(uint32_t num)\r
 {\r
     unsigned long flag;\r
@@ -562,6 +565,8 @@ static void rga_try_set_reg(uint32_t num)
         \r
         return;\r
     }\r
+\r
+    udelay(100);\r
         \r
        spin_lock_irqsave(&rga_service.lock, flag);\r
        if (!list_empty(&rga_service.waiting)) \r
@@ -777,7 +782,7 @@ static int rga_blit(rga_session *session, struct rga_req *req)
         if((req->render_mode == bitblt_mode) && (((saw>>1) >= daw) || ((sah>>1) >= dah))) \r
         {                                   \r
             /* generate 2 cmd for pre scale */        \r
-            req2 = kmalloc(sizeof(struct rga_req), GFP_KERNEL);\r
+            req2 = kzalloc(sizeof(struct rga_req), GFP_KERNEL);\r
             if(NULL == req2) {\r
                 return -EFAULT;            \r
             }\r
@@ -927,7 +932,7 @@ static long rga_ioctl(struct file *file, uint32_t cmd, unsigned long arg)
 \r
     mutex_lock(&rga_service.mutex);\r
      \r
-    req = (struct rga_req *)kmalloc(sizeof(struct rga_req), GFP_KERNEL);\r
+    req = kzalloc(sizeof(struct rga_req), GFP_KERNEL);\r
     if(req == NULL) \r
     {\r
         printk("%s [%d] get rga_req mem failed\n",__FUNCTION__,__LINE__);\r
@@ -988,14 +993,12 @@ static long rga_ioctl(struct file *file, uint32_t cmd, unsigned long arg)
 static int rga_open(struct inode *inode, struct file *file)\r
 {\r
     unsigned long flag;\r
-    rga_session *session = (rga_session *)kmalloc(sizeof(rga_session), GFP_KERNEL);\r
+    rga_session *session = kzalloc(sizeof(rga_session), GFP_KERNEL);\r
        if (NULL == session) {\r
                pr_err("unable to allocate memory for rga_session.");\r
                return -ENOMEM;\r
        }\r
 \r
-    memset(session, 0x0, sizeof(rga_session));\r
-\r
        session->pid = current->pid;\r
     //printk(KERN_DEBUG  "+");\r
     \r
@@ -1115,9 +1118,7 @@ static int __devinit rga_drv_probe(struct platform_device *pdev)
        struct rga_drvdata *data;\r
        int ret = 0;\r
 \r
-       data = kmalloc(sizeof(struct rga_drvdata), GFP_KERNEL);\r
-\r
-    memset(data, 0x0, sizeof(struct rga_drvdata));\r
+       data = kzalloc(sizeof(struct rga_drvdata), GFP_KERNEL);\r
 \r
     INIT_LIST_HEAD(&rga_service.waiting);\r
        INIT_LIST_HEAD(&rga_service.running);\r
@@ -1136,6 +1137,7 @@ static int __devinit rga_drv_probe(struct platform_device *pdev)
                return  -ENOMEM;\r
        }\r
        \r
+       pd_rga = clk_get(NULL, "pd_rga");\r
        aclk_rga = clk_get(NULL, "aclk_rga");    \r
        if (IS_ERR(aclk_rga))\r
        {\r
@@ -1264,7 +1266,7 @@ static int __init rga_init(void)
     uint32_t *buf_p;\r
 \r
     /* malloc pre scale mid buf mmu table */\r
-    mmu_buf = (uint32_t *)kmalloc(1024*8, GFP_KERNEL);    \r
+    mmu_buf = kzalloc(1024*8, GFP_KERNEL);\r
     if(mmu_buf == NULL) \r
     {\r
         printk(KERN_ERR "RGA get Pre Scale buff failed. \n");\r
@@ -1274,7 +1276,7 @@ static int __init rga_init(void)
     /* malloc 8 M buf */\r
     for(i=0; i<2048; i++)\r
     {        \r
-        buf_p = (uint32_t *)__get_free_page(GFP_KERNEL);               \r
+        buf_p = (uint32_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);\r
         if(buf_p == NULL)\r
         {\r
             printk(KERN_ERR "RGA init pre scale buf falied\n");\r
index 181c266f7573110e81a9f9f6b4e54e66ed94b2f5..b5972a40f03c479385025fb8710850fa08211c51 100755 (executable)
@@ -390,14 +390,14 @@ static int rga_mmu_info_BitBlt_mode(struct rga_reg *reg, struct rga_req *req)
         /* Cal out the needed mem size */\r
         AllSize = SrcMemSize + DstMemSize;\r
                            \r
-        pages = (struct page **)kmalloc((AllSize + 1)* sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc((AllSize + 1)* sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
             status = RGA_MALLOC_ERROR;\r
             break;                \r
         }\r
         \r
-        MMU_Base = (uint32_t *)kmalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);      \r
+        MMU_Base = kzalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);\r
         if(MMU_Base == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             status = RGA_MALLOC_ERROR;\r
@@ -556,13 +556,13 @@ static int rga_mmu_info_color_palette_mode(struct rga_reg *reg, struct rga_req *
 \r
         AllSize = SrcMemSize + DstMemSize + CMDMemSize;\r
                    \r
-        pages = (struct page **)kmalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
             return -EINVAL;                \r
         }\r
 \r
-        MMU_Base = (uint32_t *)kmalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);\r
+        MMU_Base = kzalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);\r
         if(MMU_Base == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             break;            \r
@@ -680,14 +680,14 @@ static int rga_mmu_info_color_fill_mode(struct rga_reg *reg, struct rga_req *req
 \r
         AllSize = DstMemSize;\r
                    \r
-        pages = (struct page **)kmalloc((AllSize + 1)* sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc((AllSize + 1)* sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
             status = RGA_MALLOC_ERROR; \r
             break;\r
         }\r
         \r
-        MMU_Base = (uint32_t *)kmalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);\r
+        MMU_Base = kzalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             status = RGA_MALLOC_ERROR;\r
@@ -771,14 +771,14 @@ static int rga_mmu_info_line_point_drawing_mode(struct rga_reg *reg, struct rga_
 \r
         AllSize = DstMemSize;\r
                    \r
-        pages = (struct page **)kmalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
             status = RGA_MALLOC_ERROR;\r
             break;\r
         }\r
         \r
-        MMU_Base = (uint32_t *)kmalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);\r
+        MMU_Base = kzalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             status = RGA_MALLOC_ERROR;\r
@@ -871,14 +871,14 @@ static int rga_mmu_info_blur_sharp_filter_mode(struct rga_reg *reg, struct rga_r
 \r
         AllSize = SrcMemSize + DstMemSize;\r
                    \r
-        pages = (struct page **)kmalloc((AllSize + 1) * sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc((AllSize + 1) * sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
             status = RGA_MALLOC_ERROR;\r
             break;    \r
         }\r
         \r
-        MMU_Base = (uint32_t *)kmalloc((AllSize + 1)* sizeof(uint32_t), GFP_KERNEL);\r
+        MMU_Base = kzalloc((AllSize + 1)* sizeof(uint32_t), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             status = RGA_MALLOC_ERROR;\r
@@ -1010,7 +1010,7 @@ static int rga_mmu_info_pre_scale_mode(struct rga_reg *reg, struct rga_req *req)
 \r
         AllSize = SrcMemSize + DstMemSize;\r
                    \r
-        pages = (struct page **)kmalloc((AllSize)* sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc((AllSize)* sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) \r
         {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
@@ -1022,7 +1022,7 @@ static int rga_mmu_info_pre_scale_mode(struct rga_reg *reg, struct rga_req *req)
          * Allocate MMU Index mem\r
          * This mem release in run_to_done fun \r
          */\r
-        MMU_Base = (uint32_t *)kmalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);\r
+        MMU_Base = kzalloc((AllSize + 1) * sizeof(uint32_t), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             status = RGA_MALLOC_ERROR;            \r
@@ -1160,14 +1160,14 @@ static int rga_mmu_info_update_palette_table_mode(struct rga_reg *reg, struct rg
 \r
         AllSize = SrcMemSize + CMDMemSize;\r
                    \r
-        pages = (struct page **)kmalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
             status = RGA_MALLOC_ERROR;\r
             break;    \r
         }\r
         \r
-        MMU_Base = (uint32_t *)kmalloc((AllSize + 1)* sizeof(uint32_t), GFP_KERNEL);\r
+        MMU_Base = kzalloc((AllSize + 1)* sizeof(uint32_t), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             status = RGA_MALLOC_ERROR;\r
@@ -1258,14 +1258,14 @@ static int rga_mmu_info_update_patten_buff_mode(struct rga_reg *reg, struct rga_
 \r
         AllSize = SrcMemSize + CMDMemSize;\r
                    \r
-        pages = (struct page **)kmalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
+        pages = kzalloc(AllSize * sizeof(struct page *), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc pages mem failed\n");\r
             status = RGA_MALLOC_ERROR;\r
             break;                \r
         }\r
         \r
-        MMU_Base = (uint32_t *)kmalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);\r
+        MMU_Base = kzalloc(AllSize * sizeof(uint32_t), GFP_KERNEL);\r
         if(pages == NULL) {\r
             pr_err("RGA MMU malloc MMU_Base point failed\n");\r
             status = RGA_MALLOC_ERROR;\r
index b35c704a5e85296d18680b0da6186d2a42044bf3..f45e710ae526c517f1fb10200aacf578951b5a7d 100755 (executable)
@@ -1426,7 +1426,7 @@ RGA_set_mmu_ctrl_reg_info(u8 *base, const struct rga_req *msg)
     reg = ((reg & (~m_RGA_MMU_CTRL_MMU_ENABLE)) | s_RGA_MMU_CTRL_MMU_ENABLE(mmu_enable));\r
     reg = ((reg & (~m_RGA_MMU_CTRL_SRC_FLUSH)) | s_RGA_MMU_CTRL_SRC_FLUSH(1));\r
     reg = ((reg & (~m_RGA_MMU_CTRL_DST_FLUSH)) | s_RGA_MMU_CTRL_DST_FLUSH(1));\r
-    reg = ((reg & (~m_RGA_MMU_CTRL_CMD_CHAN_FLUSH)) | s_RGA_MMU_CTRL_CMD_CHAN_FLUSH(CMD_flag));\r
+    reg = ((reg & (~m_RGA_MMU_CTRL_CMD_CHAN_FLUSH)) | s_RGA_MMU_CTRL_CMD_CHAN_FLUSH(1));\r
     *RGA_MMU_CTRL_ADDR = reg;\r
 \r
     return 0;\r