]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
spi: spi_flash: Handle dualparallel case for macronix flash
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Fri, 13 Apr 2018 06:38:54 +0000 (12:08 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 23 Apr 2018 06:57:39 +0000 (08:57 +0200)
This patch handles the dual parallel case while
preserving the QEB bit for macronix flash devices.
This fixes the issue of DMA timeout during probe
of macronix flash devices in dual parallel mode.

Signed-off-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/mtd/spi/spi_flash.c

index e44cdb7e8be4d4a77add1cad5eb8159991abae76..15d91a7f7e60e07eb5ff32552420ba828e056488 100644 (file)
@@ -1349,10 +1349,24 @@ int spi_flash_scan(struct spi_flash *flash)
           (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_SST) ||
           (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX)) {
                u8 sr = 0;
+#ifdef CONFIG_SPI_GENERIC
+               u8 sr_up = 0;
+#endif
 
                if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX) {
+#ifdef CONFIG_SPI_GENERIC
+                       if (flash->spi->option & SF_DUAL_PARALLEL_FLASH)
+                               flash->spi->flags |= SPI_XFER_LOWER;
+#endif
                        read_sr(flash, &sr);
                        sr &= STATUS_QEB_MXIC;
+#ifdef CONFIG_SPI_GENERIC
+                       if (flash->spi->option & SF_DUAL_PARALLEL_FLASH) {
+                               flash->spi->flags |= SPI_XFER_UPPER;
+                               read_sr(flash, &sr_up);
+                               sr_up &= STATUS_QEB_MXIC;
+                       }
+#endif
                }
 
 #ifdef CONFIG_SPI_GENERIC
@@ -1364,7 +1378,7 @@ int spi_flash_scan(struct spi_flash *flash)
 #ifdef CONFIG_SPI_GENERIC
                if (flash->dual_flash & SF_DUAL_PARALLEL_FLASH) {
                        flash->spi->flags |= SPI_XFER_UPPER;
-                       write_sr(flash, 0);
+                       write_sr(flash, sr_up);
                }
 #endif
        }