This allows to suppress creating the primary node. Useful for drivers
which don't expose any display functionality, but are render only by
design.
Signed-off-by: Christian König <christian.koenig@xxxxxxx>
---
drivers/gpu/drm/drm_drv.c | 10 ++++++----
drivers/gpu/drm/drm_prime.c | 2 +-
include/drm/drm_drv.h | 7 +++++++
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index d81783f43452..4a525f78a932 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -634,9 +634,11 @@ static int drm_dev_init(struct drm_device *dev,
goto err;
}
- ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY);
- if (ret)
- goto err;
+ if (!drm_core_check_feature(dev, DRIVER_RENDER_ONLY)) {
+ ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY);
+ if (ret)
+ goto err;
+ }
ret = drm_legacy_create_map_hash(dev);
if (ret)
@@ -902,7 +904,7 @@ int drm_dev_register(struct drm_device *dev,
unsigned long flags)
driver->name, driver->major, driver->minor,
driver->patchlevel, driver->date,
dev->dev ? dev_name(dev->dev) : "virtual device",
- dev->primary->index);
+ (dev->primary ?: dev->render)->index);
goto out_unlock;
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index a3f180653b8b..4afd3f15b135 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -740,7 +740,7 @@ int drm_gem_prime_mmap(struct drm_gem_object
*obj, struct vm_area_struct *vma)
}
/* Used by drm_gem_mmap() to lookup the GEM object */
- priv->minor = obj->dev->primary;
+ priv->minor = obj->dev->primary ?: obj->dev->render;
fil->private_data = priv;
ret = drm_vma_node_allow(&obj->vma_node, priv);
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index f6159acb8856..0a1450d47ca2 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -94,6 +94,13 @@ enum drm_driver_feature {
* synchronization of command submission.
*/
DRIVER_SYNCOBJ_TIMELINE = BIT(6),
+ /**
+ * @DRIVER_RENDER_ONLY
+ *
+ * Driver is a render node only driver and don't want to support
the
+ * primary interface.
+ */
+ DRIVER_RENDER_ONLY = BIT(7),