@@ -275,7 +275,6 @@ static int rga2_buf_size_cal(unsigned long yrgb_addr, unsigned long uv_addr, uns
275275 break ;
276276 case RGA2_FORMAT_YCbCr_420_P :
277277 case RGA2_FORMAT_YCrCb_420_P :
278- case RGA2_FORMAT_YCbCr_400 :
279278 stride = (w + 3 ) & (~3 );
280279 size_yrgb = stride * h ;
281280 size_uv = ((stride >> 1 ) * (h >> 1 ));
@@ -286,14 +285,23 @@ static int rga2_buf_size_cal(unsigned long yrgb_addr, unsigned long uv_addr, uns
286285 end = (end + (PAGE_SIZE - 1 )) >> PAGE_SHIFT ;
287286 pageCount = end - start ;
288287 break ;
288+ case RGA2_FORMAT_YCbCr_400 :
289+ stride = (w + 3 ) & (~3 );
290+ size_yrgb = stride * h ;
291+ size_uv = 0 ;
292+ size_v = 0 ;
293+ start = yrgb_addr >> PAGE_SHIFT ;
294+ end = yrgb_addr + size_yrgb ;
295+ end = (end + (PAGE_SIZE - 1 )) >> PAGE_SHIFT ;
296+ pageCount = end - start ;
297+ break ;
289298 case RGA2_FORMAT_Y4 :
290299 stride = ((w + 3 ) & (~3 ) ) >> 1 ;
291300 size_yrgb = stride * h ;
292301 size_uv = 0 ;
293302 size_v = 0 ;
294- start = MIN (MIN (yrgb_addr , uv_addr ), v_addr );
295- start >>= PAGE_SHIFT ;
296- end = MAX (MAX ((yrgb_addr + size_yrgb ), (uv_addr + size_uv )), (v_addr + size_v ));
303+ start = yrgb_addr >> PAGE_SHIFT ;
304+ end = yrgb_addr + size_yrgb ;
297305 end = (end + (PAGE_SIZE - 1 )) >> PAGE_SHIFT ;
298306 pageCount = end - start ;
299307 break ;
@@ -477,32 +485,38 @@ static int rga2_MapUserMemory(struct page **pages, uint32_t *pageTable,
477485 for (i = 0 ; i < pageCount ; i ++ ) {
478486 vma = find_vma (current -> mm , (Memory + i ) << PAGE_SHIFT );
479487 if (!vma ) {
488+ pr_err ("RGA2 failed to get vma, result = %d, pageCount = %d\n" ,
489+ result , pageCount );
480490 status = RGA2_OUT_OF_RESOURCES ;
481491 break ;
482492 }
483493 pgd = pgd_offset (current -> mm , (Memory + i ) << PAGE_SHIFT );
484494 if (pgd_none (* pgd ) || unlikely (pgd_bad (* pgd ))) {
485- pr_err ("RGA2 failed to get pgd\n" );
495+ pr_err ("RGA2 failed to get pgd, result = %d, pageCount = %d\n" ,
496+ result , pageCount );
486497 status = RGA2_OUT_OF_RESOURCES ;
487498 break ;
488499 }
489500 pud = pud_offset (pgd , (Memory + i ) << PAGE_SHIFT );
490501 if (pud_none (* pud ) || unlikely (pud_bad (* pud ))) {
491- pr_err ("RGA2 failed to get pud\n" );
502+ pr_err ("RGA2 failed to get pud, result = %d, pageCount = %d\n" ,
503+ result , pageCount );
492504 status = RGA2_OUT_OF_RESOURCES ;
493505 break ;
494506 }
495507 pmd = pmd_offset (pud , (Memory + i ) << PAGE_SHIFT );
496508 if (pmd_none (* pmd ) || unlikely (pmd_bad (* pmd ))) {
497- pr_err ("RGA2 failed to get pmd\n" );
509+ pr_err ("RGA2 failed to get pmd, result = %d, pageCount = %d\n" ,
510+ result , pageCount );
498511 status = RGA2_OUT_OF_RESOURCES ;
499512 break ;
500513 }
501514 pte = pte_offset_map_lock (current -> mm , pmd ,
502515 (Memory + i ) << PAGE_SHIFT ,
503516 & ptl );
504517 if (pte_none (* pte )) {
505- pr_err ("RGA2 failed to get pte\n" );
518+ pr_err ("RGA2 failed to get pte, result = %d, pageCount = %d\n" ,
519+ result , pageCount );
506520 pte_unmap_unlock (pte , ptl );
507521 status = RGA2_OUT_OF_RESOURCES ;
508522 break ;
0 commit comments