Skip to content

Commit 67e6baf

Browse files
mmlrrobimarko
authored andcommitted
qualcommax: ipq60xx: add Netgear RBx350 support
Netgear RBx350 are dual band 4 stream 802.11ax mesh devices from the Orbi series. The RBR350 is a router with a WAN and 3 LAN ports. The RBS350 is a satellite without WAN port, only 2 LAN ports and half the flash. The hardware is otherwise identical. They were sold in kits as RBK352, RBK353, RBK354 or RBK355, with one router and 1-4 satellites. Hardware: * SoC: Qualcomm IPQ6018 * RAM: 512MiB 1x Nanya NT5CC256M16ER-EK * Flash: 512MiB Winbond W29N04GZ or 256MiB Winbond W29N02GZ * WLAN 2.4GHz: QCN5022 2x2:2 b/g/n/ax * WLAN 5GHz: QCN5052 2x2:2 a/n/ac/ax * Ethernet: QCA8075 switch with 1 WAN and 3 LAN ports or 2 LAN ports * Serial Config: 3.3V TTL 115200-8-N-1, internal populated header * Serial Layout: 3.3V (don't connect, marked with dot) RX TX GND * LEDs: green/red power, white/red/green/blue status * Buttons: 1x Reset, 1x WPS MAC addresses: * LAN1: base address on label, stored in boarddata partition at 0x8 * LAN2: base + 1 * LAN3: base + 2 * WAN: base + 3 * 2.4GHz WLAN: base + 1 * 5GHz WLAN: base + 2 Flashing Notes: The stock firmware images are signed. Both the bootloader and the stock web interface check the signature and will fail to boot/flash. The bootloader automatically does NMRP when a gigabit LAN connection is present. The stock and factory images contain a U-Boot script that is executed when flashing using NMRP. This is used to alter and persist the U-Boot env with a boot command that works with unsigned firmware. Install OpenWrt: * Get the nmrpflash utility [0] and OpenWrt factory image * Find network interface to use: nmrpflash -L * Start nmrpflash: nmrpflash -i interface -f openwrt-...-factory.img * Connect the device LAN port closest to the power jack to the same network using gigabit * Plug the device in and wait for the bootloader to flash * Unplug and replug the device once the power LED blinks amber Revert to Stock: The boot command needs to be reverted before flashing the stock firmware, otherwise it will fail to boot and get stuck in recovery mode (red power LED flashing). * Run: fw_setenv bootcmd bootipq * Restart the device * Flash the stock firmware RBx350-Va.b.c.d.img using nmrpflash [0]: https://github.com/jclehner/nmrpflash Signed-off-by: Michael Lotz <mmlr@mlotz.ch> Link: openwrt/openwrt#21656 Signed-off-by: Robert Marko <robimarko@gmail.com>
1 parent d0bd7ad commit 67e6baf

File tree

10 files changed

+372
-1
lines changed

10 files changed

+372
-1
lines changed

package/boot/uboot-tools/uboot-envtools/files/qualcommax_ipq60xx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ linksys,mr7350|\
1919
linksys,mr7500)
2020
ubootenv_add_mtd "u_env" "0x0" "0x40000" "0x20000"
2121
;;
22+
netgear,rbr350|\
23+
netgear,rbs350|\
2224
netgear,wax214|\
2325
netgear,wax610|\
2426
netgear,wax610y|\

package/firmware/ipq-wifi/Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ ALLWIFIBOARDS:= \
6868
netgear_rax120v2 \
6969
netgear_rbk20 \
7070
netgear_rbk40 \
71+
netgear_rbk350 \
7172
netgear_rbk750 \
7273
netgear_sxk80 \
7374
netgear_wax214 \
@@ -257,7 +258,11 @@ $(eval $(call generate-ipq-wifi-package,netgear_lbr20,Netgear LBR20))
257258
$(eval $(call generate-ipq-wifi-package,netgear_rax120v2,Netgear RAX120v2))
258259
$(eval $(call generate-ipq-wifi-package,netgear_rbk20,Netgear RBK20))
259260
$(eval $(call generate-ipq-wifi-package,netgear_rbk40,Netgear RBK40))
261+
<<<<<<< HEAD
260262
$(eval $(call generate-ipq-wifi-package,netgear_rbk750,Netgear RBK750))
263+
=======
264+
$(eval $(call generate-ipq-wifi-package,netgear_rbk350,Netgear RBK350))
265+
>>>>>>> fb4c0dd54e (qualcommax: ipq60xx: add Netgear RBx350 support)
261266
$(eval $(call generate-ipq-wifi-package,netgear_sxk80,Netgear SXK80))
262267
$(eval $(call generate-ipq-wifi-package,netgear_wax214,Netgear WAX214))
263268
$(eval $(call generate-ipq-wifi-package,netgear_wax218,Netgear WAX218))
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// SPDX-License-Identifier: (GPL-2.0+)
2+
3+
/dts-v1/;
4+
5+
#include "ipq6018-rbx350.dtsi"
6+
7+
/ {
8+
model = "Netgear RBR350";
9+
compatible = "netgear,rbr350", "qcom,ipq6018";
10+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// SPDX-License-Identifier: (GPL-2.0+)
2+
3+
/dts-v1/;
4+
5+
#include "ipq6018-rbx350.dtsi"
6+
7+
/ {
8+
model = "Netgear RBS350";
9+
compatible = "netgear,rbs350", "qcom,ipq6018";
10+
};
11+
12+
&dp2 {
13+
status = "disabled";
14+
};
15+
16+
&dp3 {
17+
status = "disabled";
18+
};
Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
#include "ipq6018-512m.dtsi"
2+
#include "ipq6018-cp-cpu.dtsi"
3+
#include "ipq6018-ess.dtsi"
4+
#include <dt-bindings/gpio/gpio.h>
5+
#include <dt-bindings/input/input.h>
6+
#include <dt-bindings/leds/common.h>
7+
8+
/ {
9+
aliases {
10+
led-boot = &led_status_white;
11+
led-failsafe = &led_status_red;
12+
led-upgrade = &led_status_blue;
13+
serial0 = &blsp1_uart3;
14+
label-mac-device = &dp5;
15+
};
16+
17+
18+
chosen {
19+
stdout-path = "serial0:115200n8";
20+
bootargs-append = " ubi.mtd=rootfs root=/dev/ubiblock0_1";
21+
};
22+
23+
keys {
24+
compatible = "gpio-keys";
25+
26+
reset {
27+
label = "reset";
28+
gpios = <&tlmm 19 GPIO_ACTIVE_LOW>;
29+
linux,code = <KEY_RESTART>;
30+
debounce-interval = <60>;
31+
};
32+
33+
wps {
34+
label = "wps";
35+
gpios = <&tlmm 57 GPIO_ACTIVE_LOW>;
36+
linux,code = <KEY_WPS_BUTTON>;
37+
debounce-interval = <60>;
38+
};
39+
};
40+
41+
leds {
42+
compatible = "gpio-leds";
43+
44+
power_green {
45+
function = LED_FUNCTION_POWER;
46+
color = <LED_COLOR_ID_GREEN>;
47+
gpios = <&tlmm 34 GPIO_ACTIVE_LOW>;
48+
default-state = "on";
49+
};
50+
51+
power_red {
52+
function = LED_FUNCTION_FAULT;
53+
color = <LED_COLOR_ID_RED>;
54+
gpios = <&tlmm 35 GPIO_ACTIVE_LOW>;
55+
};
56+
57+
led_status_white: status_white {
58+
function = LED_FUNCTION_STATUS;
59+
color = <LED_COLOR_ID_WHITE>;
60+
gpios = <&tlmm 37 GPIO_ACTIVE_LOW>;
61+
};
62+
63+
status_green {
64+
function = LED_FUNCTION_STATUS;
65+
color = <LED_COLOR_ID_GREEN>;
66+
gpios = <&tlmm 76 GPIO_ACTIVE_LOW>;
67+
};
68+
69+
led_status_red: status_red {
70+
function = LED_FUNCTION_STATUS;
71+
color = <LED_COLOR_ID_RED>;
72+
gpios = <&tlmm 77 GPIO_ACTIVE_LOW>;
73+
};
74+
75+
led_status_blue: status_blue {
76+
function = LED_FUNCTION_STATUS;
77+
color = <LED_COLOR_ID_BLUE>;
78+
gpios = <&tlmm 78 GPIO_ACTIVE_LOW>;
79+
};
80+
};
81+
};
82+
83+
&edma {
84+
status = "okay";
85+
};
86+
87+
&switch {
88+
status = "okay";
89+
90+
switch_lan_bmp = <(ESS_PORT2 | ESS_PORT3 | ESS_PORT4 | ESS_PORT5)>;
91+
switch_wan_bmp = <ESS_PORT1>;
92+
switch_mac_mode = <MAC_MODE_PSGMII>;
93+
94+
qcom,port_phyinfo {
95+
port@1 {
96+
port_id = <1>;
97+
phy_address = <0>;
98+
};
99+
100+
port@2 {
101+
port_id = <2>;
102+
phy_address = <1>;
103+
};
104+
105+
port@3 {
106+
port_id = <3>;
107+
phy_address = <2>;
108+
};
109+
110+
port@4 {
111+
port_id = <4>;
112+
phy_address = <3>;
113+
};
114+
115+
port@5 {
116+
port_id = <5>;
117+
phy_address = <4>;
118+
};
119+
};
120+
};
121+
122+
&tlmm {
123+
mdio_pins: mdio-pins {
124+
mdc {
125+
pins = "gpio64";
126+
function = "mdc";
127+
drive-strength = <8>;
128+
bias-pull-up;
129+
};
130+
131+
mdio {
132+
pins = "gpio65";
133+
function = "mdio";
134+
drive-strength = <8>;
135+
bias-pull-up;
136+
};
137+
};
138+
};
139+
140+
&mdio {
141+
status = "okay";
142+
143+
pinctrl-0 = <&mdio_pins>;
144+
pinctrl-names = "default";
145+
reset-gpios = <&tlmm 75 GPIO_ACTIVE_LOW>;
146+
reset-delay-us = <10000>;
147+
reset-post-delay-us = <50000>;
148+
149+
ethernet-phy-package {
150+
#address-cells = <1>;
151+
#size-cells = <0>;
152+
compatible = "qcom,qca8075-package";
153+
reg = <0>;
154+
155+
qcom,package-mode = "psgmii";
156+
157+
phy0: ethernet-phy@0 {
158+
compatible = "ethernet-phy-ieee802.3-c22";
159+
reg = <0>;
160+
};
161+
162+
phy1: ethernet-phy@1 {
163+
compatible = "ethernet-phy-ieee802.3-c22";
164+
reg = <1>;
165+
};
166+
167+
phy2: ethernet-phy@2 {
168+
compatible = "ethernet-phy-ieee802.3-c22";
169+
reg = <2>;
170+
};
171+
172+
phy3: ethernet-phy@3 {
173+
compatible = "ethernet-phy-ieee802.3-c22";
174+
reg = <3>;
175+
};
176+
177+
phy4: ethernet-phy@4 {
178+
compatible = "ethernet-phy-ieee802.3-c22";
179+
reg = <4>;
180+
};
181+
};
182+
};
183+
184+
&dp2 {
185+
status = "okay";
186+
phy-handle = <&phy1>;
187+
label = "wan";
188+
nvmem-cells = <&macaddr_boarddata 3>;
189+
nvmem-cell-names = "mac-address";
190+
};
191+
192+
&dp3 {
193+
status = "okay";
194+
phy-handle = <&phy2>;
195+
label = "lan3";
196+
nvmem-cells = <&macaddr_boarddata 2>;
197+
nvmem-cell-names = "mac-address";
198+
};
199+
200+
&dp4 {
201+
status = "okay";
202+
phy-handle = <&phy3>;
203+
label = "lan2";
204+
nvmem-cells = <&macaddr_boarddata 1>;
205+
nvmem-cell-names = "mac-address";
206+
};
207+
208+
&dp5 {
209+
status = "okay";
210+
phy-handle = <&phy4>;
211+
label = "lan1";
212+
nvmem-cells = <&macaddr_boarddata 0>;
213+
nvmem-cell-names = "mac-address";
214+
};
215+
216+
&blsp1_uart3 {
217+
pinctrl-0 = <&serial_3_pins>;
218+
pinctrl-names = "default";
219+
status = "okay";
220+
};
221+
222+
&prng {
223+
status = "okay";
224+
};
225+
226+
&cryptobam {
227+
status = "okay";
228+
};
229+
230+
&crypto {
231+
status = "okay";
232+
};
233+
234+
&qpic_bam {
235+
status = "okay";
236+
};
237+
238+
&qpic_nand {
239+
status = "okay";
240+
241+
nand@0 {
242+
reg = <0>;
243+
nand-ecc-strength = <4>;
244+
nand-ecc-step-size = <512>;
245+
nand-bus-width = <8>;
246+
247+
partitions {
248+
compatible = "qcom,smem-part";
249+
250+
partition-boarddata {
251+
label = "boarddata";
252+
253+
nvmem-layout {
254+
compatible = "fixed-layout";
255+
#address-cells = <1>;
256+
#size-cells = <1>;
257+
258+
macaddr_boarddata: macaddr@8 {
259+
compatible = "mac-base";
260+
reg = <0x8 0x6>;
261+
#nvmem-cell-cells = <1>;
262+
};
263+
};
264+
};
265+
266+
partition-0-appsblenv {
267+
label = "0:appsblenv";
268+
269+
nvmem-layout {
270+
compatible = "u-boot,env";
271+
env-size = <0x40000>;
272+
};
273+
};
274+
};
275+
};
276+
};
277+
278+
&wifi {
279+
status = "okay";
280+
qcom,ath11k-calibration-variant = "Netgear-RBK350";
281+
};

target/linux/qualcommax/image/ipq60xx.mk

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ define Build/wax610-netgear-tar
1010
rm -rf $@.tmp
1111
endef
1212

13+
define Build/netgear-rbx350-qsdk-ipq-factory
14+
$(CP) $(FLASH_SCRIPT) $(KDIR_TMP)/
15+
16+
echo "VERSION : V5.0.0.0_$(LINUX_VERSION)" > $@.metadata
17+
echo "MODEL_ID : $(DEVICE_MODEL)" >> $@.metadata
18+
19+
$(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh $@.its $(FLASH_SCRIPT) txt $@.metadata ubi $@
20+
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new
21+
@mv $@.new $@
22+
endef
23+
1324
define Device/8devices_mango-dvk
1425
$(call Device/FitImageLzma)
1526
DEVICE_VENDOR := 8devices
@@ -145,6 +156,31 @@ define Device/linksys_mr7500
145156
endef
146157
TARGET_DEVICES += linksys_mr7500
147158

159+
define Device/netgear_rbx350
160+
$(call Device/FitImage)
161+
$(call Device/UbiFit)
162+
SOC := ipq6018
163+
DEVICE_VENDOR := Netgear
164+
BLOCKSIZE := 128k
165+
PAGESIZE := 2048
166+
DEVICE_PACKAGES := ipq-wifi-netgear_rbk350
167+
FLASH_SCRIPT := netgear_rbx350.bootscript
168+
IMAGES += factory.img
169+
IMAGE/factory.img := append-ubi | netgear-rbx350-qsdk-ipq-factory
170+
endef
171+
172+
define Device/netgear_rbr350
173+
$(call Device/netgear_rbx350)
174+
DEVICE_MODEL := RBR350
175+
endef
176+
TARGET_DEVICES += netgear_rbr350
177+
178+
define Device/netgear_rbs350
179+
$(call Device/netgear_rbx350)
180+
DEVICE_MODEL := RBS350
181+
endef
182+
TARGET_DEVICES += netgear_rbs350
183+
148184
define Device/netgear_wax214
149185
$(call Device/FitImage)
150186
$(call Device/UbiFit)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
imxtract $imgaddr ubi
2+
switch_rootfs 0
3+
smeminfo
4+
nand erase.part fs
5+
nand write $fileaddr fs $filesize
6+
setenv bootcmd "ubi part fs && ubi read 0x44000000 kernel && bootm"
7+
saveenv

0 commit comments

Comments
 (0)