Mesa (main): etnaviv: move drm version readout to drm layer

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Oct 1 10:22:21 UTC 2021


Module: Mesa
Branch: main
Commit: e18ee14f3bbcc9757d692f000517a22fa645cd42
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e18ee14f3bbcc9757d692f000517a22fa645cd42

Author: Christian Gmeiner <christian.gmeiner at gmail.com>
Date:   Thu Sep 16 20:27:40 2021 +0200

etnaviv: move drm version readout to drm layer

It fits here better.

Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
Tested-by: Philipp Zabel p.zabel at pengutronix.de
Reviewed-by: Simon Ser <contact at emersion.fr>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12904>

---

 src/etnaviv/drm/etnaviv_device.c             | 25 ++++++++++++++++++++++++-
 src/etnaviv/drm/etnaviv_drmif.h              |  3 +++
 src/etnaviv/drm/etnaviv_priv.h               |  1 +
 src/gallium/drivers/etnaviv/etnaviv_screen.c |  8 +-------
 4 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/etnaviv/drm/etnaviv_device.c b/src/etnaviv/drm/etnaviv_device.c
index 87a3e36faf1..3e4370b96cb 100644
--- a/src/etnaviv/drm/etnaviv_device.c
+++ b/src/etnaviv/drm/etnaviv_device.c
@@ -32,12 +32,30 @@
 
 struct etna_device *etna_device_new(int fd)
 {
-	struct etna_device *dev = calloc(sizeof(*dev), 1);
+	struct etna_device *dev;
 	struct drm_etnaviv_param req = {
 		.param = ETNAVIV_PARAM_SOFTPIN_START_ADDR,
 	};
+	drmVersionPtr version;
 	int ret;
 
+	version = drmGetVersion(fd);
+	if (!version) {
+		ERROR_MSG("cannot get version: %s", strerror(errno));
+		return NULL;
+	}
+
+	dev = calloc(sizeof(*dev), 1);
+	if (!dev) {
+		goto out;
+	}
+
+	dev->drm_version = ETNA_DRM_VERSION(version->version_major,
+					    version->version_minor);
+
+out:
+	drmFreeVersion(version);
+
 	if (!dev)
 		return NULL;
 
@@ -125,3 +143,8 @@ bool etnaviv_device_softpin_capable(struct etna_device *dev)
 {
 	return !!dev->use_softpin;
 }
+
+uint32_t etnaviv_device_version(struct etna_device *dev)
+{
+   return dev->drm_version;
+}
diff --git a/src/etnaviv/drm/etnaviv_drmif.h b/src/etnaviv/drm/etnaviv_drmif.h
index 00cf651816e..f7cc47f9915 100644
--- a/src/etnaviv/drm/etnaviv_drmif.h
+++ b/src/etnaviv/drm/etnaviv_drmif.h
@@ -89,12 +89,15 @@ enum etna_param_id {
 /* device functions:
  */
 
+#define ETNA_DRM_VERSION(major, minor) ((major) << 16 | (minor))
+
 struct etna_device *etna_device_new(int fd);
 struct etna_device *etna_device_new_dup(int fd);
 struct etna_device *etna_device_ref(struct etna_device *dev);
 void etna_device_del(struct etna_device *dev);
 int etna_device_fd(struct etna_device *dev);
 bool etnaviv_device_softpin_capable(struct etna_device *dev);
+uint32_t etnaviv_device_version(struct etna_device *dev);
 
 /* gpu functions:
  */
diff --git a/src/etnaviv/drm/etnaviv_priv.h b/src/etnaviv/drm/etnaviv_priv.h
index 65a88c72849..0b2c2c820d8 100644
--- a/src/etnaviv/drm/etnaviv_priv.h
+++ b/src/etnaviv/drm/etnaviv_priv.h
@@ -65,6 +65,7 @@ struct etna_bo_cache {
 
 struct etna_device {
 	int fd;
+	uint32_t drm_version;
 	int refcnt;
 
 	/* tables to keep track of bo's, to avoid "evil-twin" etna_bo objects:
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index b4d338c27d6..8becb514976 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -49,7 +49,6 @@
 
 #include "drm-uapi/drm_fourcc.h"
 
-#define ETNA_DRM_VERSION(major, minor) ((major) << 16 | (minor))
 #define ETNA_DRM_VERSION_FENCE_FD      ETNA_DRM_VERSION(1, 1)
 #define ETNA_DRM_VERSION_PERFMON       ETNA_DRM_VERSION(1, 2)
 
@@ -969,7 +968,6 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu,
 {
    struct etna_screen *screen = CALLOC_STRUCT(etna_screen);
    struct pipe_screen *pscreen;
-   drmVersionPtr version;
    uint64_t val;
 
    if (!screen)
@@ -986,11 +984,7 @@ etna_screen_create(struct etna_device *dev, struct etna_gpu *gpu,
       goto fail;
    }
 
-   version = drmGetVersion(screen->ro->gpu_fd);
-   screen->drm_version = ETNA_DRM_VERSION(version->version_major,
-                                          version->version_minor);
-   drmFreeVersion(version);
-
+   screen->drm_version = etnaviv_device_version(screen->dev);
    etna_mesa_debug = debug_get_option_etna_mesa_debug();
 
    /* Disable autodisable for correct rendering with TS */



More information about the mesa-commit mailing list