diff options
author | yongari <yongari@FreeBSD.org> | 2010-11-05 18:19:54 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2010-11-05 18:19:54 +0000 |
commit | a0b6b01d0f89dd96c8533fe875a5be5fdeda50d4 (patch) | |
tree | fb0192d95da8c563565fb58a8f9ce7663e1a054b /sys | |
parent | 45c075992033864639eca604d1f27bcc4d87ba30 (diff) | |
download | FreeBSD-src-a0b6b01d0f89dd96c8533fe875a5be5fdeda50d4.zip FreeBSD-src-a0b6b01d0f89dd96c8533fe875a5be5fdeda50d4.tar.gz |
Enable 64bit DMA addressing for RTL810xE/RTL8168/RTL8111 PCIe
controllers. Some old PCI controllers may work with DAC but it was
known to be buggy so 64bit DMA addressing is used only on PCIe
controllers.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/re/if_re.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c index 8fd20b6..f774e71 100644 --- a/sys/dev/re/if_re.c +++ b/sys/dev/re/if_re.c @@ -934,6 +934,7 @@ re_dma_map_addr(void *arg, bus_dma_segment_t *segs, int nseg, int error) static int re_allocmem(device_t dev, struct rl_softc *sc) { + bus_addr_t lowaddr; bus_size_t rx_list_size, tx_list_size; int error; int i; @@ -947,10 +948,13 @@ re_allocmem(device_t dev, struct rl_softc *sc) * register should be set. However some RealTek chips are known * to be buggy on DAC handling, therefore disable DAC by limiting * DMA address space to 32bit. PCIe variants of RealTek chips - * may not have the limitation but I took safer path. + * may not have the limitation. */ + lowaddr = BUS_SPACE_MAXADDR; + if ((sc->rl_flags & RL_FLAG_PCIE) == 0) + lowaddr = BUS_SPACE_MAXADDR_32BIT; error = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0, - BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, + lowaddr, BUS_SPACE_MAXADDR, NULL, NULL, BUS_SPACE_MAXSIZE_32BIT, 0, BUS_SPACE_MAXSIZE_32BIT, 0, NULL, NULL, &sc->rl_parent_tag); if (error) { |