Date: Fri, 27 Jun 2025 07:21:46 GMT From: Andriy Gapon <avg@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 10db2ad8614a - main - cam_fill_mmcio: initialize cmd.error sub-field Message-ID: <202506270721.55R7Lkx3067188@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by avg: URL: https://cgit.FreeBSD.org/src/commit/?id=10db2ad8614adc544292856c693503ca8e9c9fd9 commit 10db2ad8614adc544292856c693503ca8e9c9fd9 Author: Andriy Gapon <avg@FreeBSD.org> AuthorDate: 2025-06-23 21:30:23 +0000 Commit: Andriy Gapon <avg@FreeBSD.org> CommitDate: 2025-06-27 07:12:40 +0000 cam_fill_mmcio: initialize cmd.error sub-field For me, this fixes a problem with using eMMC storage in MMCCAM configuration with dwmmc driver (on Rock64). The problem appeared after commit 07da3bb5d56c85 "mmc: support for SPI bus type". The problem was caused by the said commit changing the layout of struct mmc_ios which is embedded into struct ccb_trans_settings_mmc with the latter being embedded into struct ccb_trans_settings, a member of union ccb. The layout mattered for two reasons: 1. dwmmc sets cmd.error only in case of an error; 2. mmc_da's sdda_start_init uses the same ccb for different transaction types without explicitly clearing the object between transactions. As a result, cmd.error could start out with a non-zero value and dwmmc would keep that value which would then be interpreted as a failure. Such a failure happened in mmc_set_timing resulting in incorrect timing settings and subsequent complete failure to communicate with the eMMC module. Reviewed by: pkelsey MFC after: 2 weeks --- sys/cam/cam_ccb.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h index da98b98ba7d1..1f110686a658 100644 --- a/sys/cam/cam_ccb.h +++ b/sys/cam/cam_ccb.h @@ -1524,6 +1524,7 @@ cam_fill_mmcio(struct ccb_mmcio *mmcio, uint32_t retries, mmcio->cmd.opcode = mmc_opcode; mmcio->cmd.arg = mmc_arg; mmcio->cmd.flags = mmc_flags; + mmcio->cmd.error = 0; mmcio->stop.opcode = 0; mmcio->stop.arg = 0; mmcio->stop.flags = 0;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506270721.55R7Lkx3067188>