Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a492dbb9 authored by Haavard Skinnemoen's avatar Haavard Skinnemoen
Browse files

[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: default avatarHaavard Skinnemoen <hskinnemoen@atmel.com>
parent e89b064a
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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