diff --git a/drivers/gpu/nvgpu/include/nvgpu/enabled.h b/drivers/gpu/nvgpu/include/nvgpu/enabled.h index e8692ecea..97c01922c 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/enabled.h +++ b/drivers/gpu/nvgpu/include/nvgpu/enabled.h @@ -90,6 +90,8 @@ struct gk20a; "Use physical scatter tables instead of IOMMU"), \ DEFINE_FLAG(NVGPU_MM_BYPASSES_IOMMU, \ "Some chips (using nvlink) bypass the IOMMU on tegra"), \ + DEFINE_FLAG(NVGPU_DISABLE_L3_SUPPORT, \ + "Disable L3 alloc Bit of the physical address"), \ /* Host Flags */ \ DEFINE_FLAG(NVGPU_HAS_SYNCPOINTS, "GPU has syncpoints"), \ DEFINE_FLAG(NVGPU_SUPPORT_SYNC_FENCE_FDS, \ diff --git a/drivers/gpu/nvgpu/os/linux/driver_common.c b/drivers/gpu/nvgpu/os/linux/driver_common.c index f07eac7b0..93b8d52fe 100644 --- a/drivers/gpu/nvgpu/os/linux/driver_common.c +++ b/drivers/gpu/nvgpu/os/linux/driver_common.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -319,6 +320,8 @@ int nvgpu_probe(struct gk20a *g, struct gk20a_platform *platform = dev_get_drvdata(dev); struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); int err = 0; + struct device_node *np = dev->of_node; + bool disable_l3_alloc = false; err = nvgpu_cic_rm_setup(g); if (err != 0) { @@ -356,6 +359,12 @@ int nvgpu_probe(struct gk20a *g, return err; } + disable_l3_alloc = of_property_read_bool(np, "disable_l3_alloc"); + if (disable_l3_alloc) { + nvgpu_log_info(g, "L3 alloc is disabled"); + nvgpu_set_enabled(g, NVGPU_DISABLE_L3_SUPPORT, true); + } + nvgpu_init_mm_vars(g); err = gk20a_power_node_init(dev); if (err) { diff --git a/drivers/gpu/nvgpu/os/linux/vm.c b/drivers/gpu/nvgpu/os/linux/vm.c index 196de41f8..d9a03d4ec 100644 --- a/drivers/gpu/nvgpu/os/linux/vm.c +++ b/drivers/gpu/nvgpu/os/linux/vm.c @@ -56,8 +56,10 @@ static u32 nvgpu_vm_translate_linux_flags(struct gk20a *g, u32 flags) core_flags |= NVGPU_VM_MAP_IO_COHERENT; if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_UNMAPPED_PTE) core_flags |= NVGPU_VM_MAP_UNMAPPED_PTE; - if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_L3_ALLOC) - core_flags |= NVGPU_VM_MAP_L3_ALLOC; + if (!nvgpu_is_enabled(g, NVGPU_DISABLE_L3_SUPPORT)) { + if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_L3_ALLOC) + core_flags |= NVGPU_VM_MAP_L3_ALLOC; + } if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) core_flags |= NVGPU_VM_MAP_DIRECT_KIND_CTRL; if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_PLATFORM_ATOMIC)