[AVR32] Implement dma_{alloc,free}_writecombine()
Implement dma_alloc_writecombine() and its dma_free_writecombine() counterpart. These will do basically the same thing as dma_alloc_coherent() except that the virtual mapping will allow write buffering, causing better performance for certain use cases like frame buffers. The same API is already available on ARM. Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
This commit is contained in:
parent
e89b064a4f
commit
a492dbb9e3
1 changed files with 8 additions and 4 deletions
|
@ -112,16 +112,21 @@ void dma_free_coherent(struct device *dev, size_t size,
|
|||
}
|
||||
EXPORT_SYMBOL(dma_free_coherent);
|
||||
|
||||
#if 0
|
||||
void *dma_alloc_writecombine(struct device *dev, size_t size,
|
||||
dma_addr_t *handle, gfp_t gfp)
|
||||
{
|
||||
struct page *page;
|
||||
dma_addr_t phys;
|
||||
|
||||
page = __dma_alloc(dev, size, handle, gfp);
|
||||
if (!page)
|
||||
return NULL;
|
||||
|
||||
phys = page_to_phys(page);
|
||||
*handle = phys;
|
||||
|
||||
/* Now, map the page into P3 with write-combining turned on */
|
||||
return __ioremap(page_to_phys(page), size, _PAGE_BUFFER);
|
||||
return __ioremap(phys, size, _PAGE_BUFFER);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_alloc_writecombine);
|
||||
|
||||
|
@ -132,8 +137,7 @@ void dma_free_writecombine(struct device *dev, size_t size,
|
|||
|
||||
iounmap(cpu_addr);
|
||||
|
||||
page = bus_to_page(handle);
|
||||
page = phys_to_page(handle);
|
||||
__dma_free(dev, size, page, handle);
|
||||
}
|
||||
EXPORT_SYMBOL(dma_free_writecombine);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue