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 <paweljarosz3...@gmail.com> --- Changes since v1: - 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; 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; + } + /* 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) -- 2.7.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot