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.
This commit is contained in:
parent
0108cce0a4
commit
66366ca4bf
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user