diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 9 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | 12 |
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 | ||
1001 | struct pmu_gk20a { | 1003 | struct pmu_gk20a { |