diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-10-16 18:24:50 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-10-22 13:47:11 -0400 |
commit | 790173dcfd505d03bd5fb1a92e28bb53c94b0876 (patch) | |
tree | ad5194a9540b97237681a30cae70e5699931d882 /drivers/gpu/nvgpu/gk20a/therm_gk20a.c | |
parent | 37255d42cc1eee1dc1de94bd651461a46c8afbe9 (diff) |
gpu: nvgpu: Use gradual slowdown
Program clock slowdown to happen using gradual slowdown. It is
significantly faster than the default slowdown.
Change-Id: I9e5259889637fce2c0b083a424b54af12bb45c25
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/819698
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/therm_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/therm_gk20a.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/therm_gk20a.c b/drivers/gpu/nvgpu/gk20a/therm_gk20a.c index b02113ad..fd4149ae 100644 --- a/drivers/gpu/nvgpu/gk20a/therm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/therm_gk20a.c | |||
@@ -35,6 +35,8 @@ static int gk20a_init_therm_setup_sw(struct gk20a *g) | |||
35 | 35 | ||
36 | static int gk20a_init_therm_setup_hw(struct gk20a *g) | 36 | static int gk20a_init_therm_setup_hw(struct gk20a *g) |
37 | { | 37 | { |
38 | u32 v; | ||
39 | |||
38 | /* program NV_THERM registers */ | 40 | /* program NV_THERM registers */ |
39 | gk20a_writel(g, therm_use_a_r(), NV_THERM_USE_A_INIT); | 41 | gk20a_writel(g, therm_use_a_r(), NV_THERM_USE_A_INIT); |
40 | gk20a_writel(g, therm_evt_ext_therm_0_r(), | 42 | gk20a_writel(g, therm_evt_ext_therm_0_r(), |
@@ -44,6 +46,35 @@ static int gk20a_init_therm_setup_hw(struct gk20a *g) | |||
44 | gk20a_writel(g, therm_evt_ext_therm_2_r(), | 46 | gk20a_writel(g, therm_evt_ext_therm_2_r(), |
45 | NV_THERM_EVT_EXT_THERM_2_INIT); | 47 | NV_THERM_EVT_EXT_THERM_2_INIT); |
46 | 48 | ||
49 | gk20a_writel(g, therm_grad_stepping_table_r(0), | ||
50 | therm_grad_stepping_table_slowdown_factor0_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by1p5_f()) | | ||
51 | therm_grad_stepping_table_slowdown_factor1_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by2_f()) | | ||
52 | therm_grad_stepping_table_slowdown_factor2_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by4_f()) | | ||
53 | therm_grad_stepping_table_slowdown_factor3_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by8_f()) | | ||
54 | therm_grad_stepping_table_slowdown_factor4_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by8_f())); | ||
55 | gk20a_writel(g, therm_grad_stepping_table_r(1), | ||
56 | therm_grad_stepping_table_slowdown_factor0_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by8_f()) | | ||
57 | therm_grad_stepping_table_slowdown_factor1_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by8_f()) | | ||
58 | therm_grad_stepping_table_slowdown_factor2_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by8_f()) | | ||
59 | therm_grad_stepping_table_slowdown_factor3_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by8_f()) | | ||
60 | therm_grad_stepping_table_slowdown_factor4_f(therm_grad_stepping_table_slowdown_factor0_fpdiv_by8_f())); | ||
61 | |||
62 | v = gk20a_readl(g, therm_clk_timing_r(0)); | ||
63 | v |= therm_clk_timing_grad_slowdown_enabled_f(); | ||
64 | gk20a_writel(g, therm_clk_timing_r(0), v); | ||
65 | |||
66 | v = gk20a_readl(g, therm_config2_r()); | ||
67 | v |= therm_config2_grad_enable_f(1); | ||
68 | v |= therm_config2_slowdown_factor_extended_f(1); | ||
69 | gk20a_writel(g, therm_config2_r(), v); | ||
70 | |||
71 | gk20a_writel(g, therm_grad_stepping1_r(), | ||
72 | therm_grad_stepping1_pdiv_duration_f(32)); | ||
73 | |||
74 | v = gk20a_readl(g, therm_grad_stepping0_r()); | ||
75 | v |= therm_grad_stepping0_feature_enable_f(); | ||
76 | gk20a_writel(g, therm_grad_stepping0_r(), v); | ||
77 | |||
47 | return 0; | 78 | return 0; |
48 | } | 79 | } |
49 | 80 | ||