diff --git a/drivers/gpu/nvgpu/Makefile.linux.configs b/drivers/gpu/nvgpu/Makefile.linux.configs index dd595522b..5515b1b16 100644 --- a/drivers/gpu/nvgpu/Makefile.linux.configs +++ b/drivers/gpu/nvgpu/Makefile.linux.configs @@ -123,10 +123,7 @@ ifeq ($(CONFIG_TEGRA_GR_VIRTUALIZATION),y) CONFIG_NVGPU_GR_VIRTUALIZATION := y endif -# Support for NVGPU VPR -ifeq ($(CONFIG_TEGRA_VPR),y) CONFIG_NVGPU_VPR := y -endif # Support Tegra fuse ifeq ($(CONFIG_TEGRA_KFUSE),y) diff --git a/drivers/gpu/nvgpu/include/nvgpu/vpr.h b/drivers/gpu/nvgpu/include/nvgpu/vpr.h index d069efe64..18a77c9e3 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/vpr.h +++ b/drivers/gpu/nvgpu/include/nvgpu/vpr.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2019-2022, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -25,6 +25,18 @@ #include +#ifdef __KERNEL__ +#include + +/* + * VPR resize is enabled only on 4.9 kernel because kernel core mm changes to + * support it are intrusive and they can't be upstreamed easily. Upstream + * kernel will have support for static VPR. Note that static VPR is + * supported on all kernels. + */ +#define NVGPU_VPR_RESIZE_SUPPORTED (LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)) +#endif /* __KERNEL__ */ + #ifdef CONFIG_NVGPU_VPR bool nvgpu_is_vpr_resize_enabled(void); #else diff --git a/drivers/gpu/nvgpu/os/linux/module.c b/drivers/gpu/nvgpu/os/linux/module.c index cde92284a..4186cc959 100644 --- a/drivers/gpu/nvgpu/os/linux/module.c +++ b/drivers/gpu/nvgpu/os/linux/module.c @@ -1,7 +1,7 @@ /* * GK20A Graphics * - * Copyright (c) 2011-2021, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -26,7 +26,10 @@ #include #include #include -#ifdef CONFIG_NVGPU_VPR + +#include + +#if NVGPU_VPR_RESIZE_SUPPORTED #include #endif #include @@ -1005,7 +1008,7 @@ void gk20a_remove_support(struct gk20a *g) struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); struct sim_nvgpu_linux *sim_linux; -#ifdef CONFIG_NVGPU_VPR +#if NVGPU_VPR_RESIZE_SUPPORTED if (nvgpu_is_enabled(g, NVGPU_SUPPORT_VPR)) { tegra_unregister_idle_unidle(gk20a_do_idle); } @@ -1082,7 +1085,7 @@ static int gk20a_init_support(struct platform_device *pdev) void __iomem *addr; int err = -ENOMEM; -#ifdef CONFIG_NVGPU_VPR +#if NVGPU_VPR_RESIZE_SUPPORTED tegra_register_idle_unidle(gk20a_do_idle, gk20a_do_unidle, g); #endif diff --git a/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c index 0597e93be..d20017d0c 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c @@ -1,7 +1,7 @@ /* * GK20A Tegra Platform Interface * - * Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2014-2022, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -21,10 +21,12 @@ #include #include #include +#include + #if defined(CONFIG_TEGRA_DVFS) #include #endif -#if defined(CONFIG_NVGPU_TEGRA_FUSE) || defined(CONFIG_NVGPU_VPR) +#if defined(CONFIG_NVGPU_TEGRA_FUSE) || NVGPU_VPR_RESIZE_SUPPORTED #include #endif @@ -683,7 +685,9 @@ int gk20a_tegra_init_secure_alloc(struct gk20a_platform *platform) * On simulation platform, VPR is only supported with * vdk frontdoor boot and gpu frontdoor mode. */ +#if NVGPU_VPR_RESIZE_SUPPORTED tegra_unregister_idle_unidle(gk20a_do_idle); +#endif nvgpu_log_info(g, "VPR is not supported on simulation platform"); return 0; @@ -700,7 +704,9 @@ int gk20a_tegra_init_secure_alloc(struct gk20a_platform *platform) /* Some platforms disable VPR. In that case VPR allocations always * fail. Just disable VPR usage in nvgpu in that case. */ if (dma_mapping_error(&tegra_vpr_dev, iova)) { +#if NVGPU_VPR_RESIZE_SUPPORTED tegra_unregister_idle_unidle(gk20a_do_idle); +#endif return 0; } diff --git a/drivers/gpu/nvgpu/os/linux/vpr.c b/drivers/gpu/nvgpu/os/linux/vpr.c index d51c42054..fadd0383e 100644 --- a/drivers/gpu/nvgpu/os/linux/vpr.c +++ b/drivers/gpu/nvgpu/os/linux/vpr.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2019-2022, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -14,9 +14,16 @@ #include #include + +#if NVGPU_VPR_RESIZE_SUPPORTED #include +#endif bool nvgpu_is_vpr_resize_enabled(void) { +#if NVGPU_VPR_RESIZE_SUPPORTED return tegra_is_vpr_resize_enabled(); +#else + return false; +#endif }