uint32_t *MMU_base;\r
//atomic_t int_enable;\r
\r
- struct rga_req req;\r
+ //struct rga_req req;\r
};\r
\r
\r
\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
{\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
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
{\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
INIT_LIST_HEAD(®->session_link);\r
INIT_LIST_HEAD(®->status_link);\r
\r
- memcpy(®->req, req, sizeof(struct rga_req));\r
+ //memcpy(®->req, req, sizeof(struct rga_req));\r
\r
reg->MMU_base = NULL;\r
\r
\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
INIT_LIST_HEAD(®1->session_link);\r
INIT_LIST_HEAD(®1->status_link);\r
\r
- memcpy(®0->req, req0, sizeof(struct rga_req));\r
- memcpy(®1->req, req1, sizeof(struct rga_req));\r
+ //memcpy(®0->req, req0, sizeof(struct rga_req));\r
+ //memcpy(®1->req, req1, sizeof(struct rga_req));\r
\r
if(req0->mmu_info.mmu_en)\r
{\r
}\r
}\r
\r
-\r
static void rga_try_set_reg(uint32_t num)\r
{\r
unsigned long flag;\r
\r
return;\r
}\r
+\r
+ udelay(100);\r
\r
spin_lock_irqsave(&rga_service.lock, flag);\r
if (!list_empty(&rga_service.waiting)) \r
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
\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
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
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
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
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
/* 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
/* 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
\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
\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
\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
\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
\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
* 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
\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
\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
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