linux/drivers/gpu/drm/panthor
Akash Goel 3387e04391 drm/panthor: Fix handling of partial GPU mapping of BOs
This commit fixes the bug in the handling of partial mapping of the
buffer objects to the GPU, which caused kernel warnings.

Panthor didn't correctly handle the case where the partial mapping
spanned multiple scatterlists and the mapping offset didn't point
to the 1st page of starting scatterlist. The offset variable was
not cleared after reaching the starting scatterlist.

Following warning messages were seen.
WARNING: CPU: 1 PID: 650 at drivers/iommu/io-pgtable-arm.c:659 __arm_lpae_unmap+0x254/0x5a0
<snip>
pc : __arm_lpae_unmap+0x254/0x5a0
lr : __arm_lpae_unmap+0x2cc/0x5a0
<snip>
Call trace:
 __arm_lpae_unmap+0x254/0x5a0
 __arm_lpae_unmap+0x108/0x5a0
 __arm_lpae_unmap+0x108/0x5a0
 __arm_lpae_unmap+0x108/0x5a0
 arm_lpae_unmap_pages+0x80/0xa0
 panthor_vm_unmap_pages+0xac/0x1c8 [panthor]
 panthor_gpuva_sm_step_unmap+0x4c/0xc8 [panthor]
 op_unmap_cb.isra.23.constprop.30+0x54/0x80
 __drm_gpuvm_sm_unmap+0x184/0x1c8
 drm_gpuvm_sm_unmap+0x40/0x60
 panthor_vm_exec_op+0xa8/0x120 [panthor]
 panthor_vm_bind_exec_sync_op+0xc4/0xe8 [panthor]
 panthor_ioctl_vm_bind+0x10c/0x170 [panthor]
 drm_ioctl_kernel+0xbc/0x138
 drm_ioctl+0x210/0x4b0
 __arm64_sys_ioctl+0xb0/0xf8
 invoke_syscall+0x4c/0x110
 el0_svc_common.constprop.1+0x98/0xf8
 do_el0_svc+0x24/0x38
 el0_svc+0x34/0xc8
 el0t_64_sync_handler+0xa0/0xc8
 el0t_64_sync+0x174/0x178
<snip>
panthor : [drm] drm_WARN_ON(unmapped_sz != pgsize * pgcount)
WARNING: CPU: 1 PID: 650 at drivers/gpu/drm/panthor/panthor_mmu.c:922 panthor_vm_unmap_pages+0x124/0x1c8 [panthor]
<snip>
pc : panthor_vm_unmap_pages+0x124/0x1c8 [panthor]
lr : panthor_vm_unmap_pages+0x124/0x1c8 [panthor]
<snip>
panthor : [drm] *ERROR* failed to unmap range ffffa388f000-ffffa3890000 (requested range ffffa388c000-ffffa3890000)

Fixes: 647810ec24 ("drm/panthor: Add the MMU/VM logical block")
Signed-off-by: Akash Goel <akash.goel@arm.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241111134720.780403-1-akash.goel@arm.com
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
2024-11-13 00:30:37 +00:00
..
Kconfig Revert "drm/panthor: Fix undefined panthor_device_suspend/resume symbol issue" 2024-03-11 14:16:10 +02:00
Makefile drm/panthor: Allow driver compilation 2024-03-01 10:04:29 +01:00
panthor_devfreq.c drm/panthor: Fix panthor_devfreq kerneldoc 2024-03-11 10:50:37 +01:00
panthor_devfreq.h drm/panthor: Add the devfreq logical block 2024-03-01 10:04:07 +01:00
panthor_device.c drm/panthor: Be stricter about IO mapping flags 2024-11-07 16:39:53 +00:00
panthor_device.h drm/panthor: Force an immediate reset on unrecoverable faults 2024-05-13 09:52:09 +02:00
panthor_drv.c drm/panthor: Add FOP_UNSIGNED_OFFSET to fop_flags 2024-10-01 18:37:13 +02:00
panthor_fw.c drm/panthor: Fix firmware initialization on systems with a page size > 4k 2024-10-30 16:30:21 +01:00
panthor_fw.h drm/panthor: Add the FW logical block 2024-03-01 10:04:12 +01:00
panthor_gem.c drm/panthor: Fix firmware initialization on systems with a page size > 4k 2024-10-30 16:30:21 +01:00
panthor_gem.h drm/panthor: Keep a ref to the VM at the panthor_kernel_bo level 2024-05-13 09:52:13 +02:00
panthor_gpu.c drm/panthor: Fix error code in panthor_gpu_init() 2024-04-03 09:06:27 +02:00
panthor_gpu.h drm/panthor: Add the GPU logical block 2024-03-01 10:04:04 +01:00
panthor_heap.c drm/panthor: Keep a ref to the VM at the panthor_kernel_bo level 2024-05-13 09:52:13 +02:00
panthor_heap.h drm/panthor: Add the heap logical block 2024-03-01 10:04:15 +01:00
panthor_mmu.c drm/panthor: Fix handling of partial GPU mapping of BOs 2024-11-13 00:30:37 +00:00
panthor_mmu.h drm/panthor: Fix firmware initialization on systems with a page size > 4k 2024-10-30 16:30:21 +01:00
panthor_regs.h
panthor_sched.c drm/panthor: Report group as timedout when we fail to properly suspend 2024-10-30 16:37:18 +01:00
panthor_sched.h drm/panthor: Call panthor_sched_post_reset() even if the reset failed 2024-05-13 09:52:22 +02:00