>- out_le32(&md->control, (RUN|PAUSE|FLUSH|WAKE) << 16); /* stop dma */
What about waiting for the DBDMA channel to actually stop ? You should spin loop until the channel is actually stopped here. Note also that due to PCI write posting, doing an out_xxx, followed by a udelay, may not work properly. You should do the out_xx, then a dummy in_xxx from the same PCI bus to fush write buffers, then the udelay. Ben.