From 6648cfea09a052df00fbff9e75c333499f33e4b3 Mon Sep 17 00:00:00 2001 From: Tejal Kudav Date: Wed, 13 Oct 2021 10:14:10 +0000 Subject: [PATCH] gpu: nvgpu: Disable low power features on AV+L NVGPU does not support low power features on hypervisor based embedded environments.Disable low power features like ELPG, AELPG and railgating on AV+L using the nvgpu_is_hypervisor_mode(). JIRA NVGPU-7283 Change-Id: I930e06ae711ee1485109b7f519a2dacc95b7d74b Signed-off-by: Tejal Kudav Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2610056 Reviewed-by: svcacv Reviewed-by: Alex Waterman Reviewed-by: Vijayakumar Subbu Reviewed-by: mobile promotions GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/driver_common.c | 27 +++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/nvgpu/os/linux/driver_common.c b/drivers/gpu/nvgpu/os/linux/driver_common.c index fbafd696c..2bb521963 100644 --- a/drivers/gpu/nvgpu/os/linux/driver_common.c +++ b/drivers/gpu/nvgpu/os/linux/driver_common.c @@ -204,8 +204,13 @@ static void nvgpu_init_pm_vars(struct gk20a *g) #endif g->ptimer_src_freq = platform->ptimer_src_freq; - nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, - nvgpu_platform_is_simulation(g)? true : platform->can_railgate_init); + if (nvgpu_is_hypervisor_mode(g)) { + nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, false); + platform->can_railgate_init = false; + } else { + nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, + nvgpu_platform_is_simulation(g) ? true : platform->can_railgate_init); + } #ifdef CONFIG_NVGPU_STATIC_POWERGATE g->can_tpc_pg = platform->can_tpc_pg; g->can_gpc_pg = platform->can_gpc_pg; @@ -227,14 +232,20 @@ static void nvgpu_init_pm_vars(struct gk20a *g) g->support_ls_pmu = support_gk20a_pmu(dev_from_gk20a(g)); if (g->support_ls_pmu) { - g->elpg_enabled = - nvgpu_platform_is_silicon(g) ? platform->enable_elpg : false; - g->aelpg_enabled = - nvgpu_platform_is_silicon(g) ? platform->enable_aelpg : false; + if (nvgpu_is_hypervisor_mode(g)) { + g->elpg_enabled = false; + g->aelpg_enabled = false; + g->can_elpg = false; + } else { + g->elpg_enabled = + nvgpu_platform_is_silicon(g) ? platform->enable_elpg : false; + g->aelpg_enabled = + nvgpu_platform_is_silicon(g) ? platform->enable_aelpg : false; + g->can_elpg = + nvgpu_platform_is_silicon(g) ? platform->can_elpg_init : false; + } g->mscg_enabled = nvgpu_platform_is_silicon(g) ? platform->enable_mscg : false; - g->can_elpg = - nvgpu_platform_is_silicon(g) ? platform->can_elpg_init : false; if (nvgpu_is_enabled(g, NVGPU_SUPPORT_MIG)) { g->can_elpg = false; }