Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH] mmc: mmc: Fix HS setting in mmc_hs400_to_hs200()
@ 2019-01-31  7:53 Chaotian Jing
  2019-01-31 15:58 ` Ulf Hansson
  0 siblings, 1 reply; 16+ messages in thread
From: Chaotian Jing @ 2019-01-31  7:53 UTC (permalink / raw)
  To: Ulf Hansson
  Cc: srv_heupstream, Shawn Lin, linux-mmc, linux-kernel,
	linux-mediatek, Harish Jenny K N, linux-arm-kernel, Hongjie Fang,
	Matthias Brugger, Simon Horman, Kyle Roeschley, Chaotian Jing

mmc_hs400_to_hs200() begins with the card and host in HS400 mode.
Therefore, any commands sent to the card should use HS400 timing.
It is incorrect to reduce frequency to 50Mhz before sending the switch
command, in this case, only reduce clock frequency to 50Mhz but without
host timming change, host is still in hs400 mode but clock changed from
200Mhz to 50Mhz, which makes the tuning result unsuitable and cause
the switch command gets response CRC error.

this patch refers to mmc_select_hs400(), make the reduce clock frequency
after card timing change.

Signed-off-by: Chaotian Jing <chaotian.jing@mediatek.com>
---
 drivers/mmc/core/mmc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index da892a5..21b811e 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -1239,10 +1239,6 @@ int mmc_hs400_to_hs200(struct mmc_card *card)
 	int err;
 	u8 val;
 
-	/* Reduce frequency to HS */
-	max_dtr = card->ext_csd.hs_max_dtr;
-	mmc_set_clock(host, max_dtr);
-
 	/* Switch HS400 to HS DDR */
 	val = EXT_CSD_TIMING_HS;
 	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
@@ -1253,6 +1249,10 @@ int mmc_hs400_to_hs200(struct mmc_card *card)
 
 	mmc_set_timing(host, MMC_TIMING_MMC_DDR52);
 
+	/* Reduce frequency to HS */
+	max_dtr = card->ext_csd.hs_max_dtr;
+	mmc_set_clock(host, max_dtr);
+
 	err = mmc_switch_status(card);
 	if (err)
 		goto out_err;
-- 
1.8.1.1.dirty


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, back to index

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-31  7:53 [PATCH] mmc: mmc: Fix HS setting in mmc_hs400_to_hs200() Chaotian Jing
2019-01-31 15:58 ` Ulf Hansson
2019-02-01  1:38   ` Chaotian Jing
2019-02-01  8:10     ` Ulf Hansson
2019-02-04  9:56       ` Adrian Hunter
2019-02-04 10:54         ` Ulf Hansson
2019-02-04 13:40           ` Adrian Hunter
2019-02-05 13:06             ` Ulf Hansson
2019-02-05 13:42               ` Adrian Hunter
2019-02-12  2:04                 ` Chaotian Jing
2019-02-12  8:04                   ` Adrian Hunter
2019-02-13  0:54                     ` Chaotian Jing
2019-02-13  3:13                       ` Chaotian Jing
2019-02-13  7:24                         ` Ulf Hansson
2019-02-13  7:55                           ` Chaotian Jing
2019-02-13  8:33                             ` Ulf Hansson

Linux-ARM-Kernel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-arm-kernel/0 linux-arm-kernel/git/0.git
	git clone --mirror https://lore.kernel.org/linux-arm-kernel/1 linux-arm-kernel/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-arm-kernel linux-arm-kernel/ https://lore.kernel.org/linux-arm-kernel \
		linux-arm-kernel@lists.infradead.org infradead-linux-arm-kernel@archiver.kernel.org
	public-inbox-index linux-arm-kernel

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.infradead.lists.linux-arm-kernel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox