kernel: Add support for Winbond w25q128jv SPI NOR flash
Newer batches of several Mikrotik boards contain this yet-unsupported flash chip, for instance: - rb941-2nd (hAP lite) - rb952ui-5ac2nd (hAP ac lite) - RBM33G and probably other Mikrotik boards need this patch as well. The patch was submitted upstream by Robert Marko: https://patchwork.ozlabs.org/patch/934181/ Closes: FS#1715 Signed-off-by: Baptiste Jonglez <git@bitsofnetworks.org> Cc: Robert Marko <robimarko@gmail.com>
This commit is contained in:
parent
d27d87c910
commit
b2c68ceea7
@ -0,0 +1,34 @@
|
|||||||
|
From: Robert Marko <robimarko@gmail.com>
|
||||||
|
To: linux-mtd@lists.infradead.org
|
||||||
|
Subject: mtd: spi-nor: Add Winbond w25q128jv support
|
||||||
|
Date: Mon, 25 Jun 2018 13:17:48 +0200
|
||||||
|
|
||||||
|
Datasheet:
|
||||||
|
http://www.winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
|
||||||
|
|
||||||
|
Testing done on Mikrotik Routerboard wAP R board.
|
||||||
|
It does not support Dual or Quad modes.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
Changes in v2:
|
||||||
|
- Correct the title
|
||||||
|
---
|
||||||
|
drivers/mtd/spi-nor/spi-nor.c | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
|
@@ -1159,6 +1159,11 @@ static const struct flash_info spi_nor_i
|
||||||
|
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
|
||||||
|
SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
|
||||||
|
},
|
||||||
|
+ {
|
||||||
|
+ "w25q128jv", INFO(0xef7018, 0, 64 * 1024, 256,
|
||||||
|
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
|
||||||
|
+ SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
|
||||||
|
+ },
|
||||||
|
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
|
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
|
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
|
@ -17,7 +17,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -1181,6 +1181,10 @@ static const struct flash_info spi_nor_i
|
@@ -1186,6 +1186,10 @@ static const struct flash_info spi_nor_i
|
||||||
{ "3S400AN", S3AN_INFO(0x1f2400, 256, 264) },
|
{ "3S400AN", S3AN_INFO(0x1f2400, 256, 264) },
|
||||||
{ "3S700AN", S3AN_INFO(0x1f2500, 512, 264) },
|
{ "3S700AN", S3AN_INFO(0x1f2500, 512, 264) },
|
||||||
{ "3S1400AN", S3AN_INFO(0x1f2600, 512, 528) },
|
{ "3S1400AN", S3AN_INFO(0x1f2600, 512, 528) },
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
From: Robert Marko <robimarko@gmail.com>
|
||||||
|
To: linux-mtd@lists.infradead.org
|
||||||
|
Subject: mtd: spi-nor: Add Winbond w25q128jv support
|
||||||
|
Date: Mon, 25 Jun 2018 13:17:48 +0200
|
||||||
|
|
||||||
|
Datasheet:
|
||||||
|
http://www.winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
|
||||||
|
|
||||||
|
Testing done on Mikrotik Routerboard wAP R board.
|
||||||
|
It does not support Dual or Quad modes.
|
||||||
|
|
||||||
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
Changes in v2:
|
||||||
|
- Correct the title
|
||||||
|
---
|
||||||
|
drivers/mtd/spi-nor/spi-nor.c | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
|
@@ -1146,6 +1146,11 @@ static const struct flash_info spi_nor_i
|
||||||
|
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
|
||||||
|
SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
|
||||||
|
},
|
||||||
|
+ {
|
||||||
|
+ "w25q128jv", INFO(0xef7018, 0, 64 * 1024, 256,
|
||||||
|
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
|
||||||
|
+ SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
|
||||||
|
+ },
|
||||||
|
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
|
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
|
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
|
@ -17,7 +17,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -1166,6 +1166,10 @@ static const struct flash_info spi_nor_i
|
@@ -1171,6 +1171,10 @@ static const struct flash_info spi_nor_i
|
||||||
{ "3S400AN", S3AN_INFO(0x1f2400, 256, 264) },
|
{ "3S400AN", S3AN_INFO(0x1f2400, 256, 264) },
|
||||||
{ "3S700AN", S3AN_INFO(0x1f2500, 512, 264) },
|
{ "3S700AN", S3AN_INFO(0x1f2500, 512, 264) },
|
||||||
{ "3S1400AN", S3AN_INFO(0x1f2600, 512, 528) },
|
{ "3S1400AN", S3AN_INFO(0x1f2600, 512, 528) },
|
||||||
|
@ -116,7 +116,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK);
|
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1165,7 +1217,7 @@ static const struct flash_info spi_nor_i
|
@@ -1170,7 +1222,7 @@ static const struct flash_info spi_nor_i
|
||||||
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
|
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
|
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
|
||||||
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
|
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
|
||||||
@ -125,7 +125,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
{ "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
|
{ "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
|
||||||
SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
|
SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
|
||||||
|
|
||||||
@@ -1225,6 +1277,9 @@ static int spi_nor_read(struct mtd_info
|
@@ -1230,6 +1282,9 @@ static int spi_nor_read(struct mtd_info
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
while (len) {
|
while (len) {
|
||||||
loff_t addr = from;
|
loff_t addr = from;
|
||||||
|
|
||||||
@@ -1249,6 +1304,18 @@ static int spi_nor_read(struct mtd_info
|
@@ -1254,6 +1309,18 @@ static int spi_nor_read(struct mtd_info
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
read_err:
|
read_err:
|
||||||
@ -154,7 +154,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
|
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -1350,6 +1417,10 @@ static int spi_nor_write(struct mtd_info
|
@@ -1355,6 +1422,10 @@ static int spi_nor_write(struct mtd_info
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
for (i = 0; i < len; ) {
|
for (i = 0; i < len; ) {
|
||||||
ssize_t written;
|
ssize_t written;
|
||||||
loff_t addr = to + i;
|
loff_t addr = to + i;
|
||||||
@@ -1390,6 +1461,7 @@ static int spi_nor_write(struct mtd_info
|
@@ -1395,6 +1466,7 @@ static int spi_nor_write(struct mtd_info
|
||||||
}
|
}
|
||||||
|
|
||||||
write_err:
|
write_err:
|
||||||
@ -173,7 +173,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
|
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -2806,8 +2878,10 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -2811,8 +2883,10 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
} else if (mtd->size > 0x1000000) {
|
} else if (mtd->size > 0x1000000) {
|
||||||
/* enable 4-byte addressing if the device exceeds 16MiB */
|
/* enable 4-byte addressing if the device exceeds 16MiB */
|
||||||
nor->addr_width = 4;
|
nor->addr_width = 4;
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
/*
|
/*
|
||||||
* Write status register 1 byte
|
* Write status register 1 byte
|
||||||
* Returns negative if error occurred.
|
* Returns negative if error occurred.
|
||||||
@@ -2878,9 +2887,16 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -2883,9 +2892,16 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
} else if (mtd->size > 0x1000000) {
|
} else if (mtd->size > 0x1000000) {
|
||||||
/* enable 4-byte addressing if the device exceeds 16MiB */
|
/* enable 4-byte addressing if the device exceeds 16MiB */
|
||||||
nor->addr_width = 4;
|
nor->addr_width = 4;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user