aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rv770_dpm.c
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-08-20 18:51:08 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-08-30 16:31:18 -0400
commitbdcc031bc7c2d0f1986237c8cea6871cfebf0853 (patch)
treee7bd2870523c45ce6aaaf48c0b4530f5c44fe7de /drivers/gpu/drm/radeon/rv770_dpm.c
parentaa842d736e29439d6f1a1478cd7c780d972f7cc5 (diff)
drm/radeonn: gcc fixes for rv7xx/eg/btc 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>
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770_dpm.c')
-rw-r--r--drivers/gpu/drm/radeon/rv770_dpm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c
index 44c1e782a696..8cbb85dae5aa 100644
--- a/drivers/gpu/drm/radeon/rv770_dpm.c
+++ b/drivers/gpu/drm/radeon/rv770_dpm.c
@@ -2294,6 +2294,7 @@ int rv7xx_parse_power_table(struct radeon_device *rdev)
2294 (power_state->v1.ucNonClockStateIndex * 2294 (power_state->v1.ucNonClockStateIndex *
2295 power_info->pplib.ucNonClockSize)); 2295 power_info->pplib.ucNonClockSize));
2296 if (power_info->pplib.ucStateEntrySize - 1) { 2296 if (power_info->pplib.ucStateEntrySize - 1) {
2297 u8 *idx;
2297 ps = kzalloc(sizeof(struct rv7xx_ps), GFP_KERNEL); 2298 ps = kzalloc(sizeof(struct rv7xx_ps), GFP_KERNEL);
2298 if (ps == NULL) { 2299 if (ps == NULL) {
2299 kfree(rdev->pm.dpm.ps); 2300 kfree(rdev->pm.dpm.ps);
@@ -2303,12 +2304,12 @@ int rv7xx_parse_power_table(struct radeon_device *rdev)
2303 rv7xx_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i], 2304 rv7xx_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i],
2304 non_clock_info, 2305 non_clock_info,
2305 power_info->pplib.ucNonClockSize); 2306 power_info->pplib.ucNonClockSize);
2307 idx = (u8 *)&power_state->v1.ucClockStateIndices[0];
2306 for (j = 0; j < (power_info->pplib.ucStateEntrySize - 1); j++) { 2308 for (j = 0; j < (power_info->pplib.ucStateEntrySize - 1); j++) {
2307 clock_info = (union pplib_clock_info *) 2309 clock_info = (union pplib_clock_info *)
2308 (mode_info->atom_context->bios + data_offset + 2310 (mode_info->atom_context->bios + data_offset +
2309 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) + 2311 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) +
2310 (power_state->v1.ucClockStateIndices[j] * 2312 (idx[j] * power_info->pplib.ucClockInfoSize));
2311 power_info->pplib.ucClockInfoSize));
2312 rv7xx_parse_pplib_clock_info(rdev, 2313 rv7xx_parse_pplib_clock_info(rdev,
2313 &rdev->pm.dpm.ps[i], j, 2314 &rdev->pm.dpm.ps[i], j,
2314 clock_info); 2315 clock_info);