From a23cebcd60660e703e814e3043112f28c3c4ad05 Mon Sep 17 00:00:00 2001 From: Lars-Ivar Hesselberg Simonsen Date: Fri, 10 Apr 2026 14:22:29 +0200 Subject: [PATCH] panfrost: Add support for 64 bit gpu_id Update the gallium driver's use of gpu_id to support 64 bit gpu_ids. Reviewed-by: Marc Alcala Prieto Reviewed-by: Christoph Pillmayer Part-of: --- src/gallium/drivers/panfrost/pan_blend_cso.c | 4 ++-- src/gallium/drivers/panfrost/pan_blend_cso.h | 4 ++-- src/gallium/drivers/panfrost/pan_device.h | 2 +- src/gallium/drivers/panfrost/pan_fb_preload.c | 6 ++++-- src/gallium/drivers/panfrost/pan_fb_preload.h | 4 ++-- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_blend_cso.c b/src/gallium/drivers/panfrost/pan_blend_cso.c index 4b1ef541e6b..072438e840e 100644 --- a/src/gallium/drivers/panfrost/pan_blend_cso.c +++ b/src/gallium/drivers/panfrost/pan_blend_cso.c @@ -19,7 +19,7 @@ DERIVE_HASH_TABLE(pan_blend_shader_key); void pan_blend_shader_cache_init(struct pan_blend_shader_cache *cache, - unsigned gpu_id, uint32_t gpu_variant, + uint64_t gpu_id, uint32_t gpu_variant, struct pan_pool *bin_pool) { cache->gpu_id = gpu_id; @@ -112,7 +112,7 @@ GENX(pan_blend_get_shader_locked)(struct pan_blend_shader_cache *cache, rt_formats[rt] = GENX(pan_blend_shader_fmt)(key.format); NIR_PASS(_, nir, pan_nir_lower_framebuffer, rt_formats, pan_raw_format_mask_midgard(rt_formats), MAX2(key.nr_samples, 1), - (cache->gpu_id >> 16) < 0x700); + pan_prod_id(cache->gpu_id) < 0x700); #endif struct util_dynarray binary; diff --git a/src/gallium/drivers/panfrost/pan_blend_cso.h b/src/gallium/drivers/panfrost/pan_blend_cso.h index e5c068babfe..caeb6d4bff8 100644 --- a/src/gallium/drivers/panfrost/pan_blend_cso.h +++ b/src/gallium/drivers/panfrost/pan_blend_cso.h @@ -41,7 +41,7 @@ struct panfrost_blend_state { }; struct pan_blend_shader_cache { - unsigned gpu_id; + uint64_t gpu_id; uint32_t gpu_variant; struct pan_pool *bin_pool; struct hash_table *shaders; @@ -58,7 +58,7 @@ struct pan_blend_shader { uint64_t panfrost_get_blend(struct panfrost_batch *batch, unsigned rt); void pan_blend_shader_cache_init(struct pan_blend_shader_cache *cache, - unsigned gpu_id, uint32_t gpu_variant, + uint64_t gpu_id, uint32_t gpu_variant, struct pan_pool *bin_pool); void pan_blend_shader_cache_cleanup(struct pan_blend_shader_cache *cache); diff --git a/src/gallium/drivers/panfrost/pan_device.h b/src/gallium/drivers/panfrost/pan_device.h index ea4be00f43b..f12348c5228 100644 --- a/src/gallium/drivers/panfrost/pan_device.h +++ b/src/gallium/drivers/panfrost/pan_device.h @@ -167,7 +167,7 @@ panfrost_device_fd(const struct panfrost_device *dev) return dev->kmod.dev->fd; } -static inline uint32_t +static inline uint64_t panfrost_device_gpu_id(const struct panfrost_device *dev) { return dev->kmod.dev->props.gpu_id; diff --git a/src/gallium/drivers/panfrost/pan_fb_preload.c b/src/gallium/drivers/panfrost/pan_fb_preload.c index b934c3719ce..591bcda697e 100644 --- a/src/gallium/drivers/panfrost/pan_fb_preload.c +++ b/src/gallium/drivers/panfrost/pan_fb_preload.c @@ -1255,7 +1255,9 @@ pan_preload_emit_pre_frame_dcd(struct pan_fb_preload_cache *cache, * The PAN_ARCH check is redundant but allows the compiler to optimize * when PAN_ARCH < 7. */ - if (PAN_ARCH >= 7 && (cache->gpu_id >> 16) >= 0x7200) + unsigned arch_major = PAN_ARCH_MAJOR(cache->gpu_id); + unsigned arch_minor = PAN_ARCH_MINOR(cache->gpu_id); + if (PAN_ARCH >= 7 && (arch_major == 7 && arch_minor >= 2)) fb->bifrost.pre_post.modes[dcd_idx] = MALI_PRE_POST_FRAME_SHADER_MODE_EARLY_ZS_ALWAYS; else @@ -1397,7 +1399,7 @@ pan_preload_prefill_preload_shader_cache(struct pan_fb_preload_cache *cache) void GENX(pan_fb_preload_cache_init)( - struct pan_fb_preload_cache *cache, unsigned gpu_id, uint32_t gpu_variant, + struct pan_fb_preload_cache *cache, uint64_t gpu_id, uint32_t gpu_variant, struct pan_blend_shader_cache *blend_shader_cache, struct pan_pool *bin_pool, struct pan_pool *desc_pool) { diff --git a/src/gallium/drivers/panfrost/pan_fb_preload.h b/src/gallium/drivers/panfrost/pan_fb_preload.h index 94038d22b8d..c4eac6a057f 100644 --- a/src/gallium/drivers/panfrost/pan_fb_preload.h +++ b/src/gallium/drivers/panfrost/pan_fb_preload.h @@ -17,7 +17,7 @@ struct pan_jc; struct pan_pool; struct pan_fb_preload_cache { - unsigned gpu_id; + uint64_t gpu_id; uint32_t gpu_variant; struct { struct pan_pool *pool; @@ -34,7 +34,7 @@ struct pan_fb_preload_cache { #ifdef PAN_ARCH void GENX(pan_fb_preload_cache_init)( - struct pan_fb_preload_cache *cache, unsigned gpu_id, uint32_t gpu_variant, + struct pan_fb_preload_cache *cache, uint64_t gpu_id, uint32_t gpu_variant, struct pan_blend_shader_cache *blend_shader_cache, struct pan_pool *bin_pool, struct pan_pool *desc_pool);