[U-Boot] [PATCH 3/4] spi: sf: Support byte program for sst spi flash

Bin Meng bmeng.cn at gmail.com
Wed Dec 10 09:10:32 CET 2014


Hi Jagan,

On Tue, Dec 9, 2014 at 11:29 PM, Jagannadha Sutradharudu Teki
<jagannadh.teki at gmail.com> wrote:
> From: Bin Meng <bmeng.cn at gmail.com>
>
> Currently if SST flash advertises SST_WP flag in the params table
> the word program command (ADh) with auto address increment will be
> used for the flash write op. However some SPI controllers do not
> support the word program command (like the Intel ICH 7), the byte
> programm command (02h) has to be used.
>
> A new TX operation mode SPI_OPM_TX_BP is introduced for such SPI
> controller to use byte program op for SST flash.

This paragraph should be removed from the commit message. The
SPI_OPM_TX_BP was introduced in my original patch, but not in this new
patch. You may need move this commit message to your patch#4 as
SPI_OPM_TX_BP is moved to there.

> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
> Acked-by: Simon Glass <sjg at chromium.org>
> Tested-by: Simon Glass <sjg at chromium.org>
> ---
>  drivers/mtd/spi/sf_internal.h |  2 ++
>  drivers/mtd/spi/sf_ops.c      | 31 +++++++++++++++++++++++++++++++
>  2 files changed, 33 insertions(+)
>
> diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
> index 7218e69..fb53cb0 100644
> --- a/drivers/mtd/spi/sf_internal.h
> +++ b/drivers/mtd/spi/sf_internal.h
> @@ -110,6 +110,8 @@ enum {
>
>  int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len,
>                 const void *buf);
> +int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
> +               const void *buf);
>  #endif
>
>  /**
> diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
> index 759231f..34bc54e 100644
> --- a/drivers/mtd/spi/sf_ops.c
> +++ b/drivers/mtd/spi/sf_ops.c
> @@ -517,4 +517,35 @@ int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len,
>         spi_release_bus(flash->spi);
>         return ret;
>  }
> +
> +int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
> +               const void *buf)
> +{
> +       size_t actual;
> +       int ret;
> +
> +       ret = spi_claim_bus(flash->spi);
> +       if (ret) {
> +               debug("SF: Unable to claim SPI bus\n");
> +               return ret;
> +       }
> +
> +       for (actual = 0; actual < len; actual++) {
> +               ret = sst_byte_write(flash, offset, buf + actual);
> +               if (ret) {
> +                       debug("SF: sst byte program failed\n");
> +                       break;
> +               }
> +               offset++;
> +       }
> +
> +       if (!ret)
> +               ret = spi_flash_cmd_write_disable(flash);
> +
> +       debug("SF: sst: program %s %zu bytes @ 0x%zx\n",
> +             ret ? "failure" : "success", len, offset - actual);
> +
> +       spi_release_bus(flash->spi);
> +       return ret;
> +}
>  #endif
> --
> 1.9.1
>

Regards,
Bin


More information about the U-Boot mailing list