* [U-Boot] [PATCH v3 2/4] sf: Place the sf calls in proper order [not found] <1371822543-7929-1-git-send-email-jaganna@xilinx.com> @ 2013-06-21 13:49 ` Jagannadha Sutradharudu Teki 2013-06-23 18:05 ` Jagan Teki 2013-06-21 13:49 ` [U-Boot] [PATCH v3 3/4] sf: Add debug messages on spi_flash_read_common Jagannadha Sutradharudu Teki 2013-06-21 13:49 ` [U-Boot] [PATCH v3 4/4] sf: Warn to use BAR for > 16MiB flashes Jagannadha Sutradharudu Teki 2 siblings, 1 reply; 6+ messages in thread From: Jagannadha Sutradharudu Teki @ 2013-06-21 13:49 UTC (permalink / raw) To: u-boot From: Jagannadha Sutradharudu Teki <jagannadha.sutradharudu-teki@xilinx.com> Placed the sf calls in proper order - erase/write/read Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com> --- Changes for v3: - Changes for v2: - drivers/mtd/spi/spi_flash.c | 184 ++++++++++++++++++++++---------------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 03cecef..a329850 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -68,6 +68,51 @@ int spi_flash_cmd_write(struct spi_slave *spi, const u8 *cmd, size_t cmd_len, return spi_flash_read_write(spi, cmd, cmd_len, data, NULL, data_len); } +int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout) +{ + struct spi_slave *spi = flash->spi; + unsigned long timebase; + int ret; + u8 status; + u8 check_status = 0x0; + u8 poll_bit = STATUS_WIP; + u8 cmd = flash->poll_cmd; + + if (cmd == CMD_FLAG_STATUS) { + poll_bit = STATUS_PEC; + check_status = poll_bit; + } + + ret = spi_xfer(spi, 8, &cmd, NULL, SPI_XFER_BEGIN); + if (ret) { + debug("SF: fail to read %s status register\n", + cmd == CMD_READ_STATUS ? "read" : "flag"); + return ret; + } + + timebase = get_timer(0); + do { + WATCHDOG_RESET(); + + ret = spi_xfer(spi, 8, NULL, &status, 0); + if (ret) + return -1; + + if ((status & poll_bit) == check_status) + break; + + } while (get_timer(timebase) < timeout); + + spi_xfer(spi, 0, NULL, NULL, SPI_XFER_END); + + if ((status & poll_bit) == check_status) + return 0; + + /* Timed out */ + debug("SF: time out!\n"); + return -1; +} + int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, size_t cmd_len, const void *buf, size_t buf_len) { @@ -109,6 +154,53 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, return ret; } +int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len) +{ + u32 erase_size; + u8 cmd[4]; + int ret = -1; + + erase_size = flash->sector_size; + if (offset % erase_size || len % erase_size) { + debug("SF: Erase offset/length not multiple of erase size\n"); + return -1; + } + + if (erase_size == 4096) + cmd[0] = CMD_ERASE_4K; + else + cmd[0] = CMD_ERASE_64K; + + while (len) { +#ifdef CONFIG_SPI_FLASH_BAR + u8 bank_sel; + + bank_sel = offset / SPI_FLASH_16MB_BOUN; + + ret = spi_flash_cmd_bankaddr_write(flash, bank_sel); + if (ret) { + debug("SF: fail to set bank%d\n", bank_sel); + return ret; + } +#endif + spi_flash_addr(offset, cmd); + + debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], + cmd[2], cmd[3], offset); + + ret = spi_flash_write_common(flash, cmd, sizeof(cmd), NULL, 0); + if (ret < 0) { + debug("SF: erase failed\n"); + break; + } + + offset += erase_size; + len -= erase_size; + } + + return ret; +} + int spi_flash_cmd_write_multi(struct spi_flash *flash, u32 offset, size_t len, const void *buf) { @@ -218,98 +310,6 @@ int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset, return ret; } -int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout) -{ - struct spi_slave *spi = flash->spi; - unsigned long timebase; - int ret; - u8 status; - u8 check_status = 0x0; - u8 poll_bit = STATUS_WIP; - u8 cmd = flash->poll_cmd; - - if (cmd == CMD_FLAG_STATUS) { - poll_bit = STATUS_PEC; - check_status = poll_bit; - } - - ret = spi_xfer(spi, 8, &cmd, NULL, SPI_XFER_BEGIN); - if (ret) { - debug("SF: fail to read %s status register\n", - cmd == CMD_READ_STATUS ? "read" : "flag"); - return ret; - } - - timebase = get_timer(0); - do { - WATCHDOG_RESET(); - - ret = spi_xfer(spi, 8, NULL, &status, 0); - if (ret) - return -1; - - if ((status & poll_bit) == check_status) - break; - - } while (get_timer(timebase) < timeout); - - spi_xfer(spi, 0, NULL, NULL, SPI_XFER_END); - - if ((status & poll_bit) == check_status) - return 0; - - /* Timed out */ - debug("SF: time out!\n"); - return -1; -} - -int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len) -{ - u32 erase_size; - u8 cmd[4]; - int ret = -1; - - erase_size = flash->sector_size; - if (offset % erase_size || len % erase_size) { - debug("SF: Erase offset/length not multiple of erase size\n"); - return -1; - } - - if (erase_size == 4096) - cmd[0] = CMD_ERASE_4K; - else - cmd[0] = CMD_ERASE_64K; - - while (len) { -#ifdef CONFIG_SPI_FLASH_BAR - u8 bank_sel; - - bank_sel = offset / SPI_FLASH_16MB_BOUN; - - ret = spi_flash_cmd_bankaddr_write(flash, bank_sel); - if (ret) { - debug("SF: fail to set bank%d\n", bank_sel); - return ret; - } -#endif - spi_flash_addr(offset, cmd); - - debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], - cmd[2], cmd[3], offset); - - ret = spi_flash_write_common(flash, cmd, sizeof(cmd), NULL, 0); - if (ret < 0) { - debug("SF: erase failed\n"); - break; - } - - offset += erase_size; - len -= erase_size; - } - - return ret; -} - int spi_flash_cmd_write_status(struct spi_flash *flash, u8 sr) { u8 cmd; -- 1.8.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v3 2/4] sf: Place the sf calls in proper order 2013-06-21 13:49 ` [U-Boot] [PATCH v3 2/4] sf: Place the sf calls in proper order Jagannadha Sutradharudu Teki @ 2013-06-23 18:05 ` Jagan Teki 0 siblings, 0 replies; 6+ messages in thread From: Jagan Teki @ 2013-06-23 18:05 UTC (permalink / raw) To: u-boot On 21-06-2013 19:19, Jagannadha Sutradharudu Teki wrote: > From: Jagannadha Sutradharudu Teki <jagannadha.sutradharudu-teki@xilinx.com> > > Placed the sf calls in proper order - erase/write/read > > Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com> > --- > Changes for v3: > - > Changes for v2: > - > > drivers/mtd/spi/spi_flash.c | 184 ++++++++++++++++++++++---------------------- > 1 file changed, 92 insertions(+), 92 deletions(-) > > diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c > index 03cecef..a329850 100644 > --- a/drivers/mtd/spi/spi_flash.c > +++ b/drivers/mtd/spi/spi_flash.c > @@ -68,6 +68,51 @@ int spi_flash_cmd_write(struct spi_slave *spi, const u8 *cmd, size_t cmd_len, > return spi_flash_read_write(spi, cmd, cmd_len, data, NULL, data_len); > } > > +int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout) > +{ > + struct spi_slave *spi = flash->spi; > + unsigned long timebase; > + int ret; > + u8 status; > + u8 check_status = 0x0; > + u8 poll_bit = STATUS_WIP; > + u8 cmd = flash->poll_cmd; > + > + if (cmd == CMD_FLAG_STATUS) { > + poll_bit = STATUS_PEC; > + check_status = poll_bit; > + } > + > + ret = spi_xfer(spi, 8, &cmd, NULL, SPI_XFER_BEGIN); > + if (ret) { > + debug("SF: fail to read %s status register\n", > + cmd == CMD_READ_STATUS ? "read" : "flag"); > + return ret; > + } > + > + timebase = get_timer(0); > + do { > + WATCHDOG_RESET(); > + > + ret = spi_xfer(spi, 8, NULL, &status, 0); > + if (ret) > + return -1; > + > + if ((status & poll_bit) == check_status) > + break; > + > + } while (get_timer(timebase) < timeout); > + > + spi_xfer(spi, 0, NULL, NULL, SPI_XFER_END); > + > + if ((status & poll_bit) == check_status) > + return 0; > + > + /* Timed out */ > + debug("SF: time out!\n"); > + return -1; > +} > + > int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, > size_t cmd_len, const void *buf, size_t buf_len) > { > @@ -109,6 +154,53 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, > return ret; > } > > +int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len) > +{ > + u32 erase_size; > + u8 cmd[4]; > + int ret = -1; > + > + erase_size = flash->sector_size; > + if (offset % erase_size || len % erase_size) { > + debug("SF: Erase offset/length not multiple of erase size\n"); > + return -1; > + } > + > + if (erase_size == 4096) > + cmd[0] = CMD_ERASE_4K; > + else > + cmd[0] = CMD_ERASE_64K; > + > + while (len) { > +#ifdef CONFIG_SPI_FLASH_BAR > + u8 bank_sel; > + > + bank_sel = offset / SPI_FLASH_16MB_BOUN; > + > + ret = spi_flash_cmd_bankaddr_write(flash, bank_sel); > + if (ret) { > + debug("SF: fail to set bank%d\n", bank_sel); > + return ret; > + } > +#endif > + spi_flash_addr(offset, cmd); > + > + debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], > + cmd[2], cmd[3], offset); > + > + ret = spi_flash_write_common(flash, cmd, sizeof(cmd), NULL, 0); > + if (ret < 0) { > + debug("SF: erase failed\n"); > + break; > + } > + > + offset += erase_size; > + len -= erase_size; > + } > + > + return ret; > +} > + > int spi_flash_cmd_write_multi(struct spi_flash *flash, u32 offset, > size_t len, const void *buf) > { > @@ -218,98 +310,6 @@ int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset, > return ret; > } > > -int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout) > -{ > - struct spi_slave *spi = flash->spi; > - unsigned long timebase; > - int ret; > - u8 status; > - u8 check_status = 0x0; > - u8 poll_bit = STATUS_WIP; > - u8 cmd = flash->poll_cmd; > - > - if (cmd == CMD_FLAG_STATUS) { > - poll_bit = STATUS_PEC; > - check_status = poll_bit; > - } > - > - ret = spi_xfer(spi, 8, &cmd, NULL, SPI_XFER_BEGIN); > - if (ret) { > - debug("SF: fail to read %s status register\n", > - cmd == CMD_READ_STATUS ? "read" : "flag"); > - return ret; > - } > - > - timebase = get_timer(0); > - do { > - WATCHDOG_RESET(); > - > - ret = spi_xfer(spi, 8, NULL, &status, 0); > - if (ret) > - return -1; > - > - if ((status & poll_bit) == check_status) > - break; > - > - } while (get_timer(timebase) < timeout); > - > - spi_xfer(spi, 0, NULL, NULL, SPI_XFER_END); > - > - if ((status & poll_bit) == check_status) > - return 0; > - > - /* Timed out */ > - debug("SF: time out!\n"); > - return -1; > -} > - > -int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len) > -{ > - u32 erase_size; > - u8 cmd[4]; > - int ret = -1; > - > - erase_size = flash->sector_size; > - if (offset % erase_size || len % erase_size) { > - debug("SF: Erase offset/length not multiple of erase size\n"); > - return -1; > - } > - > - if (erase_size == 4096) > - cmd[0] = CMD_ERASE_4K; > - else > - cmd[0] = CMD_ERASE_64K; > - > - while (len) { > -#ifdef CONFIG_SPI_FLASH_BAR > - u8 bank_sel; > - > - bank_sel = offset / SPI_FLASH_16MB_BOUN; > - > - ret = spi_flash_cmd_bankaddr_write(flash, bank_sel); > - if (ret) { > - debug("SF: fail to set bank%d\n", bank_sel); > - return ret; > - } > -#endif > - spi_flash_addr(offset, cmd); > - > - debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], > - cmd[2], cmd[3], offset); > - > - ret = spi_flash_write_common(flash, cmd, sizeof(cmd), NULL, 0); > - if (ret < 0) { > - debug("SF: erase failed\n"); > - break; > - } > - > - offset += erase_size; > - len -= erase_size; > - } > - > - return ret; > -} > - > int spi_flash_cmd_write_status(struct spi_flash *flash, u8 sr) > { > u8 cmd; > Applied to u-boot-spi/master -- Thanks, Jagan. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v3 3/4] sf: Add debug messages on spi_flash_read_common [not found] <1371822543-7929-1-git-send-email-jaganna@xilinx.com> 2013-06-21 13:49 ` [U-Boot] [PATCH v3 2/4] sf: Place the sf calls in proper order Jagannadha Sutradharudu Teki @ 2013-06-21 13:49 ` Jagannadha Sutradharudu Teki 2013-06-23 18:05 ` Jagan Teki 2013-06-21 13:49 ` [U-Boot] [PATCH v3 4/4] sf: Warn to use BAR for > 16MiB flashes Jagannadha Sutradharudu Teki 2 siblings, 1 reply; 6+ messages in thread From: Jagannadha Sutradharudu Teki @ 2013-06-21 13:49 UTC (permalink / raw) To: u-boot - Added debug's on spi_flash_read_common() - Added space Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com> --- Changes for v3: - Changes for v2: - drivers/mtd/spi/spi_flash.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index a329850..51142d8 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -254,8 +254,18 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, struct spi_slave *spi = flash->spi; int ret; - spi_claim_bus(spi); + ret = spi_claim_bus(flash->spi); + if (ret) { + debug("SF: unable to claim SPI bus\n"); + return ret; + } + ret = spi_flash_cmd_read(spi, cmd, cmd_len, data, data_len); + if (ret < 0) { + debug("SF: read cmd failed\n"); + return ret; + } + spi_release_bus(spi); return ret; -- 1.8.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v3 3/4] sf: Add debug messages on spi_flash_read_common 2013-06-21 13:49 ` [U-Boot] [PATCH v3 3/4] sf: Add debug messages on spi_flash_read_common Jagannadha Sutradharudu Teki @ 2013-06-23 18:05 ` Jagan Teki 0 siblings, 0 replies; 6+ messages in thread From: Jagan Teki @ 2013-06-23 18:05 UTC (permalink / raw) To: u-boot On 21-06-2013 19:19, Jagannadha Sutradharudu Teki wrote: > - Added debug's on spi_flash_read_common() > - Added space > > Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com> > --- > Changes for v3: > - > Changes for v2: > - > > drivers/mtd/spi/spi_flash.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c > index a329850..51142d8 100644 > --- a/drivers/mtd/spi/spi_flash.c > +++ b/drivers/mtd/spi/spi_flash.c > @@ -254,8 +254,18 @@ int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, > struct spi_slave *spi = flash->spi; > int ret; > > - spi_claim_bus(spi); > + ret = spi_claim_bus(flash->spi); > + if (ret) { > + debug("SF: unable to claim SPI bus\n"); > + return ret; > + } > + > ret = spi_flash_cmd_read(spi, cmd, cmd_len, data, data_len); > + if (ret < 0) { > + debug("SF: read cmd failed\n"); > + return ret; > + } > + > spi_release_bus(spi); > > return ret; > Applied to u-boot-spi/master -- Thanks, Jagan. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v3 4/4] sf: Warn to use BAR for > 16MiB flashes [not found] <1371822543-7929-1-git-send-email-jaganna@xilinx.com> 2013-06-21 13:49 ` [U-Boot] [PATCH v3 2/4] sf: Place the sf calls in proper order Jagannadha Sutradharudu Teki 2013-06-21 13:49 ` [U-Boot] [PATCH v3 3/4] sf: Add debug messages on spi_flash_read_common Jagannadha Sutradharudu Teki @ 2013-06-21 13:49 ` Jagannadha Sutradharudu Teki 2013-06-23 18:05 ` Jagan Teki 2 siblings, 1 reply; 6+ messages in thread From: Jagannadha Sutradharudu Teki @ 2013-06-21 13:49 UTC (permalink / raw) To: u-boot From: Jagannadha Sutradharudu Teki <jagannadha.sutradharudu-teki@xilinx.com> Warning for > 16MiB flashes to #define CONFIG_SPI_FLASH_BAR Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com> --- Changes for v3: - Changes for v2: - drivers/mtd/spi/spi_flash.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 51142d8..a468208 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -557,6 +557,12 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, if (flash->memory_map) printf(", mapped at %p", flash->memory_map); puts("\n"); +#ifndef CONFIG_SPI_FLASH_BAR + if (flash->size > SPI_FLASH_16MB_BOUN) { + puts("SF: Warning - Only lower 16MiB accessible,"); + puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); + } +#endif spi_release_bus(spi); -- 1.8.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v3 4/4] sf: Warn to use BAR for > 16MiB flashes 2013-06-21 13:49 ` [U-Boot] [PATCH v3 4/4] sf: Warn to use BAR for > 16MiB flashes Jagannadha Sutradharudu Teki @ 2013-06-23 18:05 ` Jagan Teki 0 siblings, 0 replies; 6+ messages in thread From: Jagan Teki @ 2013-06-23 18:05 UTC (permalink / raw) To: u-boot On 21-06-2013 19:19, Jagannadha Sutradharudu Teki wrote: > From: Jagannadha Sutradharudu Teki <jagannadha.sutradharudu-teki@xilinx.com> > > Warning for > 16MiB flashes to #define CONFIG_SPI_FLASH_BAR > > Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com> > --- > Changes for v3: > - > Changes for v2: > - > > drivers/mtd/spi/spi_flash.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c > index 51142d8..a468208 100644 > --- a/drivers/mtd/spi/spi_flash.c > +++ b/drivers/mtd/spi/spi_flash.c > @@ -557,6 +557,12 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, > if (flash->memory_map) > printf(", mapped at %p", flash->memory_map); > puts("\n"); > +#ifndef CONFIG_SPI_FLASH_BAR > + if (flash->size > SPI_FLASH_16MB_BOUN) { > + puts("SF: Warning - Only lower 16MiB accessible,"); > + puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); > + } > +#endif > > spi_release_bus(spi); > > Applied to u-boot-spi/master -- Thanks, Jagan. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-06-23 18:05 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1371822543-7929-1-git-send-email-jaganna@xilinx.com>
2013-06-21 13:49 ` [U-Boot] [PATCH v3 2/4] sf: Place the sf calls in proper order Jagannadha Sutradharudu Teki
2013-06-23 18:05 ` Jagan Teki
2013-06-21 13:49 ` [U-Boot] [PATCH v3 3/4] sf: Add debug messages on spi_flash_read_common Jagannadha Sutradharudu Teki
2013-06-23 18:05 ` Jagan Teki
2013-06-21 13:49 ` [U-Boot] [PATCH v3 4/4] sf: Warn to use BAR for > 16MiB flashes Jagannadha Sutradharudu Teki
2013-06-23 18:05 ` Jagan Teki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox