[PATCH v2 1/8] mmc: omap: Enable Auto CMD12

2012-03-16 Thread Venkatraman S
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

2012-03-16 Thread Felipe Balbi
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

2012-03-16 Thread S, Venkatraman
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,