I can prepare a patch, but only with a lot of guidance. I can test & debug, I'm highly motivated just right now ...
If you've got a nice repeatable problem please try using the libata
driver. That handles the error paths differently and doesn't try a FIFO
drain which might matter in this case I guess.
FIFO drain for DMA commands?
Welcome to the old IDE layer which I am so glad I left behind 8)
ide_ata_error will try and do a PIO flush regardless of the command type
if DRQ_STAT is asserted. See ide_dma_intr -> ide_error -> ...
Alan