kernel: nmbm: add mediatek,bmt-mtd-overridden-oobsize property
authorMikhail Zhilkin <csharper2005@gmail.com>
Tue, 4 Feb 2025 15:55:08 +0000 (15:55 +0000)
committerRobert Marko <robimarko@gmail.com>
Fri, 7 Feb 2025 08:04:35 +0000 (09:04 +0100)
This commit adds new "mediatek,bmt-mtd-overridden-oobsize" property. The
property helps avoid "NMBM configuration mismatch" error if mtd "OOB size"
is not equal to the "spare size" which is stored in the nmbm signature.

Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17549
Signed-off-by: Robert Marko <robimarko@gmail.com>
target/linux/generic/files/drivers/mtd/nand/mtk_bmt.c

index bcff7d6ac8207644d667a6e35aca5a12dcfab828..063adb50fb6062cbcf95ef6a894e0aefea20834e 100644 (file)
@@ -407,6 +407,7 @@ int mtk_bmt_attach(struct mtd_info *mtd)
 {
        struct device_node *np;
        int ret = 0;
+       u32 overridden_oobsize = 0;
 
        if (bmtd.mtd)
                return -ENOSPC;
@@ -431,6 +432,14 @@ int mtk_bmt_attach(struct mtd_info *mtd)
        bmtd.mtd = mtd;
        mtk_bmt_replace_ops(mtd);
 
+       if (!of_property_read_u32(np, "mediatek,bmt-mtd-overridden-oobsize",
+                                 &overridden_oobsize))
+               if (overridden_oobsize < bmtd.mtd->oobsize) {
+                       bmtd.mtd->oobsize = overridden_oobsize;
+                       pr_info("NMBM: mtd OOB size has been overridden to %luB\n",
+                               (long unsigned int)bmtd.mtd->oobsize);
+               }
+
        bmtd.blk_size = mtd->erasesize;
        bmtd.blk_shift = ffs(bmtd.blk_size) - 1;
        bmtd.pg_size = mtd->writesize;