Closed AlfredLeng closed 1 year ago
RV1106上不带IOMMU,使用的NONE_MMU模式,做resize会提示不支持这种内存分配模式,,直接coredump
# rgaImDemo --resize=down Start selecting mode 0 im2d resize .. down resize ... MODE = 2 open file rga_api version 1.8.1_[0] [ 7.833312] rga_mm: Current RGA mmu[0] can[ 7.833475] 8<--- cut here --- [ 7.842118] Unable to handle kernel NULL pointer dereference at virtual address 00000014 [ 7.850273] pgd = 559f8659 [ 7.853028] [00000014] *pgd=00e23835, *pte=00000000, *ppte=00000000 [ 7.859310] Internal error: Oops - BUG: 17 [#1] THUMB2 [ 7.864445] Modules linked in: rknpu rockit(O) mpp_vcodec(O) rga3 sc500ai phy_rockchip_csi2_dphy phy_rockchip_csi2_dphym [ 7.878287] CPU: 0 PID: 276 Comm: rgaImDemo Tainted: G O 5.10.66 #1 [ 7.885843] Hardware name: Generic DT based system [ 7.890683] PC is at rga_mm_map_buffer+0x558/0x7b8 [rga3] [ 7.896097] LR is at rga_mm_map_buffer+0x285/0x7b8 [rga3] [ 7.901487] pc : [<af877094>] lr : [<af876dc1>] psr: 60000033 [ 7.907742] sp : b0e57bc8 ip : b0e5603c fp : 00000000 [ 7.912963] r10: b13c1960 r9 : af880740 r8 : 00000000 [ 7.918183] r7 : 00000028 r6 : 00000001 r5 : b1354f40 r4 : 00000000 [ 7.924703] r3 : 00000000 r2 : 00000000 r1 : 00000001 r0 : b13ce380 [ 7.931227] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA Thumb Segment user [ 7.938529] Control: 50c53c7d Table: 00e48059 DAC: 00000055 [ 7.944270] Process rgaImDemo (pid: 276, stack limit = 0xe3e5a825)
原先是RGA multicore Device Driver: v1.2.15 + librga1.8.1,换到最新的v1.2.25 + librga1.9.1同样报错,连VPSS取流也会报错, 看驱动定义和实现确认没有这个的支持
// rga_hw_config.c const struct rga_hw_data rga2e_1106_data = { .version = 0, .input_range = {{2, 2}, {8192, 8192}}, .output_range = {{2, 2}, {4096, 4096}}, .win = rga2e_win_data, .win_size = ARRAY_SIZE(rga2e_win_data), /* 1 << factor mean real factor */ .max_upscale_factor = 4, .max_downscale_factor = 4, .byte_stride_align = 4, .max_byte_stride = WORD_TO_BYTE(8192), .feature = RGA_COLOR_FILL | RGA_COLOR_PALETTE | RGA_COLOR_KEY | RGA_ROP_CALCULATE | RGA_NN_QUANTIZE | RGA_DITHER | RGA_MOSAIC | RGA_YIN_YOUT | RGA_YUV_HDS | RGA_YUV_VDS | RGA_OSD | RGA_PRE_INTR, .csc_r2y_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | RGA_MODE_CSC_BT709, .csc_y2r_mode = RGA_MODE_CSC_BT601L | RGA_MODE_CSC_BT601F | RGA_MODE_CSC_BT709, .mmu = RGA_NONE_MMU, }; // rga_mm.c switch (scheduler->data->mmu) { case RGA_IOMMU: ret = rga_iommu_map_sgt(internal_buffer->dma_buffer[i].sgt, internal_buffer->dma_buffer[i].size, &internal_buffer->dma_buffer[i], scheduler->dev); if (ret < 0) { pr_err("%s core[%d] iommu_map virtual address error!\n", __func__, scheduler->core); goto unmap_virt_addr; } break; case RGA_MMU: ret = dma_map_sg(scheduler->dev, internal_buffer->dma_buffer[i].sgt->sgl, internal_buffer->dma_buffer[i].sgt->orig_nents, DMA_BIDIRECTIONAL); if (ret == 0) { pr_err("%s core[%d] dma_map_sgt error! va = 0x%lx, nents = %d\n", __func__, scheduler->core, (unsigned long)internal_buffer->virt_addr->addr, internal_buffer->dma_buffer[i].sgt->orig_nents); ret = -EINVAL; goto unmap_virt_addr; } break; default: pr_err("Current RGA mmu[%d] cannot support virtual address!\n", scheduler->data->mmu); goto free_sgt_and_dma_buffer; }
请教一下,是1106上确实不支持还是新版本支持了没更新?如果真的不支持,想用RGA做resize有没有办法?
1106的RGA没有IOMMU所以不支持物理非连续的内存,你用物理非连续的内存肯定跑不通啊,1106上只能用物理连续的内存调用RGA,不懂怎么分配内存可以参考一下示例代码:samples/allocator_demo/src/rga_allocator_1106_cma_demo.cpp
RV1106上不带IOMMU,使用的NONE_MMU模式,做resize会提示不支持这种内存分配模式,,直接coredump
原先是RGA multicore Device Driver: v1.2.15 + librga1.8.1,换到最新的v1.2.25 + librga1.9.1同样报错,连VPSS取流也会报错, 看驱动定义和实现确认没有这个的支持
请教一下,是1106上确实不支持还是新版本支持了没更新?如果真的不支持,想用RGA做resize有没有办法?