Page MenuHomeFreeBSD

bcm2835_sdhci.c: exit DMA if not enough data left to avoid timeout errors
ClosedPublic

Authored by bz on May 8 2019, 10:19 AM.
Tags
None
Referenced Files
Unknown Object (File)
Fri, Jul 25, 7:36 PM
Unknown Object (File)
Mon, Jul 7, 8:27 AM
Unknown Object (File)
Sat, Jul 5, 9:55 PM
Unknown Object (File)
Jul 1 2025, 5:37 PM
Unknown Object (File)
Jun 26 2025, 5:48 PM
Unknown Object (File)
Jun 26 2025, 4:58 AM
Unknown Object (File)
Jun 25 2025, 3:22 PM
Unknown Object (File)
Jun 23 2025, 11:58 AM
Subscribers

Details

Summary
In the DMA case, given we disable the data interrupts, we never seem
to get DATA_END.  Given we are relying on DMA interrupts we are not
using the SDHCI state machine and hence only call into
sdhci_platform_will_handle() for the first check of data.
We do not call "will handle" for any following round trips of the same
transaction if block size * count > BCM_DMA_BLOCK_SIZE.
Manually check "left" in the DMA interrupt handler to see if we have at
least another full BCM_DMA_BLOCK_SIZE to handle.
Without this change we would DMA that and then even start a DMA with
left == 0 which would lead to a timeout and error.
Now we re-enable data interrupts and return and let the SDHCI generic
interrupt handler and state machine pick the SPACE_AVAIL up and then
find that it should punt to the pio_handler for the remaining bytes
or finish the data transaction.

With this change block mode seems to work beyond 7 * 64byte blocks
(my initial test case) which worked as it was below BCM_DMA_BLOCK_SIZE.
Test Plan
Tested a few sizes up to 511 blocks of 64bytes.
Especially tested 16 blocks which leads to 2 * BCM_DMA_BLOCK_SIZE and a straight left == 0.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

I'd like to commit this the next days. Can someone please review? If not it'll go in by Sat 8 June.

This revision was not accepted when it landed; it landed in state Needs Review.Jun 8 2019, 4:15 PM
This revision was automatically updated to reflect the committed changes.