Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc78eb22 authored by Alex Deucher's avatar Alex Deucher
Browse files

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: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 9441f964
Loading
Loading
Loading
Loading
+6 −6
Original line number Original line Diff line number Diff line
@@ -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)
	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;
}
}