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

Configure Feed

Select the types of activity you want to include in your feed.

drm/panthor: Relax the constraints on the tiler chunk size

The field used to store the chunk size if 12 bits wide, and the encoding
is chunk_size = chunk_header.chunk_size << 12, which gives us a
theoretical [4k:8M] range. This range is further limited by
implementation constraints, and all known implementations seem to
impose a [128k:8M] range, so do the same here.

We also relax the power-of-two constraint, which doesn't seem to
exist on v10. This will allow userspace to fine-tune initial/max
tiler memory on memory-constrained devices.

v4:
- Actually fix the range in the kerneldoc

v3:
- Add R-bs
- Fix valid range in the kerneldoc

v2:
- Turn the power-of-two constraint into a page-aligned constraint to allow
fine-tune of the initial/max heap memory size
- Fix the panthor_heap_create() kerneldoc

Fixes: 9cca48fa4f89 ("drm/panthor: Add the heap logical block")
Signed-off-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://patchwork.freedesktop.org/patch/msgid/20240502165158.1458959-4-boris.brezillon@collabora.com

+9 -5
+4 -4
drivers/gpu/drm/panthor/panthor_heap.c
··· 253 253 * @pool: Pool to instantiate the heap context from. 254 254 * @initial_chunk_count: Number of chunk allocated at initialization time. 255 255 * Must be at least 1. 256 - * @chunk_size: The size of each chunk. Must be a power of two between 256k 257 - * and 2M. 256 + * @chunk_size: The size of each chunk. Must be page-aligned and lie in the 257 + * [128k:8M] range. 258 258 * @max_chunks: Maximum number of chunks that can be allocated. 259 259 * @target_in_flight: Maximum number of in-flight render passes. 260 260 * @heap_ctx_gpu_va: Pointer holding the GPU address of the allocated heap ··· 284 284 if (initial_chunk_count > max_chunks) 285 285 return -EINVAL; 286 286 287 - if (hweight32(chunk_size) != 1 || 288 - chunk_size < SZ_256K || chunk_size > SZ_2M) 287 + if (!IS_ALIGNED(chunk_size, PAGE_SIZE) || 288 + chunk_size < SZ_128K || chunk_size > SZ_8M) 289 289 return -EINVAL; 290 290 291 291 down_read(&pool->lock);
+5 -1
include/uapi/drm/panthor_drm.h
··· 898 898 /** @initial_chunk_count: Initial number of chunks to allocate. Must be at least one. */ 899 899 __u32 initial_chunk_count; 900 900 901 - /** @chunk_size: Chunk size. Must be a power of two at least 256KB large. */ 901 + /** 902 + * @chunk_size: Chunk size. 903 + * 904 + * Must be page-aligned and lie in the [128k:8M] range. 905 + */ 902 906 __u32 chunk_size; 903 907 904 908 /**