BY25Q256FS is a 256 Mb SPI NOR Flash chip. This Flash supports the SFDP standard. Since SFDP is optional in u-boot, we still describe all features it supports in the flash info table. This change has been tested on Mediatek MT7981 platform. SFDP dump:
00000000 53 46 44 50 08 01 02 ff 00 07 01 10 30 00 00 ff |SFDP........0...| 00000010 68 00 01 03 90 00 00 ff 84 01 01 02 c0 00 00 ff |h...............| 00000020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000030 e5 20 fb ff ff ff ff 0f 44 eb 08 6b 08 3b 42 bb |. ......D..k.;B.| 00000040 fe ff ff ff ff ff 00 ff ff ff 44 eb 0c 20 0f 52 |..........D.. .R| 00000050 10 d8 00 ff 22 4a 05 ff 82 e9 14 ce ed 61 06 33 |...."J.......a.3| 00000060 7a 75 7a 75 07 b3 d5 5c 11 42 44 ff 88 50 00 01 |zuzu...\.BD..P..| 00000070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 00000090 00 36 00 27 9e f9 77 64 fc cb ff ff ff ff ff ff |.6.'..wd........| 000000a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 000000b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 000000c0 ff 8e 00 fe 21 5c dc ff |....!\..| Signed-off-by: Shiji Yang <[email protected]> --- drivers/mtd/spi/Kconfig | 5 +++++ drivers/mtd/spi/spi-nor-core.c | 4 +++- drivers/mtd/spi/spi-nor-ids.c | 7 +++++++ drivers/mtd/spi/spi-nor-tiny.c | 4 +++- include/linux/mtd/spi-nor.h | 1 + 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi/Kconfig b/drivers/mtd/spi/Kconfig index ca60a425ba3..68f81079715 100644 --- a/drivers/mtd/spi/Kconfig +++ b/drivers/mtd/spi/Kconfig @@ -156,6 +156,11 @@ config SPI_FLASH_ATMEL help Add support for various Atmel SPI flash chips (AT45xxx and AT25xxx) +config SPI_FLASH_BOYAMICRO + bool "BoyaMicro SPI flash support" + help + Add support for various BoyaMicro SPI flash chips (BY25xxx) + config SPI_FLASH_EON bool "EON SPI flash support" help diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c index 5fa7ba27ae5..1a844057d9f 100644 --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c @@ -193,7 +193,8 @@ struct sfdp_header { #define SNOR_SR1_BIT6_QUAD_ENABLE #endif -#if IS_ENABLED(CONFIG_SPI_FLASH_SPANSION) || \ +#if IS_ENABLED(CONFIG_SPI_FLASH_BOYAMICRO) || \ + IS_ENABLED(CONFIG_SPI_FLASH_SPANSION) || \ IS_ENABLED(CONFIG_SPI_FLASH_WINBOND) #define SNOR_SR2_BIT1_QUAD_ENABLE #endif @@ -765,6 +766,7 @@ static int set_4byte(struct spi_nor *nor, const struct flash_info *info, /* Some Micron need WREN command; all will accept it */ need_wren = true; fallthrough; + case SNOR_MFR_BOYAMICRO: case SNOR_MFR_ISSI: case SNOR_MFR_MACRONIX: case SNOR_MFR_WINBOND: diff --git a/drivers/mtd/spi/spi-nor-ids.c b/drivers/mtd/spi/spi-nor-ids.c index b6a07fa9063..1bda2854ade 100644 --- a/drivers/mtd/spi/spi-nor-ids.c +++ b/drivers/mtd/spi/spi-nor-ids.c @@ -77,6 +77,13 @@ const struct flash_info spi_nor_ids[] = { { INFO("at25sl321", 0x1f4216, 0, 64 * 1024, 64, SECT_4K) }, { INFO("at26df081a", 0x1f4501, 0, 64 * 1024, 16, SECT_4K) }, #endif +#ifdef CONFIG_SPI_FLASH_BOYAMICRO /* BoyaMicro */ + { + INFO("BY25Q256FS", 0x684919, 0, 64 * 1024, 512, + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | + SPI_NOR_4B_OPCODES | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) + }, +#endif #ifdef CONFIG_SPI_FLASH_EON /* EON */ /* EON -- en25xxx */ { INFO("en25q80b", 0x1c3014, 0, 64 * 1024, 16, SECT_4K) }, diff --git a/drivers/mtd/spi/spi-nor-tiny.c b/drivers/mtd/spi/spi-nor-tiny.c index dde290ca6a4..5d8cee3f1c6 100644 --- a/drivers/mtd/spi/spi-nor-tiny.c +++ b/drivers/mtd/spi/spi-nor-tiny.c @@ -40,7 +40,8 @@ #define SNOR_SR1_BIT6_QUAD_ENABLE #endif -#if IS_ENABLED(CONFIG_SPI_FLASH_SPANSION) || \ +#if IS_ENABLED(CONFIG_SPI_FLASH_BOYAMICRO) || \ + IS_ENABLED(CONFIG_SPI_FLASH_SPANSION) || \ IS_ENABLED(CONFIG_SPI_FLASH_WINBOND) #define SNOR_SR2_BIT1_QUAD_ENABLE #endif @@ -229,6 +230,7 @@ static inline int set_4byte(struct spi_nor *nor, const struct flash_info *info, /* Some Micron need WREN command; all will accept it */ need_wren = true; fallthrough; + case SNOR_MFR_BOYAMICRO: case SNOR_MFR_MACRONIX: case SNOR_MFR_WINBOND: if (need_wren) diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index 4eef4ab0488..8768d794592 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -23,6 +23,7 @@ * Sometimes these are the same as CFI IDs, but sometimes they aren't. */ #define SNOR_MFR_ATMEL CFI_MFR_ATMEL +#define SNOR_MFR_BOYAMICRO 0x68 #define SNOR_MFR_GIGADEVICE 0xc8 #define SNOR_MFR_INTEL CFI_MFR_INTEL #define SNOR_MFR_ST CFI_MFR_ST /* ST Micro <--> Micron */ -- 2.51.0

