All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 1/1] ARM: kirkwood: mvebu_mmc: Speed up access time
@ 2014-12-04 15:03 Gérald Kerma
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
  0 siblings, 1 reply; 20+ messages in thread
From: Gérald Kerma @ 2014-12-04 15:03 UTC (permalink / raw)
  To: u-boot

Review delays and timeouts.
Get around 20 x faster access on Sheevaplug tests.

 Changes in v2:
 - increase number of loops
 - remove initial delay

 Changes in v1:
 - review all loops, delays and timeouts

Signed-off-by: G?rald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 66 +++++++++++++++++++++++++++++--------------------
 1 file changed, 39 insertions(+), 27 deletions(-)

diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 9f98c3f..b636be6 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -23,6 +23,10 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define MVEBU_TARGET_DRAM 0
 
+#define TIMEOUT_LOOP	1000000000000000000	/* maximum loops */
+#define TIMEOUT_WAIT	100			/* wait 100 us */
+#define TIMEOUT_START	100			/* wait 100 us */
+
 static void mvebu_mmc_write(u32 offs, u32 val)
 {
 	writel(val, CONFIG_SYS_MMC_BASE + (offs));
@@ -63,7 +67,7 @@ static int mvebu_mmc_setup_data(struct mmc_data *data)
 static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 			      struct mmc_data *data)
 {
-	int timeout = 10;
+	u64 timeout = TIMEOUT_LOOP;
 	ushort waittype = 0;
 	ushort resptype = 0;
 	ushort xfertype = 0;
@@ -72,27 +76,32 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	debug("cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
 	      cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
 
-	udelay(10*1000);
-
 	debug("%s: cmd %d (hw state 0x%04x)\n", DRIVER_NAME,
 	      cmd->cmdidx, mvebu_mmc_read(SDIO_HW_STATE));
 
+	/* Clear status */
+	mvebu_mmc_write(SDIO_NOR_INTR_STATUS, SDIO_POLL_MASK);
+	mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
+
 	/* Checking if card is busy */
 	while ((mvebu_mmc_read(SDIO_HW_STATE) & CARD_BUSY)) {
+		timeout--;
+		udelay(TIMEOUT_START);
 		if (timeout == 0) {
 			printf("%s: card busy!\n", DRIVER_NAME);
 			return -1;
 		}
-		timeout--;
-		udelay(1000);
 	}
 
 	/* Set up for a data transfer if we have one */
 	if (data) {
 		int err = mvebu_mmc_setup_data(data);
 
-		if (err)
+		if (err){
+			debug("%s: command DATA error :%x\n",
+			       DRIVER_NAME, err);
 			return err;
+		}
 	}
 
 	resptype = SDIO_CMD_INDEX(cmd->cmdidx);
@@ -148,7 +157,7 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	mvebu_mmc_write(SDIO_ERR_INTR_EN, SDIO_POLL_MASK);
 
 	/* Waiting for completion */
-	timeout = 1000000;
+	timeout = TIMEOUT_LOOP;
 
 	while (!((mvebu_mmc_read(SDIO_NOR_INTR_STATUS)) & waittype)) {
 		if (mvebu_mmc_read(SDIO_NOR_INTR_STATUS) & SDIO_NOR_ERROR) {
@@ -156,21 +165,22 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 			      DRIVER_NAME, cmd->cmdidx,
 			      mvebu_mmc_read(SDIO_ERR_INTR_STATUS));
 			if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
-				(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
+			    (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT)){
+				debug("%s: command READ timed out\n",
+				       DRIVER_NAME);
 				return TIMEOUT;
+			}
+			debug("%s: command READ error\n", DRIVER_NAME);
 			return COMM_ERR;
 		}
 
 		timeout--;
-		udelay(1);
-		if (timeout <= 0) {
-			printf("%s: command timed out\n", DRIVER_NAME);
+		udelay(TIMEOUT_WAIT);
+		if (timeout == 0) {
+			debug("%s: command timed out\n", DRIVER_NAME);
 			return TIMEOUT;
 		}
 	}
-	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
-		(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
-		return TIMEOUT;
 
 	/* Handling response */
 	if (cmd->resp_type & MMC_RSP_136) {
@@ -213,6 +223,11 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	debug("[0x%x] ", cmd->response[3]);
 	debug("\n");
 
+	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) & SDIO_ERR_CMD_TIMEOUT){
+		debug("%s: command STATUS timed out\n", DRIVER_NAME);
+		return TIMEOUT;
+	}
+
 	return 0;
 }
 
@@ -236,33 +251,30 @@ static void mvebu_mmc_power_up(void)
 	/* enable interrupts status */
 	mvebu_mmc_write(SDIO_NOR_INTR_STATUS, SDIO_POLL_MASK);
 	mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
+
+	udelay(10*1000);
 }
 
 static void mvebu_mmc_set_clk(unsigned int clock)
 {
-	unsigned int m;
-
 	if (clock == 0) {
 		debug("%s: clock off\n", DRIVER_NAME);
 		mvebu_mmc_write(SDIO_XFER_MODE, SDIO_XFER_MODE_STOP_CLK);
 		mvebu_mmc_write(SDIO_CLK_DIV, MVEBU_MMC_BASE_DIV_MAX);
 	} else {
-		m = MVEBU_MMC_BASE_FAST_CLOCK/(2*clock) - 1;
+		u32 m = DIV_ROUND_UP(MVEBU_MMC_BASE_FAST_CLOCK,
+				     (2 * clock)) - 1;
 		if (m > MVEBU_MMC_BASE_DIV_MAX)
 			m = MVEBU_MMC_BASE_DIV_MAX;
-		mvebu_mmc_write(SDIO_CLK_DIV, m & MVEBU_MMC_BASE_DIV_MAX);
+		mvebu_mmc_write(SDIO_CLK_DIV, m);
+		debug("%s: clock (%d) div : %d\n", DRIVER_NAME, clock, m);
 	}
-
-	udelay(10*1000);
 }
 
 static void mvebu_mmc_set_bus(unsigned int bus)
 {
 	u32 ctrl_reg = 0;
 
-	ctrl_reg = mvebu_mmc_read(SDIO_HOST_CTRL);
-	ctrl_reg &= ~SDIO_HOST_CTRL_DATA_WIDTH_4_BITS;
-
 	switch (bus) {
 	case 4:
 		ctrl_reg |= SDIO_HOST_CTRL_DATA_WIDTH_4_BITS;
@@ -277,7 +289,7 @@ static void mvebu_mmc_set_bus(unsigned int bus)
 	ctrl_reg &= ~SDIO_HOST_CTRL_LSB_FIRST;
 
 	/* default to maximum timeout */
-	ctrl_reg |= SDIO_HOST_CTRL_TMOUT(SDIO_HOST_CTRL_TMOUT_MAX);
+	ctrl_reg |= SDIO_HOST_CTRL_TMOUT_MAX;
 	ctrl_reg |= SDIO_HOST_CTRL_TMOUT_EN;
 
 	ctrl_reg |= SDIO_HOST_CTRL_PUSH_PULL_EN;
@@ -293,7 +305,6 @@ static void mvebu_mmc_set_bus(unsigned int bus)
 	      "high-speed" : "");
 
 	mvebu_mmc_write(SDIO_HOST_CTRL, ctrl_reg);
-	udelay(10*1000);
 }
 
 static void mvebu_mmc_set_ios(struct mmc *mmc)
@@ -355,7 +366,7 @@ static void mvebu_window_setup(void)
 
 static int mvebu_mmc_initialize(struct mmc *mmc)
 {
-	debug("%s: mvebu_mmc_initialize", DRIVER_NAME);
+	debug("%s: mvebu_mmc_initialize\n", DRIVER_NAME);
 
 	/*
 	 * Setting host parameters
@@ -398,7 +409,8 @@ static const struct mmc_ops mvebu_mmc_ops = {
 static struct mmc_config mvebu_mmc_cfg = {
 	.name		= DRIVER_NAME,
 	.ops		= &mvebu_mmc_ops,
-	.f_min		= MVEBU_MMC_BASE_FAST_CLOCK / MVEBU_MMC_BASE_DIV_MAX,
+	.f_min		= DIV_ROUND_UP(MVEBU_MMC_BASE_FAST_CLOCK,
+				       MVEBU_MMC_BASE_DIV_MAX),
 	.f_max		= MVEBU_MMC_CLOCKRATE_MAX,
 	.voltages	= MMC_VDD_32_33 | MMC_VDD_33_34,
 	.host_caps	= MMC_MODE_4BIT | MMC_MODE_HS | MMC_MODE_HC |
-- 
2.1.3

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

* [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time
  2014-12-04 15:03 [U-Boot] [PATCH v2 1/1] ARM: kirkwood: mvebu_mmc: Speed up access time Gérald Kerma
@ 2014-12-13 20:35 ` Gérald Kerma
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 1/6] MVEBUMMC : Change copyright date Gérald Kerma
                     ` (6 more replies)
  0 siblings, 7 replies; 20+ messages in thread
From: Gérald Kerma @ 2014-12-13 20:35 UTC (permalink / raw)
  To: u-boot


This serie of patches speed up access time of MVEBUMMC driver

This is allowed by a fix in MVEBUMMC init status check inspired from linux MVSDIO driver.
	 * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
	 * register is sometimes not set before a while when some
	 * "unusual" data block sizes are used (such as with the SWITCH
	 * command), even despite the fact that the XFER_DONE interrupt
	 * was raised.  And if another data transfer starts before
	 * this bit comes to good sense (which eventually happens by
	 * itself) then the new transfer simply fails with a timeout.

It allows about 10x to 40x faster access time transfer on SHEEVAPLUG MMC
It may also fixes some SD types incompatibilities

### before patch

Marvell>> ext2load mmc 0:1 0x800000 uImage
1613392 bytes read in 977 ms (1.6 MiB/s)

### with fix

Marvell>> ext2load mmc 0:1 0x800000 uImage
1613392 bytes read in 83 ms (18.5 MiB/s)


G?rald Kerma (6):
  MVEBUMMC : Change copyright date
  MVEBUMMC : Speed up access time
  MVEBUMMC : FIX debug strings
  MVEBUMMC : REMOVE unnecessary delays
  MVEBUMMC : CLEAN code
  MVEBUMMC : REMOVE unnecessary delay from init

 drivers/mmc/mvebu_mmc.c | 103 ++++++++++++++++++++++++++++--------------------
 include/mvebu_mmc.h     |   1 +
 2 files changed, 61 insertions(+), 43 deletions(-)

-- 
2.1.3

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

* [U-Boot] [PATCH v3 1/6] MVEBUMMC : Change copyright date
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
@ 2014-12-13 20:35   ` Gérald Kerma
  2015-01-05 18:25     ` Pantelis Antoniou
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 2/6] MVEBUMMC : Speed up access time Gérald Kerma
                     ` (5 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Gérald Kerma @ 2014-12-13 20:35 UTC (permalink / raw)
  To: u-boot

Signed-off-by: G?rald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 9f98c3f..063d4da 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -1,7 +1,7 @@
 /*
  * Marvell MMC/SD/SDIO driver
  *
- * (C) Copyright 2012
+ * (C) Copyright 2012-2014
  * Marvell Semiconductor <www.marvell.com>
  * Written-by: Maen Suleiman, Gerald Kerma
  *
-- 
2.1.3

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

* [U-Boot] [PATCH v3 2/6] MVEBUMMC : Speed up access time
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 1/6] MVEBUMMC : Change copyright date Gérald Kerma
@ 2014-12-13 20:35   ` Gérald Kerma
  2015-01-05 18:26     ` Pantelis Antoniou
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 3/6] MVEBUMMC : FIX debug strings Gérald Kerma
                     ` (4 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Gérald Kerma @ 2014-12-13 20:35 UTC (permalink / raw)
  To: u-boot

 Get about 40x faster access on SHEEVAPLUG MMC
 Fix some SD type compatibility

 Changes in v3:
 - fix the HW_STATE (from linux mvsdio)
 - review delays and timeouts

 Changes in v2:
 - increase number of loops
 - remove initial delay

 Changes in v1:
 - review all loops, delays and timeouts

Signed-off-by: G?rald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 48 +++++++++++++++++++++++++++++++-----------------
 include/mvebu_mmc.h     |  1 +
 2 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 063d4da..91a9be0 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -23,6 +23,8 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #define MVEBU_TARGET_DRAM 0
 
+#define TIMEOUT_DELAY	5*CONFIG_SYS_HZ		/* wait 5 seconds */
+
 static void mvebu_mmc_write(u32 offs, u32 val)
 {
 	writel(val, CONFIG_SYS_MMC_BASE + (offs));
@@ -63,7 +65,7 @@ static int mvebu_mmc_setup_data(struct mmc_data *data)
 static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 			      struct mmc_data *data)
 {
-	int timeout = 10;
+	ulong start;
 	ushort waittype = 0;
 	ushort resptype = 0;
 	ushort xfertype = 0;
@@ -72,19 +74,33 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	debug("cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
 	      cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
 
-	udelay(10*1000);
-
 	debug("%s: cmd %d (hw state 0x%04x)\n", DRIVER_NAME,
 	      cmd->cmdidx, mvebu_mmc_read(SDIO_HW_STATE));
 
-	/* Checking if card is busy */
-	while ((mvebu_mmc_read(SDIO_HW_STATE) & CARD_BUSY)) {
-		if (timeout == 0) {
-			printf("%s: card busy!\n", DRIVER_NAME);
-			return -1;
-		}
-		timeout--;
-		udelay(1000);
+	/*
+	 * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
+	 * register is sometimes not set before a while when some
+	 * "unusual" data block sizes are used (such as with the SWITCH
+	 * command), even despite the fact that the XFER_DONE interrupt
+	 * was raised.  And if another data transfer starts before
+	 * this bit comes to good sense (which eventually happens by
+	 * itself) then the new transfer simply fails with a timeout.
+	 */
+	if (!(mvebu_mmc_read(SDIO_HW_STATE) & CMD_FIFO_EMPTY)) {
+		ushort hw_state, count = 0;
+
+		start = get_timer(0);
+		do {
+			hw_state = mvebu_mmc_read(SDIO_HW_STATE);
+			if ((get_timer(0) - start) > TIMEOUT_DELAY) {
+				printf("%s : FIFO_EMPTY bit missing\n",
+				       DRIVER_NAME);
+				break;
+			}
+			count++;
+		} while (!(hw_state & CMD_FIFO_EMPTY));
+		debug("%s *** wait for FIFO_EMPTY bit (hw=0x%04x, count=%d, jiffies=%ld)\n",
+		      DRIVER_NAME, hw_state, count, (get_timer(0) - (start)));
 	}
 
 	/* Set up for a data transfer if we have one */
@@ -147,8 +163,7 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	mvebu_mmc_write(SDIO_NOR_INTR_EN, SDIO_POLL_MASK);
 	mvebu_mmc_write(SDIO_ERR_INTR_EN, SDIO_POLL_MASK);
 
-	/* Waiting for completion */
-	timeout = 1000000;
+	start = get_timer(0);
 
 	while (!((mvebu_mmc_read(SDIO_NOR_INTR_STATUS)) & waittype)) {
 		if (mvebu_mmc_read(SDIO_NOR_INTR_STATUS) & SDIO_NOR_ERROR) {
@@ -161,13 +176,12 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 			return COMM_ERR;
 		}
 
-		timeout--;
-		udelay(1);
-		if (timeout <= 0) {
-			printf("%s: command timed out\n", DRIVER_NAME);
+		if ((get_timer(0) - start) > TIMEOUT_DELAY) {
+			debug("%s: command timed out\n", DRIVER_NAME);
 			return TIMEOUT;
 		}
 	}
+
 	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
 		(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
 		return TIMEOUT;
diff --git a/include/mvebu_mmc.h b/include/mvebu_mmc.h
index 28d98fe..7fb71f7 100644
--- a/include/mvebu_mmc.h
+++ b/include/mvebu_mmc.h
@@ -79,6 +79,7 @@
 #define CMD_INHIBIT				(1 << 0)
 #define CMD_TXACTIVE				(1 << 8)
 #define CMD_RXACTIVE				(1 << 9)
+#define CMD_FIFO_EMPTY				(1 << 13)
 #define CMD_AUTOCMD12ACTIVE			(1 << 14)
 #define CMD_BUS_BUSY				(CMD_AUTOCMD12ACTIVE |	\
 						CMD_RXACTIVE |	\
-- 
2.1.3

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

* [U-Boot] [PATCH v3 3/6] MVEBUMMC : FIX debug strings
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 1/6] MVEBUMMC : Change copyright date Gérald Kerma
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 2/6] MVEBUMMC : Speed up access time Gérald Kerma
@ 2014-12-13 20:35   ` Gérald Kerma
  2015-01-05 18:27     ` Pantelis Antoniou
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 4/6] MVEBUMMC : REMOVE unnecessary delays Gérald Kerma
                     ` (3 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Gérald Kerma @ 2014-12-13 20:35 UTC (permalink / raw)
  To: u-boot

Signed-off-by: G?rald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 91a9be0..854bcc6 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -71,8 +71,8 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	ushort xfertype = 0;
 	ushort resp_indx = 0;
 
-	debug("cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
-	      cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
+	debug("%s: cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
+	      DRIVER_NAME, cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
 
 	debug("%s: cmd %d (hw state 0x%04x)\n", DRIVER_NAME,
 	      cmd->cmdidx, mvebu_mmc_read(SDIO_HW_STATE));
@@ -107,8 +107,11 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	if (data) {
 		int err = mvebu_mmc_setup_data(data);
 
-		if (err)
+		if (err) {
+			debug("%s: command DATA error :%x\n",
+			      DRIVER_NAME, err);
 			return err;
+		}
 	}
 
 	resptype = SDIO_CMD_INDEX(cmd->cmdidx);
@@ -171,8 +174,12 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 			      DRIVER_NAME, cmd->cmdidx,
 			      mvebu_mmc_read(SDIO_ERR_INTR_STATUS));
 			if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
-				(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
+			    (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT)) {
+				debug("%s: command READ timed out\n",
+				      DRIVER_NAME);
 				return TIMEOUT;
+			}
+			debug("%s: command READ error\n", DRIVER_NAME);
 			return COMM_ERR;
 		}
 
@@ -265,6 +272,7 @@ static void mvebu_mmc_set_clk(unsigned int clock)
 		if (m > MVEBU_MMC_BASE_DIV_MAX)
 			m = MVEBU_MMC_BASE_DIV_MAX;
 		mvebu_mmc_write(SDIO_CLK_DIV, m & MVEBU_MMC_BASE_DIV_MAX);
+		debug("%s: clock (%d) div : %d\n", DRIVER_NAME, clock, m);
 	}
 
 	udelay(10*1000);
@@ -369,7 +377,7 @@ static void mvebu_window_setup(void)
 
 static int mvebu_mmc_initialize(struct mmc *mmc)
 {
-	debug("%s: mvebu_mmc_initialize", DRIVER_NAME);
+	debug("%s: mvebu_mmc_initialize\n", DRIVER_NAME);
 
 	/*
 	 * Setting host parameters
-- 
2.1.3

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

* [U-Boot] [PATCH v3 4/6] MVEBUMMC : REMOVE unnecessary delays
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
                     ` (2 preceding siblings ...)
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 3/6] MVEBUMMC : FIX debug strings Gérald Kerma
@ 2014-12-13 20:35   ` Gérald Kerma
  2015-01-05 18:28     ` Pantelis Antoniou
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 5/6] MVEBUMMC : CLEAN code Gérald Kerma
                     ` (2 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Gérald Kerma @ 2014-12-13 20:35 UTC (permalink / raw)
  To: u-boot

Remove delays in mvebu_mmc_set_bus and mvebu_mmc_set_clk

Signed-off-by: G?rald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 854bcc6..3e08f40 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -274,8 +274,6 @@ static void mvebu_mmc_set_clk(unsigned int clock)
 		mvebu_mmc_write(SDIO_CLK_DIV, m & MVEBU_MMC_BASE_DIV_MAX);
 		debug("%s: clock (%d) div : %d\n", DRIVER_NAME, clock, m);
 	}
-
-	udelay(10*1000);
 }
 
 static void mvebu_mmc_set_bus(unsigned int bus)
@@ -315,7 +313,6 @@ static void mvebu_mmc_set_bus(unsigned int bus)
 	      "high-speed" : "");
 
 	mvebu_mmc_write(SDIO_HOST_CTRL, ctrl_reg);
-	udelay(10*1000);
 }
 
 static void mvebu_mmc_set_ios(struct mmc *mmc)
-- 
2.1.3

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

* [U-Boot] [PATCH v3 5/6] MVEBUMMC : CLEAN code
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
                     ` (3 preceding siblings ...)
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 4/6] MVEBUMMC : REMOVE unnecessary delays Gérald Kerma
@ 2014-12-13 20:35   ` Gérald Kerma
  2015-01-05 18:30     ` Pantelis Antoniou
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 6/6] MVEBUMMC : REMOVE unnecessary delay from init Gérald Kerma
  2014-12-15 11:14   ` [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time Mario Schuknecht
  6 siblings, 1 reply; 20+ messages in thread
From: Gérald Kerma @ 2014-12-13 20:35 UTC (permalink / raw)
  To: u-boot

Clean mvebu_mmc_send_cmd

Signed-off-by: G?rald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 3e08f40..721ebcc 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -103,16 +103,9 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 		      DRIVER_NAME, hw_state, count, (get_timer(0) - (start)));
 	}
 
-	/* Set up for a data transfer if we have one */
-	if (data) {
-		int err = mvebu_mmc_setup_data(data);
-
-		if (err) {
-			debug("%s: command DATA error :%x\n",
-			      DRIVER_NAME, err);
-			return err;
-		}
-	}
+	/* Clear status */
+	mvebu_mmc_write(SDIO_NOR_INTR_STATUS, SDIO_POLL_MASK);
+	mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
 
 	resptype = SDIO_CMD_INDEX(cmd->cmdidx);
 
@@ -138,6 +131,14 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	}
 
 	if (data) {
+		int err = mvebu_mmc_setup_data(data);
+
+		if (err) {
+			debug("%s: command DATA error :%x\n",
+			      DRIVER_NAME, err);
+			return err;
+		}
+
 		resptype |= SDIO_CMD_DATA_PRESENT | SDIO_CMD_CHECK_DATACRC16;
 		xfertype |= SDIO_XFER_MODE_HW_WR_DATA_EN;
 		if (data->flags & MMC_DATA_READ) {
@@ -157,15 +158,9 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	/* Setting Xfer mode */
 	mvebu_mmc_write(SDIO_XFER_MODE, xfertype);
 
-	mvebu_mmc_write(SDIO_NOR_INTR_STATUS, ~SDIO_NOR_CARD_INT);
-	mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
-
 	/* Sending command */
 	mvebu_mmc_write(SDIO_CMD, resptype);
 
-	mvebu_mmc_write(SDIO_NOR_INTR_EN, SDIO_POLL_MASK);
-	mvebu_mmc_write(SDIO_ERR_INTR_EN, SDIO_POLL_MASK);
-
 	start = get_timer(0);
 
 	while (!((mvebu_mmc_read(SDIO_NOR_INTR_STATUS)) & waittype)) {
@@ -189,10 +184,6 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 		}
 	}
 
-	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
-		(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
-		return TIMEOUT;
-
 	/* Handling response */
 	if (cmd->resp_type & MMC_RSP_136) {
 		uint response[8];
@@ -225,6 +216,11 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 		cmd->response[1] =	((response[0] & 0xfc00) >> 10);
 		cmd->response[2] =	0;
 		cmd->response[3] =	0;
+	} else {
+		cmd->response[0] =	0;
+		cmd->response[1] =	0;
+		cmd->response[2] =	0;
+		cmd->response[3] =	0;
 	}
 
 	debug("%s: resp[0x%x] ", DRIVER_NAME, cmd->resp_type);
@@ -234,6 +230,10 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 	debug("[0x%x] ", cmd->response[3]);
 	debug("\n");
 
+	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
+		(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
+		return TIMEOUT;
+
 	return 0;
 }
 
-- 
2.1.3

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

* [U-Boot] [PATCH v3 6/6] MVEBUMMC : REMOVE unnecessary delay from init
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
                     ` (4 preceding siblings ...)
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 5/6] MVEBUMMC : CLEAN code Gérald Kerma
@ 2014-12-13 20:35   ` Gérald Kerma
  2015-01-05 18:32     ` Pantelis Antoniou
  2014-12-15 11:14   ` [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time Mario Schuknecht
  6 siblings, 1 reply; 20+ messages in thread
From: Gérald Kerma @ 2014-12-13 20:35 UTC (permalink / raw)
  To: u-boot

Remove unnessecary delay from mvebu_mmc_initialize

Signed-off-by: G?rald Kerma <drEagle@doukki.net>
---
 drivers/mmc/mvebu_mmc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
index 721ebcc..8ca0904 100644
--- a/drivers/mmc/mvebu_mmc.c
+++ b/drivers/mmc/mvebu_mmc.c
@@ -403,8 +403,6 @@ static int mvebu_mmc_initialize(struct mmc *mmc)
 	/* SW reset */
 	mvebu_mmc_write(SDIO_SW_RESET, SDIO_SW_RESET_NOW);
 
-	udelay(10*1000);
-
 	return 0;
 }
 
-- 
2.1.3

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

* [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time
  2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
                     ` (5 preceding siblings ...)
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 6/6] MVEBUMMC : REMOVE unnecessary delay from init Gérald Kerma
@ 2014-12-15 11:14   ` Mario Schuknecht
  2014-12-17  9:22     ` drEagle
  6 siblings, 1 reply; 20+ messages in thread
From: Mario Schuknecht @ 2014-12-15 11:14 UTC (permalink / raw)
  To: u-boot

2014-12-13 21:35 GMT+01:00 G?rald Kerma <drEagle@doukki.net>:
>
>
> This serie of patches speed up access time of MVEBUMMC driver
>
> This is allowed by a fix in MVEBUMMC init status check inspired from linux
> MVSDIO driver.
>          * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
>          * register is sometimes not set before a while when some
>          * "unusual" data block sizes are used (such as with the SWITCH
>          * command), even despite the fact that the XFER_DONE interrupt
>          * was raised.  And if another data transfer starts before
>          * this bit comes to good sense (which eventually happens by
>          * itself) then the new transfer simply fails with a timeout.
>
> It allows about 10x to 40x faster access time transfer on SHEEVAPLUG MMC
> It may also fixes some SD types incompatibilities
>
> ### before patch
>
> Marvell>> ext2load mmc 0:1 0x800000 uImage
> 1613392 bytes read in 977 ms (1.6 MiB/s)
>
> ### with fix
>
> Marvell>> ext2load mmc 0:1 0x800000 uImage
> 1613392 bytes read in 83 ms (18.5 MiB/s)
>
>
>
Looks good to me.
ACK to this series of patches:


> G?rald Kerma (6):
>   MVEBUMMC : Change copyright date
>   MVEBUMMC : Speed up access time
>   MVEBUMMC : FIX debug strings
>   MVEBUMMC : REMOVE unnecessary delays
>   MVEBUMMC : CLEAN code
>   MVEBUMMC : REMOVE unnecessary delay from init


>  drivers/mmc/mvebu_mmc.c | 103
> ++++++++++++++++++++++++++++--------------------
>  include/mvebu_mmc.h     |   1 +
>  2 files changed, 61 insertions(+), 43 deletions(-)
>
> --
> 2.1.3
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

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

* [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time
  2014-12-15 11:14   ` [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time Mario Schuknecht
@ 2014-12-17  9:22     ` drEagle
  2014-12-17 10:18       ` Pantelis Antoniou
  0 siblings, 1 reply; 20+ messages in thread
From: drEagle @ 2014-12-17  9:22 UTC (permalink / raw)
  To: u-boot

Hi,

Any chance to be included in the next release of u-boot ?

Regards,
G?rald

Le 15/12/2014 12:14, Mario Schuknecht a ?crit :
> 
> 2014-12-13 21:35 GMT+01:00 G?rald Kerma <drEagle at doukki.net <mailto:drEagle@doukki.net>>:
> 
> 
>     This serie of patches speed up access time of MVEBUMMC driver
> 
>     This is allowed by a fix in MVEBUMMC init status check inspired from linux MVSDIO driver.
>              * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
>              * register is sometimes not set before a while when some
>              * "unusual" data block sizes are used (such as with the SWITCH
>              * command), even despite the fact that the XFER_DONE interrupt
>              * was raised.  And if another data transfer starts before
>              * this bit comes to good sense (which eventually happens by
>              * itself) then the new transfer simply fails with a timeout.
> 
>     It allows about 10x to 40x faster access time transfer on SHEEVAPLUG MMC
>     It may also fixes some SD types incompatibilities
> 
>     ### before patch
> 
>     Marvell>> ext2load mmc 0:1 0x800000 uImage
>     1613392 bytes read in 977 ms (1.6 MiB/s)
> 
>     ### with fix
> 
>     Marvell>> ext2load mmc 0:1 0x800000 uImage
>     1613392 bytes read in 83 ms (18.5 MiB/s)
> 
> 
> 
> Looks good to me.
> ACK to this series of patches:
>  
> 
>     G?rald Kerma (6):
>       MVEBUMMC : Change copyright date
>       MVEBUMMC : Speed up access time
>       MVEBUMMC : FIX debug strings
>       MVEBUMMC : REMOVE unnecessary delays
>       MVEBUMMC : CLEAN code
>       MVEBUMMC : REMOVE unnecessary delay from init
> 
> 
>      drivers/mmc/mvebu_mmc.c | 103 ++++++++++++++++++++++++++++--------------------
>      include/mvebu_mmc.h     |   1 +
>      2 files changed, 61 insertions(+), 43 deletions(-)
> 
>     --
>     2.1.3
>     _______________________________________________
>     U-Boot mailing list
>     U-Boot at lists.denx.de <mailto:U-Boot@lists.denx.de>
>     http://lists.denx.de/mailman/listinfo/u-boot
> 
> 

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

* [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time
  2014-12-17  9:22     ` drEagle
@ 2014-12-17 10:18       ` Pantelis Antoniou
  2014-12-23 13:01         ` drEagle
  0 siblings, 1 reply; 20+ messages in thread
From: Pantelis Antoniou @ 2014-12-17 10:18 UTC (permalink / raw)
  To: u-boot

Hi Gerald,

Last pull-req for mmc was last Friday, I intend to issue another this Friday too.

Regards

? Pantelis

> On Dec 17, 2014, at 11:22 , drEagle <dreagle@doukki.net> wrote:
> 
> Hi,
> 
> Any chance to be included in the next release of u-boot ?
> 
> Regards,
> G?rald
> 
> Le 15/12/2014 12:14, Mario Schuknecht a ?crit :
>> 
>> 2014-12-13 21:35 GMT+01:00 G?rald Kerma <drEagle at doukki.net <mailto:drEagle@doukki.net>>:
>> 
>> 
>>    This serie of patches speed up access time of MVEBUMMC driver
>> 
>>    This is allowed by a fix in MVEBUMMC init status check inspired from linux MVSDIO driver.
>>             * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
>>             * register is sometimes not set before a while when some
>>             * "unusual" data block sizes are used (such as with the SWITCH
>>             * command), even despite the fact that the XFER_DONE interrupt
>>             * was raised.  And if another data transfer starts before
>>             * this bit comes to good sense (which eventually happens by
>>             * itself) then the new transfer simply fails with a timeout.
>> 
>>    It allows about 10x to 40x faster access time transfer on SHEEVAPLUG MMC
>>    It may also fixes some SD types incompatibilities
>> 
>>    ### before patch
>> 
>>    Marvell>> ext2load mmc 0:1 0x800000 uImage
>>    1613392 bytes read in 977 ms (1.6 MiB/s)
>> 
>>    ### with fix
>> 
>>    Marvell>> ext2load mmc 0:1 0x800000 uImage
>>    1613392 bytes read in 83 ms (18.5 MiB/s)
>> 
>> 
>> 
>> Looks good to me.
>> ACK to this series of patches:
>> 
>> 
>>    G?rald Kerma (6):
>>      MVEBUMMC : Change copyright date
>>      MVEBUMMC : Speed up access time
>>      MVEBUMMC : FIX debug strings
>>      MVEBUMMC : REMOVE unnecessary delays
>>      MVEBUMMC : CLEAN code
>>      MVEBUMMC : REMOVE unnecessary delay from init
>> 
>> 
>>     drivers/mmc/mvebu_mmc.c | 103 ++++++++++++++++++++++++++++--------------------
>>     include/mvebu_mmc.h     |   1 +
>>     2 files changed, 61 insertions(+), 43 deletions(-)
>> 
>>    --
>>    2.1.3
>>    _______________________________________________
>>    U-Boot mailing list
>>    U-Boot at lists.denx.de <mailto:U-Boot@lists.denx.de>
>>    http://lists.denx.de/mailman/listinfo/u-boot
>> 
>> 

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

* [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time
  2014-12-17 10:18       ` Pantelis Antoniou
@ 2014-12-23 13:01         ` drEagle
  2015-01-03 16:06           ` drEagle
  0 siblings, 1 reply; 20+ messages in thread
From: drEagle @ 2014-12-23 13:01 UTC (permalink / raw)
  To: u-boot

Hi Pantelis,

Is these patches reviewed and upstreamed ?

Regards,
G?rald

Le 17/12/2014 11:18, Pantelis Antoniou a ?crit :
> Hi Gerald,
> 
> Last pull-req for mmc was last Friday, I intend to issue another this Friday too.
> 
> Regards
> 
> ? Pantelis
> 
>> On Dec 17, 2014, at 11:22 , drEagle <dreagle@doukki.net> wrote:
>>
>> Hi,
>>
>> Any chance to be included in the next release of u-boot ?
>>
>> Regards,
>> G?rald
>>
>> Le 15/12/2014 12:14, Mario Schuknecht a ?crit :
>>>
>>> 2014-12-13 21:35 GMT+01:00 G?rald Kerma <drEagle at doukki.net <mailto:drEagle@doukki.net>>:
>>>
>>>
>>>    This serie of patches speed up access time of MVEBUMMC driver
>>>
>>>    This is allowed by a fix in MVEBUMMC init status check inspired from linux MVSDIO driver.
>>>             * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
>>>             * register is sometimes not set before a while when some
>>>             * "unusual" data block sizes are used (such as with the SWITCH
>>>             * command), even despite the fact that the XFER_DONE interrupt
>>>             * was raised.  And if another data transfer starts before
>>>             * this bit comes to good sense (which eventually happens by
>>>             * itself) then the new transfer simply fails with a timeout.
>>>
>>>    It allows about 10x to 40x faster access time transfer on SHEEVAPLUG MMC
>>>    It may also fixes some SD types incompatibilities
>>>
>>>    ### before patch
>>>
>>>    Marvell>> ext2load mmc 0:1 0x800000 uImage
>>>    1613392 bytes read in 977 ms (1.6 MiB/s)
>>>
>>>    ### with fix
>>>
>>>    Marvell>> ext2load mmc 0:1 0x800000 uImage
>>>    1613392 bytes read in 83 ms (18.5 MiB/s)
>>>
>>>
>>>
>>> Looks good to me.
>>> ACK to this series of patches:
>>>
>>>
>>>    G?rald Kerma (6):
>>>      MVEBUMMC : Change copyright date
>>>      MVEBUMMC : Speed up access time
>>>      MVEBUMMC : FIX debug strings
>>>      MVEBUMMC : REMOVE unnecessary delays
>>>      MVEBUMMC : CLEAN code
>>>      MVEBUMMC : REMOVE unnecessary delay from init
>>>
>>>
>>>     drivers/mmc/mvebu_mmc.c | 103 ++++++++++++++++++++++++++++--------------------
>>>     include/mvebu_mmc.h     |   1 +
>>>     2 files changed, 61 insertions(+), 43 deletions(-)
>>>
>>>    --
>>>    2.1.3
>>>    _______________________________________________
>>>    U-Boot mailing list
>>>    U-Boot at lists.denx.de <mailto:U-Boot@lists.denx.de>
>>>    http://lists.denx.de/mailman/listinfo/u-boot
>>>
>>>

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

* [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time
  2014-12-23 13:01         ` drEagle
@ 2015-01-03 16:06           ` drEagle
  2015-01-05 18:31             ` Pantelis Antoniou
  0 siblings, 1 reply; 20+ messages in thread
From: drEagle @ 2015-01-03 16:06 UTC (permalink / raw)
  To: u-boot

Hi,

any news for this patch ?

Regards,
G?rald,

Le 23/12/2014 14:01, drEagle a ?crit :
> Hi Pantelis,
> 
> Is these patches reviewed and upstreamed ?
> 
> Regards,
> G?rald
> 
> Le 17/12/2014 11:18, Pantelis Antoniou a ?crit :
>> Hi Gerald,
>>
>> Last pull-req for mmc was last Friday, I intend to issue another this Friday too.
>>
>> Regards
>>
>> ? Pantelis
>>
>>> On Dec 17, 2014, at 11:22 , drEagle <dreagle@doukki.net> wrote:
>>>
>>> Hi,
>>>
>>> Any chance to be included in the next release of u-boot ?
>>>
>>> Regards,
>>> G?rald
>>>
>>> Le 15/12/2014 12:14, Mario Schuknecht a ?crit :
>>>>
>>>> 2014-12-13 21:35 GMT+01:00 G?rald Kerma <drEagle at doukki.net <mailto:drEagle@doukki.net>>:
>>>>
>>>>
>>>>    This serie of patches speed up access time of MVEBUMMC driver
>>>>
>>>>    This is allowed by a fix in MVEBUMMC init status check inspired from linux MVSDIO driver.
>>>>             * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
>>>>             * register is sometimes not set before a while when some
>>>>             * "unusual" data block sizes are used (such as with the SWITCH
>>>>             * command), even despite the fact that the XFER_DONE interrupt
>>>>             * was raised.  And if another data transfer starts before
>>>>             * this bit comes to good sense (which eventually happens by
>>>>             * itself) then the new transfer simply fails with a timeout.
>>>>
>>>>    It allows about 10x to 40x faster access time transfer on SHEEVAPLUG MMC
>>>>    It may also fixes some SD types incompatibilities
>>>>
>>>>    ### before patch
>>>>
>>>>    Marvell>> ext2load mmc 0:1 0x800000 uImage
>>>>    1613392 bytes read in 977 ms (1.6 MiB/s)
>>>>
>>>>    ### with fix
>>>>
>>>>    Marvell>> ext2load mmc 0:1 0x800000 uImage
>>>>    1613392 bytes read in 83 ms (18.5 MiB/s)
>>>>
>>>>
>>>>
>>>> Looks good to me.
>>>> ACK to this series of patches:
>>>>
>>>>
>>>>    G?rald Kerma (6):
>>>>      MVEBUMMC : Change copyright date
>>>>      MVEBUMMC : Speed up access time
>>>>      MVEBUMMC : FIX debug strings
>>>>      MVEBUMMC : REMOVE unnecessary delays
>>>>      MVEBUMMC : CLEAN code
>>>>      MVEBUMMC : REMOVE unnecessary delay from init
>>>>
>>>>
>>>>     drivers/mmc/mvebu_mmc.c | 103 ++++++++++++++++++++++++++++--------------------
>>>>     include/mvebu_mmc.h     |   1 +
>>>>     2 files changed, 61 insertions(+), 43 deletions(-)
>>>>
>>>>    --
>>>>    2.1.3
>>>>    _______________________________________________
>>>>    U-Boot mailing list
>>>>    U-Boot at lists.denx.de <mailto:U-Boot@lists.denx.de>
>>>>    http://lists.denx.de/mailman/listinfo/u-boot
>>>>
>>>>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
> 

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

* [U-Boot] [PATCH v3 1/6] MVEBUMMC : Change copyright date
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 1/6] MVEBUMMC : Change copyright date Gérald Kerma
@ 2015-01-05 18:25     ` Pantelis Antoniou
  0 siblings, 0 replies; 20+ messages in thread
From: Pantelis Antoniou @ 2015-01-05 18:25 UTC (permalink / raw)
  To: u-boot

Hi G?rald,

> On Dec 13, 2014, at 22:35 , G?rald Kerma <drEagle@doukki.net> wrote:
> 
> Signed-off-by: G?rald Kerma <drEagle@doukki.net>
> ---
> drivers/mmc/mvebu_mmc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
> index 9f98c3f..063d4da 100644
> --- a/drivers/mmc/mvebu_mmc.c
> +++ b/drivers/mmc/mvebu_mmc.c
> @@ -1,7 +1,7 @@
> /*
>  * Marvell MMC/SD/SDIO driver
>  *
> - * (C) Copyright 2012
> + * (C) Copyright 2012-2014
>  * Marvell Semiconductor <www.marvell.com>
>  * Written-by: Maen Suleiman, Gerald Kerma
>  *
> -- 
> 2.1.3

Applied, thanks

? Pantelis

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

* [U-Boot] [PATCH v3 2/6] MVEBUMMC : Speed up access time
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 2/6] MVEBUMMC : Speed up access time Gérald Kerma
@ 2015-01-05 18:26     ` Pantelis Antoniou
  0 siblings, 0 replies; 20+ messages in thread
From: Pantelis Antoniou @ 2015-01-05 18:26 UTC (permalink / raw)
  To: u-boot

Hi G?rald,

> On Dec 13, 2014, at 22:35 , G?rald Kerma <drEagle@doukki.net> wrote:
> 
> Get about 40x faster access on SHEEVAPLUG MMC
> Fix some SD type compatibility
> 
> Changes in v3:
> - fix the HW_STATE (from linux mvsdio)
> - review delays and timeouts
> 
> Changes in v2:
> - increase number of loops
> - remove initial delay
> 
> Changes in v1:
> - review all loops, delays and timeouts
> 
> Signed-off-by: G?rald Kerma <drEagle@doukki.net>
> ---
> drivers/mmc/mvebu_mmc.c | 48 +++++++++++++++++++++++++++++++-----------------
> include/mvebu_mmc.h     |  1 +
> 2 files changed, 32 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
> index 063d4da..91a9be0 100644
> --- a/drivers/mmc/mvebu_mmc.c
> +++ b/drivers/mmc/mvebu_mmc.c
> @@ -23,6 +23,8 @@ DECLARE_GLOBAL_DATA_PTR;
> 
> #define MVEBU_TARGET_DRAM 0
> 
> +#define TIMEOUT_DELAY	5*CONFIG_SYS_HZ		/* wait 5 seconds */
> +
> static void mvebu_mmc_write(u32 offs, u32 val)
> {
> 	writel(val, CONFIG_SYS_MMC_BASE + (offs));
> @@ -63,7 +65,7 @@ static int mvebu_mmc_setup_data(struct mmc_data *data)
> static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 			      struct mmc_data *data)
> {
> -	int timeout = 10;
> +	ulong start;
> 	ushort waittype = 0;
> 	ushort resptype = 0;
> 	ushort xfertype = 0;
> @@ -72,19 +74,33 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 	debug("cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
> 	      cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
> 
> -	udelay(10*1000);
> -
> 	debug("%s: cmd %d (hw state 0x%04x)\n", DRIVER_NAME,
> 	      cmd->cmdidx, mvebu_mmc_read(SDIO_HW_STATE));
> 
> -	/* Checking if card is busy */
> -	while ((mvebu_mmc_read(SDIO_HW_STATE) & CARD_BUSY)) {
> -		if (timeout == 0) {
> -			printf("%s: card busy!\n", DRIVER_NAME);
> -			return -1;
> -		}
> -		timeout--;
> -		udelay(1000);
> +	/*
> +	 * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
> +	 * register is sometimes not set before a while when some
> +	 * "unusual" data block sizes are used (such as with the SWITCH
> +	 * command), even despite the fact that the XFER_DONE interrupt
> +	 * was raised.  And if another data transfer starts before
> +	 * this bit comes to good sense (which eventually happens by
> +	 * itself) then the new transfer simply fails with a timeout.
> +	 */
> +	if (!(mvebu_mmc_read(SDIO_HW_STATE) & CMD_FIFO_EMPTY)) {
> +		ushort hw_state, count = 0;
> +
> +		start = get_timer(0);
> +		do {
> +			hw_state = mvebu_mmc_read(SDIO_HW_STATE);
> +			if ((get_timer(0) - start) > TIMEOUT_DELAY) {
> +				printf("%s : FIFO_EMPTY bit missing\n",
> +				       DRIVER_NAME);
> +				break;
> +			}
> +			count++;
> +		} while (!(hw_state & CMD_FIFO_EMPTY));
> +		debug("%s *** wait for FIFO_EMPTY bit (hw=0x%04x, count=%d, jiffies=%ld)\n",
> +		      DRIVER_NAME, hw_state, count, (get_timer(0) - (start)));
> 	}
> 
> 	/* Set up for a data transfer if we have one */
> @@ -147,8 +163,7 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 	mvebu_mmc_write(SDIO_NOR_INTR_EN, SDIO_POLL_MASK);
> 	mvebu_mmc_write(SDIO_ERR_INTR_EN, SDIO_POLL_MASK);
> 
> -	/* Waiting for completion */
> -	timeout = 1000000;
> +	start = get_timer(0);
> 
> 	while (!((mvebu_mmc_read(SDIO_NOR_INTR_STATUS)) & waittype)) {
> 		if (mvebu_mmc_read(SDIO_NOR_INTR_STATUS) & SDIO_NOR_ERROR) {
> @@ -161,13 +176,12 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 			return COMM_ERR;
> 		}
> 
> -		timeout--;
> -		udelay(1);
> -		if (timeout <= 0) {
> -			printf("%s: command timed out\n", DRIVER_NAME);
> +		if ((get_timer(0) - start) > TIMEOUT_DELAY) {
> +			debug("%s: command timed out\n", DRIVER_NAME);
> 			return TIMEOUT;
> 		}
> 	}
> +
> 	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
> 		(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
> 		return TIMEOUT;
> diff --git a/include/mvebu_mmc.h b/include/mvebu_mmc.h
> index 28d98fe..7fb71f7 100644
> --- a/include/mvebu_mmc.h
> +++ b/include/mvebu_mmc.h
> @@ -79,6 +79,7 @@
> #define CMD_INHIBIT				(1 << 0)
> #define CMD_TXACTIVE				(1 << 8)
> #define CMD_RXACTIVE				(1 << 9)
> +#define CMD_FIFO_EMPTY				(1 << 13)
> #define CMD_AUTOCMD12ACTIVE			(1 << 14)
> #define CMD_BUS_BUSY				(CMD_AUTOCMD12ACTIVE |	\
> 						CMD_RXACTIVE |	\
> -- 
> 2.1.3

Applied, thanks

? Pantelis

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

* [U-Boot] [PATCH v3 3/6] MVEBUMMC : FIX debug strings
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 3/6] MVEBUMMC : FIX debug strings Gérald Kerma
@ 2015-01-05 18:27     ` Pantelis Antoniou
  0 siblings, 0 replies; 20+ messages in thread
From: Pantelis Antoniou @ 2015-01-05 18:27 UTC (permalink / raw)
  To: u-boot

Hi G?rald,

> On Dec 13, 2014, at 22:35 , G?rald Kerma <drEagle@doukki.net> wrote:
> 
> Signed-off-by: G?rald Kerma <drEagle@doukki.net>
> ---
> drivers/mmc/mvebu_mmc.c | 18 +++++++++++++-----
> 1 file changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
> index 91a9be0..854bcc6 100644
> --- a/drivers/mmc/mvebu_mmc.c
> +++ b/drivers/mmc/mvebu_mmc.c
> @@ -71,8 +71,8 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 	ushort xfertype = 0;
> 	ushort resp_indx = 0;
> 
> -	debug("cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
> -	      cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
> +	debug("%s: cmdidx [0x%x] resp_type[0x%x] cmdarg[0x%x]\n",
> +	      DRIVER_NAME, cmd->cmdidx, cmd->resp_type, cmd->cmdarg);
> 
> 	debug("%s: cmd %d (hw state 0x%04x)\n", DRIVER_NAME,
> 	      cmd->cmdidx, mvebu_mmc_read(SDIO_HW_STATE));
> @@ -107,8 +107,11 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 	if (data) {
> 		int err = mvebu_mmc_setup_data(data);
> 
> -		if (err)
> +		if (err) {
> +			debug("%s: command DATA error :%x\n",
> +			      DRIVER_NAME, err);
> 			return err;
> +		}
> 	}
> 
> 	resptype = SDIO_CMD_INDEX(cmd->cmdidx);
> @@ -171,8 +174,12 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 			      DRIVER_NAME, cmd->cmdidx,
> 			      mvebu_mmc_read(SDIO_ERR_INTR_STATUS));
> 			if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
> -				(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
> +			    (SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT)) {
> +				debug("%s: command READ timed out\n",
> +				      DRIVER_NAME);
> 				return TIMEOUT;
> +			}
> +			debug("%s: command READ error\n", DRIVER_NAME);
> 			return COMM_ERR;
> 		}
> 
> @@ -265,6 +272,7 @@ static void mvebu_mmc_set_clk(unsigned int clock)
> 		if (m > MVEBU_MMC_BASE_DIV_MAX)
> 			m = MVEBU_MMC_BASE_DIV_MAX;
> 		mvebu_mmc_write(SDIO_CLK_DIV, m & MVEBU_MMC_BASE_DIV_MAX);
> +		debug("%s: clock (%d) div : %d\n", DRIVER_NAME, clock, m);
> 	}
> 
> 	udelay(10*1000);
> @@ -369,7 +377,7 @@ static void mvebu_window_setup(void)
> 
> static int mvebu_mmc_initialize(struct mmc *mmc)
> {
> -	debug("%s: mvebu_mmc_initialize", DRIVER_NAME);
> +	debug("%s: mvebu_mmc_initialize\n", DRIVER_NAME);
> 
> 	/*
> 	 * Setting host parameters
> -- 
> 2.1.3

Applied, thanks

? Pantelis

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

* [U-Boot] [PATCH v3 4/6] MVEBUMMC : REMOVE unnecessary delays
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 4/6] MVEBUMMC : REMOVE unnecessary delays Gérald Kerma
@ 2015-01-05 18:28     ` Pantelis Antoniou
  0 siblings, 0 replies; 20+ messages in thread
From: Pantelis Antoniou @ 2015-01-05 18:28 UTC (permalink / raw)
  To: u-boot

Hi G?rald,

> On Dec 13, 2014, at 22:35 , G?rald Kerma <drEagle@doukki.net> wrote:
> 
> Remove delays in mvebu_mmc_set_bus and mvebu_mmc_set_clk
> 
> Signed-off-by: G?rald Kerma <drEagle@doukki.net>
> ---
> drivers/mmc/mvebu_mmc.c | 3 ---
> 1 file changed, 3 deletions(-)
> 
> diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
> index 854bcc6..3e08f40 100644
> --- a/drivers/mmc/mvebu_mmc.c
> +++ b/drivers/mmc/mvebu_mmc.c
> @@ -274,8 +274,6 @@ static void mvebu_mmc_set_clk(unsigned int clock)
> 		mvebu_mmc_write(SDIO_CLK_DIV, m & MVEBU_MMC_BASE_DIV_MAX);
> 		debug("%s: clock (%d) div : %d\n", DRIVER_NAME, clock, m);
> 	}
> -
> -	udelay(10*1000);
> }
> 
> static void mvebu_mmc_set_bus(unsigned int bus)
> @@ -315,7 +313,6 @@ static void mvebu_mmc_set_bus(unsigned int bus)
> 	      "high-speed" : "");
> 
> 	mvebu_mmc_write(SDIO_HOST_CTRL, ctrl_reg);
> -	udelay(10*1000);
> }
> 
> static void mvebu_mmc_set_ios(struct mmc *mmc)
> -- 
> 2.1.3

Applied, thanks

? Pantelis

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

* [U-Boot] [PATCH v3 5/6] MVEBUMMC : CLEAN code
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 5/6] MVEBUMMC : CLEAN code Gérald Kerma
@ 2015-01-05 18:30     ` Pantelis Antoniou
  0 siblings, 0 replies; 20+ messages in thread
From: Pantelis Antoniou @ 2015-01-05 18:30 UTC (permalink / raw)
  To: u-boot

Hi G?rald,

> On Dec 13, 2014, at 22:35 , G?rald Kerma <drEagle@doukki.net> wrote:
> 
> Clean mvebu_mmc_send_cmd
> 
> Signed-off-by: G?rald Kerma <drEagle@doukki.net>
> ---
> drivers/mmc/mvebu_mmc.c | 40 ++++++++++++++++++++--------------------
> 1 file changed, 20 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
> index 3e08f40..721ebcc 100644
> --- a/drivers/mmc/mvebu_mmc.c
> +++ b/drivers/mmc/mvebu_mmc.c
> @@ -103,16 +103,9 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 		      DRIVER_NAME, hw_state, count, (get_timer(0) - (start)));
> 	}
> 
> -	/* Set up for a data transfer if we have one */
> -	if (data) {
> -		int err = mvebu_mmc_setup_data(data);
> -
> -		if (err) {
> -			debug("%s: command DATA error :%x\n",
> -			      DRIVER_NAME, err);
> -			return err;
> -		}
> -	}
> +	/* Clear status */
> +	mvebu_mmc_write(SDIO_NOR_INTR_STATUS, SDIO_POLL_MASK);
> +	mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
> 
> 	resptype = SDIO_CMD_INDEX(cmd->cmdidx);
> 
> @@ -138,6 +131,14 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 	}
> 
> 	if (data) {
> +		int err = mvebu_mmc_setup_data(data);
> +
> +		if (err) {
> +			debug("%s: command DATA error :%x\n",
> +			      DRIVER_NAME, err);
> +			return err;
> +		}
> +
> 		resptype |= SDIO_CMD_DATA_PRESENT | SDIO_CMD_CHECK_DATACRC16;
> 		xfertype |= SDIO_XFER_MODE_HW_WR_DATA_EN;
> 		if (data->flags & MMC_DATA_READ) {
> @@ -157,15 +158,9 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 	/* Setting Xfer mode */
> 	mvebu_mmc_write(SDIO_XFER_MODE, xfertype);
> 
> -	mvebu_mmc_write(SDIO_NOR_INTR_STATUS, ~SDIO_NOR_CARD_INT);
> -	mvebu_mmc_write(SDIO_ERR_INTR_STATUS, SDIO_POLL_MASK);
> -
> 	/* Sending command */
> 	mvebu_mmc_write(SDIO_CMD, resptype);
> 
> -	mvebu_mmc_write(SDIO_NOR_INTR_EN, SDIO_POLL_MASK);
> -	mvebu_mmc_write(SDIO_ERR_INTR_EN, SDIO_POLL_MASK);
> -
> 	start = get_timer(0);
> 
> 	while (!((mvebu_mmc_read(SDIO_NOR_INTR_STATUS)) & waittype)) {
> @@ -189,10 +184,6 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 		}
> 	}
> 
> -	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
> -		(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
> -		return TIMEOUT;
> -
> 	/* Handling response */
> 	if (cmd->resp_type & MMC_RSP_136) {
> 		uint response[8];
> @@ -225,6 +216,11 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 		cmd->response[1] =	((response[0] & 0xfc00) >> 10);
> 		cmd->response[2] =	0;
> 		cmd->response[3] =	0;
> +	} else {
> +		cmd->response[0] =	0;
> +		cmd->response[1] =	0;
> +		cmd->response[2] =	0;
> +		cmd->response[3] =	0;
> 	}
> 
> 	debug("%s: resp[0x%x] ", DRIVER_NAME, cmd->resp_type);
> @@ -234,6 +230,10 @@ static int mvebu_mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> 	debug("[0x%x] ", cmd->response[3]);
> 	debug("\n");
> 
> +	if (mvebu_mmc_read(SDIO_ERR_INTR_STATUS) &
> +		(SDIO_ERR_CMD_TIMEOUT | SDIO_ERR_DATA_TIMEOUT))
> +		return TIMEOUT;
> +
> 	return 0;
> }
> 
> -- 
> 2.1.3

Applied, thanks

? Pantelis

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

* [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time
  2015-01-03 16:06           ` drEagle
@ 2015-01-05 18:31             ` Pantelis Antoniou
  0 siblings, 0 replies; 20+ messages in thread
From: Pantelis Antoniou @ 2015-01-05 18:31 UTC (permalink / raw)
  To: u-boot

All applied,

There?s something called a Christmas break so no worries now :)

> On Jan 3, 2015, at 18:06 , drEagle <drEagle@DOUKKI.NET> wrote:
> 
> Hi,
> 
> any news for this patch ?
> 
> Regards,
> G?rald,
> 
> Le 23/12/2014 14:01, drEagle a ?crit :
>> Hi Pantelis,
>> 
>> Is these patches reviewed and upstreamed ?
>> 
>> Regards,
>> G?rald
>> 
>> Le 17/12/2014 11:18, Pantelis Antoniou a ?crit :
>>> Hi Gerald,
>>> 
>>> Last pull-req for mmc was last Friday, I intend to issue another this Friday too.
>>> 
>>> Regards
>>> 
>>> ? Pantelis
>>> 
>>>> On Dec 17, 2014, at 11:22 , drEagle <dreagle@doukki.net> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> Any chance to be included in the next release of u-boot ?
>>>> 
>>>> Regards,
>>>> G?rald
>>>> 
>>>> Le 15/12/2014 12:14, Mario Schuknecht a ?crit :
>>>>> 
>>>>> 2014-12-13 21:35 GMT+01:00 G?rald Kerma <drEagle at doukki.net <mailto:drEagle@doukki.net>>:
>>>>> 
>>>>> 
>>>>>   This serie of patches speed up access time of MVEBUMMC driver
>>>>> 
>>>>>   This is allowed by a fix in MVEBUMMC init status check inspired from linux MVSDIO driver.
>>>>>            * Hardware weirdness.  The FIFO_EMPTY bit of the HW_STATE
>>>>>            * register is sometimes not set before a while when some
>>>>>            * "unusual" data block sizes are used (such as with the SWITCH
>>>>>            * command), even despite the fact that the XFER_DONE interrupt
>>>>>            * was raised.  And if another data transfer starts before
>>>>>            * this bit comes to good sense (which eventually happens by
>>>>>            * itself) then the new transfer simply fails with a timeout.
>>>>> 
>>>>>   It allows about 10x to 40x faster access time transfer on SHEEVAPLUG MMC
>>>>>   It may also fixes some SD types incompatibilities
>>>>> 
>>>>>   ### before patch
>>>>> 
>>>>>   Marvell>> ext2load mmc 0:1 0x800000 uImage
>>>>>   1613392 bytes read in 977 ms (1.6 MiB/s)
>>>>> 
>>>>>   ### with fix
>>>>> 
>>>>>   Marvell>> ext2load mmc 0:1 0x800000 uImage
>>>>>   1613392 bytes read in 83 ms (18.5 MiB/s)
>>>>> 
>>>>> 
>>>>> 
>>>>> Looks good to me.
>>>>> ACK to this series of patches:
>>>>> 
>>>>> 
>>>>>   G?rald Kerma (6):
>>>>>     MVEBUMMC : Change copyright date
>>>>>     MVEBUMMC : Speed up access time
>>>>>     MVEBUMMC : FIX debug strings
>>>>>     MVEBUMMC : REMOVE unnecessary delays
>>>>>     MVEBUMMC : CLEAN code
>>>>>     MVEBUMMC : REMOVE unnecessary delay from init
>>>>> 
>>>>> 
>>>>>    drivers/mmc/mvebu_mmc.c | 103 ++++++++++++++++++++++++++++--------------------
>>>>>    include/mvebu_mmc.h     |   1 +
>>>>>    2 files changed, 61 insertions(+), 43 deletions(-)
>>>>> 
>>>>>   --
>>>>>   2.1.3
>>>>>   _______________________________________________
>>>>>   U-Boot mailing list
>>>>>   U-Boot at lists.denx.de <mailto:U-Boot@lists.denx.de>
>>>>>   http://lists.denx.de/mailman/listinfo/u-boot
>>>>> 
>>>>> 
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
>> 

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

* [U-Boot] [PATCH v3 6/6] MVEBUMMC : REMOVE unnecessary delay from init
  2014-12-13 20:35   ` [U-Boot] [PATCH v3 6/6] MVEBUMMC : REMOVE unnecessary delay from init Gérald Kerma
@ 2015-01-05 18:32     ` Pantelis Antoniou
  0 siblings, 0 replies; 20+ messages in thread
From: Pantelis Antoniou @ 2015-01-05 18:32 UTC (permalink / raw)
  To: u-boot

Hi G?rald,

> On Dec 13, 2014, at 22:35 , G?rald Kerma <drEagle@doukki.net> wrote:
> 
> Remove unnessecary delay from mvebu_mmc_initialize
> 
> Signed-off-by: G?rald Kerma <drEagle@doukki.net>
> ---
> drivers/mmc/mvebu_mmc.c | 2 --
> 1 file changed, 2 deletions(-)
> 
> diff --git a/drivers/mmc/mvebu_mmc.c b/drivers/mmc/mvebu_mmc.c
> index 721ebcc..8ca0904 100644
> --- a/drivers/mmc/mvebu_mmc.c
> +++ b/drivers/mmc/mvebu_mmc.c
> @@ -403,8 +403,6 @@ static int mvebu_mmc_initialize(struct mmc *mmc)
> 	/* SW reset */
> 	mvebu_mmc_write(SDIO_SW_RESET, SDIO_SW_RESET_NOW);
> 
> -	udelay(10*1000);
> -
> 	return 0;
> }
> 
> -- 
> 2.1.3

Applied, thanks

? Pantelis

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

end of thread, other threads:[~2015-01-05 18:32 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-04 15:03 [U-Boot] [PATCH v2 1/1] ARM: kirkwood: mvebu_mmc: Speed up access time Gérald Kerma
2014-12-13 20:35 ` [U-Boot] [PATCH v3 0/6] " Gérald Kerma
2014-12-13 20:35   ` [U-Boot] [PATCH v3 1/6] MVEBUMMC : Change copyright date Gérald Kerma
2015-01-05 18:25     ` Pantelis Antoniou
2014-12-13 20:35   ` [U-Boot] [PATCH v3 2/6] MVEBUMMC : Speed up access time Gérald Kerma
2015-01-05 18:26     ` Pantelis Antoniou
2014-12-13 20:35   ` [U-Boot] [PATCH v3 3/6] MVEBUMMC : FIX debug strings Gérald Kerma
2015-01-05 18:27     ` Pantelis Antoniou
2014-12-13 20:35   ` [U-Boot] [PATCH v3 4/6] MVEBUMMC : REMOVE unnecessary delays Gérald Kerma
2015-01-05 18:28     ` Pantelis Antoniou
2014-12-13 20:35   ` [U-Boot] [PATCH v3 5/6] MVEBUMMC : CLEAN code Gérald Kerma
2015-01-05 18:30     ` Pantelis Antoniou
2014-12-13 20:35   ` [U-Boot] [PATCH v3 6/6] MVEBUMMC : REMOVE unnecessary delay from init Gérald Kerma
2015-01-05 18:32     ` Pantelis Antoniou
2014-12-15 11:14   ` [U-Boot] [PATCH v3 0/6] ARM: kirkwood: mvebu_mmc: Speed up access time Mario Schuknecht
2014-12-17  9:22     ` drEagle
2014-12-17 10:18       ` Pantelis Antoniou
2014-12-23 13:01         ` drEagle
2015-01-03 16:06           ` drEagle
2015-01-05 18:31             ` Pantelis Antoniou

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.