summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c9
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.h12
2 files changed, 13 insertions, 8 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 }
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
index 1789f5ea..6f4e6c2e 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
@@ -991,11 +991,13 @@ struct pmu_pg_stats {
991 991
992/* Choices for pmu_state */ 992/* Choices for pmu_state */
993#define PMU_STATE_OFF 0 /* PMU is off */ 993#define PMU_STATE_OFF 0 /* PMU is off */
994#define PMU_STATE_STARTING 1 /* PMU is booting */ 994#define PMU_STATE_STARTING 1 /* PMU is on, but not booted */
995#define PMU_STATE_ELPG_BOOTED 2 /* ELPG is initialized */ 995#define PMU_STATE_ELPG_BOOTING 2 /* PMU is booting */
996#define PMU_STATE_LOADING_PG_BUF 3 /* Loading PG buf */ 996#define PMU_STATE_ELPG_BOOTED 3 /* ELPG is initialized */
997#define PMU_STATE_LOADING_ZBC 4 /* Loading ZBC buf */ 997#define PMU_STATE_LOADING_PG_BUF 4 /* Loading PG buf */
998#define PMU_STATE_STARTED 5 /* Fully unitialized */ 998#define PMU_STATE_LOADING_ZBC 5 /* Loading ZBC buf */
999#define PMU_STATE_STARTED 6 /* Fully unitialized */
1000
999 1001
1000 1002
1001struct pmu_gk20a { 1003struct pmu_gk20a {