[U-Boot] [PATCH v4 14/19] mmc: dw_mmc: support transfer mode autodetection

Jaehoon Chung jh80.chung at samsung.com
Fri Aug 18 07:02:22 UTC 2017


On 08/17/2017 10:15 PM, =?UTF-8?q?Pawe=C5=82=20Jarosz?= wrote:
> dw_mmc supports two transfer modes in u-boot: idma and fifo.
> This patch adds autodetection of transfer mode and eliminates setting this in host config struct
> 
> Signed-off-by: Paweł Jarosz <paweljarosz3691 at gmail.com>
> ---
> Changes since v1:
> - none
> 
> Changes since v2:
> - none
> 
> Changes since v3:
> - none
> 
>  drivers/mmc/dw_mmc.c | 8 ++++++++
>  include/dwmmc.h      | 4 ++++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
> index 700f764..2cc4d67 100644
> --- a/drivers/mmc/dw_mmc.c
> +++ b/drivers/mmc/dw_mmc.c
> @@ -428,6 +428,7 @@ static int dwmci_set_ios(struct mmc *mmc)
>  static int dwmci_init(struct mmc *mmc)
>  {
>  	struct dwmci_host *host = mmc->priv;
> +	uint32_t use_dma;

Does it need to use unit32_t for use_dma?

>  
>  	if (host->board_init)
>  		host->board_init(host);
> @@ -439,6 +440,13 @@ static int dwmci_init(struct mmc *mmc)
>  		return -EIO;
>  	}
>  
> +	use_dma = SDMMC_GET_TRANS_MODE(dwmci_readl(host, DWMCI_HCON));
> +	if (use_dma == DMA_INTERFACE_IDMA) {
> +		host->fifo_mode = 0;
> +	} else {
> +		host->fifo_mode = 1;
> +	}

Don't need to use the brackets.

Best Regards,
Jaehoon Chung

> +
>  	/* Enumerate at 400KHz */
>  	dwmci_setup_bus(host, mmc->cfg->f_min);
>  
> diff --git a/include/dwmmc.h b/include/dwmmc.h
> index 4dda009..269536d 100644
> --- a/include/dwmmc.h
> +++ b/include/dwmmc.h
> @@ -115,6 +115,10 @@
>  #define RX_WMARK_SHIFT		16
>  #define RX_WMARK_MASK		(0xfff << RX_WMARK_SHIFT)
>  
> +/* HCON Register */
> +#define DMA_INTERFACE_IDMA		(0x0)
> +#define SDMMC_GET_TRANS_MODE(x)		(((x)>>16) & 0x3)
> +
>  #define DWMCI_IDMAC_OWN		(1 << 31)
>  #define DWMCI_IDMAC_CH		(1 << 4)
>  #define DWMCI_IDMAC_FS		(1 << 3)
> 



More information about the U-Boot mailing list