kernel: mtd: backport SafeLoader parser
authorRafał Miłecki <rafal@milecki.pl>
Tue, 18 Oct 2022 20:37:46 +0000 (22:37 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Wed, 19 Oct 2022 05:07:14 +0000 (07:07 +0200)
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
14 files changed:
target/linux/ath79/config-5.10
target/linux/ath79/config-5.15
target/linux/bcm53xx/config-5.10
target/linux/bcm53xx/config-5.15
target/linux/generic/backport-5.10/421-v6.2-mtd-parsers-add-TP-Link-SafeLoader-partitions-table-.patch [new file with mode: 0644]
target/linux/generic/backport-5.15/421-v6.2-mtd-parsers-add-TP-Link-SafeLoader-partitions-table-.patch [new file with mode: 0644]
target/linux/generic/pending-5.10/435-mtd-add-routerbootpart-parser-config.patch
target/linux/generic/pending-5.15/435-mtd-add-routerbootpart-parser-config.patch
target/linux/ramips/mt7620/config-5.10
target/linux/ramips/mt7620/config-5.15
target/linux/ramips/mt7621/config-5.10
target/linux/ramips/mt7621/config-5.15
target/linux/ramips/mt76x8/config-5.10
target/linux/ramips/mt76x8/config-5.15

index ac903aee6dfe005c76f72e7744eea2bc8924805e..04eec4375f0a25cec12dc0a27204a39c982c8073 100644 (file)
@@ -126,6 +126,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
 # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
 # CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
 CONFIG_MTD_PARSER_CYBERTAN=y
 # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
 # CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
 CONFIG_MTD_PARSER_CYBERTAN=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPLIT_ELF_FW=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPLIT_ELF_FW=y
index acb6b840bf39b7c75be23be38189c1fe3f62f9b5..ce987c5539023e2aa5c314a2d76043c6d88222a8 100644 (file)
@@ -123,6 +123,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
 # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
 # CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
 CONFIG_MTD_PARSER_CYBERTAN=y
 # CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
 # CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
 CONFIG_MTD_PARSER_CYBERTAN=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPLIT_ELF_FW=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPLIT_ELF_FW=y
index d8fb7b2a5dc5531a4af0921499fe0b11e520df21..9850aa9563ec11b210bb3121ea1b16444692798b 100644 (file)
@@ -196,6 +196,7 @@ CONFIG_MTD_NAND_CORE=y
 CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
 CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
+CONFIG_MTD_PARSER_TPLINK_SAFELOADER=y
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_SPI_NOR=y
index 32ac9fb6cc94ce1c82d82d5f7ee0d81bb9983bba..3941c22b9c391ec95bc045deea48829bce2c1eb5 100644 (file)
@@ -205,6 +205,7 @@ CONFIG_MTD_NAND_CORE=y
 CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
 CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
+CONFIG_MTD_PARSER_TPLINK_SAFELOADER=y
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_SPI_NOR=y
diff --git a/target/linux/generic/backport-5.10/421-v6.2-mtd-parsers-add-TP-Link-SafeLoader-partitions-table-.patch b/target/linux/generic/backport-5.10/421-v6.2-mtd-parsers-add-TP-Link-SafeLoader-partitions-table-.patch
new file mode 100644 (file)
index 0000000..9f54336
--- /dev/null
@@ -0,0 +1,229 @@
+From aec4d5f5ffd0f0092bd9dc21ea90e0bc237d4b74 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Sat, 15 Oct 2022 11:29:50 +0200
+Subject: [PATCH] mtd: parsers: add TP-Link SafeLoader partitions table parser
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This parser deals with most TP-Link home routers. It reads info about
+partitions and registers them in the MTD subsystem.
+
+Example from TP-Link Archer C5 V2:
+
+spi-nor spi0.0: s25fl128s1 (16384 Kbytes)
+15 tplink-safeloader partitions found on MTD device spi0.0
+Creating 15 MTD partitions on "spi0.0":
+0x000000000000-0x000000040000 : "fs-uboot"
+0x000000040000-0x000000440000 : "os-image"
+0x000000440000-0x000000e40000 : "rootfs"
+0x000000e40000-0x000000e40200 : "default-mac"
+0x000000e40200-0x000000e40400 : "pin"
+0x000000e40400-0x000000e40600 : "product-info"
+0x000000e50000-0x000000e60000 : "partition-table"
+0x000000e60000-0x000000e60200 : "soft-version"
+0x000000e61000-0x000000e70000 : "support-list"
+0x000000e70000-0x000000e80000 : "profile"
+0x000000e80000-0x000000e90000 : "default-config"
+0x000000e90000-0x000000ee0000 : "user-config"
+0x000000ee0000-0x000000fe0000 : "log"
+0x000000fe0000-0x000000ff0000 : "radio_bk"
+0x000000ff0000-0x000001000000 : "radio"
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20221015092950.27467-2-zajec5@gmail.com
+---
+ drivers/mtd/parsers/Kconfig             |  15 +++
+ drivers/mtd/parsers/Makefile            |   1 +
+ drivers/mtd/parsers/tplink_safeloader.c | 150 ++++++++++++++++++++++++
+ 3 files changed, 166 insertions(+)
+ create mode 100644 drivers/mtd/parsers/tplink_safeloader.c
+
+--- a/drivers/mtd/parsers/Kconfig
++++ b/drivers/mtd/parsers/Kconfig
+@@ -113,6 +113,21 @@ config MTD_AFS_PARTS
+         for your particular device. It won't happen automatically. The
+         'physmap' map driver (CONFIG_MTD_PHYSMAP) does this, for example.
++config MTD_PARSER_TPLINK_SAFELOADER
++      tristate "TP-Link Safeloader partitions parser"
++      depends on MTD && (ARCH_BCM_5301X || ATH79 || SOC_MT7620 || SOC_MT7621 || COMPILE_TEST)
++      help
++        TP-Link home routers use flash partitions to store various data. Info
++        about flash space layout is stored in a partitions table using a
++        custom ASCII-based format.
++
++        That format was first found in devices with SafeLoader bootloader and
++        was named after it. Later it was adapted to CFE and U-Boot
++        bootloaders.
++
++        This driver reads partitions table, parses it and creates MTD
++        partitions.
++
+ config MTD_PARSER_TRX
+       tristate "Parser for TRX format partitions"
+       depends on MTD && (BCM47XX || ARCH_BCM_5301X || ARCH_MEDIATEK || RALINK || COMPILE_TEST)
+--- a/drivers/mtd/parsers/Makefile
++++ b/drivers/mtd/parsers/Makefile
+@@ -9,6 +9,7 @@ ofpart-$(CONFIG_MTD_OF_PARTS_BCM4908)  +=
+ ofpart-$(CONFIG_MTD_OF_PARTS_LINKSYS_NS)+= ofpart_linksys_ns.o
+ obj-$(CONFIG_MTD_PARSER_IMAGETAG)     += parser_imagetag.o
+ obj-$(CONFIG_MTD_AFS_PARTS)           += afs.o
++obj-$(CONFIG_MTD_PARSER_TPLINK_SAFELOADER)    += tplink_safeloader.o
+ obj-$(CONFIG_MTD_PARSER_TRX)          += parser_trx.o
+ obj-$(CONFIG_MTD_SERCOMM_PARTS)               += scpart.o
+ obj-$(CONFIG_MTD_SHARPSL_PARTS)               += sharpslpart.o
+--- /dev/null
++++ b/drivers/mtd/parsers/tplink_safeloader.c
+@@ -0,0 +1,150 @@
++// SPDX-License-Identifier: GPL-2.0-only
++/*
++ * Copyright © 2022 Rafał Miłecki <rafal@milecki.pl>
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/of.h>
++#include <linux/slab.h>
++
++#define TPLINK_SAFELOADER_DATA_OFFSET         4
++#define TPLINK_SAFELOADER_MAX_PARTS           32
++
++struct safeloader_cmn_header {
++      __be32 size;
++      uint32_t unused;
++} __packed;
++
++static void *mtd_parser_tplink_safeloader_read_table(struct mtd_info *mtd)
++{
++      struct safeloader_cmn_header hdr;
++      struct device_node *np;
++      size_t bytes_read;
++      size_t offset;
++      size_t size;
++      char *buf;
++      int err;
++
++      np = mtd_get_of_node(mtd);
++      if (mtd_is_partition(mtd))
++              of_node_get(np);
++      else
++              np = of_get_child_by_name(np, "partitions");
++
++      if (of_property_read_u32(np, "partitions-table-offset", (u32 *)&offset)) {
++              pr_err("Failed to get partitions table offset\n");
++              goto err_put;
++      }
++
++      err = mtd_read(mtd, offset, sizeof(hdr), &bytes_read, (uint8_t *)&hdr);
++      if (err && !mtd_is_bitflip(err)) {
++              pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset);
++              goto err_put;
++      }
++
++      size = be32_to_cpu(hdr.size);
++
++      buf = kmalloc(size + 1, GFP_KERNEL);
++      if (!buf)
++              goto err_put;
++
++      err = mtd_read(mtd, offset + sizeof(hdr), size, &bytes_read, buf);
++      if (err && !mtd_is_bitflip(err)) {
++              pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset + sizeof(hdr));
++              goto err_kfree;
++      }
++
++      buf[size] = '\0';
++
++      of_node_put(np);
++
++      return buf;
++
++err_kfree:
++      kfree(buf);
++err_put:
++      of_node_put(np);
++      return NULL;
++}
++
++static int mtd_parser_tplink_safeloader_parse(struct mtd_info *mtd,
++                                            const struct mtd_partition **pparts,
++                                            struct mtd_part_parser_data *data)
++{
++      struct mtd_partition *parts;
++      char name[65];
++      size_t offset;
++      size_t bytes;
++      char *buf;
++      int idx;
++      int err;
++
++      parts = kcalloc(TPLINK_SAFELOADER_MAX_PARTS, sizeof(*parts), GFP_KERNEL);
++      if (!parts) {
++              err = -ENOMEM;
++              goto err_out;
++      }
++
++      buf = mtd_parser_tplink_safeloader_read_table(mtd);
++      if (!buf) {
++              err = -ENOENT;
++              goto err_out;
++      }
++
++      for (idx = 0, offset = TPLINK_SAFELOADER_DATA_OFFSET;
++           idx < TPLINK_SAFELOADER_MAX_PARTS &&
++           sscanf(buf + offset, "partition %64s base 0x%llx size 0x%llx%zn\n",
++                  name, &parts[idx].offset, &parts[idx].size, &bytes) == 3;
++           idx++, offset += bytes + 1) {
++              parts[idx].name = kstrdup(name, GFP_KERNEL);
++              if (!parts[idx].name) {
++                      err = -ENOMEM;
++                      goto err_free;
++              }
++      }
++
++      if (idx == TPLINK_SAFELOADER_MAX_PARTS)
++              pr_warn("Reached maximum number of partitions!\n");
++
++      kfree(buf);
++
++      *pparts = parts;
++
++      return idx;
++
++err_free:
++      for (idx -= 1; idx >= 0; idx--)
++              kfree(parts[idx].name);
++err_out:
++      return err;
++};
++
++static void mtd_parser_tplink_safeloader_cleanup(const struct mtd_partition *pparts,
++                                               int nr_parts)
++{
++      int i;
++
++      for (i = 0; i < nr_parts; i++)
++              kfree(pparts[i].name);
++
++      kfree(pparts);
++}
++
++static const struct of_device_id mtd_parser_tplink_safeloader_of_match_table[] = {
++      { .compatible = "tplink,safeloader-partitions" },
++      {},
++};
++MODULE_DEVICE_TABLE(of, mtd_parser_tplink_safeloader_of_match_table);
++
++static struct mtd_part_parser mtd_parser_tplink_safeloader = {
++      .parse_fn = mtd_parser_tplink_safeloader_parse,
++      .cleanup = mtd_parser_tplink_safeloader_cleanup,
++      .name = "tplink-safeloader",
++      .of_match_table = mtd_parser_tplink_safeloader_of_match_table,
++};
++module_mtd_part_parser(mtd_parser_tplink_safeloader);
++
++MODULE_LICENSE("GPL");
diff --git a/target/linux/generic/backport-5.15/421-v6.2-mtd-parsers-add-TP-Link-SafeLoader-partitions-table-.patch b/target/linux/generic/backport-5.15/421-v6.2-mtd-parsers-add-TP-Link-SafeLoader-partitions-table-.patch
new file mode 100644 (file)
index 0000000..9f54336
--- /dev/null
@@ -0,0 +1,229 @@
+From aec4d5f5ffd0f0092bd9dc21ea90e0bc237d4b74 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Sat, 15 Oct 2022 11:29:50 +0200
+Subject: [PATCH] mtd: parsers: add TP-Link SafeLoader partitions table parser
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This parser deals with most TP-Link home routers. It reads info about
+partitions and registers them in the MTD subsystem.
+
+Example from TP-Link Archer C5 V2:
+
+spi-nor spi0.0: s25fl128s1 (16384 Kbytes)
+15 tplink-safeloader partitions found on MTD device spi0.0
+Creating 15 MTD partitions on "spi0.0":
+0x000000000000-0x000000040000 : "fs-uboot"
+0x000000040000-0x000000440000 : "os-image"
+0x000000440000-0x000000e40000 : "rootfs"
+0x000000e40000-0x000000e40200 : "default-mac"
+0x000000e40200-0x000000e40400 : "pin"
+0x000000e40400-0x000000e40600 : "product-info"
+0x000000e50000-0x000000e60000 : "partition-table"
+0x000000e60000-0x000000e60200 : "soft-version"
+0x000000e61000-0x000000e70000 : "support-list"
+0x000000e70000-0x000000e80000 : "profile"
+0x000000e80000-0x000000e90000 : "default-config"
+0x000000e90000-0x000000ee0000 : "user-config"
+0x000000ee0000-0x000000fe0000 : "log"
+0x000000fe0000-0x000000ff0000 : "radio_bk"
+0x000000ff0000-0x000001000000 : "radio"
+
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20221015092950.27467-2-zajec5@gmail.com
+---
+ drivers/mtd/parsers/Kconfig             |  15 +++
+ drivers/mtd/parsers/Makefile            |   1 +
+ drivers/mtd/parsers/tplink_safeloader.c | 150 ++++++++++++++++++++++++
+ 3 files changed, 166 insertions(+)
+ create mode 100644 drivers/mtd/parsers/tplink_safeloader.c
+
+--- a/drivers/mtd/parsers/Kconfig
++++ b/drivers/mtd/parsers/Kconfig
+@@ -113,6 +113,21 @@ config MTD_AFS_PARTS
+         for your particular device. It won't happen automatically. The
+         'physmap' map driver (CONFIG_MTD_PHYSMAP) does this, for example.
++config MTD_PARSER_TPLINK_SAFELOADER
++      tristate "TP-Link Safeloader partitions parser"
++      depends on MTD && (ARCH_BCM_5301X || ATH79 || SOC_MT7620 || SOC_MT7621 || COMPILE_TEST)
++      help
++        TP-Link home routers use flash partitions to store various data. Info
++        about flash space layout is stored in a partitions table using a
++        custom ASCII-based format.
++
++        That format was first found in devices with SafeLoader bootloader and
++        was named after it. Later it was adapted to CFE and U-Boot
++        bootloaders.
++
++        This driver reads partitions table, parses it and creates MTD
++        partitions.
++
+ config MTD_PARSER_TRX
+       tristate "Parser for TRX format partitions"
+       depends on MTD && (BCM47XX || ARCH_BCM_5301X || ARCH_MEDIATEK || RALINK || COMPILE_TEST)
+--- a/drivers/mtd/parsers/Makefile
++++ b/drivers/mtd/parsers/Makefile
+@@ -9,6 +9,7 @@ ofpart-$(CONFIG_MTD_OF_PARTS_BCM4908)  +=
+ ofpart-$(CONFIG_MTD_OF_PARTS_LINKSYS_NS)+= ofpart_linksys_ns.o
+ obj-$(CONFIG_MTD_PARSER_IMAGETAG)     += parser_imagetag.o
+ obj-$(CONFIG_MTD_AFS_PARTS)           += afs.o
++obj-$(CONFIG_MTD_PARSER_TPLINK_SAFELOADER)    += tplink_safeloader.o
+ obj-$(CONFIG_MTD_PARSER_TRX)          += parser_trx.o
+ obj-$(CONFIG_MTD_SERCOMM_PARTS)               += scpart.o
+ obj-$(CONFIG_MTD_SHARPSL_PARTS)               += sharpslpart.o
+--- /dev/null
++++ b/drivers/mtd/parsers/tplink_safeloader.c
+@@ -0,0 +1,150 @@
++// SPDX-License-Identifier: GPL-2.0-only
++/*
++ * Copyright © 2022 Rafał Miłecki <rafal@milecki.pl>
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/of.h>
++#include <linux/slab.h>
++
++#define TPLINK_SAFELOADER_DATA_OFFSET         4
++#define TPLINK_SAFELOADER_MAX_PARTS           32
++
++struct safeloader_cmn_header {
++      __be32 size;
++      uint32_t unused;
++} __packed;
++
++static void *mtd_parser_tplink_safeloader_read_table(struct mtd_info *mtd)
++{
++      struct safeloader_cmn_header hdr;
++      struct device_node *np;
++      size_t bytes_read;
++      size_t offset;
++      size_t size;
++      char *buf;
++      int err;
++
++      np = mtd_get_of_node(mtd);
++      if (mtd_is_partition(mtd))
++              of_node_get(np);
++      else
++              np = of_get_child_by_name(np, "partitions");
++
++      if (of_property_read_u32(np, "partitions-table-offset", (u32 *)&offset)) {
++              pr_err("Failed to get partitions table offset\n");
++              goto err_put;
++      }
++
++      err = mtd_read(mtd, offset, sizeof(hdr), &bytes_read, (uint8_t *)&hdr);
++      if (err && !mtd_is_bitflip(err)) {
++              pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset);
++              goto err_put;
++      }
++
++      size = be32_to_cpu(hdr.size);
++
++      buf = kmalloc(size + 1, GFP_KERNEL);
++      if (!buf)
++              goto err_put;
++
++      err = mtd_read(mtd, offset + sizeof(hdr), size, &bytes_read, buf);
++      if (err && !mtd_is_bitflip(err)) {
++              pr_err("Failed to read from %s at 0x%zx\n", mtd->name, offset + sizeof(hdr));
++              goto err_kfree;
++      }
++
++      buf[size] = '\0';
++
++      of_node_put(np);
++
++      return buf;
++
++err_kfree:
++      kfree(buf);
++err_put:
++      of_node_put(np);
++      return NULL;
++}
++
++static int mtd_parser_tplink_safeloader_parse(struct mtd_info *mtd,
++                                            const struct mtd_partition **pparts,
++                                            struct mtd_part_parser_data *data)
++{
++      struct mtd_partition *parts;
++      char name[65];
++      size_t offset;
++      size_t bytes;
++      char *buf;
++      int idx;
++      int err;
++
++      parts = kcalloc(TPLINK_SAFELOADER_MAX_PARTS, sizeof(*parts), GFP_KERNEL);
++      if (!parts) {
++              err = -ENOMEM;
++              goto err_out;
++      }
++
++      buf = mtd_parser_tplink_safeloader_read_table(mtd);
++      if (!buf) {
++              err = -ENOENT;
++              goto err_out;
++      }
++
++      for (idx = 0, offset = TPLINK_SAFELOADER_DATA_OFFSET;
++           idx < TPLINK_SAFELOADER_MAX_PARTS &&
++           sscanf(buf + offset, "partition %64s base 0x%llx size 0x%llx%zn\n",
++                  name, &parts[idx].offset, &parts[idx].size, &bytes) == 3;
++           idx++, offset += bytes + 1) {
++              parts[idx].name = kstrdup(name, GFP_KERNEL);
++              if (!parts[idx].name) {
++                      err = -ENOMEM;
++                      goto err_free;
++              }
++      }
++
++      if (idx == TPLINK_SAFELOADER_MAX_PARTS)
++              pr_warn("Reached maximum number of partitions!\n");
++
++      kfree(buf);
++
++      *pparts = parts;
++
++      return idx;
++
++err_free:
++      for (idx -= 1; idx >= 0; idx--)
++              kfree(parts[idx].name);
++err_out:
++      return err;
++};
++
++static void mtd_parser_tplink_safeloader_cleanup(const struct mtd_partition *pparts,
++                                               int nr_parts)
++{
++      int i;
++
++      for (i = 0; i < nr_parts; i++)
++              kfree(pparts[i].name);
++
++      kfree(pparts);
++}
++
++static const struct of_device_id mtd_parser_tplink_safeloader_of_match_table[] = {
++      { .compatible = "tplink,safeloader-partitions" },
++      {},
++};
++MODULE_DEVICE_TABLE(of, mtd_parser_tplink_safeloader_of_match_table);
++
++static struct mtd_part_parser mtd_parser_tplink_safeloader = {
++      .parse_fn = mtd_parser_tplink_safeloader_parse,
++      .cleanup = mtd_parser_tplink_safeloader_cleanup,
++      .name = "tplink-safeloader",
++      .of_match_table = mtd_parser_tplink_safeloader_of_match_table,
++};
++module_mtd_part_parser(mtd_parser_tplink_safeloader);
++
++MODULE_LICENSE("GPL");
index 446bc0bef103b284a07582e8e34fc2fe792b4fa6..5c7b57b373d05bcbd6d8fab69c007e150daa79d0 100644 (file)
@@ -16,7 +16,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
 
 --- a/drivers/mtd/parsers/Kconfig
 +++ b/drivers/mtd/parsers/Kconfig
 
 --- a/drivers/mtd/parsers/Kconfig
 +++ b/drivers/mtd/parsers/Kconfig
-@@ -204,3 +204,12 @@ config MTD_SERCOMM_PARTS
+@@ -219,3 +219,12 @@ config MTD_SERCOMM_PARTS
          partition map. This partition table contains real partition
          offsets, which may differ from device to device depending on the
          number and location of bad blocks on NAND.
          partition map. This partition table contains real partition
          offsets, which may differ from device to device depending on the
          number and location of bad blocks on NAND.
@@ -31,7 +31,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
 +       formatted DTS.
 --- a/drivers/mtd/parsers/Makefile
 +++ b/drivers/mtd/parsers/Makefile
 +       formatted DTS.
 --- a/drivers/mtd/parsers/Makefile
 +++ b/drivers/mtd/parsers/Makefile
-@@ -14,3 +14,4 @@ obj-$(CONFIG_MTD_PARSER_TRX)         += parser_
+@@ -15,3 +15,4 @@ obj-$(CONFIG_MTD_PARSER_TRX)         += parser_
  obj-$(CONFIG_MTD_SERCOMM_PARTS)               += scpart.o
  obj-$(CONFIG_MTD_SHARPSL_PARTS)               += sharpslpart.o
  obj-$(CONFIG_MTD_REDBOOT_PARTS)               += redboot.o
  obj-$(CONFIG_MTD_SERCOMM_PARTS)               += scpart.o
  obj-$(CONFIG_MTD_SHARPSL_PARTS)               += sharpslpart.o
  obj-$(CONFIG_MTD_REDBOOT_PARTS)               += redboot.o
index 30f5334af40b754f54c372b311f9ed31c170a005..ee949f73c095f9939a2d049d388c6abdd5b71e00 100644 (file)
@@ -16,7 +16,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
 
 --- a/drivers/mtd/parsers/Kconfig
 +++ b/drivers/mtd/parsers/Kconfig
 
 --- a/drivers/mtd/parsers/Kconfig
 +++ b/drivers/mtd/parsers/Kconfig
-@@ -211,3 +211,12 @@ config MTD_SERCOMM_PARTS
+@@ -226,3 +226,12 @@ config MTD_SERCOMM_PARTS
          partition map. This partition table contains real partition
          offsets, which may differ from device to device depending on the
          number and location of bad blocks on NAND.
          partition map. This partition table contains real partition
          offsets, which may differ from device to device depending on the
          number and location of bad blocks on NAND.
@@ -31,7 +31,7 @@ Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
 +       formatted DTS.
 --- a/drivers/mtd/parsers/Makefile
 +++ b/drivers/mtd/parsers/Makefile
 +       formatted DTS.
 --- a/drivers/mtd/parsers/Makefile
 +++ b/drivers/mtd/parsers/Makefile
-@@ -15,3 +15,4 @@ obj-$(CONFIG_MTD_SERCOMM_PARTS)              += scpa
+@@ -16,3 +16,4 @@ obj-$(CONFIG_MTD_SERCOMM_PARTS)              += scpa
  obj-$(CONFIG_MTD_SHARPSL_PARTS)               += sharpslpart.o
  obj-$(CONFIG_MTD_REDBOOT_PARTS)               += redboot.o
  obj-$(CONFIG_MTD_QCOMSMEM_PARTS)      += qcomsmempart.o
  obj-$(CONFIG_MTD_SHARPSL_PARTS)               += sharpslpart.o
  obj-$(CONFIG_MTD_REDBOOT_PARTS)               += redboot.o
  obj-$(CONFIG_MTD_QCOMSMEM_PARTS)      += qcomsmempart.o
index f6b388224968cd379f35f5054dcd1d6d3a9875e8..fb0fd1d30b5a0a2267c95ae7812b88e5483f528c 100644 (file)
@@ -112,6 +112,7 @@ CONFIG_MODULES_USE_ELF_REL=y
 # CONFIG_MT7621_WDT is not set
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
 # CONFIG_MT7621_WDT is not set
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
index d6c6995efe0d4cdaf68abe53cf066f017e9dd12f..0f8aca000cd5451f8923d41a6207d1ad9b097580 100644 (file)
@@ -113,6 +113,7 @@ CONFIG_MODULES_USE_ELF_REL=y
 # CONFIG_MT7621_WDT is not set
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
 # CONFIG_MT7621_WDT is not set
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPI_NOR_USE_VARIABLE_ERASE=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPI_NOR_USE_VARIABLE_ERASE=y
index 1b415f3e665bbd2d869b416dcbd691a568b2ab85..b6c74074845bc7787ec1bd6ad75099b6775872e5 100644 (file)
@@ -159,6 +159,7 @@ CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_NAND_MT7621=y
 CONFIG_MTD_NAND_MTK_BMT=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_NAND_MT7621=y
 CONFIG_MTD_NAND_MTK_BMT=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_ROUTERBOOT_PARTS=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_ROUTERBOOT_PARTS=y
index a8094fe305b2ab79aa2ac4161353d6285dfc6f6e..adda3fef64b75ae35b780aa822d8d69d9f30b87c 100644 (file)
@@ -160,6 +160,7 @@ CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_NAND_MT7621=y
 CONFIG_MTD_NAND_MTK_BMT=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_NAND_MT7621=y
 CONFIG_MTD_NAND_MTK_BMT=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_ROUTERBOOT_PARTS=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_ROUTERBOOT_PARTS=y
index 39d04b8d109715727127232202024fa3775656c5..37f0bb8e3e115510c7d7a657614d4314c0b42324 100644 (file)
@@ -110,6 +110,7 @@ CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_MT7621_WDT=y
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
 CONFIG_MT7621_WDT=y
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
index 555b57fe6091f00584f07521a8e5664e13cf50f4..5e44d613df0db54ac98c126d2351354ffa649233 100644 (file)
@@ -111,6 +111,7 @@ CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_MT7621_WDT=y
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
 CONFIG_MT7621_WDT=y
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_PARSER_TPLINK_SAFELOADER is not set
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_PARSER_TRX=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y