diff options
author | Rob Clark <[email protected]> | 2019-08-29 11:35:17 -0700 |
---|---|---|
committer | Rob Clark <[email protected]> | 2019-09-03 14:10:57 -0700 |
commit | 305bcdf9921a0684e5dfca19dc42e849f3f2246c (patch) | |
tree | c9a48071d55e4c0e1843092815a611fbabffab43 /src/freedreno | |
parent | 5ccd5871ed10ca92bfdb934832d58e92f9ab9523 (diff) |
freedreno/drm: fix 64b iova shifts
Should shift before splitting 64b iova into dwords
Signed-off-by: Rob Clark <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/freedreno')
-rw-r--r-- | src/freedreno/drm/msm_ringbuffer_sp.c | 14 |
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; } } |