[U-Boot] [PATCH] SF: always read 5 bytes for the idcode

Some SPI flash drivers like to have extended id information available (like the spansion flash), so rather than making it re-issue the ID cmd to get at the last 2 bytes, have the common code read 5 bytes rather than just 3. This also matches the Linux behavior where it always reads 5 id bytes from all flashes.
Signed-off-by: Mike Frysinger vapier@gentoo.org CC: Mingkai Hu Mingkai.hu@freescale.com CC: Haavard Skinnemoen haavard.skinnemoen@atmel.com --- drivers/mtd/spi/spansion.c | 10 ++-------- drivers/mtd/spi/spi_flash.c | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-)
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index 9de4b7b..b9746fd 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -310,15 +310,9 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode) struct spansion_spi_flash *spsn; unsigned int i; unsigned short jedec, ext_jedec; - int ret; - u8 id[5] = {0}; - - ret = spi_flash_cmd(spi, CMD_READ_ID, id, sizeof(id)); - if (ret) - return NULL;
- jedec = id[1] << 8 | id[2]; - ext_jedec = id[3] << 8 | id[4]; + jedec = idcode[1] << 8 | idcode[2]; + ext_jedec = idcode[3] << 8 | idcode[4];
for (i = 0; i < ARRAY_SIZE(spansion_spi_flash_table); i++) { params = &spansion_spi_flash_table[i]; diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 57ef002..9c09d44 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -101,7 +101,7 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, struct spi_slave *spi; struct spi_flash *flash; int ret; - u8 idcode[3]; + u8 idcode[5];
spi = spi_setup_slave(bus, cs, max_hz, spi_mode); if (!spi) {

Mike Frysinger wrote:
Some SPI flash drivers like to have extended id information available (like the spansion flash), so rather than making it re-issue the ID cmd to get at the last 2 bytes, have the common code read 5 bytes rather than just 3. This also matches the Linux behavior where it always reads 5 id bytes from all flashes.
Signed-off-by: Mike Frysinger vapier@gentoo.org CC: Mingkai Hu Mingkai.hu@freescale.com CC: Haavard Skinnemoen haavard.skinnemoen@atmel.com
Yes, that's much better. But perhaps you should pass the last two bytes to the debug() call a bit further down too?
I guess it's not essential though, so
Acked-by: Haavard Skinnemoen haavard.skinnemoen@atmel.com

On Sunday 29 March 2009 08:40:10 Haavard Skinnemoen wrote:
Mike Frysinger wrote:
Some SPI flash drivers like to have extended id information available (like the spansion flash), so rather than making it re-issue the ID cmd to get at the last 2 bytes, have the common code read 5 bytes rather than just 3. This also matches the Linux behavior where it always reads 5 id bytes from all flashes.
Signed-off-by: Mike Frysinger vapier@gentoo.org CC: Mingkai Hu Mingkai.hu@freescale.com CC: Haavard Skinnemoen haavard.skinnemoen@atmel.com
Yes, that's much better. But perhaps you should pass the last two bytes to the debug() call a bit further down too?
np, i'll update the patch for that -mike

Some SPI flash drivers like to have extended id information available (like the spansion flash), so rather than making it re-issue the ID cmd to get at the last 2 bytes, have the common code read 5 bytes rather than just 3. This also matches the Linux behavior where it always reads 5 id bytes from all flashes.
Signed-off-by: Mike Frysinger vapier@gentoo.org Acked-by: Haavard Skinnemoen haavard.skinnemoen@atmel.com CC: Mingkai Hu Mingkai.hu@freescale.com --- v2 - display all 5 bytes in the debug() output
drivers/mtd/spi/spansion.c | 10 ++-------- drivers/mtd/spi/spi_flash.c | 6 +++--- 2 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index 9de4b7b..b9746fd 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -310,15 +310,9 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode) struct spansion_spi_flash *spsn; unsigned int i; unsigned short jedec, ext_jedec; - int ret; - u8 id[5] = {0}; - - ret = spi_flash_cmd(spi, CMD_READ_ID, id, sizeof(id)); - if (ret) - return NULL;
- jedec = id[1] << 8 | id[2]; - ext_jedec = id[3] << 8 | id[4]; + jedec = idcode[1] << 8 | idcode[2]; + ext_jedec = idcode[3] << 8 | idcode[4];
for (i = 0; i < ARRAY_SIZE(spansion_spi_flash_table); i++) { params = &spansion_spi_flash_table[i]; diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 1902960..c8c460b 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -101,7 +101,7 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, struct spi_slave *spi; struct spi_flash *flash; int ret; - u8 idcode[3]; + u8 idcode[5];
spi = spi_setup_slave(bus, cs, max_hz, spi_mode); if (!spi) { @@ -120,8 +120,8 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, if (ret) goto err_read_id;
- debug("SF: Got idcode %02x %02x %02x\n", idcode[0], - idcode[1], idcode[2]); + debug("SF: Got idcode %02x %02x %02x %02x %02x\n", idcode[0], + idcode[1], idcode[2], idcode[3], idcode[4]);
switch (idcode[0]) { #ifdef CONFIG_SPI_FLASH_SPANSION
participants (2)
-
Haavard Skinnemoen
-
Mike Frysinger