Soekris 4826 USB failure on FreeBSD 7.0
Hans Petter Selasky
hselasky at c2i.net
Thu Apr 24 15:36:58 UTC 2008
On Thursday 24 April 2008, John Baldwin wrote:
>
> This would indicate a bug in the bus_dmamap_load() call (wrong length?) and
> that is going to hose you when you do the bus_dmamap_sync() for systems
> with bounce pages (not enough data will get copied back and forth?). You
> need to track down the real bug and fix it rather than adding a hack in
> your callback routine.
Hi John,
The minimum segment size is PAGE_SIZE bytes in my DMA-tag. Bus-dma starts
counting at the memory location of the allocation. And not the memory
location aligned to PAGE_SIZE bytes.
Memory pages: |--------------|--------------|
My allocation: |---------XXXXXXXXXXXXX-------|
Sometimes when I allocate DMA memory I can end up having an allocation
crossing two contiguous memory pages in physical memory. In those cases
bus_dma does not give me the segment address of the second page in the
segment list, because the allocation is less than PAGE_SIZE bytes. It fits
within the values specified in the DMA tag. But in other cases, where the
pages are not contiguous in RAM, bus_dma will return two different segment
addresses.
The question is: Is this a bug or is it a feature?
--HPS
More information about the freebsd-embedded
mailing list