svn commit: r310375 - head/sys/dev/iwn

Oleksandr Tymoshenko gonzo at FreeBSD.org
Wed Dec 21 22:35:28 UTC 2016


Author: gonzo
Date: Wed Dec 21 22:35:26 2016
New Revision: 310375
URL: https://svnweb.freebsd.org/changeset/base/310375

Log:
  [iwn] Several fixes for DMA part of iwn(4)
  
  - Perform DMS sync when accessing/initializing ICT table
  - Fix some DMA sync operations to use matching tags
  
  Reviewed by:	avos
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D8804

Modified:
  head/sys/dev/iwn/if_iwn.c

Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c	Wed Dec 21 22:04:44 2016	(r310374)
+++ head/sys/dev/iwn/if_iwn.c	Wed Dec 21 22:35:26 2016	(r310375)
@@ -2120,6 +2120,9 @@ iwn5000_ict_reset(struct iwn_softc *sc)
 	memset(sc->ict, 0, IWN_ICT_SIZE);
 	sc->ict_cur = 0;
 
+	bus_dmamap_sync(sc->ict_dma.tag, sc->ict_dma.map,
+	    BUS_DMASYNC_PREWRITE);
+
 	/* Set physical address of ICT table (4KB aligned). */
 	DPRINTF(sc, IWN_DEBUG_RESET, "%s: enabling ICT\n", __func__);
 	IWN_WRITE(sc, IWN_DRAM_INT_TBL, IWN_DRAM_INT_TBL_ENABLE |
@@ -4100,6 +4103,8 @@ iwn_intr(void *arg)
 
 	/* Read interrupts from ICT (fast) or from registers (slow). */
 	if (sc->sc_flags & IWN_FLAG_USE_ICT) {
+		bus_dmamap_sync(sc->ict_dma.tag, sc->ict_dma.map,
+		    BUS_DMASYNC_POSTREAD);
 		tmp = 0;
 		while (sc->ict[sc->ict_cur] != 0) {
 			tmp |= sc->ict[sc->ict_cur];
@@ -4635,7 +4640,7 @@ iwn_tx_data(struct iwn_softc *sc, struct
 	}
 
 	bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_PREWRITE);
-	bus_dmamap_sync(ring->data_dmat, ring->cmd_dma.map,
+	bus_dmamap_sync(ring->cmd_dma.tag, ring->cmd_dma.map,
 	    BUS_DMASYNC_PREWRITE);
 	bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
 	    BUS_DMASYNC_PREWRITE);
@@ -4828,7 +4833,7 @@ iwn_tx_data_raw(struct iwn_softc *sc, st
 	}
 
 	bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_PREWRITE);
-	bus_dmamap_sync(ring->data_dmat, ring->cmd_dma.map,
+	bus_dmamap_sync(ring->cmd_dma.tag, ring->cmd_dma.map,
 	    BUS_DMASYNC_PREWRITE);
 	bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
 	    BUS_DMASYNC_PREWRITE);
@@ -5161,7 +5166,7 @@ iwn_cmd(struct iwn_softc *sc, int code, 
 		bus_dmamap_sync(ring->data_dmat, data->map,
 		    BUS_DMASYNC_PREWRITE);
 	} else {
-		bus_dmamap_sync(ring->data_dmat, ring->cmd_dma.map,
+		bus_dmamap_sync(ring->cmd_dma.tag, ring->cmd_dma.map,
 		    BUS_DMASYNC_PREWRITE);
 	}
 	bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,


More information about the svn-src-head mailing list