public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jagan Teki <jteki@openedev.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 06/13] sf: Update status reg check in spi_flash_cmd_wait_ready
Date: Wed,  2 Sep 2015 11:39:50 +0530	[thread overview]
Message-ID: <1441174197-5096-7-git-send-email-jteki@openedev.com> (raw)
In-Reply-To: <1441174197-5096-1-git-send-email-jteki@openedev.com>

Current flash wait_ready logic is not modular to add new
register status check, hence updated the status check for
adding few more register checks in future.

Below are the sf speed runs with 'sf update' on whole flash, 16MiB.

=> sf update 0x100 0x0 0x1000000
device 0 whole chip
16777216 bytes written, 0 bytes skipped in 59.564s, speed 289262 B/s

=> sf update 0x100 0x0 0x1000000
device 0 whole chip
16777216 bytes written, 0 bytes skipped in 62.549s, speed 275036 B/s

=> sf update 0x100 0x0 0x1000000
device 0 whole chip
16777216 bytes written, 0 bytes skipped in 61.276s, speed 284359 B/s

Signed-off-by: Jagan Teki <jteki@openedev.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Marek Vasut <marex@denx.de>
Cc: Michal Simek <michal.simek@xilinx.com>
Cc: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Tom Warren <twarren@nvidia.com>
Cc: Bin Meng <bmeng.cn@gmail.com>
Cc: Tom Rini <trini@konsulko.com>
Tested-by: Jagan Teki <jteki@openedev.com>
---
Changes for v3:
	- none
Changes for v2:
	- Remove unneeded comments.

 drivers/mtd/spi/sf_ops.c | 70 +++++++++---------------------------------------
 1 file changed, 12 insertions(+), 58 deletions(-)

diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index 6e457ec..c1cdde7 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -139,72 +139,26 @@ static void spi_flash_dual_flash(struct spi_flash *flash, u32 *addr)
 }
 #endif
 
-static int spi_flash_poll_status(struct spi_slave *spi, unsigned long timeout,
-				 u8 cmd, u8 poll_bit)
-{
-	unsigned long timebase;
-	unsigned long flags = SPI_XFER_BEGIN;
-	int ret;
-	u8 status;
-	u8 check_status = 0x0;
-
-	if (cmd == CMD_FLAG_STATUS)
-		check_status = poll_bit;
-
-#ifdef CONFIG_SF_DUAL_FLASH
-	if (spi->flags & SPI_XFER_U_PAGE)
-		flags |= SPI_XFER_U_PAGE;
-#endif
-	ret = spi_xfer(spi, 8, &cmd, NULL, flags);
-	if (ret) {
-		debug("SF: fail to read %s status register\n",
-		      cmd == CMD_READ_STATUS ? "read" : "flag");
-		return ret;
-	}
-
-	timebase = get_timer(0);
-	do {
-		WATCHDOG_RESET();
-
-		ret = spi_xfer(spi, 8, NULL, &status, 0);
-		if (ret)
-			return -1;
-
-		if ((status & poll_bit) == check_status)
-			break;
-
-	} while (get_timer(timebase) < timeout);
-
-	spi_xfer(spi, 0, NULL, NULL, SPI_XFER_END);
-
-	if ((status & poll_bit) == check_status)
-		return 0;
-
-	/* Timed out */
-	debug("SF: time out!\n");
-	return -1;
-}
-
 int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout)
 {
-	struct spi_slave *spi = flash->spi;
-	int ret;
-	u8 poll_bit = STATUS_WIP;
-	u8 cmd = CMD_READ_STATUS;
+	int timebase, ret, sr;
 
-	ret = spi_flash_poll_status(spi, timeout, cmd, poll_bit);
-	if (ret < 0)
-		return ret;
+	timebase = get_timer(0);
 
-	if (flash->poll_cmd == CMD_FLAG_STATUS) {
-		poll_bit = STATUS_PEC;
-		cmd = CMD_FLAG_STATUS;
-		ret = spi_flash_poll_status(spi, timeout, cmd, poll_bit);
+	while (get_timer(timebase) < timeout) {
+		ret = spi_flash_cmd_read_status(flash, &sr);
 		if (ret < 0)
 			return ret;
+
+		if (sr < 0)
+			break;
+		else if (!(sr & STATUS_WIP))
+			return 0;
 	}
 
-	return 0;
+	printf("SF: Timeout!\n");
+
+	return -ETIMEDOUT;
 }
 
 int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd,
-- 
1.9.1

  parent reply	other threads:[~2015-09-02  6:09 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-02  6:09 [U-Boot] [PATCH v3 00/13] sf: BAR/wait_ready logic updates Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 01/13] spi: zynq_spi: Remove unneeded headers Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 02/13] sf: Return bank_sel, if flash->bank_curr == bank_sel Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 03/13] sf: Make BAR discovery, as spi_flash_read_bar Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 04/13] sf: Optimize BAR write code Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 05/13] sf: Make flash->flags use for generic usage Jagan Teki
2015-09-02  9:39   ` Bin Meng
2015-09-03  7:04     ` Jagan Teki
2015-09-15  6:32   ` Bin Meng
2015-09-15  7:49     ` Bin Meng
2015-09-02  6:09 ` Jagan Teki [this message]
2015-09-15  8:14   ` [U-Boot] [PATCH v3 06/13] sf: Update status reg check in spi_flash_cmd_wait_ready Bin Meng
2015-09-02  6:09 ` [U-Boot] [PATCH v3 07/13] sf: Add FSR support to spi_flash_cmd_wait_ready Jagan Teki
2015-09-02  8:00   ` Marek Vasut
2015-09-29 11:12     ` Jagan Teki
2015-09-15  8:15   ` Bin Meng
2015-09-02  6:09 ` [U-Boot] [PATCH v3 08/13] sf: Add flash_read_reg support Jagan Teki
2015-09-15  8:17   ` Bin Meng
2015-09-02  6:09 ` [U-Boot] [PATCH v3 09/13] sf: Use flash_read_reg routine Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 10/13] sf: Add flash_read support Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 11/13] sf: Use flash_read routine in spi_flash_read_ops Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 12/13] sf: Add clear flag status register support Jagan Teki
2015-09-02  6:09 ` [U-Boot] [PATCH v3 13/13] sf: Rename read register functions Jagan Teki
2015-09-15  8:21   ` Bin Meng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1441174197-5096-7-git-send-email-jteki@openedev.com \
    --to=jteki@openedev.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox