mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
da98603597
This PR is a blend of several kernel bumps authored by ldir taken from his staging tree w/ some further adjustments made by me and update_kernel.sh Summary: Deleted upstreamed patches: generic: 742-v5.5-net-sfp-add-support-for-module-quirks.patch 743-v5.5-net-sfp-add-some-quirks-for-GPON-modules.patch bcm63xx: 022-v5.8-mtd-rawnand-brcmnand-correctly-verify-erased-pages.patch 024-v5.8-mtd-rawnand-brcmnand-fix-CS0-layout.patch mediatek: 0402-net-ethernet-mtk_eth_soc-Always-call-mtk_gmac0_rgmii.patch Deleted patches applied differently upstream: generic: 641-sch_cake-fix-IP-protocol-handling-in-the-presence-of.patch Manually merged patches: generic: 395-v5.8-net-sch_cake-Take-advantage-of-skb-hash-where-appropriate.patch bcm27xx: 950-0132-lan78xx-Debounce-link-events-to-minimize-poll-storm.patch layerscape: 701-net-0231-enetc-Use-DT-protocol-information-to-set-up-the-port.patch Build system: x86_64 Build-tested: ath79/generic, bcm27xx/bcm2708, bcm27xx/bcm2711, imx6, mvebu/cortexa9, sunxi/a53 Run-tested: Netgear R7800 (ipq806x) No dmesg regressions, everything functional Signed-off-by: John Audia <graysky@archlinux.us> Tested-By: Lucian Cristian <Lucian.cristian@gmail.com> [mvebu] Tested-By: Curtis Deptuck <curtdept@me.com> [x86/64] [do not remove 395-v5.8-net-sch_cake-Take-advantage-... patch, adjust and refresh patches, adjust commit message] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> Tested-By: John Audia <graysky@archlinux.us> [ipq806x]
93 lines
2.2 KiB
Diff
93 lines
2.2 KiB
Diff
From d00358d7a1c50718232799e1ee10955bcd73795a Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
|
|
Date: Tue, 12 May 2020 09:57:33 +0200
|
|
Subject: [PATCH] mtd: rawnand: brcmnand: improve hamming oob layout
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The current code generates 8 oob sections:
|
|
S1 1-5
|
|
ECC 6-8
|
|
S2 9-15
|
|
S3 16-21
|
|
ECC 22-24
|
|
S4 25-31
|
|
S5 32-37
|
|
ECC 38-40
|
|
S6 41-47
|
|
S7 48-53
|
|
ECC 54-56
|
|
S8 57-63
|
|
|
|
Change it by merging continuous sections:
|
|
S1 1-5
|
|
ECC 6-8
|
|
S2 9-21
|
|
ECC 22-24
|
|
S3 25-37
|
|
ECC 38-40
|
|
S4 41-53
|
|
ECC 54-56
|
|
S5 57-63
|
|
|
|
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
|
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|
Link: https://lore.kernel.org/linux-mtd/20200512075733.745374-3-noltari@gmail.com
|
|
---
|
|
drivers/mtd/nand/raw/brcmnand/brcmnand.c | 35 +++++++++++-------------
|
|
1 file changed, 16 insertions(+), 19 deletions(-)
|
|
|
|
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
|
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
|
@@ -1004,33 +1004,30 @@ static int brcmnand_hamming_ooblayout_fr
|
|
struct brcmnand_cfg *cfg = &host->hwcfg;
|
|
int sas = cfg->spare_area_size << cfg->sector_size_1k;
|
|
int sectors = cfg->page_size / (512 << cfg->sector_size_1k);
|
|
+ u32 next;
|
|
|
|
- if (section >= sectors * 2)
|
|
+ if (section > sectors)
|
|
return -ERANGE;
|
|
|
|
- oobregion->offset = (section / 2) * sas;
|
|
+ next = (section * sas);
|
|
+ if (section < sectors)
|
|
+ next += 6;
|
|
|
|
- if (section & 1) {
|
|
- oobregion->offset += 9;
|
|
- oobregion->length = 7;
|
|
+ if (section) {
|
|
+ oobregion->offset = ((section - 1) * sas) + 9;
|
|
} else {
|
|
- oobregion->length = 6;
|
|
-
|
|
- /* First sector of each page may have BBI */
|
|
- if (!section) {
|
|
- /*
|
|
- * Small-page NAND use byte 6 for BBI while large-page
|
|
- * NAND use bytes 0 and 1.
|
|
- */
|
|
- if (cfg->page_size > 512) {
|
|
- oobregion->offset += 2;
|
|
- oobregion->length -= 2;
|
|
- } else {
|
|
- oobregion->length--;
|
|
- }
|
|
+ if (cfg->page_size > 512) {
|
|
+ /* Large page NAND uses first 2 bytes for BBI */
|
|
+ oobregion->offset = 2;
|
|
+ } else {
|
|
+ /* Small page NAND uses last byte before ECC for BBI */
|
|
+ oobregion->offset = 0;
|
|
+ next--;
|
|
}
|
|
}
|
|
|
|
+ oobregion->length = next - oobregion->offset;
|
|
+
|
|
return 0;
|
|
}
|
|
|