On Fri, Sep 12, 2008 at 11:29:39PM +0200, Felix Frey wrote: > Dear readers > > I have a problem with a linux PCI driver I've written. The driver supports a > kind of a data acquisition system, which is implemented in a programable > logic device. It's pci interface does not have master capability, so every > data exchange is initiated by the CPU. > > Well, the driver is fairly simple and simply handles data exchange. It has to > transfer chunks of data from and to the device. To make it fast I'd like to > use burst transfers, which are supported by the device. Within the driver I > use the kernel functions memcpy_fromio and memcpy_toio to initiate a > transfer. > This works so far, however, there are no burst transfers. The bridge does a > complete address cycle for every single word which is a big waste of time. In order to get multiple data cycles per address cycle, either the CPU and/or the chipset needs to be told it's ok to coalesce the write transactions (memcpy_toio). For the equivalent to memcpy_fromio, I suspect one has to implement a "DMA Master" - a HW component which serves the same function as the classic 8237A chip: http://www.cs.sun.ac.za/~lraitt/doc_8237.html The 8237A basically offloads the polling from the CPU but I don't know if by itself can enable a device to do "burst mode". hth, grant > I would really appreciate any hint how to make the CPU/bridge to initiate a > burst transfer. Are there any other functions? > > The system is built on a AMD Geode LX800 CPU. > > Felix > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html