diff options
author | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2020-05-27 13:49:08 +0200 |
---|---|---|
committer | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2020-07-29 13:09:11 +0200 |
commit | 97dc907946bb53e8c7f0e716c05093b08a0b9a09 (patch) | |
tree | 33dcc6d4ab9d5bbea45070bf238e5fbd3b8f6c37 /freebsd | |
parent | imx: Don't use USB_NEED_BUSDMA_COHERENT_ALLOC (diff) | |
download | rtems-libbsd-97dc907946bb53e8c7f0e716c05093b08a0b9a09.tar.bz2 |
if_ffec: Align send buffers to cache if necessary.
Diffstat (limited to 'freebsd')
-rw-r--r-- | freebsd/sys/dev/ffec/if_ffec.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/freebsd/sys/dev/ffec/if_ffec.c b/freebsd/sys/dev/ffec/if_ffec.c index aee2aa64..e8287ed2 100644 --- a/freebsd/sys/dev/ffec/if_ffec.c +++ b/freebsd/sys/dev/ffec/if_ffec.c @@ -714,8 +714,16 @@ ffec_encap(struct ifnet *ifp, struct ffec_softc *sc, struct mbuf *m0, tx_desc->buf_paddr = segs[i].ds_addr; tx_desc->flags2 = flags2; #ifdef __rtems__ - rtems_cache_flush_multiple_data_lines((void *)segs[i].ds_addr, - segs[i].ds_len); + uintptr_t addr_flush = (uintptr_t)segs[i].ds_addr; + size_t len_flush = segs[i].ds_len; +#ifdef CPU_CACHE_LINE_BYTES + /* mbufs should be cache line aligned. So we can just round. */ + addr_flush = addr_flush & ~(CPU_CACHE_LINE_BYTES - 1); + len_flush = (len_flush + (CPU_CACHE_LINE_BYTES - 1)) & + ~(CPU_CACHE_LINE_BYTES - 1); +#endif + rtems_cache_flush_multiple_data_lines((void*)addr_flush, + len_flush); #endif /* __rtems__ */ if (i == 0) { |