I am writing a driver for a DSP board that has an onboard DMA engine. The DMA engine takes a chain of DMA headers. These DMA headers are placed in memory on the PCI card. I ioremap base 0 and base 1 so I am using writel to update the header on the PCI card. The problem I am seeing is when the card is active I am updating the DMA headers on the fly. The values I attempt to write to the card are not always making it to the memory location that I specified in the writel function call. This causes the DMA engine to write data to the incorrect place. I am calling wmb() after writel. Any help would be very welcomed!