aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-08-20 19:02:14 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-08-30 16:31:19 -0400
commit5e250d20c2b6ed0c5d1f3632c266eba4a7f979ba (patch)
treea60c28c1f5c39ebaa8e4b5e7c887cd2f2964441f
parentd5222ae7ad719c7afe957ae382d5e71ecffe0f7d (diff)
drm/radeon: gcc fixes for trinity 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/trinity_dpm.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/trinity_dpm.c b/drivers/gpu/drm/radeon/trinity_dpm.c
index a1eb5f59939f..b07b7b8f1aff 100644
--- a/drivers/gpu/drm/radeon/trinity_dpm.c
+++ b/drivers/gpu/drm/radeon/trinity_dpm.c
@@ -1675,6 +1675,7 @@ static int trinity_parse_power_table(struct radeon_device *rdev)
1675 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime); 1675 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
1676 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime); 1676 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
1677 for (i = 0; i < state_array->ucNumEntries; i++) { 1677 for (i = 0; i < state_array->ucNumEntries; i++) {
1678 u8 *idx;
1678 power_state = (union pplib_power_state *)power_state_offset; 1679 power_state = (union pplib_power_state *)power_state_offset;
1679 non_clock_array_index = power_state->v2.nonClockInfoIndex; 1680 non_clock_array_index = power_state->v2.nonClockInfoIndex;
1680 non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *) 1681 non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
@@ -1688,14 +1689,16 @@ static int trinity_parse_power_table(struct radeon_device *rdev)
1688 } 1689 }
1689 rdev->pm.dpm.ps[i].ps_priv = ps; 1690 rdev->pm.dpm.ps[i].ps_priv = ps;
1690 k = 0; 1691 k = 0;
1692 idx = (u8 *)&power_state->v2.clockInfoIndex[0];
1691 for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) { 1693 for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) {
1692 clock_array_index = power_state->v2.clockInfoIndex[j]; 1694 clock_array_index = idx[j];
1693 if (clock_array_index >= clock_info_array->ucNumEntries) 1695 if (clock_array_index >= clock_info_array->ucNumEntries)
1694 continue; 1696 continue;
1695 if (k >= SUMO_MAX_HARDWARE_POWERLEVELS) 1697 if (k >= SUMO_MAX_HARDWARE_POWERLEVELS)
1696 break; 1698 break;
1697 clock_info = (union pplib_clock_info *) 1699 clock_info = (union pplib_clock_info *)
1698 &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; 1700 ((u8 *)&clock_info_array->clockInfo[0] +
1701 (clock_array_index * clock_info_array->ucEntrySize));
1699 trinity_parse_pplib_clock_info(rdev, 1702 trinity_parse_pplib_clock_info(rdev,
1700 &rdev->pm.dpm.ps[i], k, 1703 &rdev->pm.dpm.ps[i], k,
1701 clock_info); 1704 clock_info);