[PATCH] Add SPI Flash STMicro's N25Q512A & add flag status check during SPI Flash write

Insop Song insop.song at cohere.net
Sun Jun 2 22:33:37 CEST 2013


Signed-off-by: Insop Song <insop.song at cohere.net>
---
 drivers/mtd/spi/spi_flash.c          |   25 +++++++++++++++++++++++++
 drivers/mtd/spi/spi_flash_internal.h |    1 +
 drivers/mtd/spi/stmicro.c            |    6 ++++++
 3 files changed, 32 insertions(+)

diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
index 00aece9..f53756d 100644
--- a/drivers/mtd/spi/spi_flash.c
+++ b/drivers/mtd/spi/spi_flash.c
@@ -72,6 +72,7 @@ int spi_flash_cmd_write_multi(struct spi_flash *flash, u3=
2 offset,
 	size_t chunk_len, actual;
 	int ret;
 	u8 cmd[4];
+	u8 flag_status;
=20
 	page_size =3D flash->page_size;
 	page_addr =3D offset / page_size;
@@ -83,6 +84,18 @@ int spi_flash_cmd_write_multi(struct spi_flash *flash, u=
32 offset,
 		return ret;
 	}
=20
+wait_flag:
+	ret =3D spi_flash_cmd(flash->spi, CMD_READ_FLAG_STATUS, &flag_status, siz=
eof(flag_status));
+	if (ret < 0) {
+		printf("SF: reading flag failed\n");
+		return ret;
+	}
+	debug("flag_status %d\n", flag_status);
+	if ((flag_status & 0x80) =3D=3D 0) {
+			udelay(10);
+			goto wait_flag;
+	}
+
 	cmd[0] =3D CMD_PAGE_PROGRAM;
 	for (actual =3D 0; actual < len; actual +=3D chunk_len) {
 		chunk_len =3D min(len - actual, page_size - byte_addr);
@@ -106,6 +119,18 @@ int spi_flash_cmd_write_multi(struct spi_flash *flash,=
 u32 offset,
 			debug("SF: write failed\n");
 			break;
 		}
+		/* check status */
+flag_check:
+		ret =3D spi_flash_cmd(flash->spi, CMD_READ_FLAG_STATUS, &flag_status, si=
zeof(flag_status));
+		if (ret < 0) {
+			printf("SF: reading flag failed\n");
+			break;
+		}
+		debug("flag_status %d\n", flag_status);
+		if (!(flag_status & 0x80)) {
+			udelay(100);
+			goto flag_check;
+		}
=20
 		ret =3D spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT);
 		if (ret)
diff --git a/drivers/mtd/spi/spi_flash_internal.h b/drivers/mtd/spi/spi_fla=
sh_internal.h
index 141cfa8..90b6993 100644
--- a/drivers/mtd/spi/spi_flash_internal.h
+++ b/drivers/mtd/spi/spi_flash_internal.h
@@ -22,6 +22,7 @@
 #define CMD_PAGE_PROGRAM		0x02
 #define CMD_WRITE_DISABLE		0x04
 #define CMD_READ_STATUS			0x05
+#define CMD_READ_FLAG_STATUS	0x70
 #define CMD_WRITE_ENABLE		0x06
 #define CMD_ERASE_4K			0x20
 #define CMD_ERASE_32K			0x52
diff --git a/drivers/mtd/spi/stmicro.c b/drivers/mtd/spi/stmicro.c
index 30b626a..ad94ad2 100644
--- a/drivers/mtd/spi/stmicro.c
+++ b/drivers/mtd/spi/stmicro.c
@@ -110,6 +110,12 @@ static const struct stmicro_spi_flash_params stmicro_s=
pi_flash_table[] =3D {
 		.nr_sectors =3D 512,
 		.name =3D "N25Q256",
 	},
+	{
+		.id =3D 0xba20,
+		.pages_per_sector =3D 256,
+		.nr_sectors =3D 1024,
+		.name =3D "N25Q512A",
+	},
 };
=20
 struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idco=
de)
--=20
1.7.9.5

--_002_63c878bfad3346a08c80dcd344ca79dbBLUPR07MB002namprd07pro_
Content-Type: application/octet-stream;
	name="0001-Add-SPI-Flash-STMicro-s-N25Q512A-add-flag-status-che.patch"
Content-Description: 0001-Add-SPI-Flash-STMicro-s-N25Q512A-add-flag-status-che.patch
Content-Disposition: attachment;
	filename="0001-Add-SPI-Flash-STMicro-s-N25Q512A-add-flag-status-che.patch";
	size=2936; creation-date="Mon, 03 Jun 2013 16:41:06 GMT";
	modification-date="Sun, 02 Jun 2013 20:34:20 GMT"
Content-Transfer-Encoding: base64

RnJvbSA5NzU3MmIzMmM0OWQwNmNhNmY4NTQ4ZWQ4OGU2ZTM4MWZiNzE5YTA4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJbnNvcCBTb25nIDxpbnNvcC5zb25nQGNvaGVyZS5uZXQ+CkRh
dGU6IFN1biwgMiBKdW4gMjAxMyAxMzozMzozNyAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBT
UEkgRmxhc2ggU1RNaWNybydzIE4yNVE1MTJBICYgYWRkIGZsYWcgc3RhdHVzIGNoZWNrCiBkdXJp
bmcgU1BJIEZsYXNoIHdyaXRlCgpTaWduZWQtb2ZmLWJ5OiBJbnNvcCBTb25nIDxpbnNvcC5zb25n
QGNvaGVyZS5uZXQ+Ci0tLQogZHJpdmVycy9tdGQvc3BpL3NwaV9mbGFzaC5jICAgICAgICAgIHwg
ICAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL210ZC9zcGkvc3BpX2ZsYXNo
X2ludGVybmFsLmggfCAgICAxICsKIGRyaXZlcnMvbXRkL3NwaS9zdG1pY3JvLmMgICAgICAgICAg
ICB8ICAgIDYgKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKCmRpZmYg
LS1naXQgYS9kcml2ZXJzL210ZC9zcGkvc3BpX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9zcGkvc3Bp
X2ZsYXNoLmMKaW5kZXggMDBhZWNlOS4uZjUzNzU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQv
c3BpL3NwaV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL3NwaS9zcGlfZmxhc2guYwpAQCAtNzIs
NiArNzIsNyBAQCBpbnQgc3BpX2ZsYXNoX2NtZF93cml0ZV9tdWx0aShzdHJ1Y3Qgc3BpX2ZsYXNo
ICpmbGFzaCwgdTMyIG9mZnNldCwKIAlzaXplX3QgY2h1bmtfbGVuLCBhY3R1YWw7CiAJaW50IHJl
dDsKIAl1OCBjbWRbNF07CisJdTggZmxhZ19zdGF0dXM7CiAKIAlwYWdlX3NpemUgPSBmbGFzaC0+
cGFnZV9zaXplOwogCXBhZ2VfYWRkciA9IG9mZnNldCAvIHBhZ2Vfc2l6ZTsKQEAgLTgzLDYgKzg0
LDE4IEBAIGludCBzcGlfZmxhc2hfY21kX3dyaXRlX211bHRpKHN0cnVjdCBzcGlfZmxhc2ggKmZs
YXNoLCB1MzIgb2Zmc2V0LAogCQlyZXR1cm4gcmV0OwogCX0KIAord2FpdF9mbGFnOgorCXJldCA9
IHNwaV9mbGFzaF9jbWQoZmxhc2gtPnNwaSwgQ01EX1JFQURfRkxBR19TVEFUVVMsICZmbGFnX3N0
YXR1cywgc2l6ZW9mKGZsYWdfc3RhdHVzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRmKCJT
RjogcmVhZGluZyBmbGFnIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWRlYnVnKCJm
bGFnX3N0YXR1cyAlZFxuIiwgZmxhZ19zdGF0dXMpOworCWlmICgoZmxhZ19zdGF0dXMgJiAweDgw
KSA9PSAwKSB7CisJCQl1ZGVsYXkoMTApOworCQkJZ290byB3YWl0X2ZsYWc7CisJfQorCiAJY21k
WzBdID0gQ01EX1BBR0VfUFJPR1JBTTsKIAlmb3IgKGFjdHVhbCA9IDA7IGFjdHVhbCA8IGxlbjsg
YWN0dWFsICs9IGNodW5rX2xlbikgewogCQljaHVua19sZW4gPSBtaW4obGVuIC0gYWN0dWFsLCBw
YWdlX3NpemUgLSBieXRlX2FkZHIpOwpAQCAtMTA2LDYgKzExOSwxOCBAQCBpbnQgc3BpX2ZsYXNo
X2NtZF93cml0ZV9tdWx0aShzdHJ1Y3Qgc3BpX2ZsYXNoICpmbGFzaCwgdTMyIG9mZnNldCwKIAkJ
CWRlYnVnKCJTRjogd3JpdGUgZmFpbGVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CisJCS8qIGNoZWNr
IHN0YXR1cyAqLworZmxhZ19jaGVjazoKKwkJcmV0ID0gc3BpX2ZsYXNoX2NtZChmbGFzaC0+c3Bp
LCBDTURfUkVBRF9GTEFHX1NUQVRVUywgJmZsYWdfc3RhdHVzLCBzaXplb2YoZmxhZ19zdGF0dXMp
KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ZigiU0Y6IHJlYWRpbmcgZmxhZyBmYWlsZWRc
biIpOworCQkJYnJlYWs7CisJCX0KKwkJZGVidWcoImZsYWdfc3RhdHVzICVkXG4iLCBmbGFnX3N0
YXR1cyk7CisJCWlmICghKGZsYWdfc3RhdHVzICYgMHg4MCkpIHsKKwkJCXVkZWxheSgxMDApOwor
CQkJZ290byBmbGFnX2NoZWNrOworCQl9CiAKIAkJcmV0ID0gc3BpX2ZsYXNoX2NtZF93YWl0X3Jl
YWR5KGZsYXNoLCBTUElfRkxBU0hfUFJPR19USU1FT1VUKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdp
dCBhL2RyaXZlcnMvbXRkL3NwaS9zcGlfZmxhc2hfaW50ZXJuYWwuaCBiL2RyaXZlcnMvbXRkL3Nw
aS9zcGlfZmxhc2hfaW50ZXJuYWwuaAppbmRleCAxNDFjZmE4Li45MGI2OTkzIDEwMDY0NAotLS0g
YS9kcml2ZXJzL210ZC9zcGkvc3BpX2ZsYXNoX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9tdGQv
c3BpL3NwaV9mbGFzaF9pbnRlcm5hbC5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIENNRF9Q
QUdFX1BST0dSQU0JCTB4MDIKICNkZWZpbmUgQ01EX1dSSVRFX0RJU0FCTEUJCTB4MDQKICNkZWZp
bmUgQ01EX1JFQURfU1RBVFVTCQkJMHgwNQorI2RlZmluZSBDTURfUkVBRF9GTEFHX1NUQVRVUwkw
eDcwCiAjZGVmaW5lIENNRF9XUklURV9FTkFCTEUJCTB4MDYKICNkZWZpbmUgQ01EX0VSQVNFXzRL
CQkJMHgyMAogI2RlZmluZSBDTURfRVJBU0VfMzJLCQkJMHg1MgpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9tdGQvc3BpL3N0bWljcm8uYyBiL2RyaXZlcnMvbXRkL3NwaS9zdG1pY3JvLmMKaW5kZXggMzBi
NjI2YS4uYWQ5NGFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvc3BpL3N0bWljcm8uYworKysg
Yi9kcml2ZXJzL210ZC9zcGkvc3RtaWNyby5jCkBAIC0xMTAsNiArMTEwLDEyIEBAIHN0YXRpYyBj
b25zdCBzdHJ1Y3Qgc3RtaWNyb19zcGlfZmxhc2hfcGFyYW1zIHN0bWljcm9fc3BpX2ZsYXNoX3Rh
YmxlW10gPSB7CiAJCS5ucl9zZWN0b3JzID0gNTEyLAogCQkubmFtZSA9ICJOMjVRMjU2IiwKIAl9
LAorCXsKKwkJLmlkID0gMHhiYTIwLAorCQkucGFnZXNfcGVyX3NlY3RvciA9IDI1NiwKKwkJLm5y
X3NlY3RvcnMgPSAxMDI0LAorCQkubmFtZSA9ICJOMjVRNTEyQSIsCisJfSwKIH07CiAKIHN0cnVj
dCBzcGlfZmxhc2ggKnNwaV9mbGFzaF9wcm9iZV9zdG1pY3JvKHN0cnVjdCBzcGlfc2xhdmUgKnNw
aSwgdTggKiBpZGNvZGUpCi0tIAoxLjcuOS41Cgo=

--_002_63c878bfad3346a08c80dcd344ca79dbBLUPR07MB002namprd07pro_--


More information about the U-Boot mailing list