
Hi Bin,
On 18 August 2015 at 13:23, Bin Meng bmeng.cn@gmail.com wrote:
Hi Jagan,
On Mon, Aug 17, 2015 at 6:32 PM, Jagan Teki jteki@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@openedev.com Cc: Bin Meng bmeng.cn@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.
Sorry, I couldn't find any wrong in this commit.
We assigned directly params (SST_WR, for SST flash's) flags to flash flags and check the param flags in dm-spi-write calls. So instead of that this commit assigns local macro to flash flags if SST_WR and this will check in dm-spi-write calls instead of param flags.
Could you please provide any command error info say sf probe, sf erase/write
thanks!