PPMGR: modify phys_to_virt to codec_mm_vmap. [5/5]
authorrenjiang.han <renjiang.han@amlogic.com>
Thu, 21 Mar 2019 03:16:43 +0000 (11:16 +0800)
committerNick Xie <nick@khadas.com>
Mon, 5 Aug 2019 07:28:35 +0000 (15:28 +0800)
PD#TV-2649

Problem:
Kernel panic with phys_to_virt.

Solution:
Replace phys_to_virt with codec_mm_vmap.

Verify:
on u212

Change-Id: Ib3f94f66d37463490720cd1348b4ec94ad12aa15
Signed-off-by: renjiang.han <renjiang.han@amlogic.com>
drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c

index 040af59..a0a4368 100644 (file)
@@ -3632,7 +3632,8 @@ void stop_ppmgr_task(void)
 static int tb_buffer_init(void)
 {
        int i;
-       int flags = CODEC_MM_FLAGS_DMA_CPU | CODEC_MM_FLAGS_CMA_CLEAR;
+       //int flags = CODEC_MM_FLAGS_DMA_CPU | CODEC_MM_FLAGS_CMA_CLEAR;
+       int flags = 0;
 
        if (tb_buffer_status)
                return tb_buffer_status;
@@ -3681,7 +3682,8 @@ static int tb_buffer_init(void)
                        detect_buf[i].paddr = tb_buffer_start +
                                TB_DETECT_H * TB_DETECT_W * i;
                        detect_buf[i].vaddr =
-                               (ulong)phys_to_virt(detect_buf[i].paddr);
+                               (ulong)codec_mm_vmap(detect_buf[i].paddr,
+                               TB_DETECT_H * TB_DETECT_W);
                        if (ppmgr_device.tb_detect & 0xc) {
                                PPMGRVPP_INFO(
                                        "detect buff(%d) paddr: %lx, vaddr: %lx\n",
@@ -3697,6 +3699,7 @@ static int tb_buffer_init(void)
 
 static int tb_buffer_uninit(void)
 {
+       int i;
        if (tb_src_canvas) {
                if (tb_src_canvas & 0xff)
                        canvas_pool_map_free_canvas(
@@ -3717,6 +3720,13 @@ static int tb_buffer_uninit(void)
                PPMGRVPP_INFO("tb cma free addr is %x, size is %x\n",
                        (unsigned int)tb_buffer_start,
                        (unsigned int)tb_buffer_size);
+               for (i = 0; i < tb_buffer_len; i++) {
+                       if (detect_buf[i].vaddr) {
+                               codec_mm_unmap_phyaddr(
+                                       (u8 *)detect_buf[i].vaddr);
+                               detect_buf[i].vaddr = 0;
+                       }
+               }
                codec_mm_free_for_dma(
                        "tb_detect",
                        tb_buffer_start);