From: Paweł Jarosz <paweljarosz3...@gmail.com>

In current version of the driver when data size is low (observed with 2 bytes 
or 16 bytes)
like in case when mmc tries to read card capabilities or switch card mode, data 
buffer in
function dwmci_data_transfer not being filled.
The reason is that interrupt Receive FIFO Data Request (RXDR) not being fired 
but instead
Data Transfer Over (DTO) fires.
This results in card not being properly detected (i.e. SD version 1.0 instead 
of 3.0,
buswidth 1 instead 4).

So fix this by checking both interrupts status before reading data.

Signed-off-by: Paweł Jarosz <paweljarosz3...@gmail.com>
---
 drivers/mmc/dw_mmc.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
index 3b601b0e43..f1736c7abf 100644
--- a/drivers/mmc/dw_mmc.c
+++ b/drivers/mmc/dw_mmc.c
@@ -138,7 +138,8 @@ static int dwmci_data_transfer(struct dwmci_host *host, 
struct mmc_data *data)
                if (host->fifo_mode && size) {
                        len = 0;
                        if (data->flags == MMC_DATA_READ &&
-                           (mask & DWMCI_INTMSK_RXDR)) {
+                           (mask & DWMCI_INTMSK_RXDR ||
+                            mask & DWMCI_INTMSK_DTO)) {
                                while (size) {
                                        ret = dwmci_fifo_ready(host,
                                                        DWMCI_FIFO_EMPTY,
-- 
2.17.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to