OpenWrt/LEDE Project

  • Status Unconfirmed
  • Percent Complete
    0%
  • Task Type Bug Report
  • Category Base system
  • Assigned To No-one
  • Operating System All
  • Severity Medium
  • Priority Very Low
  • Reported Version Trunk
  • Due in Version Undecided
  • Due Date Undecided
  • Private
Attached to Project: OpenWrt/LEDE Project
Opened by nwf - 06.09.2020

FS#3324 - Zyxel EMG2926-Q10A (aka NBG6716) requires changes in tree

459c8c9ef816156107e297964d088ddee2b4eef5 added support for the Zyxel NBG6716 device. Unfortunately, I believe it made an error in the partition layout. Because the RAS image header is written to flash, the offsets for sub-partitions of firmware must be shifted down by the size of this header (i.e., 128KiB):

diff --git a/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts b/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts                                            
index 90328078dd..148a6ea2d1 100644
--- a/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts
+++ b/target/linux/ath79/dts/qca9558_zyxel_nbg6716.dts
@@ -148,14 +148,19 @@
                        reg = <0x500000 0x7b00000>;
                };

-               partition@500000 {
+               // There's a RAS image header inside the firmware partition,
+               // taking up one erase block (128KiB), so the kernel and ubi
+               // partitions are shifted by that amount.
+
+               partition@520000 {
+                       // JFFS2 containing the compressed kernel
                        label = "kernel";
-                       reg = <0x500000 0x400000>;
+                       reg = <0x520000 0x400000>;
                };

-               partition@900000 {
+               partition@920000 {
                        label = "ubi";
-                       reg = <0x900000 0x7700000>;
+                       reg = <0x920000 0x76C0000>;
                };
        };
 };

Without this change, the bootloader finds the kernel inside its JFFS2 partition just fine, but then the kernel dies when it cannot find the UBI header at the indicated offset.

It is not clear to me whether this change should be applied to all NBG6716-equivalent devices or merely the one I have in hand.

Speaking of, that device calls itself a AAVK-EMG2926Q10A in its RAS header and refuses to flash anything not so labeled. Therefore, I have added a target for it by lightly extending the existing one:

diff --git a/target/linux/ath79/dts/qca9558_zyxel_aavk-emg2926q10a.dts b/target/linux/ath79/dts/qca9558_zyxel_aavk-emg2926q10a.dts                          
new file mode 100644
index 0000000000..ec94aa0d73
--- /dev/null
+++ b/target/linux/ath79/dts/qca9558_zyxel_aavk-emg2926q10a.dts
@@ -0,0 +1,2 @@
+/* This is just an alias, really */
+#include "qca9558_zyxel_nbg6716.dts"
diff --git a/target/linux/ath79/image/nand.mk b/target/linux/ath79/image/nand.mk                                                                            
index ad79c487ad..7336dc45d7 100644
--- a/target/linux/ath79/image/nand.mk
+++ b/target/linux/ath79/image/nand.mk
@@ -263,3 +263,9 @@ define Device/zyxel_nbg6716
   UBINIZE_OPTS := -E 5
 endef
 TARGET_DEVICES += zyxel_nbg6716
+
+define Device/zyxel_aavk-emg2926q10a
+  $(call Device/zyxel_nbg6716)
+  RAS_BOARD := AAVK-EMG2926Q10A
+endef
+TARGET_DEVICES += zyxel_aavk-emg2926q10a

Loading...

Available keyboard shortcuts

Tasklist

Task Details

Task Editing