aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci.h
diff options
context:
space:
mode:
authorArindam Nath <arindam.nath@amd.com>2011-05-05 02:49:04 -0400
committerChris Ball <cjb@laptop.org>2011-05-24 23:53:46 -0400
commitb513ea250eb7c36a8afb3df938d632ca6b4df7cd (patch)
tree41b597f488ffa21c675f49bd8c8ea00d177125e2 /drivers/mmc/host/sdhci.h
parent3a3035114307cd55e024662bb295a87b849f0bd4 (diff)
mmc: sd: add support for tuning during uhs initialization
Host Controller needs tuning during initialization to operate SDR50 and SDR104 UHS-I cards. Whether SDR50 mode actually needs tuning is indicated by bit 45 of the Host Controller Capabilities register. A new command CMD19 has been defined in the Physical Layer spec v3.01 to request the card to send tuning pattern. We enable Buffer Read Ready interrupt at the very begining of tuning procedure, because that is the only interrupt generated by the Host Controller during tuning. We program the block size to 64 in the Block Size register. We make sure that DMA Enable and Multi Block Select in the Transfer Mode register are set to 0 before actually sending CMD19. The tuning block is sent by the card to the Host Controller using DAT lines, so we set Data Present Select (bit 5) in the Command register. The Host Controller is responsible for doing the verfication of tuning block sent by the card at the hardware level. After sending CMD19, we wait for Buffer Read Ready interrupt. In case we don't receive an interrupt after the specified timeout value, we fall back on fixed sampling clock by setting Execute Tuning (bit 6) and Sampling Clock Select (bit 7) of Host Control2 register to 0. Before exiting the tuning procedure, we disable Buffer Read Ready interrupt and re-enable other interrupts. Tested by Zhangfei Gao with a Toshiba uhs card and general hs card, on mmp2 in SDMA mode. Signed-off-by: Arindam Nath <arindam.nath@amd.com> Reviewed-by: Philip Rakity <prakity@marvell.com> Tested-by: Philip Rakity <prakity@marvell.com> Acked-by: Zhangfei Gao <zhangfei.gao@marvell.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host/sdhci.h')
-rw-r--r--drivers/mmc/host/sdhci.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index d96f6afcca1f..e62367491eee 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -161,6 +161,8 @@
161#define SDHCI_CTRL_DRV_TYPE_A 0x0010 161#define SDHCI_CTRL_DRV_TYPE_A 0x0010
162#define SDHCI_CTRL_DRV_TYPE_C 0x0020 162#define SDHCI_CTRL_DRV_TYPE_C 0x0020
163#define SDHCI_CTRL_DRV_TYPE_D 0x0030 163#define SDHCI_CTRL_DRV_TYPE_D 0x0030
164#define SDHCI_CTRL_EXEC_TUNING 0x0040
165#define SDHCI_CTRL_TUNED_CLK 0x0080
164#define SDHCI_CTRL_PRESET_VAL_ENABLE 0x8000 166#define SDHCI_CTRL_PRESET_VAL_ENABLE 0x8000
165 167
166#define SDHCI_CAPABILITIES 0x40 168#define SDHCI_CAPABILITIES 0x40
@@ -188,6 +190,7 @@
188#define SDHCI_DRIVER_TYPE_A 0x00000010 190#define SDHCI_DRIVER_TYPE_A 0x00000010
189#define SDHCI_DRIVER_TYPE_C 0x00000020 191#define SDHCI_DRIVER_TYPE_C 0x00000020
190#define SDHCI_DRIVER_TYPE_D 0x00000040 192#define SDHCI_DRIVER_TYPE_D 0x00000040
193#define SDHCI_USE_SDR50_TUNING 0x00002000
191 194
192#define SDHCI_CAPABILITIES_1 0x44 195#define SDHCI_CAPABILITIES_1 0x44
193 196