From 2466b04a5aba116df977697841d9e6fff27ccd68 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Wed, 22 Oct 2014 14:16:18 +0000 Subject: [PATCH] bcm53xx: backport spi-nor patches from 3.18-rc1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Miłecki SVN-Revision: 43030 --- .../002-mtd-spi-nor-from-3.18.patch | 106 ++++++++++++++++++ .../002-mtd-spi-nor-queued-for-3.18.patch | 39 ------- ...-for-struct-flash_platform_data-into.patch | 52 --------- ...Kconfig-option-to-disable-4K-sectors.patch | 44 -------- ...ash-new-driver-for-SPI-flahes-on-Bro.patch | 2 +- 5 files changed, 107 insertions(+), 136 deletions(-) create mode 100644 target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-from-3.18.patch delete mode 100644 target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-queued-for-3.18.patch delete mode 100644 target/linux/bcm53xx/patches-3.14/400-mtd-move-support-for-struct-flash_platform_data-into.patch delete mode 100644 target/linux/bcm53xx/patches-3.14/401-mtd-spi-nor-add-Kconfig-option-to-disable-4K-sectors.patch diff --git a/target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-from-3.18.patch b/target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-from-3.18.patch new file mode 100644 index 0000000000..1d837032d6 --- /dev/null +++ b/target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-from-3.18.patch @@ -0,0 +1,106 @@ +--- a/drivers/mtd/spi-nor/spi-nor.c ++++ b/drivers/mtd/spi-nor/spi-nor.c +@@ -611,6 +611,7 @@ const struct spi_device_id spi_nor_ids[] + { "m25px32-s0", INFO(0x207316, 0, 64 * 1024, 64, SECT_4K) }, + { "m25px32-s1", INFO(0x206316, 0, 64 * 1024, 64, SECT_4K) }, + { "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) }, ++ { "m25px80", INFO(0x207114, 0, 64 * 1024, 16, 0) }, + + /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */ + { "w25x10", INFO(0xef3011, 0, 64 * 1024, 2, SECT_4K) }, +@@ -623,7 +624,6 @@ const struct spi_device_id spi_nor_ids[] + { "w25q32dw", INFO(0xef6016, 0, 64 * 1024, 64, SECT_4K) }, + { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) }, + { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) }, +- { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) }, + { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) }, + { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) }, + { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) }, +@@ -671,11 +671,6 @@ static const struct spi_device_id *spi_n + return ERR_PTR(-ENODEV); + } + +-static const struct spi_device_id *jedec_probe(struct spi_nor *nor) +-{ +- return nor->read_id(nor); +-} +- + static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len, + size_t *retlen, u_char *buf) + { +@@ -920,7 +915,6 @@ int spi_nor_scan(struct spi_nor *nor, co + enum read_mode mode) + { + struct flash_info *info; +- struct flash_platform_data *data; + struct device *dev = nor->dev; + struct mtd_info *mtd = nor->mtd; + struct device_node *np = dev->of_node; +@@ -931,34 +925,12 @@ int spi_nor_scan(struct spi_nor *nor, co + if (ret) + return ret; + +- /* Platform data helps sort out which chip type we have, as +- * well as how this board partitions it. If we don't have +- * a chip ID, try the JEDEC id commands; they'll work for most +- * newer chips, even if we don't recognize the particular chip. +- */ +- data = dev_get_platdata(dev); +- if (data && data->type) { +- const struct spi_device_id *plat_id; +- +- for (i = 0; i < ARRAY_SIZE(spi_nor_ids) - 1; i++) { +- plat_id = &spi_nor_ids[i]; +- if (strcmp(data->type, plat_id->name)) +- continue; +- break; +- } +- +- if (i < ARRAY_SIZE(spi_nor_ids) - 1) +- id = plat_id; +- else +- dev_warn(dev, "unrecognized id %s\n", data->type); +- } +- + info = (void *)id->driver_data; + + if (info->jedec_id) { + const struct spi_device_id *jid; + +- jid = jedec_probe(nor); ++ jid = nor->read_id(nor); + if (IS_ERR(jid)) { + return PTR_ERR(jid); + } else if (jid != id) { +@@ -990,11 +962,8 @@ int spi_nor_scan(struct spi_nor *nor, co + write_sr(nor, 0); + } + +- if (data && data->name) +- mtd->name = data->name; +- else ++ if (!mtd->name) + mtd->name = dev_name(dev); +- + mtd->type = MTD_NORFLASH; + mtd->writesize = 1; + mtd->flags = MTD_CAP_NORFLASH; +@@ -1018,6 +987,7 @@ int spi_nor_scan(struct spi_nor *nor, co + nor->wait_till_ready == spi_nor_wait_till_ready) + nor->wait_till_ready = spi_nor_wait_till_fsr_ready; + ++#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS + /* prefer "small sector" erase if possible */ + if (info->flags & SECT_4K) { + nor->erase_opcode = SPINOR_OP_BE_4K; +@@ -1025,7 +995,9 @@ int spi_nor_scan(struct spi_nor *nor, co + } else if (info->flags & SECT_4K_PMC) { + nor->erase_opcode = SPINOR_OP_BE_4K_PMC; + mtd->erasesize = 4096; +- } else { ++ } else ++#endif ++ { + nor->erase_opcode = SPINOR_OP_SE; + mtd->erasesize = info->sector_size; + } diff --git a/target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-queued-for-3.18.patch b/target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-queued-for-3.18.patch deleted file mode 100644 index 7505a17a7d..0000000000 --- a/target/linux/bcm53xx/patches-3.14/002-mtd-spi-nor-queued-for-3.18.patch +++ /dev/null @@ -1,39 +0,0 @@ ---- a/drivers/mtd/spi-nor/spi-nor.c -+++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -611,6 +611,7 @@ const struct spi_device_id spi_nor_ids[] - { "m25px32-s0", INFO(0x207316, 0, 64 * 1024, 64, SECT_4K) }, - { "m25px32-s1", INFO(0x206316, 0, 64 * 1024, 64, SECT_4K) }, - { "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) }, -+ { "m25px80", INFO(0x207114, 0, 64 * 1024, 16, 0) }, - - /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */ - { "w25x10", INFO(0xef3011, 0, 64 * 1024, 2, SECT_4K) }, -@@ -623,7 +624,6 @@ const struct spi_device_id spi_nor_ids[] - { "w25q32dw", INFO(0xef6016, 0, 64 * 1024, 64, SECT_4K) }, - { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) }, - { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) }, -- { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) }, - { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) }, - { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) }, - { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) }, -@@ -671,11 +671,6 @@ static const struct spi_device_id *spi_n - return ERR_PTR(-ENODEV); - } - --static const struct spi_device_id *jedec_probe(struct spi_nor *nor) --{ -- return nor->read_id(nor); --} -- - static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len, - size_t *retlen, u_char *buf) - { -@@ -958,7 +953,7 @@ int spi_nor_scan(struct spi_nor *nor, co - if (info->jedec_id) { - const struct spi_device_id *jid; - -- jid = jedec_probe(nor); -+ jid = nor->read_id(nor); - if (IS_ERR(jid)) { - return PTR_ERR(jid); - } else if (jid != id) { diff --git a/target/linux/bcm53xx/patches-3.14/400-mtd-move-support-for-struct-flash_platform_data-into.patch b/target/linux/bcm53xx/patches-3.14/400-mtd-move-support-for-struct-flash_platform_data-into.patch deleted file mode 100644 index 8076f550ba..0000000000 --- a/target/linux/bcm53xx/patches-3.14/400-mtd-move-support-for-struct-flash_platform_data-into.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- a/drivers/mtd/spi-nor/spi-nor.c -+++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -915,7 +915,6 @@ int spi_nor_scan(struct spi_nor *nor, co - enum read_mode mode) - { - struct flash_info *info; -- struct flash_platform_data *data; - struct device *dev = nor->dev; - struct mtd_info *mtd = nor->mtd; - struct device_node *np = dev->of_node; -@@ -926,28 +925,6 @@ int spi_nor_scan(struct spi_nor *nor, co - if (ret) - return ret; - -- /* Platform data helps sort out which chip type we have, as -- * well as how this board partitions it. If we don't have -- * a chip ID, try the JEDEC id commands; they'll work for most -- * newer chips, even if we don't recognize the particular chip. -- */ -- data = dev_get_platdata(dev); -- if (data && data->type) { -- const struct spi_device_id *plat_id; -- -- for (i = 0; i < ARRAY_SIZE(spi_nor_ids) - 1; i++) { -- plat_id = &spi_nor_ids[i]; -- if (strcmp(data->type, plat_id->name)) -- continue; -- break; -- } -- -- if (i < ARRAY_SIZE(spi_nor_ids) - 1) -- id = plat_id; -- else -- dev_warn(dev, "unrecognized id %s\n", data->type); -- } -- - info = (void *)id->driver_data; - - if (info->jedec_id) { -@@ -985,11 +962,8 @@ int spi_nor_scan(struct spi_nor *nor, co - write_sr(nor, 0); - } - -- if (data && data->name) -- mtd->name = data->name; -- else -+ if (!mtd->name) - mtd->name = dev_name(dev); -- - mtd->type = MTD_NORFLASH; - mtd->writesize = 1; - mtd->flags = MTD_CAP_NORFLASH; diff --git a/target/linux/bcm53xx/patches-3.14/401-mtd-spi-nor-add-Kconfig-option-to-disable-4K-sectors.patch b/target/linux/bcm53xx/patches-3.14/401-mtd-spi-nor-add-Kconfig-option-to-disable-4K-sectors.patch deleted file mode 100644 index 395b0af1d2..0000000000 --- a/target/linux/bcm53xx/patches-3.14/401-mtd-spi-nor-add-Kconfig-option-to-disable-4K-sectors.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- a/drivers/mtd/spi-nor/Kconfig -+++ b/drivers/mtd/spi-nor/Kconfig -@@ -7,6 +7,20 @@ menuconfig MTD_SPI_NOR - - if MTD_SPI_NOR - -+config MTD_SPI_NOR_USE_4K_SECTORS -+ bool "Use small 4096 B erase sectors" -+ default y -+ help -+ Many flash memories support erasing small (4096 B) sectors. Depending -+ on the usage this feature may provide performance gain in comparison -+ to erasing whole blocks (32/64 KiB). -+ Changing small part of flash content is usually faster with small -+ sectors. On the other hand erasing should be faster when using 64 KiB -+ block instead of 16 × 4 KiB sectors. -+ -+ Please note that some tools/drivers/filesystems may not work with -+ 4096 B erase size (e.g. UBIFS requires 15 KiB as a minimum). -+ - config SPI_FSL_QUADSPI - tristate "Freescale Quad SPI controller" - depends on ARCH_MXC ---- a/drivers/mtd/spi-nor/spi-nor.c -+++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -987,6 +987,7 @@ int spi_nor_scan(struct spi_nor *nor, co - nor->wait_till_ready == spi_nor_wait_till_ready) - nor->wait_till_ready = spi_nor_wait_till_fsr_ready; - -+#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS - /* prefer "small sector" erase if possible */ - if (info->flags & SECT_4K) { - nor->erase_opcode = SPINOR_OP_BE_4K; -@@ -994,7 +995,9 @@ int spi_nor_scan(struct spi_nor *nor, co - } else if (info->flags & SECT_4K_PMC) { - nor->erase_opcode = SPINOR_OP_BE_4K_PMC; - mtd->erasesize = 4096; -- } else { -+ } else -+#endif -+ { - nor->erase_opcode = SPINOR_OP_SE; - mtd->erasesize = info->sector_size; - } diff --git a/target/linux/bcm53xx/patches-3.14/404-mtd-bcm53xxspiflash-new-driver-for-SPI-flahes-on-Bro.patch b/target/linux/bcm53xx/patches-3.14/404-mtd-bcm53xxspiflash-new-driver-for-SPI-flahes-on-Bro.patch index 9a9d903f82..be99fd60ba 100644 --- a/target/linux/bcm53xx/patches-3.14/404-mtd-bcm53xxspiflash-new-driver-for-SPI-flahes-on-Bro.patch +++ b/target/linux/bcm53xx/patches-3.14/404-mtd-bcm53xxspiflash-new-driver-for-SPI-flahes-on-Bro.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/spi-nor/Kconfig +++ b/drivers/mtd/spi-nor/Kconfig -@@ -28,4 +28,10 @@ config SPI_FSL_QUADSPI +@@ -14,4 +14,10 @@ config SPI_FSL_QUADSPI This enables support for the Quad SPI controller in master mode. We only connect the NOR to this controller now. -- 2.30.2