Author: yongari
Date: Fri Nov  5 18:19:54 2010
New Revision: 214840
URL: http://svn.freebsd.org/changeset/base/214840

Log:
  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.

Modified:
  head/sys/dev/re/if_re.c

Modified: head/sys/dev/re/if_re.c
==============================================================================
--- head/sys/dev/re/if_re.c     Fri Nov  5 16:04:10 2010        (r214839)
+++ head/sys/dev/re/if_re.c     Fri Nov  5 18:19:54 2010        (r214840)
@@ -934,6 +934,7 @@ re_dma_map_addr(void *arg, bus_dma_segme
 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_soft
         * 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) {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to