On 28/11/12(Wed) 16:49, Mark Kettenis wrote:
> > Date: Tue, 27 Nov 2012 15:02:31 +0100
> > From: Martin Pieuchot <[email protected]>
> >
> > While working on drm support for macppc that makes use of non-cached
> > memory I found that some platforms (amd64, i386, powerpc) use the MD
> > PMAP_NOCACHE flag where others (sparc, sparc64, solbourne) use PMAP_NC
> > for the same purpose.
> >
> > Because I'd like to use this flag in the drm code and for coherency
> > the diff below rename PMAP_NOCACHE into PMAP_NC.
> >
> > Tested on macppc and amd64, ok?
>
> Hi Martin,
>
> These flags are not really supposed to be used in MI code. So I don't
> think the drm and agp code should use these flags, at least not
> directly. Fortunately doing so isn't really necessary, at least for
> the agp stuff. There we can do something like:
Following your suggestion, here's a diff that implements the
BUS_DMA_NOCACHE flag for bus_dmamem_mmap(9) on macppc. Ok?
Martin
Index: macppc/dma.c
===================================================================
RCS file: /cvs/src/sys/arch/macppc/macppc/dma.c,v
retrieving revision 1.36
diff -u -p -r1.36 dma.c
--- macppc/dma.c 30 Aug 2012 18:14:26 -0000 1.36
+++ macppc/dma.c 3 Dec 2012 11:56:09 -0000
@@ -522,7 +522,10 @@ paddr_t
_dmamem_mmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs, off_t off,
int prot, int flags)
{
- int i;
+ int i, pmapflags = 0;
+
+ if (flags & BUS_DMA_NOCACHE)
+ pmapflags |= PMAP_NOCACHE;
for (i = 0; i < nsegs; i++) {
#ifdef DIAGNOSTIC
@@ -539,7 +542,7 @@ _dmamem_mmap(bus_dma_tag_t t, bus_dma_se
continue;
}
- return (segs[i].ds_addr + off);
+ return ((segs[i].ds_addr + off) | pmapflags);
}
/* Page not found. */