Skip to content

Commit

Permalink
qualcommax: ipq60xx: add Linksys MR7350 support
Browse files Browse the repository at this point in the history
Linksys MR7350 is a 802.11ax Dual-band router/AP.
Specifications:
* CPU: Qualcomm IPQ6000 Quad core Cortex-A53 1.2GHz
* RAM: 512MB of DDR3
* Storage: 256Mb NAND
* Ethernet: 5x1G RJ45 ports (QCA8075)
* WLAN:
	* 2.4GHz: Qualcomm QCN5022 2x2 802.11b/g/n/ax 574 Mbps PHY rate
	* 5GHz: Qualcomm QCN5052 2x2@80MHz or  802.11a/b/g/n/ac/ax 1201 Mbps PHY rate
* LED-s:
	* RGB system led

* Buttons: 1x Soft reset 1x WPS
* Power: 12V DC Jack

Installation instructions:
Open Linksys Web UI - http://192.168.1.1/ca or http://10.65.1.1/ca depending on your setup.
Login with your admin password. The default password can be found on a sticker under the device.
To enter into the support mode, click on the “CA” link and the bottom of the page.
Open the “Connectivity” menu and upload the squash-factory image with the “Choose file” button.
Click start. Ignore all the prompts and warnings by click “yes” in all the popups.
The Wifi radios are turned off by default. To configure the router, you will need to connect your computer to the LAN port of the device.
Then you would need to write openwrt to the other partition for it to work
- First Check booted partition
fw_printenv -n boot_part

Change the partition first:
fw_setenv boot_part 1
or
fw_setenv boot_part 2
depending on the current partition

- Then install Openwrt to the other partition if booted in slot 1:
mtd -r -e alt_kernel -n write openwrt-qualcommax-ipq60xx-linksys_mr7350-squashfs-factory.bin alt_kernel

- If in slot 2:
mtd -r -e kernel -n write openwrt-qualcommax-ipq60xx-linksys_mr7350-squashfs-factory.bin kernel

Signed-off-by: Vladyslav Andreichykov <vladdrako007@gmail.com>
  • Loading branch information
Vladdrako committed Mar 8, 2024
1 parent 4adba64 commit a46521d
Show file tree
Hide file tree
Showing 10 changed files with 487 additions and 0 deletions.
5 changes: 5 additions & 0 deletions package/boot/uboot-envtools/files/qualcommax_ipq60xx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ case "$board" in
[ -n "$idx" ] && \
ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x10000"
;;
linksys,mr7350)
idx="$(find_mtd_index u_env)"
[ -n "$idx" ] && \
ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x40000" "0x20000" "2"
;;
netgear,wax214)
idx="$(find_mtd_index 0:appsblenv)"
[ -n "$idx" ] && \
Expand Down
2 changes: 2 additions & 0 deletions package/firmware/ipq-wifi/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ ALLWIFIBOARDS:= \
dynalink_dl-wrx36 \
edgecore_eap102 \
edimax_cax1800 \
linksys_mr7350 \
linksys_mx4200 \
linksys_mx5300 \
netgear_lbr20 \
Expand Down Expand Up @@ -154,6 +155,7 @@ $(eval $(call generate-ipq-wifi-package,compex_wpq873,Compex WPQ-873))
$(eval $(call generate-ipq-wifi-package,dynalink_dl-wrx36,Dynalink DL-WRX36))
$(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102))
$(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800))
$(eval $(call generate-ipq-wifi-package,linksys_mr7350,Linksys MR7350))
$(eval $(call generate-ipq-wifi-package,linksys_mx4200,Linksys MX4200))
$(eval $(call generate-ipq-wifi-package,linksys_mx5300,Linksys MX5300))
$(eval $(call generate-ipq-wifi-package,netgear_lbr20,Netgear LBR20))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,370 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

/dts-v1/;

#include "ipq6018.dtsi"
#include "ipq6018-cp-cpu.dtsi"
#include "ipq6018-ess.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>

/ {
model = "Linksys MR7350";
compatible = "linksys,mr7350", "qcom,ipq6000";

aliases {
serial0 = &blsp1_uart3;
led-boot = &led_system_blue;
led-running = &led_system_blue;
led-failsafe = &led_system_red;
led-upgrade = &led_system_green;
};

chosen {
stdout-path = "serial0:115200n8";
bootargs-append = " root=/dev/ubiblock0_0";
};

keys {
compatible = "gpio-keys";

reset-button {
label = "reset";
gpios = <&tlmm 57 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};

wps-button {
label = "wps";
gpios = <&tlmm 56 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
};
};
};

&tlmm {
i2c3_pins: i2c3-pins {
pins = "gpio42", "gpio43";
function = "blsp2_i2c";
drive-strength = <8>;
};

mdio_pins: mdio-state {
mdc-pins {
pins = "gpio64";
function = "mdc";
drive-strength = <8>;
bias-pull-up;
};

mdio-pins {
pins = "gpio65";
function = "mdio";
drive-strength = <8>;
bias-pull-up;
};
};

reg_usb_vbus: regulator-usb-vbus {
compatible = "regulator-fixed";
regulator-name = "usb_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&tlmm 61 GPIO_ACTIVE_LOW>;
regulator-always-on;
};
};

&blsp1_uart3 {
pinctrl-0 = <&serial_3_pins>;
pinctrl-names = "default";
status = "okay";
};

&prng {
status = "okay";
};

&cryptobam {
status = "okay";
};

&crypto {
status = "okay";
};

&qpic_bam {
status = "okay";
};

&qpic_nand {
status = "okay";

nand@0 {
reg = <0>;

nand-ecc-strength = <4>;
nand-ecc-step-size = <512>;
nand-bus-width = <8>;

partitions {
compatible = "qcom,smem-part";
};
};
};

&blsp1_i2c3 {
pinctrl-0 = <&i2c3_pins>;
pinctrl-names = "default";
status = "okay";

led-controller@62 {
compatible = "nxp,pca9633";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x62>;
nxp,hw-blink;

led_system_red: red@0 {
reg = <0>;
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_STATUS;
};

led_system_green: green@1 {
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_STATUS;
};

led_system_blue: blue@2 {
reg = <2>;
color = <LED_COLOR_ID_BLUE>;
function = LED_FUNCTION_STATUS;
};
};
};

&mdio {
status = "okay";

pinctrl-0 = <&mdio_pins>;
pinctrl-names = "default";
reset-gpios = <&tlmm 75 GPIO_ACTIVE_LOW>;

ethernet-phy-package@0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "qcom,qca8075-package";
reg = <0>;
qcom,package-mode = "psgmii";

qca8075_0: ethernet-phy@0 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0>;

qcom,package-mode = "psgmii";

leds {
#address-cells = <1>;
#size-cells = <0>;

led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};

led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};

qca8075_1: ethernet-phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <1>;

leds {
#address-cells = <1>;
#size-cells = <0>;

led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};

led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};

qca8075_2: ethernet-phy@2 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <2>;

leds {
#address-cells = <1>;
#size-cells = <0>;

led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};

led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};

qca8075_3: ethernet-phy@3 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <3>;

leds {
#address-cells = <1>;
#size-cells = <0>;

led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};

led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_LAN;
default-state = "keep";
};
};
};

qca8075_4: ethernet-phy@4 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <4>;

leds {
#address-cells = <1>;
#size-cells = <0>;

led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_WAN;
default-state = "keep";
};

led@1 {
reg = <1>;
color = <LED_COLOR_ID_YELLOW>;
function = LED_FUNCTION_WAN;
default-state = "keep";
};
};
};
};
};

&switch {
status = "okay";

switch_lan_bmp = <(ESS_PORT1|ESS_PORT2|ESS_PORT3|ESS_PORT4)>; /* lan port bitmap */
switch_wan_bmp = <(ESS_PORT5)>; /* wan port bitmap */
switch_mac_mode = <MAC_MODE_PSGMII>; /* mac mode for uniphy instance0*/

qcom,port_phyinfo {
port@1 {
port_id = <1>;
phy_address = <0>;
};
port@2 {
port_id = <2>;
phy_address = <1>;
};
port@3 {
port_id = <3>;
phy_address = <2>;
};
port@4 {
port_id = <4>;
phy_address = <3>;
};
port@5 {
port_id = <5>;
phy_address = <4>;
};
};
};

&edma {
status = "okay";
};

&dp1 {
status = "okay";
phy-handle = <&qca8075_0>;
label = "lan1";
};

&dp2 {
status = "okay";
phy-handle = <&qca8075_1>;
label = "lan2";
};

&dp3 {
status = "okay";
phy-handle = <&qca8075_2>;
label = "lan3";
};

&dp4 {
status = "okay";
phy-handle = <&qca8075_3>;
label = "lan4";
};

&dp5 {
status = "okay";
phy-handle = <&qca8075_4>;
label = "wan";
};

&wifi {
status = "okay";

qcom,ath11k-calibration-variant = "Linksys-MR7350";
qcom,ath11k-fw-memory-mode = <1>;
};

&ssphy_0 {
status = "okay";
};

&qusb_phy_0 {
status = "okay";
};

&usb3 {
vbus-supply = <&reg_usb_vbus>;
status = "okay";
};
Loading

0 comments on commit a46521d

Please sign in to comment.