On Fri, May 27, 2016 at 3:44 PM, Marek Olšák <[email protected]> wrote: > On Fri, May 27, 2016 at 9:03 PM, Alex Deucher <[email protected]> wrote: >> On Fri, May 27, 2016 at 2:18 PM, Marek Olšák <[email protected]> wrote: >>> From: Marek Olšák <[email protected]> >>> >>> R600-R700 used a bad workaround. Now only R600 has to use it. >>> --- >>> src/gallium/drivers/r600/evergreen_hw_context.c | 13 +++++++++++-- >>> src/gallium/drivers/r600/evergreend.h | 1 + >>> src/gallium/drivers/r600/r600_blit.c | 6 ------ >>> src/gallium/drivers/r600/r600_hw_context.c | 25 >>> ++++++++++++++++++++----- >>> src/gallium/drivers/r600/r600d.h | 1 + >>> 5 files changed, 33 insertions(+), 13 deletions(-) >>> >>> diff --git a/src/gallium/drivers/r600/evergreen_hw_context.c >>> b/src/gallium/drivers/r600/evergreen_hw_context.c >>> index f456696..14877ae 100644 >>> --- a/src/gallium/drivers/r600/evergreen_hw_context.c >>> +++ b/src/gallium/drivers/r600/evergreen_hw_context.c >>> @@ -117,7 +117,7 @@ void evergreen_cp_dma_clear_buffer(struct r600_context >>> *rctx, >>> unsigned byte_count = MIN2(size, CP_DMA_MAX_BYTE_COUNT); >>> unsigned reloc; >>> >>> - r600_need_cs_space(rctx, 10 + (rctx->b.flags ? >>> R600_MAX_FLUSH_CS_DWORDS : 0), FALSE); >>> + r600_need_cs_space(rctx, 2 + 10 + (rctx->b.flags ? >>> R600_MAX_FLUSH_CS_DWORDS : 0), FALSE); >>> >>> /* Flush the caches for the first copy only. */ >>> if (rctx->b.flags) { >>> @@ -148,9 +148,18 @@ void evergreen_cp_dma_clear_buffer(struct r600_context >>> *rctx, >>> offset += byte_count; >>> } >>> >>> + /* CP DMA is executed in ME, but index buffers are read by PFP. >>> + * This ensures that ME (CP DMA) is idle before PFP starts fetching >>> + * indices. If we wanted to execute CP DMA in PFP, this packet >>> + * should precede it. >>> + */ >>> + if (coher == R600_COHERENCY_SHADER) { >>> + radeon_emit(cs, PKT3(PKT3_PFP_SYNC_ME, 0, 0)); >>> + radeon_emit(cs, 0); >>> + } >> >> Did you test this on 7xx? I don't think this works on 7xx despite > > No yet. > >> what the documentation says. See this kernel commit: >> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b6c2b4faf90230ef9cf1a81f36cbccda4a606c59 >> I think this packet only works on evergreen and newer. > > It should work on R700 according to my docs. The only explanation why > it hangs is that our CP firmware is too old.
IIRC, I looked for new 7xx firmware and there wasn't any. When support for the packet was added in the evergreen timeframe, I suspect it was never validated on 7xx to avoid revalidating/breaking the existing catalyst 6xx/7xx drivers. Alex > > Marek _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
