>-      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.

Reply via email to