aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-08-20 18:47:07 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-08-30 16:31:17 -0400
commitaa842d736e29439d6f1a1478cd7c780d972f7cc5 (patch)
treee8242d4940039070a8878628c6405e6faf7e2c8e
parent607f2c2791ec81e5abca6213ff037e9405378be1 (diff)
drm/radeon: gcc fixes for rv6xx 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/rv6xx_dpm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/rv6xx_dpm.c b/drivers/gpu/drm/radeon/rv6xx_dpm.c
index bdd888b4db2b..ab1f2016f21e 100644
--- a/drivers/gpu/drm/radeon/rv6xx_dpm.c
+++ b/drivers/gpu/drm/radeon/rv6xx_dpm.c
@@ -1918,6 +1918,7 @@ static int rv6xx_parse_power_table(struct radeon_device *rdev)
1918 (power_state->v1.ucNonClockStateIndex * 1918 (power_state->v1.ucNonClockStateIndex *
1919 power_info->pplib.ucNonClockSize)); 1919 power_info->pplib.ucNonClockSize));
1920 if (power_info->pplib.ucStateEntrySize - 1) { 1920 if (power_info->pplib.ucStateEntrySize - 1) {
1921 u8 *idx;
1921 ps = kzalloc(sizeof(struct rv6xx_ps), GFP_KERNEL); 1922 ps = kzalloc(sizeof(struct rv6xx_ps), GFP_KERNEL);
1922 if (ps == NULL) { 1923 if (ps == NULL) {
1923 kfree(rdev->pm.dpm.ps); 1924 kfree(rdev->pm.dpm.ps);
@@ -1926,12 +1927,12 @@ static int rv6xx_parse_power_table(struct radeon_device *rdev)
1926 rdev->pm.dpm.ps[i].ps_priv = ps; 1927 rdev->pm.dpm.ps[i].ps_priv = ps;
1927 rv6xx_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i], 1928 rv6xx_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i],
1928 non_clock_info); 1929 non_clock_info);
1930 idx = (u8 *)&power_state->v1.ucClockStateIndices[0];
1929 for (j = 0; j < (power_info->pplib.ucStateEntrySize - 1); j++) { 1931 for (j = 0; j < (power_info->pplib.ucStateEntrySize - 1); j++) {
1930 clock_info = (union pplib_clock_info *) 1932 clock_info = (union pplib_clock_info *)
1931 (mode_info->atom_context->bios + data_offset + 1933 (mode_info->atom_context->bios + data_offset +
1932 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) + 1934 le16_to_cpu(power_info->pplib.usClockInfoArrayOffset) +
1933 (power_state->v1.ucClockStateIndices[j] * 1935 (idx[j] * power_info->pplib.ucClockInfoSize));
1934 power_info->pplib.ucClockInfoSize));
1935 rv6xx_parse_pplib_clock_info(rdev, 1936 rv6xx_parse_pplib_clock_info(rdev,
1936 &rdev->pm.dpm.ps[i], j, 1937 &rdev->pm.dpm.ps[i], j,
1937 clock_info); 1938 clock_info);