summaryrefslogtreecommitdiffstats
path: root/freebsd
diff options
context:
space:
mode:
authorChristian Mauderer <christian.mauderer@embedded-brains.de>2020-05-27 13:49:08 +0200
committerChristian Mauderer <christian.mauderer@embedded-brains.de>2020-07-29 11:19:24 +0200
commit4a05b2e41cd660413f68ec9b52e154efd6710f41 (patch)
tree3d3bb0cc16f6363ca91b768949c51f86a717f516 /freebsd
parentimx: Don't use USB_NEED_BUSDMA_COHERENT_ALLOC (diff)
downloadrtems-libbsd-4a05b2e41cd660413f68ec9b52e154efd6710f41.tar.bz2
if_ffec: Align send buffers to cache if necessary.
Diffstat (limited to 'freebsd')
-rw-r--r--freebsd/sys/dev/ffec/if_ffec.c12
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) {