> --- Ursprüngliche Nachricht --- > Von: Benjamin Herrenschmidt <[EMAIL PROTECTED]> > An: Gerhard Pircher <[EMAIL PROTECTED]> > Kopie: [EMAIL PROTECTED], debian-powerpc@lists.debian.org > Betreff: Re: Not coherent cache DMA for G3/G4 CPUs: clarification needed > Datum: Fri, 21 Apr 2006 07:03:45 +1000 > > On Thu, 2006-04-20 at 20:57 +0200, Gerhard Pircher wrote: > > > 1. The AmigaOne is similar to the PREP platform, i.e. DMA can only be > > performed in the first 16MB for ISA devices (there's only a VIA > > southbridge, no other SuperI/O IC with 32bit capable DMA controller). > > I guess the first 16MB cannot be reserved for not coherent DMA > > operation, because this memory area is occupied by kernel data? (not to > > talk about the performance loss, if the kernel data area would be > > excluded from the BAT mapping). > > Yeah that would suck. Are you sure you need ISA DMA ? You can do pseudo > DMA like pegasos for the floppy. Anything else should be able to do 32 > bits DMA unless you have a very broken chipset.
I hope not. But I think the AmigaOne floppy driver is copied from the i386 architecture and this one uses DMA IIRC. On the side: who uses floppy drives these days? > > 2. I'm not sure how to allocate memory for DMA operation. I think > > alloc_pages() will not do the job for me, as the page tables for not > > coherent DMA are reserved (SetPageReserved()) and removed from the > > available lowmem. > > alloc_pages() ? How so ? No, you want to allocate from your reserved > pool, you'll have to implement your own allocator. Easiest is a running > bitmap, look at ppc64 iommu code for an example. Thanks! I was searching a while for an example, but couldn't found one. > > Also memory fragmentation may be a problem, if a lot DMA operations > > with different buffer sizes are performed. Therefore a system could > > quickly run out of memory for not coherent DMA operation, right? > > Is there a way to minimize fragmentation? > > Best you can do is have separate pools for small and big allocations I > suppose. Okay. Or is there a general slab allocator implementation in the Linux kernel? > > 3. How are DMA buffers used outside the kernel? Do user programs get a > > pointer to the DMA buffer (in theory) from the device driver or is the > > data copied to another buffer allocated by an user program? > > There are cases where some drivers try that but you should ignore it for > the moment. Won't happen in most cases. That's good to hear. Makes my life a little bit easier. ;-) Thanks, Gerhard -- Analog-/ISDN-Nutzer sparen mit GMX SmartSurfer bis zu 70%! Kostenlos downloaden: http://www.gmx.net/de/go/smartsurfer -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]