From: Jagan Teki <jteki@openedev.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 12/13] sf: Add clear flag status register support
Date: Wed, 2 Sep 2015 11:39:56 +0530 [thread overview]
Message-ID: <1441174197-5096-13-git-send-email-jteki@openedev.com> (raw)
In-Reply-To: <1441174197-5096-1-git-send-email-jteki@openedev.com>
From: Hou Zhiqiang <B48286@freescale.com>
The clear flag status register operation is required by Micron
SPI-NOR chips, which support FSR. And if an error bit of FSR
have been set like protection, voltage, erase, and program,
it must be cleared by the clear FSR operation.
Signed-off-by: Hou Zhiqiang <B48286@freescale.com>
Signed-off-by: Mingkai.Hu <Mingkai.Hu@freescale.com>
Signed-off-by: Jagan Teki <jteki@openedev.com>
Reviewed-by: Jagan Teki <jteki@openedev.com>
---
Changes for v3:
- none
Changes for v2:
- none
drivers/mtd/spi/sf_internal.h | 7 +++++++
drivers/mtd/spi/sf_ops.c | 18 ++++++++++++++----
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 3304217..e4cb198 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -81,6 +81,7 @@ enum spi_nor_option_flags {
#define CMD_READ_STATUS1 0x35
#define CMD_WRITE_ENABLE 0x06
#define CMD_READ_CONFIG 0x35
+#define CMD_CLEAR_FLAG_STATUS 0x50
#define CMD_FLAG_STATUS 0x70
/* Read commands */
@@ -104,7 +105,13 @@ enum spi_nor_option_flags {
#define STATUS_WIP (1 << 0)
#define STATUS_QEB_WINSPAN (1 << 1)
#define STATUS_QEB_MXIC (1 << 6)
+#define STATUS_ERR_PROT (1 << 1)
+#define STATUS_ERR_VOLT (1 << 3)
+#define STATUS_ERR_PROG (1 << 4)
+#define STATUS_ERR_ERASE (1 << 5)
#define STATUS_PEC (1 << 7)
+#define FSR_ERR_MSK (STATUS_ERR_PROT | STATUS_ERR_VOLT | \
+ STATUS_ERR_PROG | STATUS_ERR_ERASE)
/* Flash timeout values */
#define SPI_FLASH_PROG_TIMEOUT (2 * CONFIG_SYS_HZ)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index ae4a937..77b053a 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -153,6 +153,11 @@ static void spi_flash_dual_flash(struct spi_flash *flash, u32 *addr)
}
#endif
+static inline int write_cfsr(struct spi_flash *flash)
+{
+ return spi_flash_cmd(flash->spi, CMD_CLEAR_FLAG_STATUS, NULL, 0);
+}
+
static inline int spi_flash_sr_ready(struct spi_flash *flash)
{
int sr = spi_flash_cmd_read_status(flash);
@@ -165,10 +170,15 @@ static inline int spi_flash_sr_ready(struct spi_flash *flash)
static inline int spi_flash_fsr_ready(struct spi_flash *flash)
{
int fsr = read_fsr(flash);
- if (fsr < 0)
- return fsr;
- else
- return fsr & STATUS_PEC;
+ if (fsr & FSR_ERR_MSK) {
+ printf("SF: flag status(0x%x) error occured\n", fsr);
+ int cfsr = write_cfsr(flash);
+ if (cfsr < 0)
+ printf("SF: clear flag status failed\n");
+ return -EINVAL;
+ }
+
+ return fsr & STATUS_PEC;
}
static int spi_flash_ready(struct spi_flash *flash)
--
1.9.1
next prev 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 ` [U-Boot] [PATCH v3 06/13] sf: Update status reg check in spi_flash_cmd_wait_ready Jagan Teki
2015-09-15 8:14 ` 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 ` Jagan Teki [this message]
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-13-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