mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
mtd: spi-nor: Add spi flash lock config option
Provide an explicit configuration option to disable default "lock" of any flash chip which supports locking. By disabling the lock config will save some amount of memory and also don't expose the lock functionality to the users i.e., via sf protect command. Signed-off-by: Venkatesh Yadav Abbarapu <venkatesh.abbarapu@amd.com> Link: https://lore.kernel.org/r/20231003031715.5343-2-venkatesh.abbarapu@amd.com Signed-off-by: Michal Simek <michal.simek@amd.com>
This commit is contained in:
parent
bd9ff681bd
commit
188c803d08
3 changed files with 17 additions and 2 deletions
4
cmd/sf.c
4
cmd/sf.c
|
@ -604,7 +604,7 @@ static int do_spi_flash(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
ret = do_spi_flash_read_write(argc, argv);
|
ret = do_spi_flash_read_write(argc, argv);
|
||||||
else if (strcmp(cmd, "erase") == 0)
|
else if (strcmp(cmd, "erase") == 0)
|
||||||
ret = do_spi_flash_erase(argc, argv);
|
ret = do_spi_flash_erase(argc, argv);
|
||||||
else if (strcmp(cmd, "protect") == 0)
|
else if (IS_ENABLED(CONFIG_SPI_FLASH_LOCK) && strcmp(cmd, "protect") == 0)
|
||||||
ret = do_spi_protect(argc, argv);
|
ret = do_spi_protect(argc, argv);
|
||||||
else if (IS_ENABLED(CONFIG_CMD_SF_TEST) && !strcmp(cmd, "test"))
|
else if (IS_ENABLED(CONFIG_CMD_SF_TEST) && !strcmp(cmd, "test"))
|
||||||
ret = do_spi_flash_test(argc, argv);
|
ret = do_spi_flash_test(argc, argv);
|
||||||
|
@ -629,8 +629,10 @@ U_BOOT_LONGHELP(sf,
|
||||||
"sf update addr offset|partition len - erase and write `len' bytes from memory\n"
|
"sf update addr offset|partition len - erase and write `len' bytes from memory\n"
|
||||||
" at `addr' to flash at `offset'\n"
|
" at `addr' to flash at `offset'\n"
|
||||||
" or to start of mtd `partition'\n"
|
" or to start of mtd `partition'\n"
|
||||||
|
#ifdef CONFIG_SPI_FLASH_LOCK
|
||||||
"sf protect lock/unlock sector len - protect/unprotect 'len' bytes starting\n"
|
"sf protect lock/unlock sector len - protect/unprotect 'len' bytes starting\n"
|
||||||
" at address 'sector'"
|
" at address 'sector'"
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_CMD_SF_TEST
|
#ifdef CONFIG_CMD_SF_TEST
|
||||||
"\nsf test offset len - run a very basic destructive test"
|
"\nsf test offset len - run a very basic destructive test"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -134,6 +134,13 @@ config SPI_FLASH_BAR
|
||||||
Bank/Extended address registers are used to access the flash
|
Bank/Extended address registers are used to access the flash
|
||||||
which has size > 16MiB in 3-byte addressing.
|
which has size > 16MiB in 3-byte addressing.
|
||||||
|
|
||||||
|
config SPI_FLASH_LOCK
|
||||||
|
bool "Enable the Locking feature"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Enable the SPI flash lock support. By default this is set to y.
|
||||||
|
If you intend not to use the lock support you should say n here.
|
||||||
|
|
||||||
config SPI_FLASH_UNLOCK_ALL
|
config SPI_FLASH_UNLOCK_ALL
|
||||||
bool "Unlock the entire SPI flash on u-boot startup"
|
bool "Unlock the entire SPI flash on u-boot startup"
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -1100,6 +1100,7 @@ static int spansion_erase_non_uniform(struct spi_nor *nor, u32 addr,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_SPI_FLASH_LOCK)
|
||||||
#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
|
#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
|
||||||
/* Write status register and ensure bits in mask match written values */
|
/* Write status register and ensure bits in mask match written values */
|
||||||
static int write_sr_and_check(struct spi_nor *nor, u8 status_new, u8 mask)
|
static int write_sr_and_check(struct spi_nor *nor, u8 status_new, u8 mask)
|
||||||
|
@ -1387,6 +1388,7 @@ static int stm_is_unlocked(struct spi_nor *nor, loff_t ofs, uint64_t len)
|
||||||
return stm_is_unlocked_sr(nor, ofs, len, status);
|
return stm_is_unlocked_sr(nor, ofs, len, status);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SPI_FLASH_STMICRO */
|
#endif /* CONFIG_SPI_FLASH_STMICRO */
|
||||||
|
#endif
|
||||||
|
|
||||||
static const struct flash_info *spi_nor_read_id(struct spi_nor *nor)
|
static const struct flash_info *spi_nor_read_id(struct spi_nor *nor)
|
||||||
{
|
{
|
||||||
|
@ -1462,6 +1464,7 @@ read_err:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_SPI_FLASH_LOCK)
|
||||||
#ifdef CONFIG_SPI_FLASH_SST
|
#ifdef CONFIG_SPI_FLASH_SST
|
||||||
/*
|
/*
|
||||||
* sst26 flash series has its own block protection implementation:
|
* sst26 flash series has its own block protection implementation:
|
||||||
|
@ -1730,6 +1733,8 @@ sst_write_err:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write an address range to the nor chip. Data must be written in
|
* Write an address range to the nor chip. Data must be written in
|
||||||
* FLASH_PAGESIZE chunks. The address range may be any size provided
|
* FLASH_PAGESIZE chunks. The address range may be any size provided
|
||||||
|
@ -4104,6 +4109,7 @@ int spi_nor_scan(struct spi_nor *nor)
|
||||||
mtd->_read = spi_nor_read;
|
mtd->_read = spi_nor_read;
|
||||||
mtd->_write = spi_nor_write;
|
mtd->_write = spi_nor_write;
|
||||||
|
|
||||||
|
#if defined(CONFIG_SPI_FLASH_LOCK)
|
||||||
#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
|
#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
|
||||||
/* NOR protection support for STmicro/Micron chips and similar */
|
/* NOR protection support for STmicro/Micron chips and similar */
|
||||||
if (JEDEC_MFR(info) == SNOR_MFR_ST ||
|
if (JEDEC_MFR(info) == SNOR_MFR_ST ||
|
||||||
|
@ -4127,7 +4133,7 @@ int spi_nor_scan(struct spi_nor *nor)
|
||||||
nor->flash_is_unlocked = sst26_is_unlocked;
|
nor->flash_is_unlocked = sst26_is_unlocked;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
if (info->flags & USE_FSR)
|
if (info->flags & USE_FSR)
|
||||||
nor->flags |= SNOR_F_USE_FSR;
|
nor->flags |= SNOR_F_USE_FSR;
|
||||||
if (info->flags & SPI_NOR_HAS_TB)
|
if (info->flags & SPI_NOR_HAS_TB)
|
||||||
|
|
Loading…
Reference in a new issue