Module Name: src
Committed By: riastradh
Date: Sun Feb 13 18:29:00 UTC 2022
Modified Files:
src/sys/dev/ic: dwc_eqos.c
Log Message:
eqos(4): membar_* is not appropriate here; use bus_dmamap_sync.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/ic/dwc_eqos.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/ic/dwc_eqos.c
diff -u src/sys/dev/ic/dwc_eqos.c:1.3 src/sys/dev/ic/dwc_eqos.c:1.4
--- src/sys/dev/ic/dwc_eqos.c:1.3 Sun Jan 9 00:36:28 2022
+++ src/sys/dev/ic/dwc_eqos.c Sun Feb 13 18:29:00 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: dwc_eqos.c,v 1.3 2022/01/09 00:36:28 mrg Exp $ */
+/* $NetBSD: dwc_eqos.c,v 1.4 2022/02/13 18:29:00 riastradh Exp $ */
/*-
* Copyright (c) 2022 Jared McNeill <[email protected]>
@@ -33,7 +33,7 @@
#include "opt_net_mpsafe.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dwc_eqos.c,v 1.3 2022/01/09 00:36:28 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dwc_eqos.c,v 1.4 2022/02/13 18:29:00 riastradh Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -322,9 +322,13 @@ eqos_setup_txbuf(struct eqos_softc *sc,
/*
* Defer setting OWN bit on the first descriptor until all
- * descriptors have been updated.
+ * descriptors have been updated. The hardware will not try to
+ * process any descriptors past the first one still owned by
+ * software (i.e., with the OWN bit clear).
*/
- membar_sync();
+ bus_dmamap_sync(sc->sc_dmat, sc->sc_tx.desc_map,
+ DESC_OFF(index), offsetof(struct eqos_dma_desc, tdes3),
+ BUS_DMASYNC_PREWRITE);
sc->sc_tx.desc_ring[index].tdes3 |= htole32(EQOS_TDES3_OWN);
return nsegs;
@@ -333,10 +337,13 @@ eqos_setup_txbuf(struct eqos_softc *sc,
static void
eqos_setup_rxdesc(struct eqos_softc *sc, int index, bus_addr_t paddr)
{
+
sc->sc_rx.desc_ring[index].tdes0 = htole32((uint32_t)paddr);
sc->sc_rx.desc_ring[index].tdes1 = htole32((uint32_t)(paddr >> 32));
sc->sc_rx.desc_ring[index].tdes2 = htole32(0);
- membar_sync();
+ bus_dmamap_sync(sc->sc_dmat, sc->sc_rx.desc_map,
+ DESC_OFF(index), offsetof(struct eqos_dma_desc, tdes3),
+ BUS_DMASYNC_PREWRITE);
sc->sc_rx.desc_ring[index].tdes3 =
htole32(EQOS_TDES3_OWN | EQOS_TDES3_IOC | EQOS_TDES3_BUF1V);
}