[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 08/18] hw/sd: ssi-sd: Fix STOP_TRANSMISSION (CMD12) response
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 08/18] hw/sd: ssi-sd: Fix STOP_TRANSMISSION (CMD12) response |
Date: |
Sat, 20 Feb 2021 01:12:59 +0100 |
From: Bin Meng <bin.meng@windriver.com>
CMD12's response type is R1b, which is basically a R1 plus optional
addition of the busy signal token that can be any number of bytes.
A zero value indicates card is busy and a non-zero value indicates
the card is ready for the next command.
Current implementation sends the busy signal token without sending
the R1 first. This does not break the U-Boot/Linux mmc_spi driver,
but it does not make the VxWorks driver happy.
Move the testing logic of s->stopping in the SSI_SD_RESPONSE state
a bit later, after the first byte of the card reponse is sent out,
to conform with the spec. After the busy signal token is sent, the
state should be transferred to SSI_SD_CMD.
Fixes: 775616c3ae8c ("Partial SD card SPI mode support")
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Message-Id: <20210128063035.15674-9-bmeng.cn@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/sd/ssi-sd.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c
index 84c873b3fd4..907d681d19e 100644
--- a/hw/sd/ssi-sd.c
+++ b/hw/sd/ssi-sd.c
@@ -243,14 +243,15 @@ static uint32_t ssi_sd_transfer(SSIPeripheral *dev,
uint32_t val)
s->mode = SSI_SD_RESPONSE;
return SSI_DUMMY;
case SSI_SD_RESPONSE:
- if (s->stopping) {
- s->stopping = 0;
- return SSI_DUMMY;
- }
if (s->response_pos < s->arglen) {
DPRINTF("Response 0x%02x\n", s->response[s->response_pos]);
return s->response[s->response_pos++];
}
+ if (s->stopping) {
+ s->stopping = 0;
+ s->mode = SSI_SD_CMD;
+ return SSI_DUMMY;
+ }
if (sdbus_data_ready(&s->sdbus)) {
DPRINTF("Data read\n");
s->mode = SSI_SD_DATA_START;
--
2.26.2
- [PULL 00/18] SD/MMC patches for 2021-02-20, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 01/18] hw/sd: ssi-sd: Support multiple block read, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 02/18] hw/sd: sd: Remove duplicated codes in single/multiple block read/write, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 03/18] hw/sd: sd: Allow single/multiple block write for SPI mode, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 04/18] hw/sd: Introduce receive_ready() callback, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 05/18] hw/sd: ssi-sd: Support single block write, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 06/18] hw/sd: ssi-sd: Support multiple block write, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 07/18] hw/sd: ssi-sd: Fix SEND_IF_COND (CMD8) response, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 08/18] hw/sd: ssi-sd: Fix STOP_TRANSMISSION (CMD12) response,
Philippe Mathieu-Daudé <=
- [PULL 09/18] hw/sd: ssi-sd: Handle the rest commands with R1b response type, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 10/18] hw/sd: sd: Fix address check in sd_erase(), Philippe Mathieu-Daudé, 2021/02/19
- [PULL 11/18] hw/sd: sd: Only SDSC cards support CMD28/29/30, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 12/18] hw/sd: sd: Fix CMD30 response type, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 13/18] hw/sd: sd: Move the sd_block_{read, write} and macros ahead, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 14/18] hw/sd: sd: Skip write protect groups check in sd_erase() for high capacity cards, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 15/18] hw/sd: sd: Skip write protect groups check in CMD24/25 for high capacity cards, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 16/18] hw/sd: sd: Bypass the RCA check for CMD13 in SPI mode, Philippe Mathieu-Daudé, 2021/02/19
- [PULL 17/18] hw/sd: sdhci: Simplify updating s->prnsts in sdhci_sdma_transfer_multi_blocks(), Philippe Mathieu-Daudé, 2021/02/19
- [PULL 18/18] MAINTAINERS: Add Bin Meng as co-maintainer for SD/MMC cards, Philippe Mathieu-Daudé, 2021/02/19