From 40260d3ea67cc5cdf20553be24353680d70b1b6c Mon Sep 17 00:00:00 2001 From: Bin Meng Date: Mon, 10 Nov 2025 19:05:07 +0800 Subject: [PATCH] hw/sd: Fix ACMD41 state machine in SPI mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In SPI mode, the ACMD41 argument only defines bit 30 (HCS); all other bits are reserved. The current implementation incorrectly checks the voltage window bits even in SPI mode, preventing the state machine from transitioning to the READY state. As a result, the U-Boot mmc-spi driver falls into an endless CMD55/ACMD41 loop. Fixes: 3241a61a ("hw/sd/sdcard: Use complete SEND_OP_COND implementation in SPI mode") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2945 Reported-by: Tom Rini Signed-off-by: Bin Meng Reviewed-by: Philippe Mathieu-Daudé Message-ID: <20251110110507.1641042-3-bmeng.cn@gmail.com> Signed-off-by: Philippe Mathieu-Daudé --- hw/sd/sd.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 5aae541363..df5a36fad9 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -2289,20 +2289,21 @@ static sd_rsp_type_t sd_cmd_SEND_OP_COND(SDState *sd, SDRequest req) } } - if (FIELD_EX32(sd->ocr & req.arg, OCR, VDD_VOLTAGE_WINDOW)) { - /* - * We accept any voltage. 10000 V is nothing. - * - * Once we're powered up, we advance straight to ready state - * unless it's an enquiry ACMD41 (bits 23:0 == 0). - */ - sd->state = sd_ready_state; - } - if (sd_is_spi(sd)) { + sd->state = sd_ready_state; return sd_r1; + } else { + if (FIELD_EX32(sd->ocr & req.arg, OCR, VDD_VOLTAGE_WINDOW)) { + /* + * We accept any voltage. 10000 V is nothing. + * + * Once we're powered up, we advance straight to ready state + * unless it's an enquiry ACMD41 (bits 23:0 == 0). + */ + sd->state = sd_ready_state; + } + return sd_r3; } - return sd_r3; } /* ACMD42 */