[openwrt/openwrt] kernel: mtdsplit_uimage: replace "netgear, uimage" parser

LEDE Commits lede-commits at lists.infradead.org
Fri Jan 22 15:03:35 EST 2021


ynezz pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/ff7709d223e15cfc496abf09acae12826d9216e6

commit ff7709d223e15cfc496abf09acae12826d9216e6
Author: Bjørn Mork <bjorn at mork.no>
AuthorDate: Wed Jan 20 18:36:51 2021 +0100

    kernel: mtdsplit_uimage: replace "netgear, uimage" parser
    
    The "netgear,uimage" parser can be replaced by the generic
    parser using device specific openwrt,ih-magic and
    openwrt,ih-type properties.
    
    Device tree properties for the following devices have not
    been set, as they have been dropped from OpenWrt with the
    removal of the ar71xx target:
    
     FW_MAGIC_WNR2000V1     0x32303031
     FW_MAGIC_WNR2000V4     0x32303034
     FW_MAGIC_WNR1000V2_VC  0x31303030
     FW_MAGIC_WPN824N       0x31313030
    
    Tested-by: Sander Vanheule <sander at svanheule.net>  # WNDR3700v2
    Tested-by: Stijn Segers <foss at volatilesystems.org> # WNDR3700v1
    Signed-off-by: Bjørn Mork <bjorn at mork.no>
---
 target/linux/ath79/dts/ar7161_netgear_wndr.dtsi    |  1 +
 .../linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts |  4 +-
 target/linux/ath79/dts/ar7161_netgear_wndr3700.dts |  4 +-
 target/linux/ath79/dts/ar7161_netgear_wndr3800.dts |  4 +-
 .../linux/ath79/dts/ar7161_netgear_wndr3800ch.dts  |  4 +-
 .../linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts  |  4 +-
 .../linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts  |  4 +-
 .../linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts  |  5 +-
 .../linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi  |  5 +-
 .../linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts  |  5 +-
 .../linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts |  4 +-
 .../linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts  |  4 +-
 target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi |  1 +
 target/linux/ath79/dts/ar9344_netgear_wndr.dtsi    |  5 +-
 .../files/drivers/mtd/mtdsplit/mtdsplit_uimage.c   | 67 ----------------------
 .../realtek/dts/rtl8380_netgear_gs110tpp-v1.dts    |  3 +-
 16 files changed, 44 insertions(+), 80 deletions(-)

diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi b/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi
index 61097f9679..217128546f 100644
--- a/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi
+++ b/target/linux/ath79/dts/ar7161_netgear_wndr.dtsi
@@ -4,6 +4,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	aliases {
diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts
index 0543c47113..6d78c019da 100644
--- a/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts
+++ b/target/linux/ath79/dts/ar7161_netgear_wndr3700-v2.dts
@@ -22,7 +22,9 @@
 	partition at 70000 {
 		label = "firmware";
 		reg = <0x070000 0xf80000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x33373031>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at ff0000 {
diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts
index 955dd2edf0..ad29d256f6 100644
--- a/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts
+++ b/target/linux/ath79/dts/ar7161_netgear_wndr3700.dts
@@ -22,7 +22,9 @@
 	partition at 70000 {
 		label = "firmware";
 		reg = <0x070000 0x780000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x33373030>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at 7f0000 {
diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts
index 41fe401ddb..80b25492b1 100644
--- a/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts
+++ b/target/linux/ath79/dts/ar7161_netgear_wndr3800.dts
@@ -23,7 +23,9 @@
 	partition at 70000 {
 		label = "firmware";
 		reg = <0x070000 0xf80000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x33373031>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at ff0000 {
diff --git a/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts b/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts
index 79569adba8..cc51aca8b6 100644
--- a/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts
+++ b/target/linux/ath79/dts/ar7161_netgear_wndr3800ch.dts
@@ -23,7 +23,9 @@
 	partition at 70000 {
 		label = "firmware";
 		reg = <0x070000 0xf80000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x33373031>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at ff0000 {
diff --git a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts
index 65d2393c67..8604414d19 100644
--- a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts
+++ b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v1.dts
@@ -22,7 +22,9 @@
 	partition at 70000 {
 		label = "firmware";
 		reg = <0x070000 0xf80000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x33373031>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at ff0000 {
diff --git a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts
index f7641203cf..bebd96c72f 100644
--- a/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts
+++ b/target/linux/ath79/dts/ar7161_netgear_wndrmac-v2.dts
@@ -23,7 +23,9 @@
 	partition at 70000 {
 		label = "firmware";
 		reg = <0x070000 0xf80000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x33373031>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at ff0000 {
diff --git a/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts b/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts
index d700ea73fa..0c94c90284 100644
--- a/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts
+++ b/target/linux/ath79/dts/ar7240_netgear_wnr1000-v2.dts
@@ -4,6 +4,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	compatible = "netgear,wnr1000-v2", "qca,ar7240";
@@ -158,7 +159,9 @@
 			partition at 50000 {
 				label = "firmware";
 				reg = <0x50000 0x3a0000>;
-				compatible = "netgear,uimage";
+				compatible = "openwrt,uimage", "denx,uimage";
+				openwrt,ih-magic = <0x31303031>;
+				openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 			};
 
 			art: partition at 3f0000 {
diff --git a/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi b/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi
index 382529b32d..0360412598 100644
--- a/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi
+++ b/target/linux/ath79/dts/ar7240_netgear_wnr612-v2.dtsi
@@ -4,6 +4,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	aliases {
@@ -89,7 +90,9 @@
 			};
 
 			partition at 50000 {
-				compatible = "netgear,uimage";
+				compatible = "openwrt,uimage", "denx,uimage";
+				openwrt,ih-magic = <0x32303631>;
+				openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 				reg = <0x50000 0x3a0000>;
 				label = "firmware";
 			};
diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts
index 2e7ea746df..831f3e9c25 100644
--- a/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts
+++ b/target/linux/ath79/dts/ar7241_netgear_wnr2000-v3.dts
@@ -4,6 +4,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	compatible = "netgear,wnr2000-v3", "qca,ar7241";
@@ -161,7 +162,9 @@
 			partition at 50000 {
 				label = "firmware";
 				reg = <0x50000 0x3a0000>;
-				compatible = "netgear,uimage";
+				compatible = "openwrt,uimage", "denx,uimage";
+				openwrt,ih-magic = <0x32303033>;
+				openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 			};
 
 			art: partition at 3f0000 {
diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
index 2c74436547..3842238e54 100644
--- a/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
+++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200-16m.dts
@@ -22,7 +22,9 @@
 	partition at 50000 {
 		label = "firmware";
 		reg = <0x50000 0xfa0000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x32323030>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at ff0000 {
diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts b/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
index c23cb6e002..4eb15e2313 100644
--- a/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
+++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200-8m.dts
@@ -22,7 +22,9 @@
 	partition at 50000 {
 		label = "firmware";
 		reg = <0x50000 0x7a0000>;
-		compatible = "netgear,uimage";
+		compatible = "openwrt,uimage", "denx,uimage";
+		openwrt,ih-magic = <0x32323030>;
+		openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 	};
 
 	art: partition at 7f0000 {
diff --git a/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
index c61e188e32..625f4b0684 100644
--- a/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
+++ b/target/linux/ath79/dts/ar7241_netgear_wnr2200.dtsi
@@ -4,6 +4,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	chosen {
diff --git a/target/linux/ath79/dts/ar9344_netgear_wndr.dtsi b/target/linux/ath79/dts/ar9344_netgear_wndr.dtsi
index 26f9db5924..ac012eafb4 100644
--- a/target/linux/ath79/dts/ar9344_netgear_wndr.dtsi
+++ b/target/linux/ath79/dts/ar9344_netgear_wndr.dtsi
@@ -4,6 +4,7 @@
 
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
 	chosen {
@@ -161,7 +162,9 @@
 		partition at 6c0000 {
 			label = "firmware";
 			reg = <0x6c0000 0x1900000>;
-			compatible = "netgear,uimage";
+			compatible = "openwrt,uimage", "denx,uimage";
+			openwrt,ih-magic = <0x33373033>;
+			openwrt,ih-type = <IH_TYPE_FILESYSTEM>;
 		};
 
 		partition at 1fc0000 {
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 ef2d857abb..c29eb6234b 100644
--- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c
+++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c
@@ -271,72 +271,6 @@ static struct mtd_part_parser uimage_generic_parser = {
 	.type = MTD_PARSER_TYPE_FIRMWARE,
 };
 
-#define FW_MAGIC_GS110TPPV1	0x4e474520
-#define FW_MAGIC_WNR2000V1	0x32303031
-#define FW_MAGIC_WNR2000V3	0x32303033
-#define FW_MAGIC_WNR2000V4	0x32303034
-#define FW_MAGIC_WNR2200	0x32323030
-#define FW_MAGIC_WNR612V2	0x32303631
-#define FW_MAGIC_WNR1000V2	0x31303031
-#define FW_MAGIC_WNR1000V2_VC	0x31303030
-#define FW_MAGIC_WNDR3700	0x33373030
-#define FW_MAGIC_WNDR3700V2	0x33373031
-#define FW_MAGIC_WPN824N	0x31313030
-
-static ssize_t uimage_verify_wndr3700(u_char *buf, size_t len, u32 ih_magic, u32 ih_type)
-{
-	struct uimage_header *header = (struct uimage_header *)buf;
-	uint8_t expected_type = IH_TYPE_FILESYSTEM;
-
-	switch (be32_to_cpu(header->ih_magic)) {
-	case FW_MAGIC_GS110TPPV1:
-	case FW_MAGIC_WNR2000V4:
-		expected_type = IH_TYPE_KERNEL;
-		break;
-	case FW_MAGIC_WNR612V2:
-	case FW_MAGIC_WNR1000V2:
-	case FW_MAGIC_WNR1000V2_VC:
-	case FW_MAGIC_WNR2000V1:
-	case FW_MAGIC_WNR2000V3:
-	case FW_MAGIC_WNR2200:
-	case FW_MAGIC_WNDR3700:
-	case FW_MAGIC_WNDR3700V2:
-	case FW_MAGIC_WPN824N:
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	if (header->ih_os != IH_OS_LINUX ||
-	    header->ih_type != expected_type)
-		return -EINVAL;
-
-	return 0;
-}
-
-static int
-mtdsplit_uimage_parse_netgear(struct mtd_info *master,
-			      const struct mtd_partition **pparts,
-			      struct mtd_part_parser_data *data)
-{
-	return __mtdsplit_parse_uimage(master, pparts, data,
-				      uimage_verify_wndr3700);
-}
-
-static const struct of_device_id mtdsplit_uimage_netgear_of_match_table[] = {
-	{ .compatible = "netgear,uimage" },
-	{},
-};
-
-static struct mtd_part_parser uimage_netgear_parser = {
-	.owner = THIS_MODULE,
-	.name = "netgear-fw",
-	.of_match_table = mtdsplit_uimage_netgear_of_match_table,
-	.parse_fn = mtdsplit_uimage_parse_netgear,
-	.type = MTD_PARSER_TYPE_FIRMWARE,
-
-};
-
 /**************************************************
  * Edimax
  **************************************************/
@@ -393,7 +327,6 @@ static struct mtd_part_parser uimage_edimax_parser = {
 static int __init mtdsplit_uimage_init(void)
 {
 	register_mtd_parser(&uimage_generic_parser);
-	register_mtd_parser(&uimage_netgear_parser);
 	register_mtd_parser(&uimage_edimax_parser);
 
 	return 0;
diff --git a/target/linux/realtek/dts/rtl8380_netgear_gs110tpp-v1.dts b/target/linux/realtek/dts/rtl8380_netgear_gs110tpp-v1.dts
index 251585a8da..cd9342f3f1 100644
--- a/target/linux/realtek/dts/rtl8380_netgear_gs110tpp-v1.dts
+++ b/target/linux/realtek/dts/rtl8380_netgear_gs110tpp-v1.dts
@@ -70,7 +70,8 @@
 			};
 			partition at 300000{
 				label = "firmware";
-				compatible = "netgear,uimage";
+				compatible = "openwrt,uimage", "denx,uimage";
+				openwrt,ih-magic = <0x4e474520>;
 				reg = <0x0300000 0x1d00000>;
 			};
 		};



More information about the lede-commits mailing list