mirror of
https://github.com/opnsense/src.git
synced 2026-06-12 10:10:24 -04:00
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, which worked as it was below BCM_DMA_BLOCK_SIZE. MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D20199 |
||
|---|---|---|
| .. | ||
| allwinner | ||
| altera/socfpga | ||
| amlogic/aml8726 | ||
| annapurna/alpine | ||
| arm | ||
| broadcom/bcm2835 | ||
| cloudabi32 | ||
| conf | ||
| freescale | ||
| include | ||
| mv | ||
| nvidia | ||
| qemu | ||
| ralink | ||
| rockchip | ||
| samsung/exynos | ||
| ti | ||
| versatile | ||
| xilinx | ||