From adcd8411dff103b2bcbc6f4ea209e93eaae60d1e Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Fri, 19 Sep 2025 17:39:44 +0200 Subject: [PATCH] panvk: Don't expose low/high priority queues on Bifrost The JM backend logic is not ready for that yet. Fixes: f04dbf0bc0bf ("pan/kmod: query and cache available context priorities from KMD") Signed-off-by: Boris Brezillon Reviewed-by: Mary Guillemard Reviewed-by: Faith Ekstrand Part-of: --- src/panfrost/vulkan/panvk_physical_device.c | 10 ++++++++++ src/panfrost/vulkan/panvk_vX_device.c | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 76fece042a3..a366ca1c8e6 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -369,11 +369,21 @@ panvk_fill_global_priority(const struct panvk_physical_device *physical_device, uint32_t family_idx, VkQueueFamilyGlobalPriorityPropertiesKHR *prio) { + const unsigned arch = pan_arch(physical_device->kmod.props.gpu_id); uint32_t prio_idx = 0; + switch (family_idx) { case PANVK_QUEUE_FAMILY_GPU: { enum pan_kmod_group_allow_priority_flags prio_mask = physical_device->kmod.props.allowed_group_priorities_mask; + + /* Non-medium priority context is not hooked-up in the JM backend, even + * though the panfrost kmod advertize it. Manually filter non-medium + * priority for now. + */ + if (arch < 10) + prio_mask &= PAN_KMOD_GROUP_ALLOW_PRIORITY_MEDIUM; + if (prio_mask & PAN_KMOD_GROUP_ALLOW_PRIORITY_LOW) prio->priorities[prio_idx++] = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR; if (prio_mask & PAN_KMOD_GROUP_ALLOW_PRIORITY_MEDIUM) diff --git a/src/panfrost/vulkan/panvk_vX_device.c b/src/panfrost/vulkan/panvk_vX_device.c index feaa5f49334..c2a84424818 100644 --- a/src/panfrost/vulkan/panvk_vX_device.c +++ b/src/panfrost/vulkan/panvk_vX_device.c @@ -205,6 +205,7 @@ static VkResult check_global_priority(const struct panvk_physical_device *phys_dev, const VkDeviceQueueCreateInfo *create_info) { + const unsigned arch = pan_arch(phys_dev->kmod.props.gpu_id); const VkDeviceQueueGlobalPriorityCreateInfoKHR *priority_info = vk_find_struct_const(create_info->pNext, DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR); @@ -219,6 +220,13 @@ check_global_priority(const struct panvk_physical_device *phys_dev, enum pan_kmod_group_allow_priority_flags allowed_prio_mask = phys_dev->kmod.props.allowed_group_priorities_mask; + /* Non-medium priority context is not hooked-up in the JM backend, even + * though the panfrost kmod advertize it. Manually filter non-medium + * priority for now. + */ + if (arch < 10) + allowed_prio_mask &= PAN_KMOD_GROUP_ALLOW_PRIORITY_MEDIUM; + if (requested_prio & allowed_prio_mask) return VK_SUCCESS;