Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1568730

[PATCH v5 5/13] mmc: sunxi: Mask DATA0 when updating the clock

From Maxime Ripard <maxime.ripard@free-electrons.com>
Newsgroups linux.kernel
Subject [PATCH v5 5/13] mmc: sunxi: Mask DATA0 when updating the clock
Date 2017-01-27 23:00 +0100
Message-ID <t4mIP-15A-51@gated-at.bofh.it> (permalink)
References <t4mz7-11M-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


The A64 MMC controllers need DATA0 to be masked while updating the clock,
otherwise any subsequent command will result in a timeout.

It's not really clear at this point what DATA0 is exactly, but this
behaviour is present in Allwinner's tree, and has been suggested by
Allwinner engineers as fixes for the timeout.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Tested-by: Florian Vaussard <florian.vaussard@heig-vd.ch>
---
 drivers/mmc/host/sunxi-mmc.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c
index 51d6388a194e..6bbe61397b7c 100644
--- a/drivers/mmc/host/sunxi-mmc.c
+++ b/drivers/mmc/host/sunxi-mmc.c
@@ -101,6 +101,7 @@
 	(SDXC_SOFT_RESET | SDXC_FIFO_RESET | SDXC_DMA_RESET)
 
 /* clock control bits */
+#define SDXC_MASK_DATA0			BIT(31)
 #define SDXC_CARD_CLOCK_ON		BIT(16)
 #define SDXC_LOW_POWER_ON		BIT(17)
 
@@ -254,6 +255,9 @@ struct sunxi_mmc_cfg {
 	/* does the IP block support autocalibration? */
 	bool can_calibrate;
 
+	/* Does DATA0 needs to be masked while the clock is updated */
+	bool mask_data0;
+
 	bool needs_new_timings;
 };
 
@@ -657,10 +661,12 @@ static int sunxi_mmc_oclk_onoff(struct sunxi_mmc_host *host, u32 oclk_en)
 	u32 rval;
 
 	rval = mmc_readl(host, REG_CLKCR);
-	rval &= ~(SDXC_CARD_CLOCK_ON | SDXC_LOW_POWER_ON);
+	rval &= ~(SDXC_CARD_CLOCK_ON | SDXC_LOW_POWER_ON | SDXC_MASK_DATA0);
 
 	if (oclk_en)
 		rval |= SDXC_CARD_CLOCK_ON;
+	if (host->cfg->mask_data0)
+		rval |= SDXC_MASK_DATA0;
 
 	mmc_writel(host, REG_CLKCR, rval);
 
@@ -680,6 +686,11 @@ static int sunxi_mmc_oclk_onoff(struct sunxi_mmc_host *host, u32 oclk_en)
 		return -EIO;
 	}
 
+	if (host->cfg->mask_data0) {
+		rval = mmc_readl(host, REG_CLKCR);
+		mmc_writel(host, REG_CLKCR, rval & ~SDXC_MASK_DATA0);
+	}
+
 	return 0;
 }
 
@@ -1081,6 +1092,7 @@ static const struct sunxi_mmc_cfg sun50i_a64_cfg = {
 	.idma_des_size_bits = 16,
 	.clk_delays = NULL,
 	.can_calibrate = true,
+	.mask_data0 = true,
 	.needs_new_timings = true,
 };
 
-- 
git-series 0.8.11

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v5 0/13] arm64: allwinner: a64: Enable MMC support Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 22:50 +0100
  [PATCH v5 11/13] arm64: allwinner: pine64: add MMC support Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 22:50 +0100
  [PATCH v5 2/13] mmc: sunxi: Gate the clock when rate is 0 Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  [PATCH v5 3/13] mmc: sunxi: Always set signal delay to 0 for A64 Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  [PATCH v5 4/13] mmc: sunxi: Enable the new timings for the A64 MMC controllers Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  [PATCH v5 5/13] mmc: sunxi: Mask DATA0 when updating the clock Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  [PATCH v5 7/13] mmc: sunxi: Add more debug informations Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  [PATCH v5 8/13] arm64: allwinner: a64: Add MMC nodes Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  [PATCH v5 6/13] mmc: sunxi: Add EMMC (MMC2) controller compatible Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
    Re: [PATCH v5 6/13] mmc: sunxi: Add EMMC (MMC2) controller compatible Ulf Hansson <ulf.hansson@linaro.org> - 2017-01-30 11:20 +0100
      Re: [PATCH v5 6/13] mmc: sunxi: Add EMMC (MMC2) controller compatible Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-30 12:10 +0100
  [PATCH v5 13/13] arm64: allwinner: add BananaPi-M64 support Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  [PATCH v5 9/13] arm64: allwinner: a64: Add MMC pinctrl nodes Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-27 23:00 +0100
  Re: [PATCH v5 0/13] arm64: allwinner: a64: Enable MMC support Chen-Yu Tsai <wens@csie.org> - 2017-01-28 13:50 +0100
    Re: [PATCH v5 0/13] arm64: allwinner: a64: Enable MMC support Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-30 11:50 +0100
  Re: [PATCH v5 0/13] arm64: allwinner: a64: Enable MMC support Ulf Hansson <ulf.hansson@linaro.org> - 2017-01-30 11:20 +0100
  Re: [PATCH v5 0/13] arm64: allwinner: a64: Enable MMC support Maxime Ripard <maxime.ripard@free-electrons.com> - 2017-01-30 12:20 +0100

csiph-web