summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-06-18 08:37:44 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:10:18 -0400
commitb57c6501c75b478b08b9ea6e226c55e5039b5c86 (patch)
treec2e4ab65e67b233c10b2ae5c6eeaad134ce02343 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
parent7878824093972a6b8805dd8c00f1838e24a61ec0 (diff)
gu: nvgpu: Add PMU state ELPG booting
Add PMU state ELPG booting. Prevent ISR processing when PMU is in OFF state. Bug 200006956 Change-Id: Ibcf69a2d81965cc87f520bf864c4425681f04531 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/424769
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index ac66dbef..cfbdceae 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -2017,6 +2017,8 @@ int gk20a_init_pmu_support(struct gk20a *g)
2017 err = g->ops.pmu.pmu_setup_hw_and_bootstrap(g); 2017 err = g->ops.pmu.pmu_setup_hw_and_bootstrap(g);
2018 if (err) 2018 if (err)
2019 return err; 2019 return err;
2020
2021 pmu->pmu_state = PMU_STATE_STARTING;
2020 } 2022 }
2021 2023
2022 return err; 2024 return err;
@@ -2047,7 +2049,7 @@ static void pmu_handle_pg_elpg_msg(struct gk20a *g, struct pmu_msg *msg,
2047 case PMU_PG_ELPG_MSG_DISALLOW_ACK: 2049 case PMU_PG_ELPG_MSG_DISALLOW_ACK:
2048 gk20a_dbg_pmu("DISALLOW is acknowledged from PMU"); 2050 gk20a_dbg_pmu("DISALLOW is acknowledged from PMU");
2049 pmu->elpg_stat = PMU_ELPG_STAT_OFF; 2051 pmu->elpg_stat = PMU_ELPG_STAT_OFF;
2050 if (pmu->pmu_state == PMU_STATE_STARTING) 2052 if (pmu->pmu_state == PMU_STATE_ELPG_BOOTING)
2051 pmu->pmu_state = PMU_STATE_ELPG_BOOTED; 2053 pmu->pmu_state = PMU_STATE_ELPG_BOOTED;
2052 schedule_work(&pmu->pg_init); 2054 schedule_work(&pmu->pg_init);
2053 break; 2055 break;
@@ -2147,7 +2149,7 @@ static int pmu_init_powergating(struct pmu_gk20a *pmu)
2147 /* start with elpg disabled until first enable call */ 2149 /* start with elpg disabled until first enable call */
2148 pmu->elpg_refcnt = 0; 2150 pmu->elpg_refcnt = 0;
2149 2151
2150 pmu->pmu_state = PMU_STATE_STARTING; 2152 pmu->pmu_state = PMU_STATE_ELPG_BOOTING;
2151 2153
2152 return 0; 2154 return 0;
2153} 2155}
@@ -2891,7 +2893,8 @@ void gk20a_pmu_isr(struct gk20a *g)
2891 2893
2892 gk20a_dbg_pmu("received falcon interrupt: 0x%08x", intr); 2894 gk20a_dbg_pmu("received falcon interrupt: 0x%08x", intr);
2893 2895
2894 if (!intr) { 2896 if (!intr || pmu->pmu_state == PMU_STATE_OFF) {
2897 gk20a_writel(g, pwr_falcon_irqsclr_r(), intr);
2895 mutex_unlock(&pmu->isr_mutex); 2898 mutex_unlock(&pmu->isr_mutex);
2896 return; 2899 return;
2897 } 2900 }