From: Qiu Wenbo <qiuwe...@phytium.com.cn>

commit 88bb16ad998a0395fe4b346b7d3f621aaa0a2324 upstream.

Avoid kernel crash when vddci_control is SMU7_VOLTAGE_CONTROL_NONE and
vddci_voltage_table is empty. It has been tested on Intel Hades Canyon
(i7-8809G).

Bug: https://bugzilla.kernel.org/show_bug.cgi?id=208489
Fixes: ac7822b0026f ("drm/amd/powerplay: add smumgr support for VEGAM (v2)")
Reviewed-by: Evan Quan <evan.q...@amd.com>
Signed-off-by: Qiu Wenbo <qiuwe...@phytium.com.cn>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Cc: sta...@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

--- a/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
@@ -643,9 +643,6 @@ static int vegam_get_dependency_volt_by_
 
        /* sclk is bigger than max sclk in the dependence table */
        *voltage |= (dep_table->entries[i - 1].vddc * VOLTAGE_SCALE) << 
VDDC_SHIFT;
-       vddci = phm_find_closest_vddci(&(data->vddci_voltage_table),
-                       (dep_table->entries[i - 1].vddc -
-                                       (uint16_t)VDDC_VDDCI_DELTA));
 
        if (SMU7_VOLTAGE_CONTROL_NONE == data->vddci_control)
                *voltage |= (data->vbios_boot_state.vddci_bootup_value *
@@ -653,8 +650,13 @@ static int vegam_get_dependency_volt_by_
        else if (dep_table->entries[i - 1].vddci)
                *voltage |= (dep_table->entries[i - 1].vddci *
                                VOLTAGE_SCALE) << VDDC_SHIFT;
-       else
+       else {
+               vddci = phm_find_closest_vddci(&(data->vddci_voltage_table),
+                               (dep_table->entries[i - 1].vddc -
+                                               (uint16_t)VDDC_VDDCI_DELTA));
+
                *voltage |= (vddci * VOLTAGE_SCALE) << VDDCI_SHIFT;
+       }
 
        if (SMU7_VOLTAGE_CONTROL_NONE == data->mvdd_control)
                *mvdd = data->vbios_boot_state.mvdd_bootup_value * 
VOLTAGE_SCALE;


Reply via email to