[v2,4/5] mmc: omap_hsmmc: Enable Auto command (CMD12) enable

Message ID 1506005496-8635-5-git-send-email-jjhiblot@ti.com
State New
Headers show
Series
  • Untitled series #4336
Related show

Commit Message

Jean-Jacques Hiblot Sept. 21, 2017, 2:51 p.m.
From: Kishon Vijay Abraham I <kishon@ti.com>

Instead of sending STOP TRANSMISSION command from MMC core, enable
the auto command feature so that the Host Controller issues CMD12
automatically when last block transfer is completed.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 drivers/mmc/omap_hsmmc.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Tom Rini Sept. 24, 2017, 2:40 p.m. | #1
On Thu, Sep 21, 2017 at 04:51:35PM +0200, Jean-Jacques Hiblot wrote:

> From: Kishon Vijay Abraham I <kishon@ti.com>

> 

> Instead of sending STOP TRANSMISSION command from MMC core, enable

> the auto command feature so that the Host Controller issues CMD12

> automatically when last block transfer is completed.

> 

> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>

> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>


Reviewed-by: Tom Rini <trini@konsulko.com>


-- 
Tom
Tom Rini Jan. 19, 2018, 9:11 p.m. | #2
On Thu, Sep 21, 2017 at 04:51:35PM +0200, Jean-Jacques Hiblot wrote:

> From: Kishon Vijay Abraham I <kishon@ti.com>

> 

> Instead of sending STOP TRANSMISSION command from MMC core, enable

> the auto command feature so that the Host Controller issues CMD12

> automatically when last block transfer is completed.

> 

> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>

> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

> Reviewed-by: Tom Rini <trini@konsulko.com>


Applied to u-boot/master, thanks!

-- 
Tom

Patch

diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c
index 3cac6ea..fcda0e2 100644
--- a/drivers/mmc/omap_hsmmc.c
+++ b/drivers/mmc/omap_hsmmc.c
@@ -492,6 +492,10 @@  static int omap_hsmmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
 	ulong start;
 
 	mmc_base = priv->base_addr;
+
+	if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
+		return 0;
+
 	start = get_timer(0);
 	while ((readl(&mmc_base->pstate) & (DATI_MASK | CMDI_MASK)) != 0) {
 		if (get_timer(0) - start > MAX_RETRY_MS) {
@@ -548,7 +552,7 @@  static int omap_hsmmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
 	if (data) {
 		if ((cmd->cmdidx == MMC_CMD_READ_MULTIPLE_BLOCK) ||
 			 (cmd->cmdidx == MMC_CMD_WRITE_MULTIPLE_BLOCK)) {
-			flags |= (MSBS_MULTIBLK | BCE_ENABLE);
+			flags |= (MSBS_MULTIBLK | BCE_ENABLE | ACEN_ENABLE);
 			data->blocksize = 512;
 			writel(data->blocksize | (data->blocks << 16),
 							&mmc_base->blk);