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=66945 Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Родитель
b309ed9867
Коммит
9af37a7d4e
|
@ -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.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
|
||||
for (i = 0; i < state_array->ucNumEntries; i++) {
|
||||
u8 *idx;
|
||||
power_state = (union pplib_power_state *)power_state_offset;
|
||||
non_clock_array_index = power_state->v2.nonClockInfoIndex;
|
||||
non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
|
||||
|
@ -2479,14 +2480,16 @@ static int kv_parse_power_table(struct radeon_device *rdev)
|
|||
}
|
||||
rdev->pm.dpm.ps[i].ps_priv = ps;
|
||||
k = 0;
|
||||
idx = (u8 *)&power_state->v2.clockInfoIndex[0];
|
||||
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)
|
||||
continue;
|
||||
if (k >= SUMO_MAX_HARDWARE_POWERLEVELS)
|
||||
break;
|
||||
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,
|
||||
&rdev->pm.dpm.ps[i], k,
|
||||
clock_info);
|
||||
|
|
Загрузка…
Ссылка в новой задаче