aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-08-20 18:59:41 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-08-30 16:31:19 -0400
commitd5222ae7ad719c7afe957ae382d5e71ecffe0f7d (patch)
treee7dfd3ea9bf8931b03f527b8b8c6938359ba501b
parentbdcc031bc7c2d0f1986237c8cea6871cfebf0853 (diff)
drm/radeon: gcc fixes for sumo 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>
-rw-r--r--drivers/gpu/drm/radeon/sumo_dpm.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c
index 2cefe59ef586..864761c0120e 100644
--- a/drivers/gpu/drm/radeon/sumo_dpm.c
+++ b/drivers/gpu/drm/radeon/sumo_dpm.c
@@ -1483,6 +1483,7 @@ static int sumo_parse_power_table(struct radeon_device *rdev)
1483 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime); 1483 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
1484 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime); 1484 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
1485 for (i = 0; i < state_array->ucNumEntries; i++) { 1485 for (i = 0; i < state_array->ucNumEntries; i++) {
1486 u8 *idx;
1486 power_state = (union pplib_power_state *)power_state_offset; 1487 power_state = (union pplib_power_state *)power_state_offset;
1487 non_clock_array_index = power_state->v2.nonClockInfoIndex; 1488 non_clock_array_index = power_state->v2.nonClockInfoIndex;
1488 non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *) 1489 non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
@@ -1496,12 +1497,15 @@ static int sumo_parse_power_table(struct radeon_device *rdev)
1496 } 1497 }
1497 rdev->pm.dpm.ps[i].ps_priv = ps; 1498 rdev->pm.dpm.ps[i].ps_priv = ps;
1498 k = 0; 1499 k = 0;
1500 idx = (u8 *)&power_state->v2.clockInfoIndex[0];
1499 for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) { 1501 for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) {
1500 clock_array_index = power_state->v2.clockInfoIndex[j]; 1502 clock_array_index = idx[j];
1501 if (k >= SUMO_MAX_HARDWARE_POWERLEVELS) 1503 if (k >= SUMO_MAX_HARDWARE_POWERLEVELS)
1502 break; 1504 break;
1505
1503 clock_info = (union pplib_clock_info *) 1506 clock_info = (union pplib_clock_info *)
1504 &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; 1507 ((u8 *)&clock_info_array->clockInfo[0] +
1508 (clock_array_index * clock_info_array->ucEntrySize));
1505 sumo_parse_pplib_clock_info(rdev, 1509 sumo_parse_pplib_clock_info(rdev,
1506 &rdev->pm.dpm.ps[i], k, 1510 &rdev->pm.dpm.ps[i], k,
1507 clock_info); 1511 clock_info);