From e1c6748cf4cd3ee2b6ac9d37bd5850538459ebef Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Wed, 28 Feb 2024 09:23:24 +0100 Subject: [PATCH] etnaviv: drm: Query some id values in etna_gpu_new(..) We want to fully initialise etna_device_info. We only query the kernel for these values if the drm driver is recent enough. Signed-off-by: Christian Gmeiner Reviewed-by: Lucas Stach Part-of: --- src/etnaviv/common/etna_core_info.h | 3 +++ src/etnaviv/drm/etnaviv_gpu.c | 12 +++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/etnaviv/common/etna_core_info.h b/src/etnaviv/common/etna_core_info.h index 3f838d3da60..247bbb8eeda 100644 --- a/src/etnaviv/common/etna_core_info.h +++ b/src/etnaviv/common/etna_core_info.h @@ -67,6 +67,9 @@ enum etna_feature { struct etna_core_info { uint32_t model; uint32_t revision; + uint32_t product_id; + uint32_t eco_id; + uint32_t customer_id; BITSET_DECLARE(feature, ETNA_FEATURE_NUM); }; diff --git a/src/etnaviv/drm/etnaviv_gpu.c b/src/etnaviv/drm/etnaviv_gpu.c index 1d5e6ec5c63..a5d9a7427fb 100644 --- a/src/etnaviv/drm/etnaviv_gpu.c +++ b/src/etnaviv/drm/etnaviv_gpu.c @@ -181,6 +181,12 @@ struct etna_gpu *etna_gpu_new(struct etna_device *dev, unsigned int core) DEBUG_MSG(" GPU model: 0x%x (rev %x)", gpu->info.model, gpu->info.revision); + if (dev->drm_version >= ETNA_DRM_VERSION(1, 4)) { + gpu->info.product_id = get_param(dev, core, ETNAVIV_PARAM_GPU_PRODUCT_ID); + gpu->info.customer_id = get_param(dev, core, ETNAVIV_PARAM_GPU_CUSTOMER_ID); + gpu->info.eco_id = get_param(dev, core, ETNAVIV_PARAM_GPU_ECO_ID); + } + query_features_from_kernel(gpu); return gpu; @@ -285,13 +291,13 @@ int etna_gpu_get_param(struct etna_gpu *gpu, enum etna_param_id param, *value = get_param(dev, core, ETNA_SOFTPIN_START_ADDR); return 0; case ETNA_GPU_PRODUCT_ID: - *value = get_param(dev, core, ETNA_GPU_PRODUCT_ID); + *value = gpu->info.product_id; return 0; case ETNA_GPU_CUSTOMER_ID: - *value = get_param(dev, core, ETNA_GPU_CUSTOMER_ID); + *value = gpu->info.customer_id; return 0; case ETNA_GPU_ECO_ID: - *value = get_param(dev, core, ETNA_GPU_ECO_ID); + *value = gpu->info.eco_id; return 0; case ETNA_GPU_NN_CORE_COUNT: *value = get_param(dev, core, ETNA_GPU_NN_CORE_COUNT);