freedreno/a6xx: fix OUT_REG() vs growable cmdstream

BEGIN_RING() could decide we can't fit the next packet in the current
cmdstream segment, and grow a new segment.  So we need to grab ring->cur
*after* BEGIN_RING(), otherwise we are writing cmdstream past the end of
the previous segment.

Fixes: bdd98b892f ("freedreno: New struct packing macros")
Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
Rob Clark
2019-12-14 09:09:08 -08:00
parent ce52b49348
commit 1bf3837395
@@ -76,12 +76,12 @@ struct fd_reg_pair {
do { \
const struct fd_reg_pair regs[] = { __VA_ARGS__ }; \
unsigned count = ARRAY_SIZE(regs); \
uint32_t *p = ring->cur; \
\
STATIC_ASSERT(count > 0); \
STATIC_ASSERT(count <= 16); \
\
BEGIN_RING(ring, count + 1); \
uint32_t *p = ring->cur; \
*p++ = CP_TYPE4_PKT | count | \
(_odd_parity_bit(count) << 7) | \
((regs[0].reg & 0x3ffff) << 8) | \