From 96761ecc2f998e0ae082719ed27adbecd12e520f Mon Sep 17 00:00:00 2001 From: Mathieu Martin-Borret Date: Fri, 10 Jul 2020 13:40:58 +1000 Subject: [PATCH] kernel: mtdsplit_uimage: add SGE parser 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 --- .../drivers/mtd/mtdsplit/mtdsplit_uimage.c | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c index 525ad8218b..7a9ec8acde 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c @@ -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;