On 4/26/21 12:35 PM, Ley Foon Tan wrote:
> The data read is not working when using FIFO mode.
> 
>>From DesignWare databook, when a Data_Transfer_Over (DTO) interrupt is
> received, the software should read the remaining data from FIFO.
> 
> Add DTO interrupt checking on data read path and clear interrupts before
> start reading from FIFO. So, it doesn't clear the next pending
> interrupts unintentionally after read from FIFO.
> 
> Signed-off-by: Ley Foon Tan <ley.foon....@intel.com>

Reviewed-by: Jaehoon Chung <jh80.ch...@samsung.com>

Best Regards,
Jaehoon Chung

> ---
>  drivers/mmc/dw_mmc.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
> index 7c8a312fa71a..a949dad57402 100644
> --- a/drivers/mmc/dw_mmc.c
> +++ b/drivers/mmc/dw_mmc.c
> @@ -166,7 +166,9 @@ 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 | DWMCI_INTMSK_DTO))) {
> +                             dwmci_writel(host, DWMCI_RINTSTS,
> +                                          DWMCI_INTMSK_RXDR | 
> DWMCI_INTMSK_DTO);
>                               while (size) {
>                                       ret = dwmci_fifo_ready(host,
>                                                       DWMCI_FIFO_EMPTY,
> @@ -182,8 +184,6 @@ static int dwmci_data_transfer(struct dwmci_host *host, 
> struct mmc_data *data)
>                                               dwmci_readl(host, DWMCI_DATA);
>                                       size = size > len ? (size - len) : 0;
>                               }
> -                             dwmci_writel(host, DWMCI_RINTSTS,
> -                                          DWMCI_INTMSK_RXDR);
>                       } else if (data->flags == MMC_DATA_WRITE &&
>                                  (mask & DWMCI_INTMSK_TXDR)) {
>                               while (size) {
> 

Reply via email to