diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile index 022259b2e..7a2647d4e 100644 --- a/drivers/gpu/nvgpu/Makefile +++ b/drivers/gpu/nvgpu/Makefile @@ -61,6 +61,20 @@ ifeq ($(CONFIG_NVGPU_IVM_BUILD),y) ccflags-y += -DCONFIG_NVGPU_IVM_BUILD endif +# On Embedded Linux , tegra_prod_defconfig is used as kernel defconfig +# to build the production kernel. Used the variable NV_BUILD_KERNEL_CONFIG_NAME to +# detect the production build, to disable the debug and +# profiling related stuff on nvgpu +# +# Production Defconfig is available on below mentioned path +# https://lmi-hub/source/xref/stage-main_automotive/kernel/kernel-5.10/arch/arm64/configs/tegra_prod_defconfig +# +# The makefile which sets NV_BUILD_KERNEL_CONFIG_NAME is present on +# https://git-master.nvidia.com/r/plugins/gitiles/tegra/build/make/+/refs/changes/74/2809974/8/umbrella/parts/Makefile.kernel +ifeq ($(CONFIG_NVGPU_EMB_LINUX_PROD_BUILD),y) +ccflags-y += -DCONFIG_NVGPU_EMB_LINUX_PROD_BUILD +endif + ccflags-y += -DCONFIG_NVGPU_DETERMINISTIC_CHANNELS ccflags-y += -DCONFIG_NVGPU_STATIC_POWERGATE ccflags-y += -DCONFIG_NVGPU_ACR_LEGACY @@ -510,7 +524,6 @@ nvgpu-$(CONFIG_DEBUG_FS) += \ os/linux/debug_gr.o \ os/linux/debug_fifo.o \ os/linux/debug_ce.o \ - os/linux/debug_pmu.o \ os/linux/debug_pmgr.o \ os/linux/debug_sched.o \ os/linux/debug_allocator.o \ @@ -522,6 +535,10 @@ nvgpu-$(CONFIG_DEBUG_FS) += \ os/linux/swprofile_debugfs.o \ os/linux/debug_gsp.o +ifneq ($(CONFIG_NVGPU_EMB_LINUX_PROD_BUILD),y) +nvgpu-$(CONFIG_DEBUG_FS) += os/linux/debug_pmu.o +endif + nvgpu-$(CONFIG_NVGPU_LOGGING) += os/linux/log.o ifeq ($(CONFIG_NVGPU_TRACK_MEM_USAGE),y) diff --git a/drivers/gpu/nvgpu/Makefile.linux.configs b/drivers/gpu/nvgpu/Makefile.linux.configs index d84450f5c..fa57f7b70 100644 --- a/drivers/gpu/nvgpu/Makefile.linux.configs +++ b/drivers/gpu/nvgpu/Makefile.linux.configs @@ -134,6 +134,23 @@ CONFIG_NVGPU_NVMAP_NEXT := y CONFIG_NVGPU_NVMEM_FUSE := y endif +ifeq ($(NV_BUILD_SYSTEM_TYPE),embedded-linux) +# On Embedded Linux , tegra_prod_defconfig is used as kernel defconfig +# to build the production kernel. Used the variable NV_BUILD_KERNEL_CONFIG_NAME to +# detect the production build, to disable the debug and +# profiling related stuff on nvgpu +# +# Production Defconfig is available on below mentioned path +# https://lmi-hub/source/xref/stage-main_automotive/kernel/kernel-5.10/arch/arm64/configs/tegra_prod_defconfig +# +# The makefile which sets NV_BUILD_KERNEL_CONFIG_NAME is present on +# https://git-master.nvidia.com/r/plugins/gitiles/tegra/build/make/+/refs/changes/74/2809974/8/umbrella/parts/Makefile.kernel + +ifeq ($(NV_BUILD_KERNEL_CONFIG_NAME),tegra_prod_defconfig) +CONFIG_NVGPU_EMB_LINUX_PROD_BUILD := y +endif +endif + CONFIG_NVGPU_IVM_BUILD := y # Set config for OOT module build diff --git a/drivers/gpu/nvgpu/os/linux/debug.c b/drivers/gpu/nvgpu/os/linux/debug.c index 6e7130ccc..08123d618 100644 --- a/drivers/gpu/nvgpu/os/linux/debug.c +++ b/drivers/gpu/nvgpu/os/linux/debug.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017-2022, NVIDIA Corporation. All rights reserved. + * Copyright (C) 2017-2023, 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, @@ -511,7 +511,9 @@ void gk20a_debug_init(struct gk20a *g, const char *debugfs_symlink) &g->runlist_interleave); gr_gk20a_debugfs_init(g); +#ifndef CONFIG_NVGPU_EMB_LINUX_PROD_BUILD gk20a_pmu_debugfs_init(g); +#endif gk20a_railgating_debugfs_init(g); #ifdef CONFIG_NVGPU_SUPPORT_CDE gk20a_cde_debugfs_init(g); diff --git a/drivers/gpu/nvgpu/os/linux/platform_ga10b_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_ga10b_tegra.c index d793dbf8e..2fac16e2b 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_ga10b_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_ga10b_tegra.c @@ -1,7 +1,7 @@ /* * GA10B Tegra Platform Interface * - * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2016-2023, 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, @@ -749,13 +749,21 @@ struct gk20a_platform ga10b_tegra_platform = { .enable_slcg = true, .enable_blcg = true, .enable_elcg = true, - .enable_perfmon = true, /* power management configuration JIRA NVGPU-4683 */ +#ifndef CONFIG_NVGPU_EMB_LINUX_PROD_BUILD + .enable_perfmon = true, .enable_elpg = true, - .enable_elpg_ms = false, .can_elpg_init = true, .enable_aelpg = true, +#else + /* Disable elpg on embedded linux prod build */ + .enable_perfmon = false, + .enable_elpg = false, + .can_elpg_init = false, + .enable_aelpg = false, +#endif + .enable_elpg_ms = false, /* power management callbacks */ .suspend = ga10b_tegra_suspend, diff --git a/drivers/gpu/nvgpu/os/linux/sysfs.c b/drivers/gpu/nvgpu/os/linux/sysfs.c index ed9379e87..291129ee0 100644 --- a/drivers/gpu/nvgpu/os/linux/sysfs.c +++ b/drivers/gpu/nvgpu/os/linux/sysfs.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2011-2023, 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, @@ -434,6 +434,7 @@ static ssize_t is_railgated_show(struct device *dev, } static DEVICE_ATTR(is_railgated, S_IRUGO, is_railgated_show, NULL); +#ifndef CONFIG_NVGPU_EMB_LINUX_PROD_BUILD static ssize_t counters_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -531,6 +532,7 @@ static ssize_t elpg_enable_read(struct device *dev, } static DEVICE_ATTR(elpg_enable, ROOTRW, elpg_enable_read, elpg_enable_store); +#endif static ssize_t ldiv_slowdown_factor_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) @@ -663,6 +665,7 @@ static ssize_t mscg_enable_read(struct device *dev, static DEVICE_ATTR(mscg_enable, ROOTRW, mscg_enable_read, mscg_enable_store); +#ifndef CONFIG_NVGPU_EMB_LINUX_PROD_BUILD static ssize_t aelpg_param_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { @@ -787,7 +790,7 @@ static ssize_t aelpg_enable_read(struct device *dev, static DEVICE_ATTR(aelpg_enable, ROOTRW, aelpg_enable_read, aelpg_enable_store); - +#endif static ssize_t allow_all_enable_read(struct device *dev, struct device_attribute *attr, char *buf) @@ -1495,24 +1498,27 @@ void nvgpu_remove_sysfs(struct device *dev) device_remove_file(dev, &dev_attr_ptimer_scale_factor); device_remove_file(dev, &dev_attr_ptimer_ref_freq); device_remove_file(dev, &dev_attr_ptimer_src_freq); - device_remove_file(dev, &dev_attr_elpg_enable); device_remove_file(dev, &dev_attr_mscg_enable); device_remove_file(dev, &dev_attr_emc3d_ratio); device_remove_file(dev, &dev_attr_ldiv_slowdown_factor); device_remove_file(dev, &dev_attr_fmax_at_vmin_safe); +#ifndef CONFIG_NVGPU_EMB_LINUX_PROD_BUILD + device_remove_file(dev, &dev_attr_elpg_enable); device_remove_file(dev, &dev_attr_counters); device_remove_file(dev, &dev_attr_counters_reset); device_remove_file(dev, &dev_attr_load); + device_remove_file(dev, &dev_attr_aelpg_param); + device_remove_file(dev, &dev_attr_aelpg_enable); +#endif + device_remove_file(dev, &dev_attr_railgate_delay); device_remove_file(dev, &dev_attr_is_railgated); #ifdef CONFIG_PM device_remove_file(dev, &dev_attr_force_idle); device_remove_file(dev, &dev_attr_railgate_enable); #endif - device_remove_file(dev, &dev_attr_aelpg_param); - device_remove_file(dev, &dev_attr_aelpg_enable); device_remove_file(dev, &dev_attr_allow_all); device_remove_file(dev, &dev_attr_tpc_fs_mask); device_remove_file(dev, &dev_attr_tpc_pg_mask); @@ -1570,24 +1576,25 @@ int nvgpu_create_sysfs(struct device *dev) error |= device_create_file(dev, &dev_attr_ptimer_scale_factor); error |= device_create_file(dev, &dev_attr_ptimer_ref_freq); error |= device_create_file(dev, &dev_attr_ptimer_src_freq); - error |= device_create_file(dev, &dev_attr_elpg_enable); error |= device_create_file(dev, &dev_attr_mscg_enable); error |= device_create_file(dev, &dev_attr_emc3d_ratio); error |= device_create_file(dev, &dev_attr_ldiv_slowdown_factor); - error |= device_create_file(dev, &dev_attr_fmax_at_vmin_safe); +#ifndef CONFIG_NVGPU_EMB_LINUX_PROD_BUILD error |= device_create_file(dev, &dev_attr_counters); error |= device_create_file(dev, &dev_attr_counters_reset); error |= device_create_file(dev, &dev_attr_load); + error |= device_create_file(dev, &dev_attr_elpg_enable); + error |= device_create_file(dev, &dev_attr_aelpg_param); + error |= device_create_file(dev, &dev_attr_aelpg_enable); +#endif error |= device_create_file(dev, &dev_attr_railgate_delay); error |= device_create_file(dev, &dev_attr_is_railgated); #ifdef CONFIG_PM error |= device_create_file(dev, &dev_attr_force_idle); error |= device_create_file(dev, &dev_attr_railgate_enable); #endif - error |= device_create_file(dev, &dev_attr_aelpg_param); - error |= device_create_file(dev, &dev_attr_aelpg_enable); error |= device_create_file(dev, &dev_attr_allow_all); error |= device_create_file(dev, &dev_attr_tpc_fs_mask); error |= device_create_file(dev, &dev_attr_tpc_pg_mask);