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 <[email protected]>
Reviewed-by: Jaehoon Chung <[email protected]> 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 */ >

