diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2016-01-22 00:13:15 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-01-22 10:50:24 -0500 |
commit | cc78eb22885bba64445cde438ba098de0104920f (patch) | |
tree | 50baff82cdb1499e5e8d41a4192907803a83a49a | |
parent | 9441f964f8e39374ab175e0a8fe870e1a2f02af1 (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.c | 12 |
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 | } |