summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/therm_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-10-16 18:24:50 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-10-22 13:47:11 -0400
commit790173dcfd505d03bd5fb1a92e28bb53c94b0876 (patch)
treead5194a9540b97237681a30cae70e5699931d882 /drivers/gpu/nvgpu/gk20a/therm_gk20a.c
parent37255d42cc1eee1dc1de94bd651461a46c8afbe9 (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.c31
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
36static int gk20a_init_therm_setup_hw(struct gk20a *g) 36static 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