Commit 9af37a7d authored by Alex Deucher's avatar Alex Deucher

drm/radeon: gcc fixes for kb/kv dpm

Newer versions of gcc seem to wander off into the
weeds when dealing with variable sizes arrays in
structs.  Rather than indexing the arrays, use
pointer arithmetic.

See bugs:
https://bugs.freedesktop.org/show_bug.cgi?id=66932
https://bugs.freedesktop.org/show_bug.cgi?id=66972
https://bugs.freedesktop.org/show_bug.cgi?id=66945Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b309ed98
...@@ -2466,6 +2466,7 @@ static int kv_parse_power_table(struct radeon_device *rdev) ...@@ -2466,6 +2466,7 @@ static int kv_parse_power_table(struct radeon_device *rdev)
rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime); rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime); rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
for (i = 0; i < state_array->ucNumEntries; i++) { for (i = 0; i < state_array->ucNumEntries; i++) {
u8 *idx;
power_state = (union pplib_power_state *)power_state_offset; power_state = (union pplib_power_state *)power_state_offset;
non_clock_array_index = power_state->v2.nonClockInfoIndex; non_clock_array_index = power_state->v2.nonClockInfoIndex;
non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *) non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
...@@ -2479,14 +2480,16 @@ static int kv_parse_power_table(struct radeon_device *rdev) ...@@ -2479,14 +2480,16 @@ static int kv_parse_power_table(struct radeon_device *rdev)
} }
rdev->pm.dpm.ps[i].ps_priv = ps; rdev->pm.dpm.ps[i].ps_priv = ps;
k = 0; k = 0;
idx = (u8 *)&power_state->v2.clockInfoIndex[0];
for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) { for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) {
clock_array_index = power_state->v2.clockInfoIndex[j]; clock_array_index = idx[j];
if (clock_array_index >= clock_info_array->ucNumEntries) if (clock_array_index >= clock_info_array->ucNumEntries)
continue; continue;
if (k >= SUMO_MAX_HARDWARE_POWERLEVELS) if (k >= SUMO_MAX_HARDWARE_POWERLEVELS)
break; break;
clock_info = (union pplib_clock_info *) clock_info = (union pplib_clock_info *)
&clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; ((u8 *)&clock_info_array->clockInfo[0] +
(clock_array_index * clock_info_array->ucEntrySize));
kv_parse_pplib_clock_info(rdev, kv_parse_pplib_clock_info(rdev,
&rdev->pm.dpm.ps[i], k, &rdev->pm.dpm.ps[i], k,
clock_info); clock_info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment