3a187fa718
Also add a new kconfig symbol (CONFIG_KCMP) to the generic config, disabling the SYS_kcmp syscall (it was split from CONFIG_CHECKPOINT_RESTORE, which is disabled by default, so the previous behaviour is kept). Removed (upstreamed) patches: 070-net-icmp-pass-zeroed-opts-from-icmp-v6-_ndo_send-bef.patch 081-wireguard-device-do-not-generate-ICMP-for-non-IP-pac.patch 082-wireguard-queueing-get-rid-of-per-peer-ring-buffers.patch 083-wireguard-kconfig-use-arm-chacha-even-with-no-neon.patch 830-v5.12-0002-usb-serial-option-update-interface-mapping-for-ZTE-P685M.patch Manually rebased patches: 313-helios4-dts-status-led-alias.patch 104-powerpc-mpc85xx-change-P2020RDB-dts-file-for-OpenWRT.patch Run tested: ath79 (TL-WDR3600) mvebu (Turris Omnia) Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
72 lines
2.5 KiB
Diff
72 lines
2.5 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Sat, 4 Nov 2017 07:40:23 +0100
|
|
Subject: [PATCH] mtd: spi-nor: support limiting 4K sectors support based on
|
|
flash size
|
|
|
|
Some devices need 4K sectors to be able to deal with small flash chips.
|
|
For instance, w25x05 is 64 KiB in size, and without 4K sectors, the
|
|
entire chip is just one erase block.
|
|
On bigger flash chip sizes, using 4K sectors can significantly slow down
|
|
many operations, including using a writable filesystem. There are several
|
|
platforms where it makes sense to use a single kernel on both kinds of
|
|
devices.
|
|
|
|
To support this properly, allow configuring an upper flash chip size
|
|
limit for 4K sectors support.
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/drivers/mtd/spi-nor/Kconfig
|
|
+++ b/drivers/mtd/spi-nor/Kconfig
|
|
@@ -24,6 +24,17 @@ config MTD_SPI_NOR_USE_4K_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 MTD_SPI_NOR_USE_4K_SECTORS_LIMIT
|
|
+ int "Maximum flash chip size to use 4K sectors on (in KiB)"
|
|
+ depends on MTD_SPI_NOR_USE_4K_SECTORS
|
|
+ default "4096"
|
|
+ help
|
|
+ There are many flash chips that support 4K sectors, but are so large
|
|
+ that using them significantly slows down writing large amounts of
|
|
+ data or using a writable filesystem.
|
|
+ Any flash chip larger than the size specified in this option will
|
|
+ not use 4K sectors.
|
|
+
|
|
source "drivers/mtd/spi-nor/controllers/Kconfig"
|
|
|
|
endif # MTD_SPI_NOR
|
|
--- a/drivers/mtd/spi-nor/core.c
|
|
+++ b/drivers/mtd/spi-nor/core.c
|
|
@@ -2786,6 +2786,21 @@ static void spi_nor_info_init_params(str
|
|
*/
|
|
erase_mask = 0;
|
|
i = 0;
|
|
+#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
|
|
+ if ((info->flags & SECT_4K_PMC) && (params->size <=
|
|
+ CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
|
|
+ erase_mask |= BIT(i);
|
|
+ spi_nor_set_erase_type(&map->erase_type[i], 4096u,
|
|
+ SPINOR_OP_BE_4K_PMC);
|
|
+ i++;
|
|
+ } else if ((info->flags & SECT_4K) && (params->size <=
|
|
+ CONFIG_MTD_SPI_NOR_USE_4K_SECTORS_LIMIT * 1024)) {
|
|
+ erase_mask |= BIT(i);
|
|
+ spi_nor_set_erase_type(&map->erase_type[i], 4096u,
|
|
+ SPINOR_OP_BE_4K);
|
|
+ i++;
|
|
+ }
|
|
+#else
|
|
if (info->flags & SECT_4K_PMC) {
|
|
erase_mask |= BIT(i);
|
|
spi_nor_set_erase_type(&map->erase_type[i], 4096u,
|
|
@@ -2797,6 +2812,7 @@ static void spi_nor_info_init_params(str
|
|
SPINOR_OP_BE_4K);
|
|
i++;
|
|
}
|
|
+#endif
|
|
erase_mask |= BIT(i);
|
|
spi_nor_set_erase_type(&map->erase_type[i], info->sector_size,
|
|
SPINOR_OP_SE);
|