Arm 平台设备上的DMA操作

Arm 平台设备上的DMA操作,arm,linux-device-driver,dma,Arm,Linux Device Driver,Dma,我正在为altera arm板编写一个设备驱动程序。我没有使用设备树,而是使用platform\u Device\u alloc和platform\u driver\u register来设置我的平台设备 问题是我的设备应该使用dma api。DMA钩子位于dev_archdata和设置它们的方法。 平台设备alloc调用arch设置pdev archdata,在ARM情况下不做任何操作。对于PPC来说,这正是它的特点 因此,我似乎应该使用arch\u setup\u dma\u ops?手动设

我正在为altera arm板编写一个设备驱动程序。我没有使用设备树,而是使用platform\u Device\u alloc和platform\u driver\u register来设置我的平台设备

问题是我的设备应该使用dma api。DMA钩子位于dev_archdata和设置它们的方法。 平台设备alloc调用arch设置pdev archdata,在ARM情况下不做任何操作。对于PPC来说,这正是它的特点


因此,我似乎应该使用arch\u setup\u dma\u ops?手动设置它。

您的问题是从“编写设备驱动程序”开始的,但剩下的是关于平台代码(位于arch/arm/下)。我想,您必须查看Altera的现有驱动程序并修改您的问题。我确实正在编写一个使用平台设备API的驱动程序,我不清楚在使用我提到的方法分配和注册后,是否可以在其结构设备上使用DMA操作(DMA_map_single等)。arch_setup_pdev_archdata在ARM情况下不起任何作用,因此它似乎无效。所有altera驱动程序都使用DT,似乎设置了这一点。我只是想确定我没有弄错,这取决于你的设备有多“特别”——如果你什么都不做,默认情况下你会得到标准的非相干DMA操作,但你仍然需要手动设置DMA掩码(我想)。如果您的设备与硬件一致,或者存在地址偏移或其他复杂问题,并且您真的无法编写基于DT的驱动程序来让现有代码为您处理所有这些问题,那么请查看\u platform\u device\u create(),因为这基本上就是您要复制的内容。