summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
diff options
context:
space:
mode:
authorArto Merilainen <amerilainen@nvidia.com>2014-08-06 02:30:11 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:10:45 -0400
commitb33020008b727d75827d670ca7a6c969769ca1a0 (patch)
tree387fd7b91d0bad4e287d939e75babba2b3abdb80 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
parent273f754cb518c8133c1c19d23d58fab533b1cf0a (diff)
gpu: nvgpu: Add sw shadow for load value
Reading the load value may increase CPU power consumption temprorarily. In most cases we are ok with a value that was read a moment earlier. This patch introduces a software shadow for gpu load. The shadow is updated before starting scaling and all scaling code paths use the sw shadow. Change-Id: I53d2ccb8e7f83147f411a14d3104d890dd9af9a3 Signed-off-by: Arto Merilainen <amerilainen@nvidia.com> Reviewed-on: http://git-master/r/453347 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index 7c441f53..06e7a4e6 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -3677,16 +3677,22 @@ int gk20a_pmu_destroy(struct gk20a *g)
3677 3677
3678int gk20a_pmu_load_norm(struct gk20a *g, u32 *load) 3678int gk20a_pmu_load_norm(struct gk20a *g, u32 *load)
3679{ 3679{
3680 *load = g->pmu.load_shadow;
3681 return 0;
3682}
3683
3684int gk20a_pmu_load_update(struct gk20a *g)
3685{
3680 struct pmu_gk20a *pmu = &g->pmu; 3686 struct pmu_gk20a *pmu = &g->pmu;
3681 u16 _load = 0; 3687 u16 _load = 0;
3682 3688
3683 if (!pmu->perfmon_ready) { 3689 if (!pmu->perfmon_ready) {
3684 *load = 0; 3690 pmu->load_shadow = 0;
3685 return 0; 3691 return 0;
3686 } 3692 }
3687 3693
3688 pmu_copy_from_dmem(pmu, pmu->sample_buffer, (u8 *)&_load, 2, 0); 3694 pmu_copy_from_dmem(pmu, pmu->sample_buffer, (u8 *)&_load, 2, 0);
3689 *load = _load / 10; 3695 pmu->load_shadow = _load / 10;
3690 3696
3691 return 0; 3697 return 0;
3692} 3698}