mirror of https://github.com/hak5/openwrt.git
ath79: add support for ZyXEL NBG6716
Attention: Kernel partition size has been enlarged to 4MB. To switch, you must update to latest ar71xx-nand snapshort and flash the sysupgrade-4M-Kernel.bin: zcat openwrt-ath79-nand-zyxel_nbg6716-squashfs-sysupgrade-4M-Kernel.bin | mtd -r -e ubi write - firmware; reboot -f You will end up with a fresh config if you do not inject config into the image. The NBG6716 may come with 128MB or 256MB NAND. ar71xx was able to use all, but ath79 can only use the first 128MB. Therefore the complete NAND needs to be overwritten. If not, the old UBI may make problems and lead to reboot loop. Access the real u-boot shell: ZyXEL uses a proprietary loader/shell on top of u-boot: "ZyXEL zloader v2.02" When the device is starting up, the user can enter the the loader shell by simply pressing a key within the 3 seconds once the following string appears on the serial console: | Hit any key to stop autoboot: 3 The user is then dropped to a locked shell. |NBG6716> HELP |ATEN x[,y] set BootExtension Debug Flag (y=password) |ATSE x show the seed of password generator |ATSH dump manufacturer related data in ROM |ATRT [x,y,z,u] RAM read/write test (x=level, y=start addr, z=end addr, u=iterations) |ATGO boot up whole system |ATUR x upgrade RAS image (filename) |NBG6716> In order to escape/unlock a password challenge has to be passed. Note: the value is dynamic! you have to calculate your own! First use ATSE $MODELNAME (MODELNAME is the hostname in u-boot env) to get the challange value/seed. |NBG6716> ATSE NBG6716 |012345678901 This seed/value can be converted to the password with the help of this bash script (Thanks to http://www.adslayuda.com/Zyxel650-9.html authors): - tool.sh - ror32() { echo $(( ($1 >> $2) | (($1 << (32 - $2) & (2**32-1)) ) )) } v="0x$1" a="0x${v:2:6}" b=$(( $a + 0x10F0A563)) c=$(( 0x${v:12:14} & 7 )) p=$(( $(ror32 $b $c) ^ $a )) printf "ATEN 1,%X\n" $p - end of tool.sh - |# bash ./tool.sh 012345678901 | |ATEN 1,879C711 copy and paste the result into the shell to unlock zloader. |NBG6716> ATEN 1,0046B0017430 If the entered code was correct the shell will change to use the ATGU command to enter the real u-boot shell. |NBG6716> ATGU |NBG6716# Signed-off-by: André Valentin <avalentin@marcant.net>master
parent
353ecbbf64
commit
99835e0999
|
@ -304,6 +304,10 @@ ath79_setup_interfaces()
|
|||
ucidef_add_switch "switch0" \
|
||||
"0@eth0" "3:lan:1" "4:lan:2"
|
||||
;;
|
||||
zyxel,nbg6716)
|
||||
ucidef_add_switch "switch0" \
|
||||
"0@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" "6@eth1"
|
||||
;;
|
||||
*)
|
||||
ucidef_set_interfaces_lan_wan "eth0" "eth1"
|
||||
;;
|
||||
|
@ -443,6 +447,10 @@ ath79_setup_macs()
|
|||
wd,mynet-wifi-rangeextender)
|
||||
lan_mac=$(nvram get et0macaddr)
|
||||
;;
|
||||
zyxel,nbg6716)
|
||||
lan_mac=$(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +2)
|
||||
wan_mac=$(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +3)
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac
|
||||
|
|
|
@ -47,6 +47,10 @@ case "$FIRMWARE" in
|
|||
caldata_extract "radiocfg" 0x1000 0x440
|
||||
ath9k_patch_mac $(mtd_get_mac_ascii devdata "wlan24mac")
|
||||
;;
|
||||
zyxel,nbg6716)
|
||||
caldata_extract "art" 0x1000 0x440
|
||||
ath9k_patch_mac $(mtd_get_mac_ascii u-boot-env ethaddr)
|
||||
;;
|
||||
*)
|
||||
caldata_die "board $board is not supported yet"
|
||||
;;
|
||||
|
|
|
@ -113,6 +113,10 @@ case "$FIRMWARE" in
|
|||
ubnt,unifiac-pro)
|
||||
caldata_extract "EEPROM" 0x5000 0x844
|
||||
;;
|
||||
zyxel,nbg6716)
|
||||
caldata_extract "art" 0x5000 0x844
|
||||
ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1)
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
"ath10k/pre-cal-pci-0000:00:00.0.bin")
|
||||
|
|
|
@ -15,7 +15,8 @@ migrate_wifi_path() {
|
|||
|
||||
case "$board" in
|
||||
tplink,archer-c7-v1|\
|
||||
tplink,archer-c7-v2)
|
||||
tplink,archer-c7-v2|\
|
||||
zyxel,nbg6716)
|
||||
path="pci0000:00/0000:00:00.0"
|
||||
WIFI_PATH_CHANGED=1
|
||||
;;
|
||||
|
|
|
@ -51,6 +51,9 @@ platform_do_upgrade() {
|
|||
ubnt,routerstation-pro)
|
||||
echo "Sysupgrade disabled due bug FS#2428"
|
||||
;;
|
||||
zyxel,nbg6716)
|
||||
nand_do_upgrade "$1"
|
||||
;;
|
||||
*)
|
||||
default_do_upgrade "$1"
|
||||
;;
|
||||
|
|
|
@ -178,6 +178,24 @@
|
|||
};
|
||||
};
|
||||
|
||||
nand: nand@1b800200 {
|
||||
compatible = "qca,ar934x-nand";
|
||||
reg = <0x1b800200 0xb8>;
|
||||
|
||||
interrupts = <21>;
|
||||
interrupt-parent = <&miscintc>;
|
||||
|
||||
resets = <&rst 14>;
|
||||
reset-names = "nand";
|
||||
|
||||
nand-ecc-mode = "hw";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
gmac: gmac@18070000 {
|
||||
compatible = "qca,qca9550-gmac";
|
||||
reg = <0x18070000 0x58>;
|
||||
|
|
|
@ -0,0 +1,299 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
|
||||
#include "qca9557.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "zyxel,nbg6716", "qca,qca9558";
|
||||
model = "ZyXEL NBG6716";
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,115200n8";
|
||||
};
|
||||
|
||||
aliases {
|
||||
led-boot = &power;
|
||||
led-failsafe = &power;
|
||||
led-running = &power;
|
||||
led-upgrade = &power;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
power: power {
|
||||
label = "nbg6716:white:power";
|
||||
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wan {
|
||||
label = "nbg6716:white:internet";
|
||||
gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
usb1 {
|
||||
label = "nbg6716:white:usb1";
|
||||
gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "usbport";
|
||||
trigger-sources = <&hub_port0>;
|
||||
};
|
||||
|
||||
usb2 {
|
||||
label = "nbg6716:white:usb2";
|
||||
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "usbport";
|
||||
trigger-sources = <&hub_port1>;
|
||||
};
|
||||
|
||||
wifi2 {
|
||||
label = "nbg6716:white:wifi2";
|
||||
gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy1tpt";
|
||||
};
|
||||
|
||||
wifi5 {
|
||||
label = "nbg6716:white:wifi5";
|
||||
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "phy0tpt";
|
||||
};
|
||||
|
||||
wps {
|
||||
label = "nbg6716:white:wps";
|
||||
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
wifi_button {
|
||||
label = "WiFi button";
|
||||
linux,code = <KEY_RFKILL>;
|
||||
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
usb1 {
|
||||
label = "USB1 eject button";
|
||||
gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
usb2 {
|
||||
label = "USB2 eject button";
|
||||
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
wps {
|
||||
label = "WPS button";
|
||||
linux,code = <KEY_WPS_BUTTON>;
|
||||
gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&gpio {
|
||||
gpio_usb_power {
|
||||
gpio-hog;
|
||||
gpios = <16 0>;
|
||||
output-high;
|
||||
line-name = "nbg6716:power:usb";
|
||||
};
|
||||
};
|
||||
|
||||
&uart {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi {
|
||||
status = "okay";
|
||||
num-cs = <1>;
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <25000000>;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
uboot: partition@0 {
|
||||
label = "u-boot";
|
||||
reg = <0x000000 0x040000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
uboot_env: partition@40000 {
|
||||
label = "u-boot-env";
|
||||
reg = <0x040000 0x010000>;
|
||||
};
|
||||
|
||||
art: partition@50000 {
|
||||
label = "art";
|
||||
reg = <0x050000 0x010000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@60000 {
|
||||
label = "nbu";
|
||||
reg = <0x060000 0xfa0000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&nand {
|
||||
status = "okay";
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "zyxel_rfsd";
|
||||
reg = <0x0 0x200000>;
|
||||
};
|
||||
|
||||
partition@200000 {
|
||||
label = "romd";
|
||||
reg = <0x200000 0x200000>;
|
||||
};
|
||||
|
||||
partition@400000 {
|
||||
label = "header";
|
||||
reg = <0x400000 0x100000>;
|
||||
};
|
||||
|
||||
firmware@500000 {
|
||||
label = "firmware";
|
||||
reg = <0x500000 0x7b00000>;
|
||||
};
|
||||
|
||||
partition@500000 {
|
||||
label = "kernel";
|
||||
reg = <0x500000 0x400000>;
|
||||
};
|
||||
|
||||
partition@900000 {
|
||||
label = "ubi";
|
||||
reg = <0x900000 0x7700000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&mdio0 {
|
||||
status = "okay";
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <17>;
|
||||
phy-mode = "rgmii-id";
|
||||
};
|
||||
|
||||
switch0@1f {
|
||||
compatible = "qca,ar8327";
|
||||
reg = <0x1f>;
|
||||
qca,ar8327-initvals = <
|
||||
0x04 0x87600000 /* PORT0 PAD MODE CTRL */
|
||||
0x0c 0x00080080 /* PORT6 PAD MODE CTRL */
|
||||
0x10 0x81000080 /* POWER_ON_STRIP */
|
||||
0x50 0xffb7ffb7 /* LED_CTRL0 */
|
||||
0x54 0xffb7ffb7 /* LED_CTRL1 */
|
||||
0x58 0xffb7ffb7 /* LED_CTRL2 */
|
||||
0x5c 0x03ffff00 /* LED_CTRL3 */
|
||||
0x7c 0x0000007e /* PORT0_STATUS */
|
||||
0x94 0x0000007e /* PORT6 STATUS */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&mdio1 {
|
||||
status = "okay";
|
||||
|
||||
phy1: ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
phy-mode = "sgmii";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
ð0 {
|
||||
status = "okay";
|
||||
|
||||
pll-data = <0xa6000000 0x00000101 0x00001616>;
|
||||
phy-handle = <&phy0>;
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
|
||||
ð1 {
|
||||
status = "okay";
|
||||
|
||||
pll-data = <0x03000101 0x00000101 0x00001616>;
|
||||
phy-handle = <&phy1>;
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
|
||||
&gpio {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&wmac {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pcie1 {
|
||||
status = "okay";
|
||||
|
||||
wifi@0,0 {
|
||||
compatible = "qcom,ath10k";
|
||||
reg = <0 0 0 0 0>;
|
||||
qcom,ath10k-calibration-variant = "ZyXEL-NBG6716";
|
||||
};
|
||||
};
|
||||
|
||||
&usb_phy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_phy1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
|
||||
hub_port0: port@1 {
|
||||
reg = <1>;
|
||||
#trigger-source-cells = <0>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&usb1 {
|
||||
status = "okay";
|
||||
|
||||
hub_port1: port@1 {
|
||||
reg = <1>;
|
||||
#trigger-source-cells = <0>;
|
||||
};
|
||||
};
|
|
@ -1,3 +1,31 @@
|
|||
# attention: only zlib compression is allowed for the boot fs
|
||||
define Build/zyxel-buildkerneljffs
|
||||
rm -rf $(KDIR_TMP)/zyxelnbg6716
|
||||
mkdir -p $(KDIR_TMP)/zyxelnbg6716/image/boot
|
||||
cp $@ $(KDIR_TMP)/zyxelnbg6716/image/boot/vmlinux.lzma.uImage
|
||||
$(STAGING_DIR_HOST)/bin/mkfs.jffs2 \
|
||||
--big-endian --squash-uids -v -e 128KiB -q -f -n -x lzma -x rtime \
|
||||
-o $@ \
|
||||
-d $(KDIR_TMP)/zyxelnbg6716/image
|
||||
rm -rf $(KDIR_TMP)/zyxelnbg6716
|
||||
endef
|
||||
|
||||
define Build/zyxel-factory
|
||||
let \
|
||||
maxsize="$(subst k,* 1024,$(RAS_ROOTFS_SIZE))"; \
|
||||
let size="$$(stat -c%s $@)"; \
|
||||
if [ $$size -lt $$maxsize ]; then \
|
||||
$(STAGING_DIR_HOST)/bin/mkrasimage \
|
||||
-b $(RAS_BOARD) \
|
||||
-v $(RAS_VERSION) \
|
||||
-r $@ \
|
||||
-s $$maxsize \
|
||||
-o $@.new \
|
||||
-l 131072 \
|
||||
&& mv $@.new $@ ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
define Device/glinet_gl-ar300m-nand
|
||||
ATH_SOC := qca9531
|
||||
DEVICE_VENDOR := GL.iNet
|
||||
|
@ -13,3 +41,24 @@ define Device/glinet_gl-ar300m-nand
|
|||
IMAGE/factory.ubi := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
|
||||
endef
|
||||
TARGET_DEVICES += glinet_gl-ar300m-nand
|
||||
|
||||
define Device/zyxel_nbg6716
|
||||
ATH_SOC := qca9558
|
||||
DEVICE_VENDOR := ZyXEL
|
||||
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k-ct ath10k-firmware-qca988x-ct
|
||||
RAS_BOARD := NBG6716
|
||||
RAS_ROOTFS_SIZE := 29696k
|
||||
RAS_VERSION := "OpenWrt Linux-$(LINUX_VERSION)"
|
||||
KERNEL_SIZE := 4096k
|
||||
BLOCKSIZE := 128k
|
||||
PAGESIZE := 2048
|
||||
KERNEL := kernel-bin | append-dtb | uImage none | \
|
||||
zyxel-buildkerneljffs | check-size 4096k
|
||||
IMAGES := sysupgrade.tar sysupgrade-4M-Kernel.bin factory.bin
|
||||
IMAGE/sysupgrade.tar/squashfs := append-rootfs | pad-to $$$${BLOCKSIZE} | sysupgrade-tar rootfs=$$$$@ | append-metadata
|
||||
IMAGE/sysupgrade-4M-Kernel.bin/squashfs := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | pad-to 263192576 | gzip
|
||||
IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi | zyxel-factory
|
||||
UBINIZE_OPTS := -E 5
|
||||
endef
|
||||
TARGET_DEVICES += zyxel_nbg6716
|
||||
DEVICE_VARS += RAS_ROOTFS_SIZE RAS_BOARD RAS_VERSION
|
||||
|
|
Loading…
Reference in New Issue