Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/panthor: Label all kernel BO's

Kernel BO's aren't exposed to UM, so labelling them is the responsibility
of the driver itself. This kind of tagging will prove useful in further
commits when want to expose these objects through DebugFS.

Expand panthor_kernel_bo_create() interface to take a NUL-terminated
string. No bounds checking is done because all label strings are given
as statically-allocated literals, but if a more complex kernel BO naming
scheme with explicit memory allocation and formatting was desired in the
future, this would have to change.

Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Steven Price <steven.price@arm.com>
Link: https://lore.kernel.org/r/20250423021238.1639175-4-adrian.larumbe@collabora.com
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>

authored by

Adrián Larumbe and committed by
Boris Brezillon
0489149f a572dc46

+20 -10
+5 -3
drivers/gpu/drm/panthor/panthor_fw.c
··· 449 449 DRM_PANTHOR_BO_NO_MMAP, 450 450 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | 451 451 DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED, 452 - PANTHOR_VM_KERNEL_AUTO_VA); 452 + PANTHOR_VM_KERNEL_AUTO_VA, 453 + "Queue FW interface"); 453 454 if (IS_ERR(mem)) 454 455 return mem; 455 456 ··· 482 481 return panthor_kernel_bo_create(ptdev, panthor_fw_vm(ptdev), size, 483 482 DRM_PANTHOR_BO_NO_MMAP, 484 483 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC, 485 - PANTHOR_VM_KERNEL_AUTO_VA); 484 + PANTHOR_VM_KERNEL_AUTO_VA, 485 + "FW suspend buffer"); 486 486 } 487 487 488 488 static int panthor_fw_load_section_entry(struct panthor_device *ptdev, ··· 603 601 section->mem = panthor_kernel_bo_create(ptdev, panthor_fw_vm(ptdev), 604 602 section_size, 605 603 DRM_PANTHOR_BO_NO_MMAP, 606 - vm_map_flags, va); 604 + vm_map_flags, va, "FW section"); 607 605 if (IS_ERR(section->mem)) 608 606 return PTR_ERR(section->mem); 609 607
+4 -1
drivers/gpu/drm/panthor/panthor_gem.c
··· 76 76 * @gpu_va: GPU address assigned when mapping to the VM. 77 77 * If gpu_va == PANTHOR_VM_KERNEL_AUTO_VA, the virtual address will be 78 78 * automatically allocated. 79 + * @name: Descriptive label of the BO's contents 79 80 * 80 81 * Return: A valid pointer in case of success, an ERR_PTR() otherwise. 81 82 */ 82 83 struct panthor_kernel_bo * 83 84 panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm, 84 85 size_t size, u32 bo_flags, u32 vm_map_flags, 85 - u64 gpu_va) 86 + u64 gpu_va, const char *name) 86 87 { 87 88 struct drm_gem_shmem_object *obj; 88 89 struct panthor_kernel_bo *kbo; ··· 106 105 bo = to_panthor_bo(&obj->base); 107 106 kbo->obj = &obj->base; 108 107 bo->flags = bo_flags; 108 + 109 + panthor_gem_kernel_bo_set_label(kbo, name); 109 110 110 111 /* The system and GPU MMU page size might differ, which becomes a 111 112 * problem for FW sections that need to be mapped at explicit address
+1 -1
drivers/gpu/drm/panthor/panthor_gem.h
··· 153 153 struct panthor_kernel_bo * 154 154 panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm, 155 155 size_t size, u32 bo_flags, u32 vm_map_flags, 156 - u64 gpu_va); 156 + u64 gpu_va, const char *name); 157 157 158 158 void panthor_kernel_bo_destroy(struct panthor_kernel_bo *bo); 159 159
+4 -2
drivers/gpu/drm/panthor/panthor_heap.c
··· 151 151 chunk->bo = panthor_kernel_bo_create(pool->ptdev, pool->vm, heap->chunk_size, 152 152 DRM_PANTHOR_BO_NO_MMAP, 153 153 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC, 154 - PANTHOR_VM_KERNEL_AUTO_VA); 154 + PANTHOR_VM_KERNEL_AUTO_VA, 155 + "Tiler heap chunk"); 155 156 if (IS_ERR(chunk->bo)) { 156 157 ret = PTR_ERR(chunk->bo); 157 158 goto err_free_chunk; ··· 556 555 pool->gpu_contexts = panthor_kernel_bo_create(ptdev, vm, bosize, 557 556 DRM_PANTHOR_BO_NO_MMAP, 558 557 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC, 559 - PANTHOR_VM_KERNEL_AUTO_VA); 558 + PANTHOR_VM_KERNEL_AUTO_VA, 559 + "Heap pool"); 560 560 if (IS_ERR(pool->gpu_contexts)) { 561 561 ret = PTR_ERR(pool->gpu_contexts); 562 562 goto err_destroy_pool;
+6 -3
drivers/gpu/drm/panthor/panthor_sched.c
··· 3332 3332 DRM_PANTHOR_BO_NO_MMAP, 3333 3333 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | 3334 3334 DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED, 3335 - PANTHOR_VM_KERNEL_AUTO_VA); 3335 + PANTHOR_VM_KERNEL_AUTO_VA, 3336 + "CS ring buffer"); 3336 3337 if (IS_ERR(queue->ringbuf)) { 3337 3338 ret = PTR_ERR(queue->ringbuf); 3338 3339 goto err_free_queue; ··· 3363 3362 DRM_PANTHOR_BO_NO_MMAP, 3364 3363 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | 3365 3364 DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED, 3366 - PANTHOR_VM_KERNEL_AUTO_VA); 3365 + PANTHOR_VM_KERNEL_AUTO_VA, 3366 + "Group job stats"); 3367 3367 3368 3368 if (IS_ERR(queue->profiling.slots)) { 3369 3369 ret = PTR_ERR(queue->profiling.slots); ··· 3495 3493 DRM_PANTHOR_BO_NO_MMAP, 3496 3494 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | 3497 3495 DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED, 3498 - PANTHOR_VM_KERNEL_AUTO_VA); 3496 + PANTHOR_VM_KERNEL_AUTO_VA, 3497 + "Group sync objects"); 3499 3498 if (IS_ERR(group->syncobjs)) { 3500 3499 ret = PTR_ERR(group->syncobjs); 3501 3500 goto err_put_group;