Message ID | 1529028255-6022-1-git-send-email-zhang.chunyan@linaro.org |
---|---|
Headers | show |
Series | mmc: add support for sdhci 4.0 | expand |
On 15/06/18 05:04, Chunyan Zhang wrote: > According to the SD host controller specification version 4.10, when > Host Version 4 is enabled, SDMA uses ADMA System Address register > (05Fh-058h) instead of using SDMA System Address register to > support both 32-bit and 64-bit addressing. > > Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org> > --- > drivers/mmc/host/sdhci.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index cf5695f..f57201f 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -805,6 +805,7 @@ static void sdhci_set_timeout(struct sdhci_host *host, struct mmc_command *cmd) > static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) > { > u8 ctrl; > + u32 reg; reg could just be an int. > struct mmc_data *data = cmd->data; > > if (sdhci_data_line_cmd(cmd)) > @@ -894,8 +895,10 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd) > SDHCI_ADMA_ADDRESS_HI); > } else { > WARN_ON(sg_cnt != 1); > + reg = host->v4_mode ? SDHCI_ADMA_ADDRESS : > + SDHCI_DMA_ADDRESS; > sdhci_writel(host, sdhci_sdma_address(host), > - SDHCI_DMA_ADDRESS); > + reg); Shouldn't we support 64-bit SDMA in version 4 mode? > } > } > > @@ -2721,6 +2724,7 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) > */ > if (intmask & SDHCI_INT_DMA_END) { > u32 dmastart, dmanow; > + u32 reg; > > dmastart = sdhci_sdma_address(host); > dmanow = dmastart + host->data->bytes_xfered; > @@ -2733,7 +2737,9 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask) > host->data->bytes_xfered = dmanow - dmastart; > DBG("DMA base 0x%08x, transferred 0x%06x bytes, next 0x%08x\n", > dmastart, host->data->bytes_xfered, dmanow); > - sdhci_writel(host, dmanow, SDHCI_DMA_ADDRESS); > + reg = host->v4_mode ? SDHCI_ADMA_ADDRESS : > + SDHCI_DMA_ADDRESS; > + sdhci_writel(host, dmanow, reg); Shouldn't we support 64-bit SDMA in version 4 mode? > } > > if (intmask & SDHCI_INT_DATA_END) { >
From: Chunyan Zhang <chunyan.zhang@spreadtrum.com> From the SD host controller version 4.0 on, SDHCI implementation either is version 3 compatible or version 4 mode. This patch-set covers those changes which are common for SDHCI 4.0 version, regardless of whether they are used with SD or eMMC storage devices. This patchset also added a new sdhci driver for Spreadtrum's controller which supports v4.0 mode. This patchset has been tested on Spreadtrum's mobile phone, emmc can be initialized, mounted, read and written, with these changes for common sdhci framework and sdhci-sprd driver. Changes from v1: * Addressed comments from Ulf: - Add dt-bindings for Spreadtrum sdhci; - Use assigned-clocks* DT bindings to set default source of sdio clock; - Removed unuseful print; - Removed two functions which are not used; - Add back the missing pm_runtime_put_autosuspend() after adding sdhci host. * Changed Spreadtrum sdhci driver name to sdhci-sprd. Chunyan Zhang (7): mmc: sdhci: add sd host v4 mode mmc: sdhci: made changes for System Address register of SDMA mmc: sdhci: add ADMA2 64-bit addressing support for V4 mode mmc: sdhci: add 32-bit block count support for v4 mode mmc: sdhci: add CMD23 support for v4 mode mmc: sdhci-sprd: added Spreadtrum's initial host controller dt-bindings: sdhci-sprd: Add bindings for the sdhci-sprd controller .../devicetree/bindings/mmc/sdhci-sprd.txt | 41 ++ drivers/mmc/host/Kconfig | 13 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/sdhci-sprd.c | 426 +++++++++++++++++++++ drivers/mmc/host/sdhci.c | 85 +++- drivers/mmc/host/sdhci.h | 31 +- 6 files changed, 575 insertions(+), 22 deletions(-) create mode 100644 Documentation/devicetree/bindings/mmc/sdhci-sprd.txt create mode 100644 drivers/mmc/host/sdhci-sprd.c -- 2.7.4