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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.