From mboxrd@z Thu Jan 1 00:00:00 1970 From: Masahiro Yamada Date: Thu, 1 Nov 2018 20:42:12 +0900 Subject: [U-Boot] [PATCH 08/13] mmc: tmio: Silence transfer errors when tuning In-Reply-To: <20181031171606.13561-8-marek.vasut+renesas@gmail.com> References: <20181031171606.13561-1-marek.vasut+renesas@gmail.com> <20181031171606.13561-8-marek.vasut+renesas@gmail.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Thu, Nov 1, 2018 at 2:22 AM Marek Vasut wrote: > > In case the controller performs card tuning, that is, sends MMC > command 19 or 21, silence possible CRC error warning prints. The > warnings are bound to happen, since the tuning will fail for some > settings while searching for the optimal configuration of the bus > and that is perfectly OK. > > This patch passes around the MMC command structure and adds check > into tmio_sd_check_error() to avoid printing CRC error warning > when the tuning happens. Make sense, but another solution might be to delete the message entirely, or to turn it into a debug message. FWIW, commit 61f2e5ee12895a2bdaeac8dd13e8d7f50ca7e375 Author: Masahiro Yamada Date: Sat Dec 30 02:00:12 2017 +0900 mmc: sdhci: change data transfer failure into debug message > Signed-off-by: Marek Vasut > Cc: Masahiro Yamada > --- > drivers/mmc/tmio-common.c | 45 +++++++++++++++++++++------------------ > 1 file changed, 24 insertions(+), 21 deletions(-) > > diff --git a/drivers/mmc/tmio-common.c b/drivers/mmc/tmio-common.c > index 8e83584e57..8e1bcd7ed5 100644 > --- a/drivers/mmc/tmio-common.c > +++ b/drivers/mmc/tmio-common.c > @@ -95,7 +95,7 @@ static void __dma_unmap_single(dma_addr_t addr, size_t size, > invalidate_dcache_range(addr, addr + size); > } > > -static int tmio_sd_check_error(struct udevice *dev) > +static int tmio_sd_check_error(struct udevice *dev, struct mmc_cmd *cmd) > { > struct tmio_sd_priv *priv = dev_get_priv(dev); > u32 info2 = tmio_sd_readl(priv, TMIO_SD_INFO2); > @@ -116,7 +116,9 @@ static int tmio_sd_check_error(struct udevice *dev) > > if (info2 & (TMIO_SD_INFO2_ERR_END | TMIO_SD_INFO2_ERR_CRC | > TMIO_SD_INFO2_ERR_IDX)) { > - dev_err(dev, "communication out of sync\n"); > + if ((cmd->cmdidx != MMC_CMD_SEND_TUNING_BLOCK) && > + (cmd->cmdidx != MMC_CMD_SEND_TUNING_BLOCK_HS200)) > + dev_err(dev, "communication out of sync\n"); > return -EILSEQ; > } > > @@ -129,8 +131,8 @@ static int tmio_sd_check_error(struct udevice *dev) > return 0; > } > > -static int tmio_sd_wait_for_irq(struct udevice *dev, unsigned int reg, > - u32 flag) > +static int tmio_sd_wait_for_irq(struct udevice *dev, struct mmc_cmd *cmd, > + unsigned int reg, u32 flag) > { > struct tmio_sd_priv *priv = dev_get_priv(dev); > long wait = 1000000; > @@ -142,7 +144,7 @@ static int tmio_sd_wait_for_irq(struct udevice *dev, unsigned int reg, > return -ETIMEDOUT; > } > > - ret = tmio_sd_check_error(dev); > + ret = tmio_sd_check_error(dev, cmd); > if (ret) > return ret; > > @@ -178,15 +180,15 @@ tmio_pio_read_fifo(64, q) > tmio_pio_read_fifo(32, l) > tmio_pio_read_fifo(16, w) > > -static int tmio_sd_pio_read_one_block(struct udevice *dev, char *pbuf, > - uint blocksize) > +static int tmio_sd_pio_read_one_block(struct udevice *dev, struct mmc_cmd *cmd, > + char *pbuf, uint blocksize) > { > struct tmio_sd_priv *priv = dev_get_priv(dev); > int ret; > > /* wait until the buffer is filled with data */ > - ret = tmio_sd_wait_for_irq(dev, TMIO_SD_INFO2, > - TMIO_SD_INFO2_BRE); > + ret = tmio_sd_wait_for_irq(dev, cmd, TMIO_SD_INFO2, > + TMIO_SD_INFO2_BRE); > if (ret) > return ret; > > @@ -231,15 +233,15 @@ tmio_pio_write_fifo(64, q) > tmio_pio_write_fifo(32, l) > tmio_pio_write_fifo(16, w) > > -static int tmio_sd_pio_write_one_block(struct udevice *dev, > +static int tmio_sd_pio_write_one_block(struct udevice *dev, struct mmc_cmd *cmd, > const char *pbuf, uint blocksize) > { > struct tmio_sd_priv *priv = dev_get_priv(dev); > int ret; > > /* wait until the buffer becomes empty */ > - ret = tmio_sd_wait_for_irq(dev, TMIO_SD_INFO2, > - TMIO_SD_INFO2_BWE); > + ret = tmio_sd_wait_for_irq(dev, cmd, TMIO_SD_INFO2, > + TMIO_SD_INFO2_BWE); > if (ret) > return ret; > > @@ -255,7 +257,8 @@ static int tmio_sd_pio_write_one_block(struct udevice *dev, > return 0; > } > > -static int tmio_sd_pio_xfer(struct udevice *dev, struct mmc_data *data) > +static int tmio_sd_pio_xfer(struct udevice *dev, struct mmc_cmd *cmd, > + struct mmc_data *data) > { > const char *src = data->src; > char *dest = data->dest; > @@ -263,10 +266,10 @@ static int tmio_sd_pio_xfer(struct udevice *dev, struct mmc_data *data) > > for (i = 0; i < data->blocks; i++) { > if (data->flags & MMC_DATA_READ) > - ret = tmio_sd_pio_read_one_block(dev, dest, > + ret = tmio_sd_pio_read_one_block(dev, cmd, dest, > data->blocksize); > else > - ret = tmio_sd_pio_write_one_block(dev, src, > + ret = tmio_sd_pio_write_one_block(dev, cmd, src, > data->blocksize); > if (ret) > return ret; > @@ -468,8 +471,8 @@ int tmio_sd_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, > cmd->cmdidx, tmp, cmd->cmdarg); > tmio_sd_writel(priv, tmp, TMIO_SD_CMD); > > - ret = tmio_sd_wait_for_irq(dev, TMIO_SD_INFO1, > - TMIO_SD_INFO1_RSP); > + ret = tmio_sd_wait_for_irq(dev, cmd, TMIO_SD_INFO1, > + TMIO_SD_INFO1_RSP); > if (ret) > return ret; > > @@ -497,17 +500,17 @@ int tmio_sd_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, > tmio_sd_addr_is_dmaable(data->src)) > ret = tmio_sd_dma_xfer(dev, data); > else > - ret = tmio_sd_pio_xfer(dev, data); > + ret = tmio_sd_pio_xfer(dev, cmd, data); > if (ret) > return ret; > > - ret = tmio_sd_wait_for_irq(dev, TMIO_SD_INFO1, > - TMIO_SD_INFO1_CMP); > + ret = tmio_sd_wait_for_irq(dev, cmd, TMIO_SD_INFO1, > + TMIO_SD_INFO1_CMP); > if (ret) > return ret; > } > > - return tmio_sd_wait_for_irq(dev, TMIO_SD_INFO2, > + return tmio_sd_wait_for_irq(dev, cmd, TMIO_SD_INFO2, > TMIO_SD_INFO2_SCLKDIVEN); > } > > -- > 2.18.0 > > _______________________________________________ > U-Boot mailing list > U-Boot at lists.denx.de > https://lists.denx.de/listinfo/u-boot -- Best Regards Masahiro Yamada