If (pktlen & 3) == 0, SXIE_ROUNDUP returns pktlen anyway (that's its job):
it's defined as
#define SXIE_ROUNDUP(size, unit) (((size) + (unit) - 1) & ~((unit) - 1))
Thanks
Tom
Index: sys/arch/armv7/sunxi/sxie.c
===================================================================
RCS file: /home/OpenBSD/cvs/src/sys/arch/armv7/sunxi/sxie.c,v
retrieving revision 1.14
diff -u -p -u -r1.14 sxie.c
--- sys/arch/armv7/sunxi/sxie.c 13 Apr 2016 11:34:00 -0000 1.14
+++ sys/arch/armv7/sunxi/sxie.c 8 Jun 2016 23:03:46 -0000
@@ -606,10 +606,7 @@ trynext:
m_adj(m, ETHER_ALIGN);
/* read the actual packet from fifo XXX through 'align buffer'.. */
- if (pktlen & 3)
- rlen = SXIE_ROUNDUP(pktlen, 4);
- else
- rlen = pktlen;
+ rlen = SXIE_ROUNDUP(pktlen, 4);
bus_space_read_multi_4(sc->sc_iot, sc->sc_ioh,
SXIE_RXIO, (uint32_t *)&rxbuf[0], rlen >> 2);
memcpy(mtod(m, char *), (char *)&rxbuf[0], pktlen);