[PATCH] mmc: tmio: sdhi: Configure internal DMA bus width

Jaehoon Chung jh80.chung at samsung.com
Mon Jan 11 23:29:45 CET 2021


On 1/11/21 9:08 PM, Marek Vasut wrote:
> The R-Car3 SDHI should set these two bits in DMA_MODE register according
> to the specification, to indicate 64bit bus width. No other bus width
> options are permitted and the default value is 0, which is incorrect.
> Set the bits accordingly.
> 
> Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>

Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>

Just one minor question at below.

> ---
>  drivers/mmc/renesas-sdhi.c | 3 +++
>  drivers/mmc/tmio-common.c  | 3 +++
>  drivers/mmc/tmio-common.h  | 2 ++
>  3 files changed, 8 insertions(+)
> 
> diff --git a/drivers/mmc/renesas-sdhi.c b/drivers/mmc/renesas-sdhi.c
> index d80b3fc28f..2279d6fc56 100644
> --- a/drivers/mmc/renesas-sdhi.c
> +++ b/drivers/mmc/renesas-sdhi.c
> @@ -862,6 +862,9 @@ static void renesas_sdhi_filter_caps(struct udevice *dev)
>  	if (!(priv->caps & TMIO_SD_CAP_RCAR_GEN3))
>  		return;
>  
> +	if (priv->caps & TMIO_SD_CAP_DMA_INTERNAL)
> +		priv->idma_bus_width = TMIO_SD_DMA_MODE_BUS_WIDTH;
> +
>  #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) || \
>      CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) || \
>      CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
> diff --git a/drivers/mmc/tmio-common.c b/drivers/mmc/tmio-common.c
> index c653973676..1233a5b6a2 100644
> --- a/drivers/mmc/tmio-common.c
> +++ b/drivers/mmc/tmio-common.c
> @@ -324,6 +324,8 @@ static int tmio_sd_dma_xfer(struct udevice *dev, struct mmc_data *data)
>  
>  	tmp = tmio_sd_readl(priv, TMIO_SD_DMA_MODE);
>  
> +	tmp |= priv->idma_bus_width;
> +
>  	if (data->flags & MMC_DATA_READ) {
>  		buf = data->dest;
>  		dir = DMA_FROM_DEVICE;
> @@ -702,6 +704,7 @@ static void tmio_sd_host_init(struct tmio_sd_priv *priv)
>  	if (priv->caps & TMIO_SD_CAP_DMA_INTERNAL) {
>  		tmp = tmio_sd_readl(priv, TMIO_SD_DMA_MODE);
>  		tmp |= TMIO_SD_DMA_MODE_ADDR_INC;
> +		tmp |= priv->idma_bus_width;
>  		tmio_sd_writel(priv, tmp, TMIO_SD_DMA_MODE);
>  	}
>  }
> diff --git a/drivers/mmc/tmio-common.h b/drivers/mmc/tmio-common.h
> index 9062300c64..59d5a0e22e 100644
> --- a/drivers/mmc/tmio-common.h
> +++ b/drivers/mmc/tmio-common.h
> @@ -90,6 +90,7 @@
>  #define   TMIO_SD_VOLT_180		(2 << 0)/* 1.8V signal */
>  #define TMIO_SD_DMA_MODE		0x410
>  #define   TMIO_SD_DMA_MODE_DIR_RD	BIT(16)	/* 1: from device, 0: to dev */
> +#define   TMIO_SD_DMA_MODE_BUS_WIDTH	(BIT(5) | BIT(4)) /* RCar, 64bit */

Do those bit always set when machine is 64bit? or Can it be changed to other bus-width?
I don't have any knowledge on tmio side. Just wondering. 

Best Regards,
Jaehoon Chung


>  #define   TMIO_SD_DMA_MODE_ADDR_INC	BIT(0)	/* 1: address inc, 0: fixed */
>  #define TMIO_SD_DMA_CTL		0x414
>  #define   TMIO_SD_DMA_CTL_START	BIT(0)	/* start DMA (auto cleared) */
> @@ -121,6 +122,7 @@ struct tmio_sd_priv {
>  	unsigned int			version;
>  	u32				caps;
>  	u32				read_poll_flag;
> +	u32				idma_bus_width;
>  #define TMIO_SD_CAP_NONREMOVABLE	BIT(0)	/* Nonremovable e.g. eMMC */
>  #define TMIO_SD_CAP_DMA_INTERNAL	BIT(1)	/* have internal DMA engine */
>  #define TMIO_SD_CAP_DIV1024		BIT(2)	/* divisor 1024 is available */
> 



More information about the U-Boot mailing list