From: Ramon Fried Date: Fri, 17 Apr 2020 17:17:36 +0000 (+0300) Subject: Cadence: gem: fix wraparound in 64bit descriptors X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=f1e7cb1388e46eac8285854af2abdfde41ffa226;p=qemu.git Cadence: gem: fix wraparound in 64bit descriptors Wraparound of TX descriptor cyclic buffer only updated the low 32 bits of the descriptor. Fix that by checking if we're working with 64bit descriptors. Signed-off-by: Ramon Fried Reviewed-by: Edgar E. Iglesias Message-id: 20200417171736.441607-1-rfried.dev@gmail.com Signed-off-by: Peter Maydell --- diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c index 51ec5a072d..b7b7985bf2 100644 --- a/hw/net/cadence_gem.c +++ b/hw/net/cadence_gem.c @@ -1238,7 +1238,14 @@ static void gem_transmit(CadenceGEMState *s) /* read next descriptor */ if (tx_desc_get_wrap(desc)) { tx_desc_set_last(desc); - packet_desc_addr = s->regs[GEM_TXQBASE]; + + if (s->regs[GEM_DMACFG] & GEM_DMACFG_ADDR_64B) { + packet_desc_addr = s->regs[GEM_TBQPH]; + packet_desc_addr <<= 32; + } else { + packet_desc_addr = 0; + } + packet_desc_addr |= s->regs[GEM_TXQBASE]; } else { packet_desc_addr += 4 * gem_get_desc_len(s, false); }