On 1/14/26 12:46 AM, Tomeu Vizoso wrote:
Using the DRM GPU scheduler infrastructure, with a scheduler for each core.
Contexts are created in all cores, and buffers mapped to all of them as well, so all cores are ready to execute any job.
The job submission code was initially based on Panfrost.
v2:
- Add thames_accel.h UAPI header (Robert Nelson).
Signed-off-by: Tomeu Vizoso tomeu@tomeuvizoso.net
drivers/accel/thames/Makefile | 1 + drivers/accel/thames/thames_core.c | 6 + drivers/accel/thames/thames_drv.c | 19 ++ drivers/accel/thames/thames_job.c | 463 ++++++++++++++++++++++++++++++++++++ drivers/accel/thames/thames_job.h | 51 ++++ drivers/accel/thames/thames_rpmsg.c | 52 ++++ include/uapi/drm/thames_accel.h | 54 +++++ 7 files changed, 646 insertions(+)
diff --git a/include/uapi/drm/thames_accel.h b/include/uapi/drm/thames_accel.h index 0a5a5e5f6637ab474e9effbb6db29c1dd95e56b5..5b35e50826ed95bfcc3709bef33416d2b6d11c70 100644 --- a/include/uapi/drm/thames_accel.h +++ b/include/uapi/drm/thames_accel.h
@@ -75,6 +78,55 @@ struct drm_thames_bo_mmap_offset { __u64 offset; }; +/**
- struct drm_thames_job - A job to be run on the NPU
- The kernel will schedule the execution of this job taking into account its
- dependencies with other jobs. All tasks in the same job will be executed
- sequentially on the same core, to benefit from memory residency in SRAM.
- */
Please make these comments full-fledged kernel-doc comments. E.g.:
+struct drm_thames_job {
- /** Input: BO handle for kernel. */
/** @kernel: input: BO handle for kernel. */
- __u32 kernel;
- /** Input: Size in bytes of the compiled kernel. */
- __u32 kernel_size;
- /** Input: BO handle for params BO. */
- __u32 params;
- /** Input: Size in bytes of the params BO. */
- __u32 params_size;
- /** Input: Pointer to a u32 array of the BOs that are read by the job. */
- __u64 in_bo_handles;
- /** Input: Pointer to a u32 array of the BOs that are written to by the job. */
- __u64 out_bo_handles;
- /** Input: Number of input BO handles passed in (size is that times 4). */
- __u32 in_bo_handle_count;
- /** Input: Number of output BO handles passed in (size is that times 4). */
- __u32 out_bo_handle_count;
+};
+/**
- struct drm_thames_submit - ioctl argument for submitting commands to the NPU.
- The kernel will schedule the execution of these jobs in dependency order.
- */
Same here.
+struct drm_thames_submit {
- /** Input: Pointer to an array of struct drm_thames_job. */
- __u64 jobs;
- /** Input: Number of jobs passed in. */
- __u32 job_count;
- /** Reserved, must be zero. */
- __u32 pad;
+};
linaro-mm-sig@lists.linaro.org