summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp106/therm_gp106.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2016-09-13 13:53:14 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:56:50 -0500
commit4a94ce451b0352ce67e11a2971bbbd75c2e58df1 (patch)
tree4d40b83239cce2408a79e7d13d0bd0b9ace20f7a /drivers/gpu/nvgpu/gp106/therm_gp106.c
parentc527b36daa2019bbf1ba2a3c9b9474d8c7316ff0 (diff)
gpu: nvgpu: Move ELCG programming to therm
Implement gp10b and gp106 ELCG programming. JIRA DNVGPU-74 Change-Id: Ic0349b948a2870e0d39e95ddd2f49231e7b4cbe0 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1220431 (cherry picked from commit d6bc48647982babdf642ea6004d4208c5daa243f) Reviewed-on: http://git-master/r/1239422 GVS: Gerrit_Virtual_Submit
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/therm_gp106.c')
-rw-r--r--drivers/gpu/nvgpu/gp106/therm_gp106.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gp106/therm_gp106.c b/drivers/gpu/nvgpu/gp106/therm_gp106.c
index 153e953d..a3aa3636 100644
--- a/drivers/gpu/nvgpu/gp106/therm_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/therm_gp106.c
@@ -55,8 +55,53 @@ static void gp106_therm_debugfs_init(struct gk20a *g) {
55} 55}
56#endif 56#endif
57 57
58static int gp106_elcg_init_idle_filters(struct gk20a *g)
59{
60 u32 gate_ctrl, idle_filter;
61 u32 engine_id;
62 u32 active_engine_id = 0;
63 struct fifo_gk20a *f = &g->fifo;
64
65 gk20a_dbg_fn("");
66
67 for (engine_id = 0; engine_id < f->num_engines; engine_id++) {
68 active_engine_id = f->active_engines_list[engine_id];
69 gate_ctrl = gk20a_readl(g, therm_gate_ctrl_r(active_engine_id));
70
71 if (tegra_platform_is_linsim()) {
72 gate_ctrl = set_field(gate_ctrl,
73 therm_gate_ctrl_eng_delay_after_m(),
74 therm_gate_ctrl_eng_delay_after_f(4));
75 }
76
77 gate_ctrl = set_field(gate_ctrl,
78 therm_gate_ctrl_eng_idle_filt_exp_m(),
79 therm_gate_ctrl_eng_idle_filt_exp_f(2));
80 gate_ctrl = set_field(gate_ctrl,
81 therm_gate_ctrl_eng_idle_filt_mant_m(),
82 therm_gate_ctrl_eng_idle_filt_mant_f(1));
83 gate_ctrl = set_field(gate_ctrl,
84 therm_gate_ctrl_eng_delay_before_m(),
85 therm_gate_ctrl_eng_delay_before_f(0));
86 gk20a_writel(g, therm_gate_ctrl_r(active_engine_id), gate_ctrl);
87 }
88
89 /* default fecs_idle_filter to 0 */
90 idle_filter = gk20a_readl(g, therm_fecs_idle_filter_r());
91 idle_filter &= ~therm_fecs_idle_filter_value_m();
92 gk20a_writel(g, therm_fecs_idle_filter_r(), idle_filter);
93 /* default hubmmu_idle_filter to 0 */
94 idle_filter = gk20a_readl(g, therm_hubmmu_idle_filter_r());
95 idle_filter &= ~therm_hubmmu_idle_filter_value_m();
96 gk20a_writel(g, therm_hubmmu_idle_filter_r(), idle_filter);
97
98 gk20a_dbg_fn("done");
99 return 0;
100}
101
58void gp106_init_therm_ops(struct gpu_ops *gops) { 102void gp106_init_therm_ops(struct gpu_ops *gops) {
59#ifdef CONFIG_DEBUG_FS 103#ifdef CONFIG_DEBUG_FS
60 gops->therm.therm_debugfs_init = gp106_therm_debugfs_init; 104 gops->therm.therm_debugfs_init = gp106_therm_debugfs_init;
61#endif 105#endif
106 gops->therm.elcg_init_idle_filters = gp106_elcg_init_idle_filters;
62} 107}