On Fri, Jun 11, 2010 at 11:55:07AM -0600, Scott Long wrote:
> On Jun 11, 2010, at 11:53 AM, Marcel Moolenaar wrote:
> > 
> > On Jun 11, 2010, at 10:47 AM, Scott Long wrote:
> > 
> >> On Jun 11, 2010, at 11:44 AM, Marcel Moolenaar wrote:
> >>> 
> >>> On Jun 11, 2010, at 10:37 AM, Scott Long wrote:
> >>>> 
> >>>> I'm not clear why you even need bounce buffers for RX.  The chip 
> >>>> supports 64bit addresses with no boundary or alignment restrictions.
> >>> 
> >>> As per:
> >>>      /*
> >>>       * All controllers that are not 5755 or higher have 4GB
> >>>       * boundary DMA bug.
> >>>       * Whenever an address crosses a multiple of the 4GB boundary
> >>>       * (including 4GB, 8Gb, 12Gb, etc.) and makes the transition
> >>>       * from 0xX_FFFF_FFFF to 0x(X+1)_0000_0000 an internal DMA
> >>>       * state machine will lockup and cause the device to hang.
> >>>       */
> >>>      if (BGE_IS_5755_PLUS(sc) == 0)
> >>>              sc->bge_flags |= BGE_FLAG_4G_BNDRY_BUG;
> >>> 
> >>> and:
> >>>      lowaddr = BUS_SPACE_MAXADDR;
> >>>      if ((sc->bge_flags & BGE_FLAG_40BIT_BUG) != 0)
> >>>              lowaddr = BGE_DMA_MAXADDR;
> >>>      if ((sc->bge_flags & BGE_FLAG_4G_BNDRY_BUG) != 0)
> >>>              lowaddr = BUS_SPACE_MAXADDR_32BIT;
> >>>      /*
> >>>       * Allocate the parent bus DMA tag appropriate for PCI.
> >>>       */
> >>>      error = bus_dma_tag_create(bus_get_dma_tag(sc->bge_dev),
> >>>          1, 0, lowaddr, BUS_SPACE_MAXADDR, NULL,
> >>>          NULL, BUS_SPACE_MAXSIZE_32BIT, 0, BUS_SPACE_MAXSIZE_32BIT,
> >>>          0, NULL, NULL, &sc->bge_cdata.bge_parent_tag);
> >>> 
> >>> 
> >> 
> >> Noted in previous email.  If this restriction is put in the boundary 
> >> attribute, then you'll only bounce the very rare case of an mbuf 
> >> straddling a 4G boundary.
> > 
> > I agree with you, but I was just giving the facts. I don't even
> > know if we attempted to use the boundary argument before but
> > problems forced us to resort to this.
> > 
> 
> Thanks to the design limitation of PCIe, the 4GB boundary is a common 
> restriction and should work fine in FreeBSD.

I guess many PCIe drivers in tree do not explicitly set 4GB
boundary restriction. Isn't it better to set it automatically with
bus_get_dma_tag(9)?

> 
> Scott
> 
> 
_______________________________________________
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