linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arindam Nath <arindam.nath@amd.com>
To: cjb@laptop.org
Cc: linux-mmc@vger.kernel.org, prakity@marvell.com,
	subhashj@codeaurora.org, zhangfei.gao@gmail.com,
	henry.su@amd.com, aaron.lu@amd.com, anath.amd@gmail.com,
	Arindam Nath <arindam.nath@amd.com>
Subject: [PATCH v3 04/11] mmc: sdhci: reset sdclk before setting high speed enable
Date: Wed, 20 Apr 2011 15:00:54 +0530	[thread overview]
Message-ID: <1303291861-1788-5-git-send-email-arindam.nath@amd.com> (raw)
In-Reply-To: <1303291861-1788-1-git-send-email-arindam.nath@amd.com>

As per Host Controller spec v3.00, we reset SDCLK before setting
High Speed Enable, and then set it back to avoid generating clock
gliches. Before enabling SDCLK again, we make sure the clock is
stable, so we use sdhci_set_clock().

Signed-off-by: Arindam Nath <arindam.nath@amd.com>
---
 drivers/mmc/host/sdhci.c |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index faf332f..175f858 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1237,13 +1237,12 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 	else
 		ctrl &= ~SDHCI_CTRL_HISPD;
 
-	sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL1);
-
 	if (host->version >= SDHCI_SPEC_300) {
 		u16 ctrl_2;
 
 		ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
 		if (!(ctrl_2 & SDHCI_CTRL_PRESET_VAL_ENABLE)) {
+			sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL1);
 			/*
 			 * We only need to set Driver Strength if the
 			 * preset value enable is not set.
@@ -1255,8 +1254,30 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 				ctrl_2 |= SDHCI_CTRL_DRV_TYPE_C;
 
 			sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
+		} else {
+			/*
+			 * According to SDHC Spec v3.00, if the Preset Value
+			 * Enable in the Host Control 2 register is set, we
+			 * need to reset SD Clock Enable before changing High
+			 * Speed Enable to avoid generating clock gliches.
+			 */
+			u16 clk;
+			unsigned int clock;
+
+			/* Reset SD Clock Enable */
+			clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
+			clk &= ~SDHCI_CLOCK_CARD_EN;
+			sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
+
+			sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL1);
+
+			/* Re-enable SD Clock */
+			clock = host->clock;
+			host->clock = 0;
+			sdhci_set_clock(host, clock);
 		}
-	}
+	} else
+		sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL1);
 
 	/*
 	 * Some (ENE) controllers go apeshit on some ios operation,
-- 
1.7.1


  parent reply	other threads:[~2011-04-20  9:32 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-20  9:30 [PATCH v3 00/11] add support for host controller v3.00 Arindam Nath
2011-04-20  9:30 ` [PATCH v3 01/11] mmc: sd: add support for signal voltage switch procedure Arindam Nath
2011-04-27  9:48   ` zhangfei gao
2011-04-27 10:17     ` Nath, Arindam
2011-04-28  3:17       ` zhangfei gao
2011-04-28  5:48         ` Nath, Arindam
2011-04-20  9:30 ` [PATCH v3 02/11] mmc: sd: query function modes for uhs cards Arindam Nath
2011-04-20  9:30 ` [PATCH v3 03/11] mmc: sd: add support for driver type selection Arindam Nath
2011-04-20  9:30 ` Arindam Nath [this message]
2011-04-20  9:30 ` [PATCH v3 05/11] mmc: sd: add support for uhs bus speed mode selection Arindam Nath
2011-04-20  9:30 ` [PATCH v3 06/11] mmc: sd: set current limit for uhs cards Arindam Nath
2011-04-20  9:30 ` [PATCH v3 07/11] mmc: sd: report correct speed and capacity of " Arindam Nath
2011-04-20  9:30 ` [PATCH v3 08/11] mmc: sd: add support for tuning during uhs initialization Arindam Nath
2011-04-27 18:44   ` Philip Rakity
2011-04-28  6:02     ` Nath, Arindam
2011-04-28  8:29       ` Question about timer in struct sdhci_host Ryan Liu
2011-04-20  9:30 ` [PATCH v3 09/11] mmc: sdhci: enable preset value after uhs initialization Arindam Nath
2011-04-28  5:16   ` zhangfei gao
2011-04-28  5:50     ` Nath, Arindam
2011-04-20  9:31 ` [PATCH v3 10/11] mmc: sdhci: add support for programmable clock mode Arindam Nath
2011-04-20  9:31 ` [PATCH v3 11/11] mmc: sdhci: add support for retuning mode 1 Arindam Nath
2011-04-29 18:40 ` [PATCH v3 00/11] add support for host controller v3.00 Subhash Jadavani

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=1303291861-1788-5-git-send-email-arindam.nath@amd.com \
    --to=arindam.nath@amd.com \
    --cc=aaron.lu@amd.com \
    --cc=anath.amd@gmail.com \
    --cc=cjb@laptop.org \
    --cc=henry.su@amd.com \
    --cc=linux-mmc@vger.kernel.org \
    --cc=prakity@marvell.com \
    --cc=subhashj@codeaurora.org \
    --cc=zhangfei.gao@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).