[PATCH] hw/sd/sdcard: fix SEND_STATUS for SPI cards

Ben Dooks posted 1 patch 3 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250724133830.869623-1-ben.dooks@codethink.co.uk
Maintainers: "Philippe Mathieu-Daudé" <philmd@linaro.org>, Bin Meng <bmeng.cn@gmail.com>
hw/sd/sd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] hw/sd/sdcard: fix SEND_STATUS for SPI cards
Posted by Ben Dooks 3 months, 3 weeks ago
When the code re-organisation for the SEND_STATUS command
was done it broke the ssi-sd code which is now throwing the
error "ssi_sd: error: Unexpected response to cmd 13" or a
similar one in newer code.

Fix this by returning sd_r1 instead of sd_r2_s

Fixes: 807f6adac3773c18772bf ("hw/sd/sdcard: Add sd_cmd_SEND_STATUS handler (CMD13)")
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
---
 hw/sd/sd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index 80b59c8ff9..4472d101f2 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -1388,7 +1388,7 @@ static sd_rsp_type_t sd_cmd_SEND_STATUS(SDState *sd, SDRequest req)
     }
 
     if (sd_is_spi(sd)) {
-        return sd_r2_s;
+        return sd_r1;
     }
 
     return sd_req_rca_same(sd, req) ? sd_r1 : sd_r0;
-- 
2.37.2.352.g3c44437643
Re: [PATCH] hw/sd/sdcard: fix SEND_STATUS for SPI cards
Posted by Philippe Mathieu-Daudé 3 months, 2 weeks ago
On 24/7/25 15:38, Ben Dooks wrote:
> When the code re-organisation for the SEND_STATUS command
> was done it broke the ssi-sd code which is now throwing the
> error "ssi_sd: error: Unexpected response to cmd 13" or a
> similar one in newer code.
> 
> Fix this by returning sd_r1 instead of sd_r2_s
> 
> Fixes: 807f6adac3773c18772bf ("hw/sd/sdcard: Add sd_cmd_SEND_STATUS handler (CMD13)")
> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
> ---
>   hw/sd/sd.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/sd/sd.c b/hw/sd/sd.c
> index 80b59c8ff9..4472d101f2 100644
> --- a/hw/sd/sd.c
> +++ b/hw/sd/sd.c
> @@ -1388,7 +1388,7 @@ static sd_rsp_type_t sd_cmd_SEND_STATUS(SDState *sd, SDRequest req)
>       }
>   
>       if (sd_is_spi(sd)) {
> -        return sd_r2_s;
> +        return sd_r1;

Yeah this is what was suggested to Guenter previously:
https://lore.kernel.org/qemu-devel/e52b231d-f23e-4772-bfb2-08ddcc3e7ad0@linaro.org/

hw/sd/sd.c looks correct w.r.t. the spec; the issue seems to come
from hw/sd/ssi-sd.c "implementation". I'll post a fix, let's see
if it is acceptable for the next release.

>       }