diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2014-05-15 13:57:09 +0300 |
---|---|---|
committer | Mrutyunjay Sawant <msawant@nvidia.com> | 2014-06-04 06:12:59 -0700 |
commit | 3d08f7a0fe5521b24653ca5fe2faa1e0a4c5a127 (patch) | |
tree | 664afaaee6c7d881733c7a607bdcaa269decb6d3 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | |
parent | e28dc2cc86345db626f85304aa4225ac937896bb (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.c | 54 |
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 */ |