diff --git a/drivers/gpu/nvgpu/gv11b/therm_gv11b.c b/drivers/gpu/nvgpu/gv11b/therm_gv11b.c index f2d929fa5..fe8433258 100644 --- a/drivers/gpu/nvgpu/gv11b/therm_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/therm_gv11b.c @@ -1,7 +1,7 @@ /* * GV11B Therm * - * Copyright (c) 2015-2017, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2015-2018, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -81,12 +81,18 @@ int gv11b_init_therm_setup_hw(struct gk20a *g) gk20a_writel(g, therm_config2_r(), v); gk20a_writel(g, therm_grad_stepping1_r(), - therm_grad_stepping1_pdiv_duration_f(0x40)); + therm_grad_stepping1_pdiv_duration_f(0xbf4)); v = gk20a_readl(g, therm_grad_stepping0_r()); v |= therm_grad_stepping0_feature_enable_f(); gk20a_writel(g, therm_grad_stepping0_r(), v); + /* disable idle clock slowdown */ + v = therm_clk_slowdown_2_idle_condition_a_select_f(0) | + therm_clk_slowdown_2_idle_condition_a_type_never_f() | + therm_clk_slowdown_2_idle_condition_b_type_never_f(); + gk20a_writel(g, therm_clk_slowdown_2_r(0), v); + return 0; } diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_therm_gv11b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_therm_gv11b.h index 3afe75013..0050083ca 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_therm_gv11b.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_therm_gv11b.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -332,6 +332,38 @@ static inline u32 therm_clk_slowdown_idle_factor_disabled_f(void) { return 0x0U; } +static inline u32 therm_clk_slowdown_2_r(u32 i) +{ + return 0x000201a0U + i*4U; +} +static inline u32 therm_clk_slowdown_2_idle_condition_a_select_f(u32 v) +{ + return (v & 0xfU) << 0U; +} +static inline u32 therm_clk_slowdown_2_idle_condition_a_type_f(u32 v) +{ + return (v & 0x7U) << 4U; +} +static inline u32 therm_clk_slowdown_2_idle_condition_a_type_v(u32 r) +{ + return (r >> 4U) & 0x7U; +} +static inline u32 therm_clk_slowdown_2_idle_condition_a_type_never_f(void) +{ + return 0x40U; +} +static inline u32 therm_clk_slowdown_2_idle_condition_b_type_f(u32 v) +{ + return (v & 0x7U) << 12U; +} +static inline u32 therm_clk_slowdown_2_idle_condition_b_type_v(u32 r) +{ + return (r >> 12U) & 0x7U; +} +static inline u32 therm_clk_slowdown_2_idle_condition_b_type_never_f(void) +{ + return 0x4000U; +} static inline u32 therm_grad_stepping_table_r(u32 i) { return 0x000202c8U + i*4U;