kernel: mtdsplit_uimage: add SGE parser
authorMathieu Martin-Borret <mathieu.mb@protonmail.com>
Fri, 10 Jul 2020 03:40:58 +0000 (13:40 +1000)
committerPetr Štetiar <ynezz@true.cz>
Mon, 13 Jul 2020 20:45:04 +0000 (22:45 +0200)
Adding SGE parser for SGE (T&W) Shenzhen Gongjin Electronics
to add 96 bytes padding the the firmware image

Signed-off-by: Mathieu Martin-Borret <mathieu.mb@protonmail.com>
target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c

index 525ad8218bd272930fc9015c6ba958ffc50670e0..7a9ec8acdecc4d40762266cbab57cc1ac73c230a 100644 (file)
@@ -407,6 +407,43 @@ static struct mtd_part_parser uimage_fonfxc_parser = {
        .parse_fn = mtdsplit_uimage_parse_fonfxc,
 };
 
+/**************************************************
+ * SGE (T&W) Shenzhen Gongjin Electronics
+ **************************************************/
+
+#define SGE_PAD_LEN            96
+
+static ssize_t uimage_find_sge(u_char *buf, size_t len, int *extralen)
+{
+       if (uimage_verify_default(buf, len, extralen) < 0)
+               return -EINVAL;
+
+       *extralen = SGE_PAD_LEN;
+
+       return 0;
+}
+
+static int
+mtdsplit_uimage_parse_sge(struct mtd_info *master,
+                             const struct mtd_partition **pparts,
+                             struct mtd_part_parser_data *data)
+{
+       return __mtdsplit_parse_uimage(master, pparts, data,
+                                      uimage_find_sge);
+}
+
+static const struct of_device_id mtdsplit_uimage_sge_of_match_table[] = {
+       { .compatible = "sge,uimage" },
+       {},
+};
+
+static struct mtd_part_parser uimage_sge_parser = {
+       .owner = THIS_MODULE,
+       .name = "sge-fw",
+       .of_match_table = mtdsplit_uimage_sge_of_match_table,
+       .parse_fn = mtdsplit_uimage_parse_sge,
+};
+
 /**************************************************
  * OKLI (OpenWrt Kernel Loader Image)
  **************************************************/
@@ -470,6 +507,7 @@ static int __init mtdsplit_uimage_init(void)
        register_mtd_parser(&uimage_netgear_parser);
        register_mtd_parser(&uimage_edimax_parser);
        register_mtd_parser(&uimage_fonfxc_parser);
+       register_mtd_parser(&uimage_sge_parser);
        register_mtd_parser(&uimage_okli_parser);
 
        return 0;