From 6d878f697420922b8c85d9562150d6bf00ab04ac Mon Sep 17 00:00:00 2001 From: T Karthik Reddy Date: Tue, 27 Jul 2021 08:35:10 -0600 Subject: [PATCH] spi: mtd: Use split reads if multi-die flag is set Some flash devices have multiple dies in it & has die cross over issue. When SPI_NOR_MULTI_DIE flag is set in flash id table use it to enable split reads to avoid above issue. Define SPI_NOR_MULTI_DIE new flag to flash id flags. Remove SPI_FLASH_SPLIT_READ config and related code from the zynq and zynqmp qspi drivers as it is redundant. Signed-off-by: T Karthik Reddy Signed-off-by: Ashok Reddy Soma --- arch/arm/Kconfig | 1 - drivers/mtd/spi/sf_internal.h | 1 + drivers/mtd/spi/spi-nor-core.c | 3 +++ drivers/spi/zynq_qspi.c | 4 +--- drivers/spi/zynqmp_gqspi.c | 3 --- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 90a78e3e120..fbe90875ae4 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1154,7 +1154,6 @@ config ARCH_ZYNQMP select DM_USB if USB select FIRMWARE select OF_CONTROL - select SPI_FLASH_SPLIT_READ if DM_SPI_FLASH select SPL_BOARD_INIT if SPL select SPL_CLK if SPL select SPL_DM if SPL diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h index a074338a3dd..97060b7e7cb 100644 --- a/drivers/mtd/spi/sf_internal.h +++ b/drivers/mtd/spi/sf_internal.h @@ -75,6 +75,7 @@ struct flash_info { #define USE_CLSR BIT(14) /* use CLSR command */ #define SPI_NOR_HAS_SST26LOCK BIT(15) /* Flash supports lock/unlock via BPR */ #define SPI_NOR_OCTAL_READ BIT(16) /* Flash supports Octal Read */ +#define SPI_NOR_MULTI_DIE BIT(17) /* Flash has multi dies & need split reads*/ }; extern const struct flash_info spi_nor_ids[]; diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c index 21e4300ceda..e0c664278ff 100644 --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c @@ -3042,6 +3042,9 @@ int spi_nor_scan(struct spi_nor *nor) if (info->flags & SPI_NOR_NO_ERASE) mtd->flags |= MTD_NO_ERASE; + if (info->flags & SPI_NOR_MULTI_DIE) + nor->spi->multi_die = true; + nor->page_size = params.page_size; mtd->writebufsize = nor->page_size; diff --git a/drivers/spi/zynq_qspi.c b/drivers/spi/zynq_qspi.c index 1a103ee20f7..edaeb09b3c2 100644 --- a/drivers/spi/zynq_qspi.c +++ b/drivers/spi/zynq_qspi.c @@ -289,9 +289,7 @@ static int zynq_qspi_child_pre_probe(struct udevice *bus) slave->option = priv->is_dual; slave->dio = priv->is_dio; slave->mode = plat->tx_rx_mode; -#ifdef CONFIG_SPI_FLASH_SPLIT_READ - slave->multi_die = 1; -#endif + return 0; } diff --git a/drivers/spi/zynqmp_gqspi.c b/drivers/spi/zynqmp_gqspi.c index 0a2b22ec795..21cb2c0784b 100644 --- a/drivers/spi/zynqmp_gqspi.c +++ b/drivers/spi/zynqmp_gqspi.c @@ -442,9 +442,6 @@ static int zynqmp_qspi_child_pre_probe(struct udevice *bus) struct zynqmp_qspi_priv *priv = dev_get_priv(bus->parent); slave->option = priv->is_dual; -#ifdef CONFIG_SPI_FLASH_SPLIT_READ - slave->multi_die = 1; -#endif slave->bytemode = SPI_4BYTE_MODE; return 0; -- 2.47.3