CVS commit: src/sys/dev/sdmmc
"Yuri Honegger Yurix" <[email protected]>
| Newsgroups | gmane.os.netbsd.devel.cvs |
|---|---|
| Message-ID | <[email protected]> |
Module Name: src Committed By: yurix Date: Wed Aug 12 10:03:18 UTC 2026 Modified Files: src/sys/dev/sdmmc: sdmmc.c sdmmc_mem.c Log Message: sdmmc: dmamap_load bounce buffer on demand When using a bounce buffer, cmd->c_dmamap->dm_segs[0]->ds_len did not agree with cmd->c_datalen because the bounce buffer is loaded once at initialization, so cmd->c_dmamap->dm_segs[0]->ds_len never gets updated before executing a sdmmc command. This is problematic when the dmamap is passed on to an API like fdt_dma that treats the dmamap as the source of truth. This problem probably hasn't surfaced yet because it needs three preconditions: - using bounce buffers is already an edge case for when we can't allocate block size aligned dma memory - the driver needs CAPS_DMA, but not CAPS_MULTI_SEG_DMA - the driver needs to use cmd->c_dmamap->dm_segs[0]->ds_len and not cmd->c_datalen The fix is to bus_dmamap_load the bounce buffer just when we need it. This allows us to load it with the correct size. To generate a diff of this commit: cvs rdiff -u -r1.45 -r1.46 src/sys/dev/sdmmc/sdmmc.c cvs rdiff -u -r1.80 -r1.81 src/sys/dev/sdmmc/sdmmc_mem.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.