diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-09-13 13:53:14 -0400 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:56:50 -0500 |
commit | 4a94ce451b0352ce67e11a2971bbbd75c2e58df1 (patch) | |
tree | 4d40b83239cce2408a79e7d13d0bd0b9ace20f7a /drivers/gpu/nvgpu/gp106/therm_gp106.c | |
parent | c527b36daa2019bbf1ba2a3c9b9474d8c7316ff0 (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.c | 45 |
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 | ||
58 | static 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 | |||
58 | void gp106_init_therm_ops(struct gpu_ops *gops) { | 102 | void 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 | } |