最近使用m25p128作为omapl138的flash,内核版本是3.3的,在搭建最小系统和ubi文件系统时发现spi flash驱动使用spi中断时一切正常,但是把驱动程序改为DMA方式时就就会出现Oop的打印,就是内存地址错误,加了一些打印发现内核中直接通过vzmalloc出来的地址直接传递给了spi的rx_buf作为DMA的首地址,DMA需要的是实地址,不能是虚拟内核地址也不能是逻辑内核地址,请问是不是linux3.3内核就是不支持spi使用DMA的模式?
PS:之前调试omapl138的LCDC的时候也是使用DMA形式,只是这个DMA不是用的EDMA的控制器,但是这部分代码是在linux3.3中可以跑起来的,说明linux3.3支持显示控制器采用DMA模式的。
Denny%20Yang99373:
你可以自己先把虚拟地址转成物理地址传给EDMA控制器试试。
建议看看其他接口比如MMC/NAND/看看它们的EDMA这块是怎么处理的。