summaryrefslogtreecommitdiffstats
path: root/src/freedreno/drm
diff options
context:
space:
mode:
authorRob Clark <robdclark@chromium.org>2019-08-29 11:35:17 -0700
committerRob Clark <robdclark@chromium.org>2019-09-03 14:10:57 -0700
commit305bcdf9921a0684e5dfca19dc42e849f3f2246c (patch)
treec9a48071d55e4c0e1843092815a611fbabffab43 /src/freedreno/drm
parent5ccd5871ed10ca92bfdb934832d58e92f9ab9523 (diff)
freedreno/drm: fix 64b iova shifts
Should shift before splitting 64b iova into dwords Signed-off-by: Rob Clark <robdclark@chromium.org> Reviewed-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'src/freedreno/drm')
-rw-r--r--src/freedreno/drm/msm_ringbuffer_sp.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/freedreno/drm/msm_ringbuffer_sp.c b/src/freedreno/drm/msm_ringbuffer_sp.c
index af71277072c..ec375a19938 100644
--- a/src/freedreno/drm/msm_ringbuffer_sp.c
+++ b/src/freedreno/drm/msm_ringbuffer_sp.c
@@ -421,25 +421,19 @@ msm_ringbuffer_sp_emit_reloc(struct fd_ringbuffer *ring,
}
uint64_t iova = fd_bo_get_iova(reloc->bo) + reloc->offset;
- uint32_t dword = iova;
int shift = reloc->shift;
if (shift < 0)
- dword >>= -shift;
+ iova >>= -shift;
else
- dword <<= shift;
+ iova <<= shift;
+
+ uint32_t dword = iova;
(*ring->cur++) = dword | reloc->or;
if (pipe->gpu_id >= 500) {
dword = iova >> 32;
- shift -= 32;
-
- if (shift < 0)
- dword >>= -shift;
- else
- dword <<= shift;
-
(*ring->cur++) = dword | reloc->orhi;
}
}