All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Chris Ball <cjb@laptop.org>
Cc: linux-mmc@vger.kernel.org
Subject: Re: [PATCH 0/2] mmc: add support for eMMC hardware reset for BYT eMMC
Date: Fri, 28 Jun 2013 10:26:35 +0300	[thread overview]
Message-ID: <51CD3AAB.2090508@intel.com> (raw)
In-Reply-To: <87txkjmtvu.fsf@octavius.laptop.org>

On 27/06/13 18:54, Chris Ball wrote:
> Hi Adrian,
> 
> On Thu, Jun 13 2013, Adrian Hunter wrote:
>> Here are 2 patches to add support for eMMC hardware reset for BYT eMMC.
>>
>>
>> Adrian Hunter (2):
>>       mmc: sdhci-pci: add support for eMMC hardware reset for BYT eMMC.
>>       mmc: sdhci-acpi: add support for eMMC hardware reset for HID 80860F14
>>
>>  drivers/mmc/host/sdhci-acpi.c | 28 +++++++++++++++++++++++++++-
>>  drivers/mmc/host/sdhci-pci.c  | 32 ++++++++++++++++++++++++++++++--
>>  2 files changed, 57 insertions(+), 3 deletions(-)
> 
> Thanks, both pushed to mmc-next for 3.11.

Thanks, but "mmc: sdhci-pci: add support for eMMC hardware reset for BYT
eMMC." has been mixed with someone else's patch. i.e. it now looks like this:


commit 4bef939873882b5f04b51e3e72e92dad1fdc527d
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Thu Jun 13 11:50:26 2013 +0300

    mmc: sdhci-pci: add support for eMMC hardware reset for BYT eMMC.

    Add support for eMMC hardware reset for BYT eMMC.

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Chris Ball <cjb@laptop.org>
---
 drivers/mmc/host/dw_mmc.h    |  2 +-
 drivers/mmc/host/sdhci-pci.c | 32 ++++++++++++++++++++++++++++++--
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
index 81b2994..e3bf5a0 100644
--- a/drivers/mmc/host/dw_mmc.h
+++ b/drivers/mmc/host/dw_mmc.h
@@ -111,7 +111,7 @@
 #define SDMMC_INT_ERROR			0xbfc2
 /* Command register defines */
 #define SDMMC_CMD_START			BIT(31)
-#define SDMMC_CMD_USE_HOLD_REG	BIT(29)
+#define SDMMC_CMD_USE_HOLD_REG		BIT(29)
 #define SDMMC_CMD_CCS_EXP		BIT(23)
 #define SDMMC_CMD_CEATA_RD		BIT(22)
 #define SDMMC_CMD_UPD_CLK		BIT(21)
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index 611331a..e082fac 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -77,6 +77,8 @@ struct sdhci_pci_slot {
 	int			rst_n_gpio;
 	int			cd_gpio;
 	int			cd_irq;
+
+	void (*hw_reset)(struct sdhci_host *host);
 };

 struct sdhci_pci_chip {
@@ -307,10 +309,27 @@ static const struct sdhci_pci_fixes
sdhci_intel_pch_sdio = {
 	.probe_slot	= pch_hc_probe_slot,
 };

+static void sdhci_pci_int_hw_reset(struct sdhci_host *host)
+{
+	u8 reg;
+
+	reg = sdhci_readb(host, SDHCI_POWER_CONTROL);
+	reg |= 0x10;
+	sdhci_writeb(host, reg, SDHCI_POWER_CONTROL);
+	/* For eMMC, minimum is 1us but give it 9us for good measure */
+	udelay(9);
+	reg &= ~0x10;
+	sdhci_writeb(host, reg, SDHCI_POWER_CONTROL);
+	/* For eMMC, minimum is 200us but give it 300us for good measure */
+	usleep_range(300, 1000);
+}
+
 static int byt_emmc_probe_slot(struct sdhci_pci_slot *slot)
 {
-	slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE;
+	slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE |
+				 MMC_CAP_HW_RESET;
 	slot->host->mmc->caps2 |= MMC_CAP2_HC_ERASE_SZ;
+	slot->hw_reset = sdhci_pci_int_hw_reset;
 	return 0;
 }

@@ -1016,7 +1035,7 @@ static int sdhci_pci_bus_width(struct sdhci_host
*host, int width)
 	return 0;
 }

-static void sdhci_pci_hw_reset(struct sdhci_host *host)
+static void sdhci_pci_gpio_hw_reset(struct sdhci_host *host)
 {
 	struct sdhci_pci_slot *slot = sdhci_priv(host);
 	int rst_n_gpio = slot->rst_n_gpio;
@@ -1031,6 +1050,14 @@ static void sdhci_pci_hw_reset(struct sdhci_host *host)
 	usleep_range(300, 1000);
 }

+static void sdhci_pci_hw_reset(struct sdhci_host *host)
+{
+	struct sdhci_pci_slot *slot = sdhci_priv(host);
+
+	if (slot->hw_reset)
+		slot->hw_reset(host);
+}
+
 static const struct sdhci_ops sdhci_pci_ops = {
 	.enable_dma	= sdhci_pci_enable_dma,
 	.platform_bus_width	= sdhci_pci_bus_width,
@@ -1328,6 +1355,7 @@ static struct sdhci_pci_slot *sdhci_pci_probe_slot(
 		if (!gpio_request(slot->rst_n_gpio, "eMMC_reset")) {
 			gpio_direction_output(slot->rst_n_gpio, 1);
 			slot->host->mmc->caps |= MMC_CAP_HW_RESET;
+			slot->hw_reset = sdhci_pci_gpio_hw_reset;
 		} else {
 			dev_warn(&pdev->dev, "failed to request rst_n_gpio\n");
 			slot->rst_n_gpio = -EINVAL;

  reply	other threads:[~2013-06-28  7:20 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-13  8:50 [PATCH 0/2] mmc: add support for eMMC hardware reset for BYT eMMC Adrian Hunter
2013-06-13  8:50 ` [PATCH 1/2] mmc: sdhci-pci: " Adrian Hunter
2013-06-13  8:50 ` [PATCH 2/2] mmc: sdhci-acpi: add support for eMMC hardware reset for HID 80860F14 Adrian Hunter
2013-06-27 15:54 ` [PATCH 0/2] mmc: add support for eMMC hardware reset for BYT eMMC Chris Ball
2013-06-28  7:26   ` Adrian Hunter [this message]
2013-06-28 13:59     ` Chris Ball

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51CD3AAB.2090508@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=cjb@laptop.org \
    --cc=linux-mmc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.