[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
This commit is contained in:
parent
20549bf66f
commit
a728ea8ea2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=310375
@ -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 mbuf *m, struct ieee80211_node *ni)
|
||||
}
|
||||
|
||||
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, struct mbuf *m,
|
||||
}
|
||||
|
||||
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, const void *buf, int size, int async)
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user