diff options
| author | Pyun YongHyeon <yongari@FreeBSD.org> | 2011-04-08 19:06:01 +0000 |
|---|---|---|
| committer | Pyun YongHyeon <yongari@FreeBSD.org> | 2011-04-08 19:06:01 +0000 |
| commit | 8f3be4e95b0fc3bb5c4c079a11ff0a275870622a (patch) | |
| tree | 680d2d20968685e4fc7efa78d7efaf1d53e224c4 /sys | |
| parent | 6fed4454c2b7b4bf3ffdd8e239edff85ccf6b9dd (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/dev/age/if_age.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/age/if_age.c b/sys/dev/age/if_age.c index e08607a050dc..8b4b9d1360b7 100644 --- a/sys/dev/age/if_age.c +++ b/sys/dev/age/if_age.c @@ -1092,11 +1092,14 @@ again: * Create Tx/Rx buffer parent tag. * L1 supports full 64bit DMA addressing in Tx/Rx buffers * so it needs separate parent DMA tag. + * XXX + * It seems enabling 64bit DMA causes data corruption. Limit + * DMA address space to 32bit. */ error = bus_dma_tag_create( bus_get_dma_tag(sc->age_dev), /* parent */ 1, 0, /* alignment, boundary */ - BUS_SPACE_MAXADDR, /* lowaddr */ + BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ BUS_SPACE_MAXADDR, /* highaddr */ NULL, NULL, /* filter, filterarg */ BUS_SPACE_MAXSIZE_32BIT, /* maxsize */ @@ -2421,6 +2424,8 @@ age_rxintr(struct age_softc *sc, int rr_prod, int count) bus_dmamap_sync(sc->age_cdata.age_rr_ring_tag, sc->age_cdata.age_rr_ring_map, BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE); + bus_dmamap_sync(sc->age_cdata.age_rx_ring_tag, + sc->age_cdata.age_rx_ring_map, BUS_DMASYNC_POSTWRITE); for (prog = 0; rr_cons != rr_prod; prog++) { if (count <= 0) @@ -2452,6 +2457,8 @@ age_rxintr(struct age_softc *sc, int rr_prod, int count) /* Update the consumer index. */ sc->age_cdata.age_rr_cons = rr_cons; + bus_dmamap_sync(sc->age_cdata.age_rx_ring_tag, + sc->age_cdata.age_rx_ring_map, BUS_DMASYNC_PREWRITE); /* Sync descriptors. */ bus_dmamap_sync(sc->age_cdata.age_rr_ring_tag, sc->age_cdata.age_rr_ring_map, @@ -2978,8 +2985,7 @@ age_init_rx_ring(struct age_softc *sc) } bus_dmamap_sync(sc->age_cdata.age_rx_ring_tag, - sc->age_cdata.age_rx_ring_map, - BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + sc->age_cdata.age_rx_ring_map, BUS_DMASYNC_PREWRITE); return (0); } |
