]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
hw/sd/sdcard: Allow using SWITCH_FUNCTION in more SPI states
authorPhilippe Mathieu-Daudé <philmd@linaro.org>
Thu, 31 Jul 2025 09:17:52 +0000 (11:17 +0200)
committerPhilippe Mathieu-Daudé <philmd@linaro.org>
Tue, 5 Aug 2025 14:05:56 +0000 (16:05 +0200)
In SPI mode, SWITCH_FUNCTION is valid in all mode
(except the IDLE one).

Fixes: 775616c3ae8 ("Partial SD card SPI mode support")
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250804133406.17456-8-philmd@linaro.org>

hw/sd/sd.c

index df2a272c6a205488c9ae16e559fdbbdfe722e8de..a9efa1585941ece3713fa68716b547ec17b1b115 100644 (file)
@@ -1488,8 +1488,14 @@ static sd_rsp_type_t sd_cmd_SWITCH_FUNCTION(SDState *sd, SDRequest req)
     if (sd->mode != sd_data_transfer_mode) {
         return sd_invalid_mode_for_cmd(sd, req);
     }
-    if (sd->state != sd_transfer_state) {
-        return sd_invalid_state_for_cmd(sd, req);
+    if (sd_is_spi(sd)) {
+        if (sd->state == sd_idle_state) {
+            return sd_invalid_state_for_cmd(sd, req);
+        }
+    } else {
+        if (sd->state != sd_transfer_state) {
+            return sd_invalid_state_for_cmd(sd, req);
+        }
     }
 
     sd_function_switch(sd, req.arg);