]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/panfrost: Expose JM context IOCTLs to UM
authorBoris Brezillon <boris.brezillon@collabora.com>
Wed, 17 Sep 2025 19:18:39 +0000 (20:18 +0100)
committerSteven Price <steven.price@arm.com>
Thu, 18 Sep 2025 13:10:07 +0000 (14:10 +0100)
Minor revision of the driver must be bumped because this expands the
uAPI. On top of that, let UM know about the available priorities so that
they can create contexts with legal priority values.

Reviewed-by: Steven Price <steven.price@arm.com>
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
Signed-off-by: Steven Price <steven.price@arm.com>
Link: https://lore.kernel.org/r/20250917191859.500279-4-adrian.larumbe@collabora.com
drivers/gpu/drm/panfrost/panfrost_drv.c

index be384b18e8fd4f9786d90116d71d2dd22b5804b2..69e72a800cd1e358ce8ee8e424542e1ccc665118 100644 (file)
@@ -109,6 +109,14 @@ static int panfrost_ioctl_get_param(struct drm_device *ddev, void *data, struct
 #endif
                break;
 
+       case DRM_PANFROST_PARAM_ALLOWED_JM_CTX_PRIORITIES:
+               param->value = BIT(PANFROST_JM_CTX_PRIORITY_LOW) |
+                              BIT(PANFROST_JM_CTX_PRIORITY_MEDIUM);
+
+               if (panfrost_high_prio_allowed(file))
+                       param->value |= BIT(PANFROST_JM_CTX_PRIORITY_HIGH);
+               break;
+
        default:
                return -EINVAL;
        }
@@ -286,9 +294,6 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data,
        if (args->pad)
                return -EINVAL;
 
-       if (args->jm_ctx_handle)
-               return -EINVAL;
-
        if (!args->jc)
                return -EINVAL;
 
@@ -552,6 +557,27 @@ err_put_obj:
        return ret;
 }
 
+static int panfrost_ioctl_jm_ctx_create(struct drm_device *dev, void *data,
+                                       struct drm_file *file)
+{
+       return panfrost_jm_ctx_create(file, data);
+}
+
+static int panfrost_ioctl_jm_ctx_destroy(struct drm_device *dev, void *data,
+                                        struct drm_file *file)
+{
+       const struct drm_panfrost_jm_ctx_destroy *args = data;
+
+       if (args->pad)
+               return -EINVAL;
+
+       /* We can't destroy the default context created when the file is opened. */
+       if (!args->handle)
+               return -EINVAL;
+
+       return panfrost_jm_ctx_destroy(file, args->handle);
+}
+
 int panfrost_unstable_ioctl_check(void)
 {
        if (!unstable_ioctls)
@@ -619,6 +645,8 @@ static const struct drm_ioctl_desc panfrost_drm_driver_ioctls[] = {
        PANFROST_IOCTL(PERFCNT_DUMP,    perfcnt_dump,   DRM_RENDER_ALLOW),
        PANFROST_IOCTL(MADVISE,         madvise,        DRM_RENDER_ALLOW),
        PANFROST_IOCTL(SET_LABEL_BO,    set_label_bo,   DRM_RENDER_ALLOW),
+       PANFROST_IOCTL(JM_CTX_CREATE,   jm_ctx_create,  DRM_RENDER_ALLOW),
+       PANFROST_IOCTL(JM_CTX_DESTROY,  jm_ctx_destroy, DRM_RENDER_ALLOW),
 };
 
 static void panfrost_gpu_show_fdinfo(struct panfrost_device *pfdev,
@@ -715,6 +743,8 @@ static void panfrost_debugfs_init(struct drm_minor *minor)
  * - 1.3 - adds JD_REQ_CYCLE_COUNT job requirement for SUBMIT
  *       - adds SYSTEM_TIMESTAMP and SYSTEM_TIMESTAMP_FREQUENCY queries
  * - 1.4 - adds SET_LABEL_BO
+ * - 1.5 - adds JM_CTX_{CREATE,DESTROY} ioctls and extend SUBMIT to allow
+ *        context creation with configurable priorities/affinity
  */
 static const struct drm_driver panfrost_drm_driver = {
        .driver_features        = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ,