From 7049d31676bd727f560672e7d98d9c818b9c97ee Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Sat, 31 Aug 2024 11:52:42 +0200 Subject: [PATCH] panvk: Add a read-write non-cached memory pool for CSF events Events cross the device boundary and can be read/written by the host. We could add the necessary cache flush and made those GPU-cached, but it's way simpler to allocate non-cached memory. Signed-off-by: Boris Brezillon Reviewed-by: Rebecca Mckeever Reviewed-by: Mary Guillemard Reviewed-by: Lars-Ivar Hesselberg Simonsen Reviewed-by: John Anthony Acked-by: Erik Faye-Lund Part-of: --- src/panfrost/vulkan/panvk_device.h | 1 + src/panfrost/vulkan/panvk_vX_device.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/panfrost/vulkan/panvk_device.h b/src/panfrost/vulkan/panvk_device.h index 15b53b3f79e..b568d3af818 100644 --- a/src/panfrost/vulkan/panvk_device.h +++ b/src/panfrost/vulkan/panvk_device.h @@ -69,6 +69,7 @@ struct panvk_device { struct { struct panvk_pool rw; + struct panvk_pool rw_nc; struct panvk_pool exec; } mempools; diff --git a/src/panfrost/vulkan/panvk_vX_device.c b/src/panfrost/vulkan/panvk_vX_device.c index a8e7fa6d093..114cb6455e4 100644 --- a/src/panfrost/vulkan/panvk_vX_device.c +++ b/src/panfrost/vulkan/panvk_vX_device.c @@ -61,7 +61,7 @@ panvk_device_init_mempools(struct panvk_device *dev) struct panvk_pool_properties rw_pool_props = { .create_flags = 0, .slab_size = 16 * 1024, - .label = "Device RW memory pool", + .label = "Device RW cached memory pool", .owns_bos = false, .needs_locking = true, .prealloc = false, @@ -69,6 +69,17 @@ panvk_device_init_mempools(struct panvk_device *dev) panvk_pool_init(&dev->mempools.rw, dev, NULL, &rw_pool_props); + struct panvk_pool_properties rw_nc_pool_props = { + .create_flags = PAN_KMOD_BO_FLAG_GPU_UNCACHED, + .slab_size = 16 * 1024, + .label = "Device RW uncached memory pool", + .owns_bos = false, + .needs_locking = true, + .prealloc = false, + }; + + panvk_pool_init(&dev->mempools.rw_nc, dev, NULL, &rw_nc_pool_props); + struct panvk_pool_properties exec_pool_props = { .create_flags = PAN_KMOD_BO_FLAG_EXECUTABLE, .slab_size = 16 * 1024,