From 8cf102dd6b86e5e28f3e0b788b61f281ebf636f0 Mon Sep 17 00:00:00 2001 From: Alexander Krutwig Date: Wed, 24 Aug 2016 15:30:06 +0200 Subject: bsp/atsam: Fix data cache flush --- c/src/lib/libbsp/arm/atsam/network/if_atsam.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/c/src/lib/libbsp/arm/atsam/network/if_atsam.c b/c/src/lib/libbsp/arm/atsam/network/if_atsam.c index 55db159392..dbd7ee4dee 100644 --- a/c/src/lib/libbsp/arm/atsam/network/if_atsam.c +++ b/c/src/lib/libbsp/arm/atsam/network/if_atsam.c @@ -648,10 +648,14 @@ static bool if_atsam_send_packet(if_atsam_softc *sc, struct mbuf *m) */ cur = &sc->tx_bd_base[sc->tx_ring.tx_bd_used]; /* Set the transfer data */ - rtems_cache_flush_multiple_data_lines(mtod(m, const void *), - (size_t)m->m_len); if (m->m_len) { - cur->addr = (uint32_t)(mtod(m, void *)); + uintptr_t cache_adjustment = mtod(m, uintptr_t) % 32; + + rtems_cache_flush_multiple_data_lines( + mtod(m, const char *) - cache_adjustment, + (size_t)(m->m_len + cache_adjustment)); + + cur->addr = mtod(m, uint32_t); tmp_val = (uint32_t)m->m_len | GMAC_TX_SET_USED; if (sc->tx_ring.tx_bd_used == (sc->tx_ring.length - 1)) { tmp_val |= GMAC_TX_SET_WRAP; -- cgit v1.2.3