linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] mmc: omap: add autocmd12, DDR support and runtime fixes
@ 2012-02-24 15:44 Balaji T K
  2012-02-24 15:44 ` [PATCH 1/4] mmc: omap: Enable Auto CMD12 Balaji T K
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Balaji T K @ 2012-02-24 15:44 UTC (permalink / raw)
  To: linux-mmc, cjb; +Cc: linux-omap, Balaji T K

	add Autocmd12 for multiblock read/write
	add DDR support
	minor pm runtime fixes

Balaji T K (4):
  mmc: omap: Enable Auto CMD12
  mmc: omap: add DDR support to omap_hsmmc
  mmc: omap: use runtime put sync in probe error patch
  mmc: omap: context save after enabling runtime pm

 drivers/mmc/host/omap_hsmmc.c |   29 ++++++++++++++++++++++-------
 1 files changed, 22 insertions(+), 7 deletions(-)


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

* [PATCH 1/4] mmc: omap: Enable Auto CMD12
  2012-02-24 15:44 [PATCH 0/4] mmc: omap: add autocmd12, DDR support and runtime fixes Balaji T K
@ 2012-02-24 15:44 ` Balaji T K
  2012-02-24 15:44 ` [PATCH 2/4] mmc: omap: add DDR support to omap_hsmmc Balaji T K
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Balaji T K @ 2012-02-24 15:44 UTC (permalink / raw)
  To: linux-mmc, cjb; +Cc: linux-omap, Balaji T K

Enable Auto-CMD12 for multi block read/write on HSMMC
Tested on OMAP4430, OMAP3430 and OMAP2430 SDP

Signed-off-by: Balaji T K <balajitk@ti.com>
---
 drivers/mmc/host/omap_hsmmc.c |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 36e7f5b..f4c7f89 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -82,6 +82,7 @@
 #define BRR_ENABLE		(1 << 5)
 #define DTO_ENABLE		(1 << 20)
 #define INIT_STREAM		(1 << 1)
+#define ACEN_ACMD12		(1 << 2)
 #define DP_SELECT		(1 << 21)
 #define DDIR			(1 << 4)
 #define DMA_EN			0x1
@@ -123,6 +124,7 @@
 #define OMAP_MMC_MAX_CLOCK	52000000
 #define DRIVER_NAME		"omap_hsmmc"
 
+#define AUTO_CMD12		(1 << 0)	/* Auto CMD12 support */
 /*
  * One controller can have multiple slots, like on some omap boards using
  * omap.c controller driver. Luckily this is not currently done on any known
@@ -185,6 +187,7 @@ struct omap_hsmmc_host {
 	int			reqs_blocked;
 	int			use_reg;
 	int			req_in_progress;
+	unsigned int		flags;
 	struct omap_hsmmc_next	next_data;
 
 	struct	omap_mmc_platform_data	*pdata;
@@ -886,6 +889,8 @@ omap_hsmmc_start_command(struct omap_hsmmc_host *host, struct mmc_command *cmd,
 		cmdtype = 0x3;
 
 	cmdreg = (cmd->opcode << 24) | (resptype << 16) | (cmdtype << 22);
+	if ((host->flags & AUTO_CMD12) && mmc_op_multi(cmd->opcode))
+		cmdreg |= ACEN_ACMD12;
 
 	if (data) {
 		cmdreg |= DP_SELECT | MSBS | BCE;
@@ -957,11 +962,16 @@ omap_hsmmc_xfer_done(struct omap_hsmmc_host *host, struct mmc_data *data)
 	else
 		data->bytes_xfered = 0;
 
-	if (!data->stop) {
+	if (data->stop && ((!(host->flags & AUTO_CMD12)) || data->error))
+		omap_hsmmc_start_command(host, data->stop, NULL);
+	else {
+		if (data->stop)
+			data->stop->resp[0] = OMAP_HSMMC_READ(host->base,
+							RSP76);
 		omap_hsmmc_request_done(host, data->mrq);
-		return;
 	}
-	omap_hsmmc_start_command(host, data->stop, NULL);
+
+	return;
 }
 
 /*
@@ -1899,6 +1909,7 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 	host->mapbase	= res->start;
 	host->base	= ioremap(host->mapbase, SZ_4K);
 	host->power_mode = MMC_POWER_OFF;
+	host->flags	= AUTO_CMD12;
 	host->next_data.cookie = 1;
 
 	platform_set_drvdata(pdev, host);
-- 
1.7.0.4


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

* [PATCH 2/4] mmc: omap: add DDR support to omap_hsmmc
  2012-02-24 15:44 [PATCH 0/4] mmc: omap: add autocmd12, DDR support and runtime fixes Balaji T K
  2012-02-24 15:44 ` [PATCH 1/4] mmc: omap: Enable Auto CMD12 Balaji T K
@ 2012-02-24 15:44 ` Balaji T K
  2012-02-24 15:44 ` [PATCH 3/4] mmc: omap: use runtime put sync in probe error patch Balaji T K
  2012-02-24 15:44 ` [PATCH 4/4] mmc: omap: context save after enabling runtime pm Balaji T K
  3 siblings, 0 replies; 5+ messages in thread
From: Balaji T K @ 2012-02-24 15:44 UTC (permalink / raw)
  To: linux-mmc, cjb; +Cc: linux-omap, Balaji T K

Add Dual data rate support for omap_hsmmc

Signed-off-by: Balaji T K <balajitk@ti.com>
---
 drivers/mmc/host/omap_hsmmc.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index f4c7f89..c39fb8f 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -89,6 +89,7 @@
 #define MSBS			(1 << 5)
 #define BCE			(1 << 1)
 #define FOUR_BIT		(1 << 1)
+#define DDR			(1 << 19)
 #define DW8			(1 << 5)
 #define CC			0x1
 #define TC			0x02
@@ -643,6 +644,10 @@ static void omap_hsmmc_set_bus_width(struct omap_hsmmc_host *host)
 	u32 con;
 
 	con = OMAP_HSMMC_READ(host->base, CON);
+	if (ios->timing == MMC_TIMING_UHS_DDR50)
+		con |= DDR;	/* configure in DDR mode */
+	else
+		con &= ~DDR;
 	switch (ios->bus_width) {
 	case MMC_BUS_WIDTH_8:
 		OMAP_HSMMC_WRITE(host->base, CON, con | DW8);
-- 
1.7.0.4


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

* [PATCH 3/4] mmc: omap: use runtime put sync in probe error patch
  2012-02-24 15:44 [PATCH 0/4] mmc: omap: add autocmd12, DDR support and runtime fixes Balaji T K
  2012-02-24 15:44 ` [PATCH 1/4] mmc: omap: Enable Auto CMD12 Balaji T K
  2012-02-24 15:44 ` [PATCH 2/4] mmc: omap: add DDR support to omap_hsmmc Balaji T K
@ 2012-02-24 15:44 ` Balaji T K
  2012-02-24 15:44 ` [PATCH 4/4] mmc: omap: context save after enabling runtime pm Balaji T K
  3 siblings, 0 replies; 5+ messages in thread
From: Balaji T K @ 2012-02-24 15:44 UTC (permalink / raw)
  To: linux-mmc, cjb; +Cc: linux-omap, Balaji T K

pm_runtime_put_sync instead of autosuspend pm runtime API
because iounmap(host->base) follows immediately.

Reported-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Balaji T K <balajitk@ti.com>
---
 drivers/mmc/host/omap_hsmmc.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index c39fb8f..2576c36 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -2101,8 +2101,7 @@ err_reg:
 err_irq_cd_init:
 	free_irq(host->irq, host);
 err_irq:
-	pm_runtime_mark_last_busy(host->dev);
-	pm_runtime_put_autosuspend(host->dev);
+	pm_runtime_put_sync(host->dev);
 	clk_put(host->fclk);
 	if (host->got_dbclk) {
 		clk_disable(host->dbclk);
-- 
1.7.0.4


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

* [PATCH 4/4] mmc: omap: context save after enabling runtime pm
  2012-02-24 15:44 [PATCH 0/4] mmc: omap: add autocmd12, DDR support and runtime fixes Balaji T K
                   ` (2 preceding siblings ...)
  2012-02-24 15:44 ` [PATCH 3/4] mmc: omap: use runtime put sync in probe error patch Balaji T K
@ 2012-02-24 15:44 ` Balaji T K
  3 siblings, 0 replies; 5+ messages in thread
From: Balaji T K @ 2012-02-24 15:44 UTC (permalink / raw)
  To: linux-mmc, cjb; +Cc: linux-omap, Balaji T K

call context save api after enabling runtime pm
to make sure register access in context save api happens with clk enabled.

Signed-off-by: Balaji T K <balajitk@ti.com>
---
 drivers/mmc/host/omap_hsmmc.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 2576c36..0924cc8 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -1944,8 +1944,6 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 		goto err1;
 	}
 
-	omap_hsmmc_context_save(host);
-
 	mmc->caps |= MMC_CAP_DISABLE;
 	if (host->pdata->controller_flags & OMAP_HSMMC_BROKEN_MULTIBLOCK_READ) {
 		dev_info(&pdev->dev, "multiblock reads disabled due to 35xx erratum 2.1.1.128; MMC read performance may suffer\n");
@@ -1957,6 +1955,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
 	pm_runtime_set_autosuspend_delay(host->dev, MMC_AUTOSUSPEND_DELAY);
 	pm_runtime_use_autosuspend(host->dev);
 
+	omap_hsmmc_context_save(host);
+
 	if (cpu_is_omap2430()) {
 		host->dbclk = clk_get(&pdev->dev, "mmchsdb_fck");
 		/*
-- 
1.7.0.4


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

end of thread, other threads:[~2012-02-24 15:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-24 15:44 [PATCH 0/4] mmc: omap: add autocmd12, DDR support and runtime fixes Balaji T K
2012-02-24 15:44 ` [PATCH 1/4] mmc: omap: Enable Auto CMD12 Balaji T K
2012-02-24 15:44 ` [PATCH 2/4] mmc: omap: add DDR support to omap_hsmmc Balaji T K
2012-02-24 15:44 ` [PATCH 3/4] mmc: omap: use runtime put sync in probe error patch Balaji T K
2012-02-24 15:44 ` [PATCH 4/4] mmc: omap: context save after enabling runtime pm Balaji T K

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).