mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
We right now obtain pm_qos frequency requirments in qos notifier callback gk20a_scale_qos_notify() But now we want to limit GPU frequencies based on frequency limited from devfreq nodes And devfreq requirement should precede over qos requirements Hence, move all frequency estimation and clipping to function gk20a_scale_target() which sets the frequency at the end Bug 200245796 Change-Id: I0572c676dce0acc0917924a11e4c0fb4a9db4e6e Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/1243427 (cherry picked from commit 81c757a3232463d126aecba64ca0c55d8e4423d2) Reviewed-on: http://git-master/r/1239936 Reviewed-by: Aaron Huang <aaronh@nvidia.com> Tested-by: Aaron Huang <aaronh@nvidia.com> Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
67 lines
2.0 KiB
C
67 lines
2.0 KiB
C
/*
|
|
* gk20a clock scaling profile
|
|
*
|
|
* Copyright (c) 2013-2016, 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,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef GK20A_SCALE_H
|
|
#define GK20A_SCALE_H
|
|
|
|
#include <linux/devfreq.h>
|
|
|
|
struct clk;
|
|
|
|
struct gk20a_scale_profile {
|
|
struct device *dev;
|
|
ktime_t last_event_time;
|
|
struct devfreq_dev_profile devfreq_profile;
|
|
struct devfreq_dev_status dev_stat;
|
|
struct notifier_block qos_notify_block;
|
|
unsigned long qos_min_freq;
|
|
unsigned long qos_max_freq;
|
|
void *private_data;
|
|
};
|
|
|
|
/* Initialization and de-initialization for module */
|
|
void gk20a_scale_init(struct device *);
|
|
void gk20a_scale_exit(struct device *);
|
|
void gk20a_scale_hw_init(struct device *dev);
|
|
|
|
#if defined(CONFIG_GK20A_DEVFREQ)
|
|
/*
|
|
* call when performing submit to notify scaling mechanism that the module is
|
|
* in use
|
|
*/
|
|
void gk20a_scale_notify_busy(struct device *);
|
|
void gk20a_scale_notify_idle(struct device *);
|
|
|
|
void gk20a_scale_suspend(struct device *);
|
|
void gk20a_scale_resume(struct device *);
|
|
int gk20a_scale_qos_notify(struct notifier_block *nb,
|
|
unsigned long n, void *p);
|
|
#else
|
|
static inline void gk20a_scale_notify_busy(struct device *dev) {}
|
|
static inline void gk20a_scale_notify_idle(struct device *dev) {}
|
|
static inline void gk20a_scale_suspend(struct device *dev) {}
|
|
static inline void gk20a_scale_resume(struct device *dev) {}
|
|
static inline int gk20a_scale_qos_notify(struct notifier_block *nb,
|
|
unsigned long n, void *p)
|
|
{
|
|
return -ENOSYS;
|
|
}
|
|
#endif
|
|
|
|
#endif
|