diff --git a/docs/drivers/nvk.rst b/docs/drivers/nvk.rst index e26202a6909..fcaf36bf0cb 100644 --- a/docs/drivers/nvk.rst +++ b/docs/drivers/nvk.rst @@ -72,6 +72,9 @@ specific to NVK: views. ``gart`` Forces all memory to be allocated from system RAM (GART) + ``coherent`` + Forces all memory maps to be coherent with the CPU caches. This only + applies to Tegra devices. .. envvar:: NVK_I_WANT_A_BROKEN_VULKAN_DRIVER diff --git a/src/nouveau/vulkan/nvk_debug.h b/src/nouveau/vulkan/nvk_debug.h index 7888192ee31..e68f3d25e81 100644 --- a/src/nouveau/vulkan/nvk_debug.h +++ b/src/nouveau/vulkan/nvk_debug.h @@ -39,6 +39,9 @@ enum nvk_debug { /* Force all memory allocations to go to GART */ NVK_DEBUG_FORCE_GART = 1ull << 7, + + /* Force all memory allocations to go to GART */ + NVK_DEBUG_FORCE_COHERENT = 1ull << 8, }; #endif /* NVK_DEBUG_H */ diff --git a/src/nouveau/vulkan/nvk_instance.c b/src/nouveau/vulkan/nvk_instance.c index e2413045455..a8d7f1de304 100644 --- a/src/nouveau/vulkan/nvk_instance.c +++ b/src/nouveau/vulkan/nvk_instance.c @@ -89,6 +89,7 @@ nvk_init_debug_flags(struct nvk_instance *instance) { "no_cbuf", NVK_DEBUG_NO_CBUF }, { "edb_bview", NVK_DEBUG_FORCE_EDB_BVIEW }, { "gart", NVK_DEBUG_FORCE_GART }, + { "coherent", NVK_DEBUG_FORCE_COHERENT }, { NULL, 0 }, }; diff --git a/src/nouveau/vulkan/nvkmd/nouveau/nvkmd_nouveau_mem.c b/src/nouveau/vulkan/nvkmd/nouveau/nvkmd_nouveau_mem.c index 11703d764a3..e17600ce70e 100644 --- a/src/nouveau/vulkan/nvkmd/nouveau/nvkmd_nouveau_mem.c +++ b/src/nouveau/vulkan/nvkmd/nouveau/nvkmd_nouveau_mem.c @@ -135,6 +135,9 @@ nvkmd_nouveau_alloc_tiled_mem(struct nvkmd_dev *_dev, nouveau_flags |= NOUVEAU_WS_BO_NO_SHARE; if (dev->base.pdev->dev_info.type == NV_DEVICE_TYPE_SOC) { + if (dev->base.pdev->debug_flags & NVK_DEBUG_FORCE_COHERENT) + flags |= NVKMD_MEM_COHERENT; + /* On Tegra, we have to explicitly request coherent maps by putting the * BO in NOUVEAU_GEM_DOMAIN_COHERENT. */