forked from Minki/linux
mtd: nand: omap2: Fix high memory dma prefetch transfer
Based on DMA documentation and testing using high memory buffer when doing dma transfers can lead to various issues including kernel panics. To workaround this simply use cpu copy. Signed-off-by: Franklin S Cooper Jr <fcooper@ti.com> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
This commit is contained in:
parent
03d3a1df6d
commit
8c6f0fc4d2
@ -473,17 +473,8 @@ static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr,
|
||||
int ret;
|
||||
u32 val;
|
||||
|
||||
if (addr >= high_memory) {
|
||||
struct page *p1;
|
||||
|
||||
if (((size_t)addr & PAGE_MASK) !=
|
||||
((size_t)(addr + len - 1) & PAGE_MASK))
|
||||
goto out_copy;
|
||||
p1 = vmalloc_to_page(addr);
|
||||
if (!p1)
|
||||
goto out_copy;
|
||||
addr = page_address(p1) + ((size_t)addr & ~PAGE_MASK);
|
||||
}
|
||||
if (!virt_addr_valid(addr))
|
||||
goto out_copy;
|
||||
|
||||
sg_init_one(&sg, addr, len);
|
||||
n = dma_map_sg(info->dma->device->dev, &sg, 1, dir);
|
||||
|
Loading…
Reference in New Issue
Block a user