diff options
author | Emmanuel Vadot <manu@FreeBSD.org> | 2023-10-03 16:46:56 +0000 |
---|---|---|
committer | Emmanuel Vadot <manu@FreeBSD.org> | 2023-10-05 15:34:40 +0000 |
commit | f0a7dd7703124af42da3705bb11e785c0eb9f0c4 (patch) | |
tree | 2ecf321ed2811e313560897ba204e02f4c554186 | |
parent | 29776aa436cf248950bcf755c6a53ec0590d89bf (diff) | |
download | src-f0a7dd7703124af42da3705bb11e785c0eb9f0c4.tar.gz src-f0a7dd7703124af42da3705bb11e785c0eb9f0c4.zip |
dwc: Setup desc addresses in the dma init function.
-rw-r--r-- | sys/dev/dwc/dwc1000_dma.c | 11 | ||||
-rw-r--r-- | sys/dev/dwc/if_dwc.c | 11 |
2 files changed, 11 insertions, 11 deletions
diff --git a/sys/dev/dwc/dwc1000_dma.c b/sys/dev/dwc/dwc1000_dma.c index 3d95c9d8e764..cdfd24afd574 100644 --- a/sys/dev/dwc/dwc1000_dma.c +++ b/sys/dev/dwc/dwc1000_dma.c @@ -605,11 +605,19 @@ int dma1000_init(struct dwc_softc *sc) { struct mbuf *m; + uint32_t reg; int error; int nidx; int idx; /* + * DMA must be stop while changing descriptor list addresses. + */ + reg = READ4(sc, OPERATION_MODE); + reg &= ~(MODE_ST | MODE_SR); + WRITE4(sc, OPERATION_MODE, reg); + + /* * Set up TX descriptor ring, descriptors, and dma maps. */ error = bus_dma_tag_create( @@ -684,6 +692,8 @@ dma1000_init(struct dwc_softc *sc) for (idx = 0; idx < TX_DESC_COUNT; idx++) dwc_setup_txdesc(sc, idx, 0, 0, 0, false, false); + WRITE4(sc, TX_DESCR_LIST_ADDR, sc->txdesc_ring_paddr); + /* * Set up RX descriptor ring, descriptors, dma maps, and mbufs. */ @@ -758,6 +768,7 @@ dma1000_init(struct dwc_softc *sc) goto out; } } + WRITE4(sc, RX_DESCR_LIST_ADDR, sc->rxdesc_ring_paddr); out: if (error != 0) diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c index 896e2f2205a0..0df99a7c205c 100644 --- a/sys/dev/dwc/if_dwc.c +++ b/sys/dev/dwc/if_dwc.c @@ -610,22 +610,11 @@ dwc_attach(device_t dev) WRITE4(sc, BUS_MODE, reg); - /* - * DMA must be stop while changing descriptor list addresses. - */ - reg = READ4(sc, OPERATION_MODE); - reg &= ~(MODE_ST | MODE_SR); - WRITE4(sc, OPERATION_MODE, reg); - if (dma1000_init(sc)) { bus_release_resources(dev, dwc_spec, sc->res); return (ENXIO); } - /* Setup addresses */ - WRITE4(sc, RX_DESCR_LIST_ADDR, sc->rxdesc_ring_paddr); - WRITE4(sc, TX_DESCR_LIST_ADDR, sc->txdesc_ring_paddr); - mtx_init(&sc->mtx, device_get_nameunit(sc->dev), MTX_NETWORK_LOCK, MTX_DEF); |