if atomctrl_get_voltage_evv_on_sclk returns non zero (fail) in the expansion
of the PP_ASSERT_WITH_CODE macro the continue will actually do nothing
(The macro uses a do ... while(0) as scope, which eats the continue).
Based on the code I don't think this was the intent.
Unfortunately fixing this requires rewriting the control flow and
removing the macros.
v2: added signed of by
fixed error message print
Signed-off-by: Moritz Kühner <kuehner.moritz at gmail.com>
---
drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c | 54 +++++++++++++----------
1 file changed, 30 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c
b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c
index 50afb02..0f264c4 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/tonga_hwmgr.c
@@ -429,19 +429,22 @@ int tonga_get_evv_voltage(struct pp_hwmgr *hwmgr)
}
}
}
- PP_ASSERT_WITH_CODE(0 ==
atomctrl_get_voltage_evv_on_sclk
+ if(0 == atomctrl_get_voltage_evv_on_sclk
(hwmgr, VOLTAGE_TYPE_VDDGFX,
sclk,
- virtual_voltage_id, &vddgfx),
- "Error retrieving EVV voltage
value!", continue);
-
- /* need to make sure vddgfx is less than 2v or
else, it could burn the ASIC. */
- PP_ASSERT_WITH_CODE((vddgfx < 2000 && vddgfx !=
0), "Invalid VDDGFX value!", return -1);
-
- /* the voltage should not be zero nor equal to
leakage ID */
- if (vddgfx != 0 && vddgfx !=
virtual_voltage_id) {
-
data->vddcgfx_leakage.actual_voltage[data->vddcgfx_leakage.count] = vddgfx;
-
data->vddcgfx_leakage.leakage_id[data->vddcgfx_leakage.count] =
virtual_voltage_id;
- data->vddcgfx_leakage.count++;
+ virtual_voltage_id, &vddgfx)) {
+ /* need to make sure vddgfx is less
than 2v or else, it could burn the ASIC. */
+ PP_ASSERT_WITH_CODE((vddgfx < 2000 &&
vddgfx != 0), "Invalid VDDGFX value!", return -1);
+
+ /* the voltage should not be zero nor
equal to leakage ID */
+ if (vddgfx != 0 && vddgfx !=
virtual_voltage_id) {
+
data->vddcgfx_leakage.actual_voltage[data->vddcgfx_leakage.count] = vddgfx;
+
data->vddcgfx_leakage.leakage_id[data->vddcgfx_leakage.count] =
virtual_voltage_id;
+ data->vddcgfx_leakage.count++;
+ }
+ }
+ else
+ {
+ DRM_ERROR("Error retrieving EVV voltage
value!\n");
}
}
} else {
@@ -449,19 +452,22 @@ int tonga_get_evv_voltage(struct pp_hwmgr *hwmgr)
if (0 == tonga_get_sclk_for_voltage_evv(hwmgr,
pptable_info->vddc_lookup_table,
virtual_voltage_id, &sclk)) {
- PP_ASSERT_WITH_CODE(0 ==
atomctrl_get_voltage_evv_on_sclk
+ if(0 == atomctrl_get_voltage_evv_on_sclk
(hwmgr, VOLTAGE_TYPE_VDDC, sclk,
- virtual_voltage_id, &vddc),
- "Error retrieving EVV voltage
value!", continue);
-
- /* need to make sure vddc is less than 2v or
else, it could burn the ASIC. */
- PP_ASSERT_WITH_CODE(vddc < 2000, "Invalid VDDC
value!", return -1);
-
- /* the voltage should not be zero nor equal to
leakage ID */
- if (vddc != 0 && vddc != virtual_voltage_id) {
-
data->vddc_leakage.actual_voltage[data->vddc_leakage.count] = vddc;
-
data->vddc_leakage.leakage_id[data->vddc_leakage.count] = virtual_voltage_id;
- data->vddc_leakage.count++;
+ virtual_voltage_id, &vddc)) {
+ /* need to make sure vddc is less than
2v or else, it could burn the ASIC. */
+ PP_ASSERT_WITH_CODE(vddc < 2000,
"Invalid VDDC value!", return -1);
+
+ /* the voltage should not be zero nor
equal to leakage ID */
+ if (vddc != 0 && vddc !=
virtual_voltage_id) {
+
data->vddc_leakage.actual_voltage[data->vddc_leakage.count] = vddc;
+
data->vddc_leakage.leakage_id[data->vddc_leakage.count] = virtual_voltage_id;
+ data->vddc_leakage.count++;
+ }
+ }
+ else
+ {
+ DRM_ERROR("Error retrieving EVV voltage
value!\n");
}
}
}
--
2.7.4