summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-05-14 08:22:49 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:10:05 -0400
commit6b33379c55a8368ce9e5ed1381f9aeeebe383dfe (patch)
tree625ae2366c0b21d9c4b18255f691f506debfcbfb /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
parentcd13ee4aafcdb0206078e9e41aca53107235bbed (diff)
gpu: nvgpu: Rewrite PMU boot-up sequence
Rewrite PMU boot sequence as a state machine. At PMU power-up send initial messages, and reset state machine. At each reply from PMU, do the next stage of PMU boot and set state. As now PMU and FECS boot are independent, we need to ensure engine idle before saving ZBC. Change-Id: I1ea747ab794ef08f1784eeabfdae7655d585ff21 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/410205
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.h14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
index 8aaea33f..2843d483 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
@@ -987,6 +987,14 @@ struct pmu_pg_stats {
987#define PMU_FALCON_REG_RSVD2 (31) 987#define PMU_FALCON_REG_RSVD2 (31)
988#define PMU_FALCON_REG_SIZE (32) 988#define PMU_FALCON_REG_SIZE (32)
989 989
990/* Choices for pmu_state */
991#define PMU_STATE_OFF 0 /* PMU is off */
992#define PMU_STATE_STARTING 1 /* PMU is booting */
993#define PMU_STATE_ELPG_BOOTED 2 /* ELPG is initialized */
994#define PMU_STATE_LOADING_PG_BUF 3 /* Loading PG buf */
995#define PMU_STATE_LOADING_ZBC 4 /* Loading ZBC buf */
996#define PMU_STATE_STARTED 5 /* Fully unitialized */
997
990struct pmu_gk20a { 998struct pmu_gk20a {
991 999
992 struct gk20a *g; 1000 struct gk20a *g;
@@ -1022,9 +1030,9 @@ struct pmu_gk20a {
1022 1030
1023 u32 stat_dmem_offset; 1031 u32 stat_dmem_offset;
1024 1032
1025 bool elpg_ready;
1026 u32 elpg_stat; 1033 u32 elpg_stat;
1027 wait_queue_head_t pg_wq; 1034
1035 int pmu_state;
1028 1036
1029#define PMU_ELPG_ENABLE_ALLOW_DELAY_MSEC 1 /* msec */ 1037#define PMU_ELPG_ENABLE_ALLOW_DELAY_MSEC 1 /* msec */
1030 struct work_struct pg_init; 1038 struct work_struct pg_init;
@@ -1053,7 +1061,7 @@ struct pmu_gk20a {
1053}; 1061};
1054 1062
1055int gk20a_init_pmu_support(struct gk20a *g); 1063int gk20a_init_pmu_support(struct gk20a *g);
1056int gk20a_init_pmu_setup_hw2(struct gk20a *g); 1064int gk20a_init_pmu_bind_fecs(struct gk20a *g);
1057 1065
1058void gk20a_pmu_isr(struct gk20a *g); 1066void gk20a_pmu_isr(struct gk20a *g);
1059 1067