diff options
author | Mahantesh Kumbar <mkumbar@nvidia.com> | 2017-06-07 12:56:00 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-06-13 16:19:47 -0400 |
commit | c18364d0c4b3fb6581f937c018cd01fc329601bb (patch) | |
tree | 923ab682435379dc8bad7852c49725bf7f0f5286 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | |
parent | 45355f00e7de9068f403682044f550026fa7e86e (diff) |
gpu: nvgpu: moved pg out from pmu_gk20a.c/h
- moved pg related code to pmu_pg.c under common/pmu folder
PG state machine support methods
PG ACK handlers
AELPG methods
PG enable/disable methods
-prepended with nvgpu_ for elpg/aelpg global methods
by replacing gk20a_
JIRA NVGPU-97
Change-Id: I2148a69ff86b5c5d43c521ff6e241db84afafd82
Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com>
Reviewed-on: http://git-master/r/1498363
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | 50 |
1 files changed, 4 insertions, 46 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h index b5038bd4..55d6f72c 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | |||
@@ -35,51 +35,9 @@ struct nvgpu_firmware; | |||
35 | #define FUSE_GCPLEX_CONFIG_FUSE_0 0x2C8 | 35 | #define FUSE_GCPLEX_CONFIG_FUSE_0 0x2C8 |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #define PMU_PGENG_GR_BUFFER_IDX_INIT (0) | ||
39 | #define PMU_PGENG_GR_BUFFER_IDX_ZBC (1) | ||
40 | #define PMU_PGENG_GR_BUFFER_IDX_FECS (2) | ||
41 | |||
42 | #define PMU_PG_IDLE_THRESHOLD_SIM 1000 | ||
43 | #define PMU_PG_POST_POWERUP_IDLE_THRESHOLD_SIM 4000000 | ||
44 | /* TBD: QT or else ? */ | ||
45 | #define PMU_PG_IDLE_THRESHOLD 15000 | ||
46 | #define PMU_PG_POST_POWERUP_IDLE_THRESHOLD 1000000 | ||
47 | |||
48 | #define PMU_PG_LPWR_FEATURE_RPPG 0x0 | ||
49 | #define PMU_PG_LPWR_FEATURE_MSCG 0x1 | ||
50 | |||
51 | /* state transition : | ||
52 | OFF => [OFF_ON_PENDING optional] => ON_PENDING => ON => OFF | ||
53 | ON => OFF is always synchronized */ | ||
54 | #define PMU_ELPG_STAT_OFF 0 /* elpg is off */ | ||
55 | #define PMU_ELPG_STAT_ON 1 /* elpg is on */ | ||
56 | #define PMU_ELPG_STAT_ON_PENDING 2 /* elpg is off, ALLOW cmd has been sent, wait for ack */ | ||
57 | #define PMU_ELPG_STAT_OFF_PENDING 3 /* elpg is on, DISALLOW cmd has been sent, wait for ack */ | ||
58 | #define PMU_ELPG_STAT_OFF_ON_PENDING 4 /* elpg is off, caller has requested on, but ALLOW | ||
59 | cmd hasn't been sent due to ENABLE_ALLOW delay */ | ||
60 | |||
61 | #define PG_REQUEST_TYPE_GLOBAL 0x0 | ||
62 | #define PG_REQUEST_TYPE_PSTATE 0x1 | ||
63 | |||
64 | #define PMU_MSCG_DISABLED 0 | ||
65 | #define PMU_MSCG_ENABLED 1 | ||
66 | |||
67 | /* Default Sampling Period of AELPG */ | ||
68 | #define APCTRL_SAMPLING_PERIOD_PG_DEFAULT_US (1000000) | ||
69 | |||
70 | /* Default values of APCTRL parameters */ | ||
71 | #define APCTRL_MINIMUM_IDLE_FILTER_DEFAULT_US (100) | ||
72 | #define APCTRL_MINIMUM_TARGET_SAVING_DEFAULT_US (10000) | ||
73 | #define APCTRL_POWER_BREAKEVEN_DEFAULT_US (2000) | ||
74 | #define APCTRL_CYCLES_PER_SAMPLE_MAX_DEFAULT (200) | ||
75 | |||
76 | bool gk20a_pmu_is_interrupted(struct nvgpu_pmu *pmu); | 38 | bool gk20a_pmu_is_interrupted(struct nvgpu_pmu *pmu); |
77 | void gk20a_pmu_isr(struct gk20a *g); | 39 | void gk20a_pmu_isr(struct gk20a *g); |
78 | 40 | ||
79 | int gk20a_pmu_enable_elpg(struct gk20a *g); | ||
80 | int gk20a_pmu_disable_elpg(struct gk20a *g); | ||
81 | int gk20a_pmu_pg_global_enable(struct gk20a *g, u32 enable_pg); | ||
82 | |||
83 | u32 gk20a_pmu_pg_engines_list(struct gk20a *g); | 41 | u32 gk20a_pmu_pg_engines_list(struct gk20a *g); |
84 | u32 gk20a_pmu_pg_feature_list(struct gk20a *g, u32 pg_engine_id); | 42 | u32 gk20a_pmu_pg_feature_list(struct gk20a *g, u32 pg_engine_id); |
85 | 43 | ||
@@ -87,6 +45,8 @@ void gk20a_pmu_save_zbc(struct gk20a *g, u32 entries); | |||
87 | 45 | ||
88 | int gk20a_pmu_perfmon_enable(struct gk20a *g, bool enable); | 46 | int gk20a_pmu_perfmon_enable(struct gk20a *g, bool enable); |
89 | 47 | ||
48 | void gk20a_pmu_pg_idle_counter_config(struct gk20a *g, u32 pg_engine_id); | ||
49 | |||
90 | int gk20a_pmu_mutex_acquire(struct nvgpu_pmu *pmu, u32 id, u32 *token); | 50 | int gk20a_pmu_mutex_acquire(struct nvgpu_pmu *pmu, u32 id, u32 *token); |
91 | int gk20a_pmu_mutex_release(struct nvgpu_pmu *pmu, u32 id, u32 *token); | 51 | int gk20a_pmu_mutex_release(struct nvgpu_pmu *pmu, u32 id, u32 *token); |
92 | 52 | ||
@@ -109,12 +69,10 @@ void pmu_copy_from_dmem(struct nvgpu_pmu *pmu, | |||
109 | u32 src, u8 *dst, u32 size, u8 port); | 69 | u32 src, u8 *dst, u32 size, u8 port); |
110 | int pmu_reset(struct nvgpu_pmu *pmu); | 70 | int pmu_reset(struct nvgpu_pmu *pmu); |
111 | int pmu_bootstrap(struct nvgpu_pmu *pmu); | 71 | int pmu_bootstrap(struct nvgpu_pmu *pmu); |
72 | |||
73 | void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu); | ||
112 | void pmu_dump_falcon_stats(struct nvgpu_pmu *pmu); | 74 | void pmu_dump_falcon_stats(struct nvgpu_pmu *pmu); |
113 | 75 | ||
114 | int gk20a_pmu_ap_send_command(struct gk20a *g, | ||
115 | union pmu_ap_cmd *p_ap_cmd, bool b_block); | ||
116 | int gk20a_aelpg_init(struct gk20a *g); | ||
117 | int gk20a_aelpg_init_and_enable(struct gk20a *g, u8 ctrl_id); | ||
118 | void pmu_enable_irq(struct nvgpu_pmu *pmu, bool enable); | 76 | void pmu_enable_irq(struct nvgpu_pmu *pmu, bool enable); |
119 | int pmu_wait_message_cond(struct nvgpu_pmu *pmu, u32 timeout_ms, | 77 | int pmu_wait_message_cond(struct nvgpu_pmu *pmu, u32 timeout_ms, |
120 | u32 *var, u32 val); | 78 | u32 *var, u32 val); |