aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2016-01-22 00:13:15 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-01-22 10:50:24 -0500
commitcc78eb22885bba64445cde438ba098de0104920f (patch)
tree50baff82cdb1499e5e8d41a4192907803a83a49a
parent9441f964f8e39374ab175e0a8fe870e1a2f02af1 (diff)
drm/radeon: properly byte swap vce firmware setup
Firmware is LE. Need to properly byteswap some of the fields so they are interpreted correctly by the driver on BE systems. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/gpu/drm/radeon/vce_v1_0.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/vce_v1_0.c b/drivers/gpu/drm/radeon/vce_v1_0.c
index 07a0d378e122..a01efe39a820 100644
--- a/drivers/gpu/drm/radeon/vce_v1_0.c
+++ b/drivers/gpu/drm/radeon/vce_v1_0.c
@@ -178,12 +178,12 @@ int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data)
178 return -EINVAL; 178 return -EINVAL;
179 } 179 }
180 180
181 for (i = 0; i < sign->num; ++i) { 181 for (i = 0; i < le32_to_cpu(sign->num); ++i) {
182 if (sign->val[i].chip_id == chip_id) 182 if (le32_to_cpu(sign->val[i].chip_id) == chip_id)
183 break; 183 break;
184 } 184 }
185 185
186 if (i == sign->num) 186 if (i == le32_to_cpu(sign->num))
187 return -EINVAL; 187 return -EINVAL;
188 188
189 data += (256 - 64) / 4; 189 data += (256 - 64) / 4;
@@ -191,18 +191,18 @@ int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data)
191 data[1] = sign->val[i].nonce[1]; 191 data[1] = sign->val[i].nonce[1];
192 data[2] = sign->val[i].nonce[2]; 192 data[2] = sign->val[i].nonce[2];
193 data[3] = sign->val[i].nonce[3]; 193 data[3] = sign->val[i].nonce[3];
194 data[4] = sign->len + 64; 194 data[4] = cpu_to_le32(le32_to_cpu(sign->len) + 64);
195 195
196 memset(&data[5], 0, 44); 196 memset(&data[5], 0, 44);
197 memcpy(&data[16], &sign[1], rdev->vce_fw->size - sizeof(*sign)); 197 memcpy(&data[16], &sign[1], rdev->vce_fw->size - sizeof(*sign));
198 198
199 data += data[4] / 4; 199 data += le32_to_cpu(data[4]) / 4;
200 data[0] = sign->val[i].sigval[0]; 200 data[0] = sign->val[i].sigval[0];
201 data[1] = sign->val[i].sigval[1]; 201 data[1] = sign->val[i].sigval[1];
202 data[2] = sign->val[i].sigval[2]; 202 data[2] = sign->val[i].sigval[2];
203 data[3] = sign->val[i].sigval[3]; 203 data[3] = sign->val[i].sigval[3];
204 204
205 rdev->vce.keyselect = sign->val[i].keyselect; 205 rdev->vce.keyselect = le32_to_cpu(sign->val[i].keyselect);
206 206
207 return 0; 207 return 0;
208} 208}