> Does this mean the DMA engines are implemented in silicon? Yeah, it's not implemented in the firmware so it must be in silicon.
> If so, there may be an error in the chip
> design. AFAIK, all Windows DMA is done to really low-order memory, and such a
> defect would not show
> there. I do not know if this card is ever used on a Mac.
Hmm. This is of course possible but I doubt it a bit since the DMA
engine seems to be a quite highly-used piece of "code".
> >> Between 2.6.24-rc2 and -rc3, code that resulted in the Descriptor Address
> >> Rings having low addresses was removed. At that point, my card failed with
> >> a DMA error. When the
> >> ring buffer is forced to a low address by requesting it with the GFP_DMA
> >> flag, then the card works.
> >> Note that the data buffers for DMA are still at high addresses - only the
> >> ring buffer is low.
> >
> > Maybe the card can't handle high addresses for the buffers or we're
> > doing something wrong with the address (extension) here?
>
> According to the specs, a flat 64-bit address is used for the ring buffer and
> it should be OK to put
> the buffer anywhere in RAM. Only the data buffers require messing with an
> extension field; however,
> my test machine has only 1.5 GB RAM, and all addresses fit in the low-order
> 32 bits.
Right. Or so we thought :)
> On a whim, I decided to look at the latest version of ndiswrapper, and
> found this code snippet:
>
> #ifdef CONFIG_X86_64
> /* 64-bit broadcom driver doesn't work if DMA is allocated
> * from over 1GB */
> if (wd->vendor == 0x14e4) {
> if (pci_set_dma_mask(pdev, DMA_30BIT_MASK) ||
> pci_set_consistent_dma_mask(pdev, DMA_30BIT_MASK))
> WARNING("couldn't set DMA mask; this driver "
> "may not work with more than 1GB
> RAM");
> }
> #endif
>
> This makes it look more-and-more like a design problem with the
> hardware.
But this isn't quite correct either is it?
You said before that we should be fine allocating the DMA rings below
1GB and then doing arbitrary DMA buffers. If this is the case, then imho
we should just do that, the six DMA rings or whatever we should be able
to fit into low memory.
johannes
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Bcm43xx-dev mailing list [email protected] https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
