diff --git a/src/panfrost/vulkan/panvk_instance.c b/src/panfrost/vulkan/panvk_instance.c index b72b59463ff..d5bade584f4 100644 --- a/src/panfrost/vulkan/panvk_instance.c +++ b/src/panfrost/vulkan/panvk_instance.c @@ -47,6 +47,7 @@ static const struct debug_control panvk_debug_options[] = { {"force_blackhole", PANVK_DEBUG_FORCE_BLACKHOLE}, {"wsi_afbc", PANVK_DEBUG_WSI_AFBC}, {"no_wb_mmap", PANVK_DEBUG_NO_WB_MMAP}, + {"no_user_mmap_sync", PANVK_DEBUG_NO_USER_MMAP_SYNC}, {NULL, 0}, }; diff --git a/src/panfrost/vulkan/panvk_instance.h b/src/panfrost/vulkan/panvk_instance.h index cb4df8d59ae..bf474f6a201 100644 --- a/src/panfrost/vulkan/panvk_instance.h +++ b/src/panfrost/vulkan/panvk_instance.h @@ -31,6 +31,7 @@ enum panvk_debug_flags { PANVK_DEBUG_FORCE_BLACKHOLE = 1 << 12, PANVK_DEBUG_WSI_AFBC = 1 << 13, PANVK_DEBUG_NO_WB_MMAP = 1 << 14, + PANVK_DEBUG_NO_USER_MMAP_SYNC = 1 << 15, }; extern uint64_t panvk_debug; diff --git a/src/panfrost/vulkan/panvk_physical_device.c b/src/panfrost/vulkan/panvk_physical_device.c index 3289c05303f..2fb3cb82e56 100644 --- a/src/panfrost/vulkan/panvk_physical_device.c +++ b/src/panfrost/vulkan/panvk_physical_device.c @@ -97,8 +97,12 @@ create_kmod_dev(struct panvk_physical_device *device, if (PANVK_DEBUG(STARTUP)) mesa_logi("Found compatible device '%s'.", path); - device->kmod.dev = pan_kmod_dev_create(fd, PAN_KMOD_DEV_FLAG_OWNS_FD, - &instance->kmod.allocator); + uint32_t flags = PAN_KMOD_DEV_FLAG_OWNS_FD; + + if (PANVK_DEBUG(NO_USER_MMAP_SYNC)) + flags |= PAN_KMOD_DEV_FLAG_MMAP_SYNC_THROUGH_KERNEL; + + device->kmod.dev = pan_kmod_dev_create(fd, flags, &instance->kmod.allocator); if (!device->kmod.dev) { close(fd); diff --git a/src/panfrost/vulkan/panvk_vX_device.c b/src/panfrost/vulkan/panvk_vX_device.c index b0f049a29bd..d388030f3d4 100644 --- a/src/panfrost/vulkan/panvk_vX_device.c +++ b/src/panfrost/vulkan/panvk_vX_device.c @@ -393,9 +393,9 @@ panvk_per_arch(create_device)(struct panvk_physical_device *physical_device, .free = panvk_kmod_free, .priv = &device->vk.alloc, }; - device->kmod.dev = - pan_kmod_dev_create(os_dupfd_cloexec(physical_device->kmod.dev->fd), - PAN_KMOD_DEV_FLAG_OWNS_FD, &device->kmod.allocator); + device->kmod.dev = pan_kmod_dev_create( + os_dupfd_cloexec(physical_device->kmod.dev->fd), + physical_device->kmod.dev->flags, &device->kmod.allocator); if (!device->kmod.dev) { result = panvk_errorf(instance, VK_ERROR_OUT_OF_HOST_MEMORY,