radeon: use memcpy_to/fromio for UVD fw upload
[ Upstream commit ab8363d3875a83f4901eb1cc00ce8afd24de6c85 ]
I met a gpu addr bug recently and the kernel log
tells me the pc is memcpy/memset and link register is
radeon_uvd_resume.
As we know, in some architectures, optimized memcpy/memset
may not work well on device memory. Trival memcpy_toio/memset_io
can fix this problem.
BTW, amdgpu has already done it in:
commit ba0b2275a6
("drm/amdgpu: use memcpy_to/fromio for UVD fw upload"),
that's why it has no this issue on the same gpu and platform.
Signed-off-by: Chen Li <chenli@uniontech.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
3e4b0fbb72
commit
57b21ef118
@@ -286,7 +286,7 @@ int radeon_uvd_resume(struct radeon_device *rdev)
|
|||||||
if (rdev->uvd.vcpu_bo == NULL)
|
if (rdev->uvd.vcpu_bo == NULL)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
memcpy(rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size);
|
memcpy_toio((void __iomem *)rdev->uvd.cpu_addr, rdev->uvd_fw->data, rdev->uvd_fw->size);
|
||||||
|
|
||||||
size = radeon_bo_size(rdev->uvd.vcpu_bo);
|
size = radeon_bo_size(rdev->uvd.vcpu_bo);
|
||||||
size -= rdev->uvd_fw->size;
|
size -= rdev->uvd_fw->size;
|
||||||
@@ -294,7 +294,7 @@ int radeon_uvd_resume(struct radeon_device *rdev)
|
|||||||
ptr = rdev->uvd.cpu_addr;
|
ptr = rdev->uvd.cpu_addr;
|
||||||
ptr += rdev->uvd_fw->size;
|
ptr += rdev->uvd_fw->size;
|
||||||
|
|
||||||
memset(ptr, 0, size);
|
memset_io((void __iomem *)ptr, 0, size);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user