mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: register pm_qos min & max frequency notifiers
nvpmodel updates the devfreq frequency limits as per power requirements for specific chip. Clock arbiter ignored these limits and set clock to maximum supported frequency which may lead to leaking power and over heating. Add support to get the devfreq limits by registering PM_QOS notifiers. Note that with this patch we enable CONFIG_GK20A_PM_QOS when PM_DEVFREQ is enabled. So it will be enabled for all supported kernels (4.9, 4.14 kernels continue to support this. For 5.10+ kernels notifiers added in this patch will be used. Thermal framework related notifiers for kernels after 4.14 will not be registered as those use downstream interfaces that are not available.) We maintain devfreq min/max limits in the scale profile and update those in the notifier calls. We use these limits to clamp the frequency in the clock arbiter. Bug 3852824 Change-Id: I734a9fb080fee1a91e9b5da071b662dbd9a18682 Signed-off-by: Sagar Kamble <skamble@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2822686 Tested-by: Rajkumar Kasirajan <rkasirajan@nvidia.com> Reviewed-by: Rajesh Devaraj <rdevaraj@nvidia.com> Reviewed-by: Dinesh T <dt@nvidia.com> Reviewed-by: Rajkumar Kasirajan <rkasirajan@nvidia.com> Reviewed-by: Ankur Kishore <ankkishore@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
a432d2adf3
commit
eacaf8cec2
@@ -245,6 +245,8 @@ done:
|
||||
|
||||
#ifdef CONFIG_GK20A_PM_QOS
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
|
||||
|
||||
static int vgpu_qos_notify(struct notifier_block *nb,
|
||||
unsigned long n, void *data)
|
||||
{
|
||||
@@ -297,6 +299,7 @@ static void vgpu_pm_qos_remove(struct device *dev)
|
||||
g->scale_profile = NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int vgpu_pm_init(struct device *dev)
|
||||
@@ -315,9 +318,11 @@ static int vgpu_pm_init(struct device *dev)
|
||||
gk20a_scale_init(dev);
|
||||
|
||||
#ifdef CONFIG_GK20A_PM_QOS
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
|
||||
err = vgpu_pm_qos_init(dev);
|
||||
if (err)
|
||||
return err;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return err;
|
||||
@@ -517,7 +522,9 @@ int vgpu_remove(struct platform_device *pdev)
|
||||
nvgpu_mutex_destroy(&l->dmabuf_priv_list_lock);
|
||||
|
||||
#ifdef CONFIG_GK20A_PM_QOS
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
|
||||
vgpu_pm_qos_remove(dev);
|
||||
#endif
|
||||
#endif
|
||||
if (g->remove_support)
|
||||
g->remove_support(g);
|
||||
|
||||
Reference in New Issue
Block a user