[PATCH v2 1/8] mmc: omap: Enable Auto CMD12
From: Balaji T K balaj...@ti.com Enable Auto-CMD12 for multi block read/write on HSMMC Tested on OMAP4430, OMAP3430 and OMAP2430 SDP Signed-off-by: Balaji T K balaj...@ti.com Signed-off-by: Venkatraman S svenk...@ti.com --- drivers/mmc/host/omap_hsmmc.c | 16 +--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index f29e1a2..a9ffd70 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -85,6 +85,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 @@ -115,6 +116,7 @@ #define OMAP_MMC_MAX_CLOCK 5200 #define DRIVER_NAMEomap_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 @@ -175,6 +177,7 @@ struct omap_hsmmc_host { int reqs_blocked; int use_reg; int req_in_progress; + unsigned intflags; struct omap_hsmmc_next next_data; struct omap_mmc_platform_data *pdata; @@ -766,6 +769,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; @@ -837,11 +842,15 @@ 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); } /* @@ -1826,6 +1835,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.10.rc0.41.gfa678 -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 1/8] mmc: omap: Enable Auto CMD12
On Fri, Mar 16, 2012 at 07:08:57PM +0530, Venkatraman S wrote: From: Balaji T K balaj...@ti.com Enable Auto-CMD12 for multi block read/write on HSMMC Tested on OMAP4430, OMAP3430 and OMAP2430 SDP Signed-off-by: Balaji T K balaj...@ti.com Signed-off-by: Venkatraman S svenk...@ti.com --- drivers/mmc/host/omap_hsmmc.c | 16 +--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index f29e1a2..a9ffd70 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -85,6 +85,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 @@ -115,6 +116,7 @@ #define OMAP_MMC_MAX_CLOCK 5200 #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 @@ -175,6 +177,7 @@ struct omap_hsmmc_host { int reqs_blocked; int use_reg; int req_in_progress; + unsigned intflags; struct omap_hsmmc_next next_data; struct omap_mmc_platform_data *pdata; @@ -766,6 +769,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; @@ -837,11 +842,15 @@ 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 { while adding the braces, you broke the coding style. Please fix. -- balbi signature.asc Description: Digital signature
Re: [PATCH v2 1/8] mmc: omap: Enable Auto CMD12
On Fri, Mar 16, 2012 at 7:21 PM, Felipe Balbi ba...@ti.com wrote: On Fri, Mar 16, 2012 at 07:08:57PM +0530, Venkatraman S wrote: From: Balaji T K balaj...@ti.com Enable Auto-CMD12 for multi block read/write on HSMMC Tested on OMAP4430, OMAP3430 and OMAP2430 SDP Signed-off-by: Balaji T K balaj...@ti.com Signed-off-by: Venkatraman S svenk...@ti.com --- drivers/mmc/host/omap_hsmmc.c | 16 +--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index f29e1a2..a9ffd70 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -85,6 +85,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 @@ -115,6 +116,7 @@ #define OMAP_MMC_MAX_CLOCK 5200 #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 @@ -175,6 +177,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; @@ -766,6 +769,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; @@ -837,11 +842,15 @@ 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 { while adding the braces, you broke the coding style. Please fix. Oops - now fixed (and pushed out). From 00ae42358249e879698029201e3cbb9ea155305e Mon Sep 17 00:00:00 2001 From: Balaji T K balaj...@ti.com Date: Fri, 24 Feb 2012 21:14:31 +0530 Subject: [PATCH] mmc: omap: Enable Auto CMD12 Enable Auto-CMD12 for multi block read/write on HSMMC Tested on OMAP4430, OMAP3430 and OMAP2430 SDP Signed-off-by: Balaji T K balaj...@ti.com Signed-off-by: Venkatraman S svenk...@ti.com --- drivers/mmc/host/omap_hsmmc.c | 15 --- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index f29e1a2..729ac72 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -85,6 +85,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 @@ -115,6 +116,7 @@ #define OMAP_MMC_MAX_CLOCK 5200 #define DRIVER_NAMEomap_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 @@ -175,6 +177,7 @@ struct omap_hsmmc_host { int reqs_blocked; int use_reg; int req_in_progress; + unsigned intflags; struct omap_hsmmc_next next_data; struct omap_mmc_platform_data *pdata; @@ -766,6 +769,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; @@ -837,11 +842,14 @@ 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,