On Wed, 20 Dec 2017, Michael Schmitz wrote:
I test for phase == ESP_MIP and direct to the PIO routine,
I'm more pessimistic and expect short DMA transfers to fail in any phase (though in practice that may never happen).
and use the following code to fix up the transfer address there: + /* extended message in transfer? need to fixup addr */ + if (cmd == ESP_CMD_TI && addr == esp->command_block_dma) + addr = (u32) esp->command_block; + Note that addr = phys_to_virt((u32) esp->command_block_dma) works just the same (even though phys_to_virt((u32) esp->command_block_dma) != esp->command_block). We don't have to do PIO data transfers - would have been useful to debug DMA issues on 'new' boards but not essential.
Yes. I think it would be good to add a comment to say that the problem was only observed for 2-byte MESSAGE IN transfers (so far), and also that in general short transfers will not be caught this way because they may involve cmd->sense_buffer or scsi_sglist(cmd) and not esp->command_block.
Your solution is simpler and more generic so I'll try that one and will probably use it.
Like you, I'd also prefer a complete solution but it can wait until the need arises. --
Cheers, Michael
-- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html