[U-Boot] [PATCH v2 5/7] sf: Make flash->flags use for generic usage
Bin Meng
bmeng.cn at gmail.com
Tue Aug 18 09:53:27 CEST 2015
Hi Jagan,
On Mon, Aug 17, 2015 at 6:32 PM, Jagan Teki <jteki at openedev.com> wrote:
> Use the flash->flags for generic usage, not only for dm-spi-flash,
> this will be used for future flag additions.
>
> Signed-off-by: Jagan Teki <jteki at openedev.com>
> Cc: Bin Meng <bmeng.cn at gmail.com>
> ---
> drivers/mtd/spi/sf_internal.h | 4 ++++
> drivers/mtd/spi/sf_probe.c | 6 ++----
> include/spi_flash.h | 4 ++--
> 3 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
> index 9fb5557..e97c716 100644
> --- a/drivers/mtd/spi/sf_internal.h
> +++ b/drivers/mtd/spi/sf_internal.h
> @@ -47,6 +47,10 @@ enum {
>
> #define SST_WR (SST_BP | SST_WP)
>
> +enum spi_nor_option_flags {
> + SNOR_F_SST_WR = (1 << 0),
> +};
> +
> #define SPI_FLASH_3B_ADDR_LEN 3
> #define SPI_FLASH_CMD_LEN (1 + SPI_FLASH_3B_ADDR_LEN)
> #define SPI_FLASH_16MB_BOUN 0x1000000
> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
> index 0483bed..1de2bbb 100644
> --- a/drivers/mtd/spi/sf_probe.c
> +++ b/drivers/mtd/spi/sf_probe.c
> @@ -164,15 +164,13 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode,
> flash->name = params->name;
> flash->memory_map = spi->memory_map;
> flash->dual_flash = flash->spi->option;
> -#ifdef CONFIG_DM_SPI_FLASH
> - flash->flags = params->flags;
> -#endif
>
> /* Assign spi_flash ops */
> #ifndef CONFIG_DM_SPI_FLASH
> flash->write = spi_flash_cmd_write_ops;
> #if defined(CONFIG_SPI_FLASH_SST)
> if (params->flags & SST_WR) {
> + flash->flags |= SNOR_F_SST_WR;
> if (flash->spi->op_mode_tx & SPI_OPM_TX_BP)
> flash->write = sst_write_bp;
> else
> @@ -467,7 +465,7 @@ int spi_flash_std_write(struct udevice *dev, u32 offset, size_t len,
> struct spi_flash *flash = dev_get_uclass_priv(dev);
>
> #if defined(CONFIG_SPI_FLASH_SST)
> - if (flash->flags & SST_WR) {
> + if (flash->flags & SNOR_F_SST_WR) {
> if (flash->spi->op_mode_tx & SPI_OPM_TX_BP)
> return sst_write_bp(flash, offset, len, buf);
> else
> diff --git a/include/spi_flash.h b/include/spi_flash.h
> index 3b2d555..8d85468 100644
> --- a/include/spi_flash.h
> +++ b/include/spi_flash.h
> @@ -38,10 +38,10 @@ struct spi_slave;
> *
> * @spi: SPI slave
> * @dev: SPI flash device
> - * @flags: Indication of spi flash flags
> * @name: Name of SPI flash
> * @dual_flash: Indicates dual flash memories - dual stacked, parallel
> * @shift: Flash shift useful in dual parallel
> + * @flags: Indication of spi flash flags
> * @size: Total flash size
> * @page_size: Write (page) size
> * @sector_size: Sector size
> @@ -67,11 +67,11 @@ struct spi_flash {
> struct spi_slave *spi;
> #ifdef CONFIG_DM_SPI_FLASH
> struct udevice *dev;
> - u16 flags;
> #endif
> const char *name;
> u8 dual_flash;
> u8 shift;
> + u16 flags;
>
> u32 size;
> u32 page_size;
> --
This is the commit that breaks the SF flash on Intel Crown Bay. I've
tested like this:
Power-on the board, type "setenv testcase whatever" and "saveenv", do
a "reset", and check if the "testcase" variable is there.
Unfortunately with this commit, sometimes my board does not even boot
after "reset". I checked that if must be the SF driver writes the
wrong places into the flash which corrupts the codes.
Regards,
Bin
More information about the U-Boot
mailing list