Commit 46414c46 authored by Alex Deucher's avatar Alex Deucher Committed by Greg Kroah-Hartman

drm/radeon: properly byte swap vce firmware setup

commit cc78eb22 upstream.

Firmware is LE.  Need to properly byteswap some of the fields
so they are interpreted correctly by the driver on BE systems.
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 557761e9
...@@ -178,12 +178,12 @@ int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data) ...@@ -178,12 +178,12 @@ int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data)
return -EINVAL; return -EINVAL;
} }
for (i = 0; i < sign->num; ++i) { for (i = 0; i < le32_to_cpu(sign->num); ++i) {
if (sign->val[i].chip_id == chip_id) if (le32_to_cpu(sign->val[i].chip_id) == chip_id)
break; break;
} }
if (i == sign->num) if (i == le32_to_cpu(sign->num))
return -EINVAL; return -EINVAL;
data += (256 - 64) / 4; data += (256 - 64) / 4;
...@@ -191,18 +191,18 @@ int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data) ...@@ -191,18 +191,18 @@ int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data)
data[1] = sign->val[i].nonce[1]; data[1] = sign->val[i].nonce[1];
data[2] = sign->val[i].nonce[2]; data[2] = sign->val[i].nonce[2];
data[3] = sign->val[i].nonce[3]; data[3] = sign->val[i].nonce[3];
data[4] = sign->len + 64; data[4] = cpu_to_le32(le32_to_cpu(sign->len) + 64);
memset(&data[5], 0, 44); memset(&data[5], 0, 44);
memcpy(&data[16], &sign[1], rdev->vce_fw->size - sizeof(*sign)); memcpy(&data[16], &sign[1], rdev->vce_fw->size - sizeof(*sign));
data += data[4] / 4; data += le32_to_cpu(data[4]) / 4;
data[0] = sign->val[i].sigval[0]; data[0] = sign->val[i].sigval[0];
data[1] = sign->val[i].sigval[1]; data[1] = sign->val[i].sigval[1];
data[2] = sign->val[i].sigval[2]; data[2] = sign->val[i].sigval[2];
data[3] = sign->val[i].sigval[3]; data[3] = sign->val[i].sigval[3];
rdev->vce.keyselect = sign->val[i].keyselect; rdev->vce.keyselect = le32_to_cpu(sign->val[i].keyselect);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment