]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
spi: mtd: Use split reads if multi-die flag is set
authorT Karthik Reddy <t.karthik.reddy@xilinx.com>
Tue, 27 Jul 2021 14:35:10 +0000 (08:35 -0600)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 28 Jul 2021 07:07:04 +0000 (09:07 +0200)
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 <t.karthik.reddy@xilinx.com>
Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>
arch/arm/Kconfig
drivers/mtd/spi/sf_internal.h
drivers/mtd/spi/spi-nor-core.c
drivers/spi/zynq_qspi.c
drivers/spi/zynqmp_gqspi.c

index 90a78e3e12053a278f11aa397e0ddb5c6a30ec17..fbe90875ae4e25f8d4748a7132dff72b0f954977 100644 (file)
@@ -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
index a074338a3dd187e4170457a5da0cbb1685415428..97060b7e7cb0732ca340a1f399fe0c4c56117c4c 100644 (file)
@@ -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[];
index 21e4300ceda40d1a95072cd3af58ff7a6405b08f..e0c664278ff8d6b732cc5f924b9a904bb11f53f7 100644 (file)
@@ -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;
 
index 1a103ee20f756416b96f249010aabdb18378ab17..edaeb09b3c28c06ad27117c37955b3fe4bcbbb1e 100644 (file)
@@ -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;
 }
 
index 0a2b22ec795d2200f51499cc48276490954c783e..21cb2c0784b0d162ec46a09ff49a334757fc4f07 100644 (file)
@@ -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;