summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2017-06-07 12:56:00 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-06-13 16:19:47 -0400
commitc18364d0c4b3fb6581f937c018cd01fc329601bb (patch)
tree923ab682435379dc8bad7852c49725bf7f0f5286 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
parent45355f00e7de9068f403682044f550026fa7e86e (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.h50
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
76bool gk20a_pmu_is_interrupted(struct nvgpu_pmu *pmu); 38bool gk20a_pmu_is_interrupted(struct nvgpu_pmu *pmu);
77void gk20a_pmu_isr(struct gk20a *g); 39void gk20a_pmu_isr(struct gk20a *g);
78 40
79int gk20a_pmu_enable_elpg(struct gk20a *g);
80int gk20a_pmu_disable_elpg(struct gk20a *g);
81int gk20a_pmu_pg_global_enable(struct gk20a *g, u32 enable_pg);
82
83u32 gk20a_pmu_pg_engines_list(struct gk20a *g); 41u32 gk20a_pmu_pg_engines_list(struct gk20a *g);
84u32 gk20a_pmu_pg_feature_list(struct gk20a *g, u32 pg_engine_id); 42u32 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
88int gk20a_pmu_perfmon_enable(struct gk20a *g, bool enable); 46int gk20a_pmu_perfmon_enable(struct gk20a *g, bool enable);
89 47
48void gk20a_pmu_pg_idle_counter_config(struct gk20a *g, u32 pg_engine_id);
49
90int gk20a_pmu_mutex_acquire(struct nvgpu_pmu *pmu, u32 id, u32 *token); 50int gk20a_pmu_mutex_acquire(struct nvgpu_pmu *pmu, u32 id, u32 *token);
91int gk20a_pmu_mutex_release(struct nvgpu_pmu *pmu, u32 id, u32 *token); 51int 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);
110int pmu_reset(struct nvgpu_pmu *pmu); 70int pmu_reset(struct nvgpu_pmu *pmu);
111int pmu_bootstrap(struct nvgpu_pmu *pmu); 71int pmu_bootstrap(struct nvgpu_pmu *pmu);
72
73void pmu_dump_elpg_stats(struct nvgpu_pmu *pmu);
112void pmu_dump_falcon_stats(struct nvgpu_pmu *pmu); 74void pmu_dump_falcon_stats(struct nvgpu_pmu *pmu);
113 75
114int gk20a_pmu_ap_send_command(struct gk20a *g,
115 union pmu_ap_cmd *p_ap_cmd, bool b_block);
116int gk20a_aelpg_init(struct gk20a *g);
117int gk20a_aelpg_init_and_enable(struct gk20a *g, u8 ctrl_id);
118void pmu_enable_irq(struct nvgpu_pmu *pmu, bool enable); 76void pmu_enable_irq(struct nvgpu_pmu *pmu, bool enable);
119int pmu_wait_message_cond(struct nvgpu_pmu *pmu, u32 timeout_ms, 77int pmu_wait_message_cond(struct nvgpu_pmu *pmu, u32 timeout_ms,
120 u32 *var, u32 val); 78 u32 *var, u32 val);