Skip to content

Commit 4cda61d

Browse files
Yu Qiaoweirkhuangtao
authored andcommitted
video/rockchip: rga2: Fix errors in Y4/Y400 format.
1. Modify the calculation of Y400/Y4 buffer size. 2. Add print of result and pageCount. 3. Add Y4/Y400 string name. Signed-off-by: Yu Qiaowei <cerf.yu@rock-chips.com> Change-Id: Ibe26b7b900c317d28e0c4326f0c89a244a0017b0
1 parent a8e309c commit 4cda61d

2 files changed

Lines changed: 26 additions & 8 deletions

File tree

drivers/video/rockchip/rga2/rga2_drv.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,10 @@ static const char *rga2_get_format_name(uint32_t format)
307307
return "BPP4";
308308
case RGA2_FORMAT_BPP_8:
309309
return "BPP8";
310+
case RGA2_FORMAT_YCbCr_400:
311+
return "YCbCr400";
312+
case RGA2_FORMAT_Y4:
313+
return "y4";
310314
default:
311315
return "UNF";
312316
}

drivers/video/rockchip/rga2/rga2_mmu_info.c

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)