From e18ee14f3bbcc9757d692f000517a22fa645cd42 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Thu, 16 Sep 2021 20:27:40 +0200 Subject: [PATCH] etnaviv: move drm version readout to drm layer It fits here better. Signed-off-by: Christian Gmeiner Tested-by: Philipp Zabel p.zabel@pengutronix.de Reviewed-by: Simon Ser Part-of: --- 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 87a3e36..3e4370b 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 00cf651..f7cc47f 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 65a88c7..0b2c2c8 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 b4d338c..8becb51 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 */ -- 2.7.4