Index: pxa2x0_lcd.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/xscale/pxa2x0_lcd.c,v retrieving revision 1.28 diff -u -r1.28 pxa2x0_lcd.c --- pxa2x0_lcd.c 13 Mar 2010 11:15:52 -0000 1.28 +++ pxa2x0_lcd.c 6 Aug 2010 23:49:18 -0000 @@ -533,9 +533,24 @@ } error = bus_dmamem_map(dma_tag, scr->segs, scr->nsegs, size, - (void **)&scr->buf_va, busdma_flag | BUS_DMA_COHERENT); + (void **)&scr->buf_va, busdma_flag /*| BUS_DMA_COHERENT*/); if (error) goto bad; + { + pt_entry_t *ptep; + vaddr_t va, eva; + + va = (vaddr_t)scr->buf_va; + eva = va + size; + while (va < eva) { + ptep = vtopte(va); + *ptep &= ~L2_S_CACHE_MASK; + *ptep |= L2_C; + PTE_SYNC(ptep); + tlb_flush(); + va += PAGE_SIZE; + } + } memset(scr->buf_va, 0, scr->buf_size); @@ -582,6 +597,8 @@ desc[0].ldcmd |= LDCMD_SOFINT; desc[1].ldcmd |= LDCMD_SOFINT; #endif + bus_dmamap_sync(dma_tag, scr->dma, 0, size, + BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); scr->dma_desc = desc; scr->dma_desc_pa = desc_pa; @@ -896,7 +913,7 @@ return -1; return bus_dmamem_mmap(sc->dma_tag, scr->segs, scr->nsegs, - offset, prot, BUS_DMA_WAITOK|BUS_DMA_COHERENT); + offset, prot, BUS_DMA_WAITOK/*|BUS_DMA_COHERENT*/); }