summaryrefslogtreecommitdiff
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-05-15 13:57:09 +0300
committerMrutyunjay Sawant <msawant@nvidia.com>2014-06-04 06:12:59 -0700
commit3d08f7a0fe5521b24653ca5fe2faa1e0a4c5a127 (patch)
tree664afaaee6c7d881733c7a607bdcaa269decb6d3 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
parente28dc2cc86345db626f85304aa4225ac937896bb (diff)
gpu: nvgpu: Remove deferred ELPG enable
Prevent the disable ELPG routine from calling deferred re enablement of ELPG. Remove code related to deferred ELPG enable.. Change-Id: I9401e6e0f26a4e332e50eb38439e2ef6fcb4225d Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/410203 (cherry picked from commit cf9558aa112476072c3abb02b3d6cae94e21a8bd) Reviewed-on: http://git-master/r/413228 Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c54
1 files changed, 2 insertions, 52 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index 28ba20ed070f..eb4e42728366 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -1507,8 +1507,6 @@ int gk20a_init_pmu_reset_enable_hw(struct gk20a *g)
return 0;
}
-static void pmu_elpg_enable_allow(struct work_struct *work);
-
int gk20a_init_pmu_setup_sw(struct gk20a *g)
{
struct pmu_gk20a *pmu = &g->pmu;
@@ -1578,7 +1576,6 @@ int gk20a_init_pmu_setup_sw(struct gk20a *g)
pmu->desc->descriptor_size);
- INIT_DELAYED_WORK(&pmu->elpg_enable, pmu_elpg_enable_allow);
INIT_WORK(&pmu->pg_init, gk20a_init_pmu_setup_hw2_workqueue);
gk20a_init_pmu_vm(mm);
@@ -3238,13 +3235,6 @@ int gk20a_pmu_enable_elpg(struct gk20a *g)
if (pmu->elpg_stat != PMU_ELPG_STAT_OFF)
goto exit_unlock;
- /* if ELPG is not allowed right now, mark that it should be enabled
- * immediately after it is allowed */
- if (!pmu->elpg_enable_allow) {
- pmu->elpg_stat = PMU_ELPG_STAT_OFF_ON_PENDING;
- goto exit_unlock;
- }
-
ret = gk20a_pmu_enable_elpg_locked(g);
exit_unlock:
@@ -3254,30 +3244,7 @@ exit:
return ret;
}
-static void pmu_elpg_enable_allow(struct work_struct *work)
-{
- struct pmu_gk20a *pmu = container_of(to_delayed_work(work),
- struct pmu_gk20a, elpg_enable);
-
- gk20a_dbg_fn("");
-
- mutex_lock(&pmu->elpg_mutex);
-
- /* It is ok to enabled powergating now */
- pmu->elpg_enable_allow = true;
-
- /* do we have pending requests? */
- if (pmu->elpg_stat == PMU_ELPG_STAT_OFF_ON_PENDING) {
- pmu->elpg_stat = PMU_ELPG_STAT_OFF;
- gk20a_pmu_enable_elpg_locked(pmu->g);
- }
-
- mutex_unlock(&pmu->elpg_mutex);
-
- gk20a_dbg_fn("done");
-}
-
-static int gk20a_pmu_disable_elpg_defer_enable(struct gk20a *g, bool enable)
+int gk20a_pmu_disable_elpg(struct gk20a *g)
{
struct pmu_gk20a *pmu = &g->pmu;
struct pmu_cmd cmd;
@@ -3289,9 +3256,6 @@ static int gk20a_pmu_disable_elpg_defer_enable(struct gk20a *g, bool enable)
if (!pmu->elpg_ready || !pmu->initialized)
return 0;
- /* remove the work from queue */
- cancel_delayed_work_sync(&pmu->elpg_enable);
-
mutex_lock(&pmu->elpg_mutex);
pmu->elpg_refcnt--;
@@ -3357,25 +3321,12 @@ static int gk20a_pmu_disable_elpg_defer_enable(struct gk20a *g, bool enable)
}
exit_reschedule:
- if (enable) {
- pmu->elpg_enable_allow = false;
- schedule_delayed_work(&pmu->elpg_enable,
- msecs_to_jiffies(PMU_ELPG_ENABLE_ALLOW_DELAY_MSEC));
- } else
- pmu->elpg_enable_allow = true;
-
-
exit_unlock:
mutex_unlock(&pmu->elpg_mutex);
gk20a_dbg_fn("done");
return ret;
}
-int gk20a_pmu_disable_elpg(struct gk20a *g)
-{
- return gk20a_pmu_disable_elpg_defer_enable(g, true);
-}
-
int gk20a_pmu_perfmon_enable(struct gk20a *g, bool enable)
{
struct pmu_gk20a *pmu = &g->pmu;
@@ -3402,13 +3353,12 @@ int gk20a_pmu_destroy(struct gk20a *g)
return 0;
/* make sure the pending operations are finished before we continue */
- cancel_delayed_work_sync(&pmu->elpg_enable);
cancel_work_sync(&pmu->pg_init);
gk20a_pmu_get_elpg_residency_gating(g, &elpg_ingating_time,
&elpg_ungating_time, &gating_cnt);
- gk20a_pmu_disable_elpg_defer_enable(g, false);
+ gk20a_pmu_disable_elpg(g);
pmu->initialized = false;
/* update the s/w ELPG residency counters */