提交 8c6f0fc4 编写于 作者: C Cooper Jr., Franklin 提交者: Boris Brezillon

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: NFranklin S Cooper Jr <fcooper@ti.com>
Signed-off-by: NBoris Brezillon <boris.brezillon@free-electrons.com>
上级 03d3a1df
...@@ -473,17 +473,8 @@ static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr, ...@@ -473,17 +473,8 @@ static inline int omap_nand_dma_transfer(struct mtd_info *mtd, void *addr,
int ret; int ret;
u32 val; u32 val;
if (addr >= high_memory) { if (!virt_addr_valid(addr))
struct page *p1; goto out_copy;
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);
}
sg_init_one(&sg, addr, len); sg_init_one(&sg, addr, len);
n = dma_map_sg(info->dma->device->dev, &sg, 1, dir); n = dma_map_sg(info->dma->device->dev, &sg, 1, dir);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册