I am implementing multiblock transfers in P1010 eSDHC driver in FreeBSD. The driver already uses SDMA with single block transfers.
The thing is, performing a multiblock write causes Command Timeout (read worked fine). The driver is always waiting for DAT and CMD line (I know I don't always have to wait for DAT line) reading PRSSTAT[CIHB, CDIHB, WTA, RTA], but that seems to be not enough - the driver is only working fine, when I have some debug printf's in interrupt_handler.
I suppose that I am sending next command before card copy the data from its internal buffer to the card, and thats why CMD Timeout is generated, but how to synchronise it, if PRSSTAT doesn't work? Watermark Level Register is also set to perform slowest transfer.
The code is in attachment.
Original Attachment has been moved to: fsl_sdhc.c.zip