diff mbox

[U-Boot,2/2] mmc: dw_mmc: fix data starvation by host timeout under FIFO mode

Message ID 1469672748-21986-2-git-send-email-xzy.xu@rock-chips.com
State Accepted
Commit 720724d09852858a3938f7bfcbbb3d1a0fdd6b4c
Delegated to: Jaehoon Chung
Headers show

Commit Message

Xu Ziyuan July 28, 2016, 2:25 a.m. UTC
This patch fixes data starvation by host timeout(HTO) error interrupt
which occurred under FIFO mode transfer on rk3036 board.

The former implement, the actual bytes were transmitted may be less than
should be. The size will still subtract value of len in case of there is
no receive/transmit FIFO data request interrupt.

Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
---

 drivers/mmc/dw_mmc.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Jaehoon Chung July 28, 2016, 8:09 a.m. UTC | #1
Hi Ziyuan,

On 07/28/2016 11:25 AM, Ziyuan Xu wrote:
> This patch fixes data starvation by host timeout(HTO) error interrupt
> which occurred under FIFO mode transfer on rk3036 board.
> 
> The former implement, the actual bytes were transmitted may be less than
> should be. The size will still subtract value of len in case of there is
> no receive/transmit FIFO data request interrupt.

Looks good to me.

Acked-by: Jaehoon Chung <jh80.chung@samsung.com>

Best Regards,
Jaehoon Chung

> 
> Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
> ---
> 
>  drivers/mmc/dw_mmc.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
> index 38d4a64..41b7035 100644
> --- a/drivers/mmc/dw_mmc.c
> +++ b/drivers/mmc/dw_mmc.c
> @@ -120,6 +120,7 @@ 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) {
>  				if ((dwmci_readl(host, DWMCI_RINTSTS) &
>  				     DWMCI_INTMSK_RXDR)) {
>
Simon Glass Aug. 1, 2016, 2:21 a.m. UTC | #2
On 27 July 2016 at 20:25, Ziyuan Xu <xzy.xu@rock-chips.com> wrote:
> This patch fixes data starvation by host timeout(HTO) error interrupt
> which occurred under FIFO mode transfer on rk3036 board.
>
> The former implement, the actual bytes were transmitted may be less than
> should be. The size will still subtract value of len in case of there is
> no receive/transmit FIFO data request interrupt.
>
> Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
> ---
>
>  drivers/mmc/dw_mmc.c | 1 +
>  1 file changed, 1 insertion(+)

Reviewed-by: Simon Glass <sjg@chromium.org>
Jaehoon Chung Aug. 5, 2016, 2:27 a.m. UTC | #3
On 07/28/2016 11:25 AM, Xu Ziyuan wrote:
> This patch fixes data starvation by host timeout(HTO) error interrupt
> which occurred under FIFO mode transfer on rk3036 board.
> 
> The former implement, the actual bytes were transmitted may be less than
> should be. The size will still subtract value of len in case of there is
> no receive/transmit FIFO data request interrupt.
> 
> Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
> Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>


Applied on u-boot-mmc. Thanks!

Best Regards,
Jaehoon Chung


> ---
> 
>  drivers/mmc/dw_mmc.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
> index 38d4a64..41b7035 100644
> --- a/drivers/mmc/dw_mmc.c
> +++ b/drivers/mmc/dw_mmc.c
> @@ -120,6 +120,7 @@ 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) {
>  				if ((dwmci_readl(host, DWMCI_RINTSTS) &
>  				     DWMCI_INTMSK_RXDR)) {
>
diff mbox

Patch

diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
index 38d4a64..41b7035 100644
--- a/drivers/mmc/dw_mmc.c
+++ b/drivers/mmc/dw_mmc.c
@@ -120,6 +120,7 @@  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) {
 				if ((dwmci_readl(host, DWMCI_RINTSTS) &
 				     DWMCI_INTMSK_RXDR)) {