Matt Porter wrote: > On Tue, May 10, 2005 at 04:14:51PM +0300, Pantelis Antoniou wrote: > >>Matt Porter wrote: >> >>>On Tue, May 10, 2005 at 08:13:48AM -0400, Dan Malek wrote: >>> >>> >>>>On May 10, 2005, at 7:17 AM, Pantelis Antoniou wrote: >>>> >>>> >>>> >>>>>This patch replace iopa use with virt_to_phys. >>>> >>>>Not gonna work ..... >>>> >>>>When you map uncached on 8xx you get a new vmalloc() >>>>space. The virt_to_xxx macros don't work on those addresses. >>>>You need to use the dma_consistent() function, stash the >>>>real physical address it returns and then use it where >>>>appropriate. >>> >>> >>>That and the use of virt_to_* and friends is deprecated by >>>the DMA API. You'll never get that upstream even if it were >>>a case where it did work. That's a good thing to know for >>>anybody doing other drivers... >>> >>>-Matt >>> >>> >> >>OK then. >> >>What's the recommended function to call to go from a >>virtual -> physical address, but without doing a cache >>flush/invalidate? > > > There is no generic function to do that in a driver since > no mainstream drivers in the kernel need to do it. Generally > you can rework the driver such that you cache the DMA address > as Dan suggested already. I don't know your exact usage, however, > you can allocate memory with dma_alloc_noncoherent() that is > cached on ppc32 NOT_CACHE_COHERENT prcoessors and stash the > dma_addr_t/void * for later use. The other way is to kmalloc and > dma_map_single() (stashing the same way) which is basically the > same thing. > > Do you have a case where this doesn't work? > > -Matt > >
Here is the final (I hope) fix. This patch kills iopa/virt_to_phys usage by using the returned physical address from the DMA API. Comments? Regards Pantelis -------------- next part -------------- A non-text attachment was scrubbed... Name: fs_enet-iopa-kill.patch Type: text/x-patch Size: 2328 bytes Desc: not available Url : http://ozlabs.org/pipermail/linuxppc-embedded/attachments/20050512/ca2f80ca/attachment.bin