diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2014-05-14 08:22:49 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:10:05 -0400 |
commit | 6b33379c55a8368ce9e5ed1381f9aeeebe383dfe (patch) | |
tree | 625ae2366c0b21d9c4b18255f691f506debfcbfb /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | |
parent | cd13ee4aafcdb0206078e9e41aca53107235bbed (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.h | 14 |
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 | |||
990 | struct pmu_gk20a { | 998 | struct 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 | ||
1055 | int gk20a_init_pmu_support(struct gk20a *g); | 1063 | int gk20a_init_pmu_support(struct gk20a *g); |
1056 | int gk20a_init_pmu_setup_hw2(struct gk20a *g); | 1064 | int gk20a_init_pmu_bind_fecs(struct gk20a *g); |
1057 | 1065 | ||
1058 | void gk20a_pmu_isr(struct gk20a *g); | 1066 | void gk20a_pmu_isr(struct gk20a *g); |
1059 | 1067 | ||