[U-Boot] [PATCH 0/4] SPI updates for v2010.10

Simple stuff already posted to the list a while ago. I'm pretty sure I have all the latest versions of these patches, but submitters should probably double check ...
David Jander (1): sf: spansion: add support for S25FL032P parts
Graeme Smecher (1): sf: winbond: add support W25Q64 parts
Marc-André Hébert (1): sf: spansion: fixing erasing when sector size >64KiB
Reinhard Meyer (1): sspi: add options to specify bus and mode
common/cmd_spi.c | 40 +++++++++++++++++++++++++--------------- drivers/mtd/spi/spansion.c | 16 ++++++++++++---- drivers/mtd/spi/winbond.c | 9 +++++++++ 3 files changed, 46 insertions(+), 19 deletions(-)

From: Graeme Smecher graeme.smecher@mail.mcgill.ca
Adds support for Winbond's W25Q64 SPI flash. These devices are used on (among others) Xilinx' SP601 and SP605 Spartan-6 evaluation boards. Tested with "sf" commands.
Signed-off-by: Graeme Smecher graeme.smecher@mail.mcgill.ca Signed-off-by: Mike Frysinger vapier@gentoo.org --- drivers/mtd/spi/winbond.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/mtd/spi/winbond.c b/drivers/mtd/spi/winbond.c index ff1df25..de3aeb8 100644 --- a/drivers/mtd/spi/winbond.c +++ b/drivers/mtd/spi/winbond.c @@ -27,6 +27,7 @@ #define WINBOND_ID_W25X16 0x3015 #define WINBOND_ID_W25X32 0x3016 #define WINBOND_ID_W25X64 0x3017 +#define WINBOND_ID_W25Q64 0x4017
#define WINBOND_SR_WIP (1 << 0) /* Write-in-Progress */
@@ -77,6 +78,14 @@ static const struct winbond_spi_flash_params winbond_spi_flash_table[] = { .nr_blocks = 128, .name = "W25X64", }, + { + .id = WINBOND_ID_W25Q64, + .l2_page_size = 8, + .pages_per_sector = 16, + .sectors_per_block = 16, + .nr_blocks = 128, + .name = "W25Q64", + }, };
static int winbond_wait_ready(struct spi_flash *flash, unsigned long timeout)

From: Marc-André Hébert hebert.marcandre@gmail.com
The spansion_erase currently only works when the sector size is 64KB. cmd[1] should contain the higher 8 bit of the 24 bit address of the sector to be erased. Currently it is holding the sector index to be erased which happens to be the same thing when the sector size is 64KB.
Signed-off-by: Marc-Andre Hebert marc-andre.hebert@humanware.com Signed-off-by: Mike Frysinger vapier@gentoo.org --- drivers/mtd/spi/spansion.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index d6c1a5f..94489af 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -262,7 +262,6 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) return -1; }
- len /= sector_size; cmd[0] = CMD_S25FLXX_SE; cmd[2] = 0x00; cmd[3] = 0x00; @@ -274,8 +273,8 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) }
ret = 0; - for (actual = 0; actual < len; actual++) { - cmd[1] = (offset / sector_size) + actual; + for (actual = 0; actual < len; actual+=sector_size) { + cmd[1] = (offset + actual) >> 16;
ret = spi_flash_cmd(flash->spi, CMD_S25FLXX_WREN, NULL, 0); if (ret < 0) { @@ -298,7 +297,7 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) }
debug("SF: SPANSION: Successfully erased %u bytes @ 0x%x\n", - len * sector_size, offset); + len, offset);
spi_release_bus(flash->spi); return ret;

Hello.
On 06-10-2010 11:37, Mike Frysinger wrote:
From: Marc-André Héberthebert.marcandre@gmail.com
The spansion_erase currently only works when the sector size is 64KB. cmd[1] should contain the higher 8 bit of the 24 bit address of the sector to be erased. Currently it is holding the sector index to be erased which happens to be the same thing when the sector size is 64KB.
Signed-off-by: Marc-Andre Hebert marc-andre.hebert@humanware.com Signed-off-by: Mike Frysinger vapier@gentoo.org
drivers/mtd/spi/spansion.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index d6c1a5f..94489af 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c
[...]
@@ -274,8 +273,8 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) }
ret = 0;
- for (actual = 0; actual< len; actual++) {
cmd[1] = (offset / sector_size) + actual;
- for (actual = 0; actual< len; actual+=sector_size) {
Please put spaces around += to keep the style consistent.
WBR, Sergei

From: Marc-André Hébert hebert.marcandre@gmail.com
The spansion_erase currently only works when the sector size is 64KB. cmd[1] should contain the higher 8 bit of the 24 bit address of the sector to be erased. Currently it is holding the sector index to be erased which happens to be the same thing when the sector size is 64KB.
Signed-off-by: Marc-Andre Hebert marc-andre.hebert@humanware.com Signed-off-by: Mike Frysinger vapier@gentoo.org --- v2 - fix style pointed out by Sergei Shtylyov
drivers/mtd/spi/spansion.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index d6c1a5f..d9d794a 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -262,7 +262,6 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) return -1; }
- len /= sector_size; cmd[0] = CMD_S25FLXX_SE; cmd[2] = 0x00; cmd[3] = 0x00; @@ -274,8 +273,8 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) }
ret = 0; - for (actual = 0; actual < len; actual++) { - cmd[1] = (offset / sector_size) + actual; + for (actual = 0; actual < len; actual += sector_size) { + cmd[1] = (offset + actual) >> 16;
ret = spi_flash_cmd(flash->spi, CMD_S25FLXX_WREN, NULL, 0); if (ret < 0) { @@ -298,7 +297,7 @@ int spansion_erase(struct spi_flash *flash, u32 offset, size_t len) }
debug("SF: SPANSION: Successfully erased %u bytes @ 0x%x\n", - len * sector_size, offset); + len, offset);
spi_release_bus(flash->spi); return ret;

From: David Jander david.jander@protonic.nl
This patch introduces an extra mask-field in spansion_spi_flash_params to support flash chips with 1-byte extended ID (like the S25FL032P).
Signed-off-by: David Jander david@protonic.nl Signed-off-by: Mike Frysinger vapier@gentoo.org --- drivers/mtd/spi/spansion.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index 94489af..4c28759 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -52,6 +52,7 @@ #define SPSN_ID_S25FL128P 0x2018 #define SPSN_EXT_ID_S25FL128P_256KB 0x0300 #define SPSN_EXT_ID_S25FL128P_64KB 0x0301 +#define SPSN_EXT_ID_S25FL032P 0x4d00
#define SPANSION_SR_WIP (1 << 0) /* Write-in-Progress */
@@ -124,6 +125,14 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = { .nr_sectors = 64, .name = "S25FL128P_256K", }, + { + .idcode1 = SPSN_ID_S25FL032A, + .idcode2 = SPSN_EXT_ID_S25FL032P, + .page_size = 256, + .pages_per_sector = 256, + .nr_sectors = 64, + .name = "S25FL032P", + }, };
static int spansion_wait_ready(struct spi_flash *flash, unsigned long timeout)

From: Reinhard Meyer u-boot@emk-elektronik.de
and clean up error messages and help, removed pointless debug() call.
Signed-off-by: Reinhard Meyer u-boot@emk-elektronik.de Signed-off-by: Mike Frysinger vapier@gentoo.org --- common/cmd_spi.c | 40 +++++++++++++++++++++++++--------------- 1 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/common/cmd_spi.c b/common/cmd_spi.c index bafa217..8c623c9 100644 --- a/common/cmd_spi.c +++ b/common/cmd_spi.c @@ -47,7 +47,9 @@ /* * Values from last command. */ -static unsigned int device; +static unsigned int bus; +static unsigned int cs; +static unsigned int mode; static int bitlen; static uchar dout[MAX_SPI_BYTES]; static uchar din[MAX_SPI_BYTES]; @@ -78,8 +80,18 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
if ((flag & CMD_FLAG_REPEAT) == 0) { - if (argc >= 2) - device = simple_strtoul(argv[1], NULL, 10); + if (argc >= 2) { + mode = CONFIG_DEFAULT_SPI_MODE; + bus = simple_strtoul(argv[1], &cp, 10); + if (*cp == ':') { + cs = simple_strtoul(cp+1, &cp, 10); + } else { + cs = bus; + bus = CONFIG_DEFAULT_SPI_BUS; + } + if (*cp == '.'); + mode = simple_strtoul(cp+1, NULL, 10); + } if (argc >= 3) bitlen = simple_strtoul(argv[2], NULL, 10); if (argc >= 4) { @@ -91,7 +103,7 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if(tmp > 15) tmp -= ('a' - 'A'); if(tmp > 15) { - printf("Hex conversion error on %c, giving up.\n", *cp); + printf("Hex conversion error on %c\n", *cp); return 1; } if((j % 2) == 0) @@ -103,24 +115,20 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) }
if ((bitlen < 0) || (bitlen > (MAX_SPI_BYTES * 8))) { - printf("Invalid bitlen %d, giving up.\n", bitlen); + printf("Invalid bitlen %d\n", bitlen); return 1; }
- /* FIXME: Make these parameters run-time configurable */ - slave = spi_setup_slave(CONFIG_DEFAULT_SPI_BUS, device, 1000000, - CONFIG_DEFAULT_SPI_MODE); + slave = spi_setup_slave(bus, cs, 1000000, mode); if (!slave) { - printf("Invalid device %d, giving up.\n", device); + printf("Invalid device %d:%d\n", bus, cs); return 1; }
- debug ("spi chipsel = %08X\n", device); - spi_claim_bus(slave); if(spi_xfer(slave, bitlen, dout, din, SPI_XFER_BEGIN | SPI_XFER_END) != 0) { - printf("Error with the SPI transaction.\n"); + printf("Error during SPI transaction\n"); rcode = 1; } else { for(j = 0; j < ((bitlen + 7) / 8); j++) { @@ -138,9 +146,11 @@ int do_spi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
U_BOOT_CMD( sspi, 5, 1, do_spi, - "SPI utility commands", - "<device> <bit_len> <dout> - Send <bit_len> bits from <dout> out the SPI\n" - "<device> - Identifies the chip select of the device\n" + "SPI utility command", + "[<bus>:]<cs>[.<mode>] <bit_len> <dout> - Send and receive bits\n" + "<bus> - Identifies the SPI bus\n" + "<cs> - Identifies the chip select\n" + "<mode> - Identifies the SPI mode to use\n" "<bit_len> - Number of bits to send (base 10)\n" "<dout> - Hexadecimal string that gets sent" );

Dear Mike Frysinger,
Simple stuff already posted to the list a while ago. I'm pretty sure I have all the latest versions of these patches, but submitters should probably double check ...
You might want to look at my V5 Patch of SPI table driven probing and RAMTRON support. Its V4 with your requests executed:)
I posted that yesterday, I am still not happy with git send-email (or that with me), so you were not in the CC and the three e-Mails don't share the same Id.
Best Regards, Reinhard

On Wednesday, October 06, 2010 03:41:18 Reinhard Meyer wrote:
Dear Mike Frysinger,
Simple stuff already posted to the list a while ago. I'm pretty sure I have all the latest versions of these patches, but submitters should probably double check ...
You might want to look at my V5 Patch of SPI table driven probing and RAMTRON support. Its V4 with your requests executed:)
yes, i saw you posted that, but i wanted to get these fixes out first in case those didnt work out for the merge window -mike

The following changes since commit d6288664743cdd4824cb877ca424619c827c1256:
Merge branch 'master' of git://git.denx.de/u-boot-blackfin (2010-10-05 14:42:32 +0200)
are available in the git repository at:
git://www.denx.de/git/u-boot-blackfin.git sf
David Jander (1): sf: spansion: add support for S25FL032P parts
Graeme Smecher (1): sf: winbond: add support W25Q64 parts
Marc-André Hébert (1): sf: spansion: fixing erasing when sector size >64KiB
Reinhard Meyer (1): sspi: add options to specify bus and mode
common/cmd_spi.c | 40 +++++++++++++++++++++++++--------------- drivers/mtd/spi/spansion.c | 16 ++++++++++++---- drivers/mtd/spi/winbond.c | 9 +++++++++ 3 files changed, 46 insertions(+), 19 deletions(-)

Dear Mike Frysinger,
In message 1286503069-17423-1-git-send-email-vapier@gentoo.org you wrote:
The following changes since commit d6288664743cdd4824cb877ca424619c827c1256:
Merge branch 'master' of git://git.denx.de/u-boot-blackfin (2010-10-05 14:42:32 +0200)
are available in the git repository at:
git://www.denx.de/git/u-boot-blackfin.git sf
David Jander (1): sf: spansion: add support for S25FL032P parts
Graeme Smecher (1): sf: winbond: add support W25Q64 parts
Marc-André Hébert (1): sf: spansion: fixing erasing when sector size >64KiB
Reinhard Meyer (1): sspi: add options to specify bus and mode
common/cmd_spi.c | 40 +++++++++++++++++++++++++--------------- drivers/mtd/spi/spansion.c | 16 ++++++++++++---- drivers/mtd/spi/winbond.c | 9 +++++++++ 3 files changed, 46 insertions(+), 19 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk
participants (4)
-
Mike Frysinger
-
Reinhard Meyer
-
Sergei Shtylyov
-
Wolfgang Denk