diff options
author | Oded Gabbay <oded.gabbay@gmail.com> | 2015-12-04 16:09:04 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-12-09 00:22:44 -0500 |
commit | 687f4b98d1f4e27508f7ad4bcce787c1ba58b289 (patch) | |
tree | 1b3ec2d76d3c92effe2b62fe5643335a285304c0 /drivers/gpu | |
parent | 5f3e226f511ec98d70c970f09cdb4ec46511cc5e (diff) |
radeon: Fix VCE ring test for Big-Endian systems
This patch fixes the VCE ring test when running on Big-Endian machines.
Every write to the ring needs to be translated to little-endian.
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_vce.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_vce.c b/drivers/gpu/drm/radeon/radeon_vce.c index 574f62bbd215..86f57e473a4e 100644 --- a/drivers/gpu/drm/radeon/radeon_vce.c +++ b/drivers/gpu/drm/radeon/radeon_vce.c | |||
@@ -699,12 +699,12 @@ bool radeon_vce_semaphore_emit(struct radeon_device *rdev, | |||
699 | { | 699 | { |
700 | uint64_t addr = semaphore->gpu_addr; | 700 | uint64_t addr = semaphore->gpu_addr; |
701 | 701 | ||
702 | radeon_ring_write(ring, VCE_CMD_SEMAPHORE); | 702 | radeon_ring_write(ring, cpu_to_le32(VCE_CMD_SEMAPHORE)); |
703 | radeon_ring_write(ring, (addr >> 3) & 0x000FFFFF); | 703 | radeon_ring_write(ring, cpu_to_le32((addr >> 3) & 0x000FFFFF)); |
704 | radeon_ring_write(ring, (addr >> 23) & 0x000FFFFF); | 704 | radeon_ring_write(ring, cpu_to_le32((addr >> 23) & 0x000FFFFF)); |
705 | radeon_ring_write(ring, 0x01003000 | (emit_wait ? 1 : 0)); | 705 | radeon_ring_write(ring, cpu_to_le32(0x01003000 | (emit_wait ? 1 : 0))); |
706 | if (!emit_wait) | 706 | if (!emit_wait) |
707 | radeon_ring_write(ring, VCE_CMD_END); | 707 | radeon_ring_write(ring, cpu_to_le32(VCE_CMD_END)); |
708 | 708 | ||
709 | return true; | 709 | return true; |
710 | } | 710 | } |
@@ -719,10 +719,10 @@ bool radeon_vce_semaphore_emit(struct radeon_device *rdev, | |||
719 | void radeon_vce_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) | 719 | void radeon_vce_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib) |
720 | { | 720 | { |
721 | struct radeon_ring *ring = &rdev->ring[ib->ring]; | 721 | struct radeon_ring *ring = &rdev->ring[ib->ring]; |
722 | radeon_ring_write(ring, VCE_CMD_IB); | 722 | radeon_ring_write(ring, cpu_to_le32(VCE_CMD_IB)); |
723 | radeon_ring_write(ring, ib->gpu_addr); | 723 | radeon_ring_write(ring, cpu_to_le32(ib->gpu_addr)); |
724 | radeon_ring_write(ring, upper_32_bits(ib->gpu_addr)); | 724 | radeon_ring_write(ring, cpu_to_le32(upper_32_bits(ib->gpu_addr))); |
725 | radeon_ring_write(ring, ib->length_dw); | 725 | radeon_ring_write(ring, cpu_to_le32(ib->length_dw)); |
726 | } | 726 | } |
727 | 727 | ||
728 | /** | 728 | /** |
@@ -738,12 +738,12 @@ void radeon_vce_fence_emit(struct radeon_device *rdev, | |||
738 | struct radeon_ring *ring = &rdev->ring[fence->ring]; | 738 | struct radeon_ring *ring = &rdev->ring[fence->ring]; |
739 | uint64_t addr = rdev->fence_drv[fence->ring].gpu_addr; | 739 | uint64_t addr = rdev->fence_drv[fence->ring].gpu_addr; |
740 | 740 | ||
741 | radeon_ring_write(ring, VCE_CMD_FENCE); | 741 | radeon_ring_write(ring, cpu_to_le32(VCE_CMD_FENCE)); |
742 | radeon_ring_write(ring, addr); | 742 | radeon_ring_write(ring, cpu_to_le32(addr)); |
743 | radeon_ring_write(ring, upper_32_bits(addr)); | 743 | radeon_ring_write(ring, cpu_to_le32(upper_32_bits(addr))); |
744 | radeon_ring_write(ring, fence->seq); | 744 | radeon_ring_write(ring, cpu_to_le32(fence->seq)); |
745 | radeon_ring_write(ring, VCE_CMD_TRAP); | 745 | radeon_ring_write(ring, cpu_to_le32(VCE_CMD_TRAP)); |
746 | radeon_ring_write(ring, VCE_CMD_END); | 746 | radeon_ring_write(ring, cpu_to_le32(VCE_CMD_END)); |
747 | } | 747 | } |
748 | 748 | ||
749 | /** | 749 | /** |
@@ -765,7 +765,7 @@ int radeon_vce_ring_test(struct radeon_device *rdev, struct radeon_ring *ring) | |||
765 | ring->idx, r); | 765 | ring->idx, r); |
766 | return r; | 766 | return r; |
767 | } | 767 | } |
768 | radeon_ring_write(ring, VCE_CMD_END); | 768 | radeon_ring_write(ring, cpu_to_le32(VCE_CMD_END)); |
769 | radeon_ring_unlock_commit(rdev, ring, false); | 769 | radeon_ring_unlock_commit(rdev, ring, false); |
770 | 770 | ||
771 | for (i = 0; i < rdev->usec_timeout; i++) { | 771 | for (i = 0; i < rdev->usec_timeout; i++) { |