From 8eab5b2526703a3183012852c75e8512d50d3f7e Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Tue, 20 Jun 2023 09:49:53 +0200 Subject: [PATCH] ipq806x: enable and setup multi-CPU port for qca8k switch Enable and setup multi-cpu for qca8k switch for ipq806x based devices. Rework each DTS to enable the secondary CPU port on QCA8K switch and apply the required values originally set by the OEM in the old swconfig node. In original firmware the first CPU port was always assigned to the WAN port and the secondary CPU port was assigned to the rest of the LAN port. Follow this original implementation using an init.d script. To setup the CPU port ip tools is required. Add additional default package ip-tiny to correctly setup the CPU port. Signed-off-by: Christian Marangi --- target/linux/ipq806x/Makefile | 2 +- .../base-files/etc/init.d/qca8k_set_port | 45 +++++++++++++++++++ .../arm/boot/dts/qcom-ipq8062-wg2600hp3.dts | 4 +- .../boot/dts/qcom-ipq8064-ad7200-c2600.dtsi | 9 ++-- .../arch/arm/boot/dts/qcom-ipq8064-d7800.dts | 9 ++-- .../arm/boot/dts/qcom-ipq8064-eax500.dtsi | 9 ++-- .../arch/arm/boot/dts/qcom-ipq8064-g10.dts | 9 ++-- .../arch/arm/boot/dts/qcom-ipq8064-onhub.dtsi | 9 ++-- .../arch/arm/boot/dts/qcom-ipq8064-r7500.dts | 7 ++- .../arm/boot/dts/qcom-ipq8064-r7500v2.dts | 9 ++-- .../arm/boot/dts/qcom-ipq8064-vr2600v.dts | 9 ++-- .../arm/boot/dts/qcom-ipq8064-wg2600hp.dts | 10 ++--- .../arch/arm/boot/dts/qcom-ipq8064-wpq864.dts | 9 ++-- .../arm/boot/dts/qcom-ipq8064-wxr-2533dhp.dts | 9 ++-- .../arm/boot/dts/qcom-ipq8065-nbg6817.dts | 9 ++-- .../arm/boot/dts/qcom-ipq8065-nighthawk.dtsi | 9 ++-- .../boot/dts/qcom-ipq8065-rt4230w-rev6.dts | 11 ++--- .../arm/boot/dts/qcom-ipq8065-tr4400-v2.dts | 9 ++-- 18 files changed, 95 insertions(+), 92 deletions(-) create mode 100755 target/linux/ipq806x/base-files/etc/init.d/qca8k_set_port diff --git a/target/linux/ipq806x/Makefile b/target/linux/ipq806x/Makefile index 74a0007a4e01..1bcea1fa80fd 100644 --- a/target/linux/ipq806x/Makefile +++ b/target/linux/ipq806x/Makefile @@ -21,6 +21,6 @@ DEFAULT_PACKAGES += \ kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport \ kmod-phy-qcom-ipq806x-usb kmod-usb3 kmod-usb-dwc3-qcom \ kmod-ath10k-ct wpad-basic-mbedtls \ - uboot-envtools + uboot-envtools ip-tiny $(eval $(call BuildTarget)) diff --git a/target/linux/ipq806x/base-files/etc/init.d/qca8k_set_port b/target/linux/ipq806x/base-files/etc/init.d/qca8k_set_port new file mode 100755 index 000000000000..bf14907b8fba --- /dev/null +++ b/target/linux/ipq806x/base-files/etc/init.d/qca8k_set_port @@ -0,0 +1,45 @@ +#!/bin/sh /etc/rc.common + +START=15 + +set_qca8k_port() { + local port=$1 + local master=$2 + + ip link set $port type dsa conduit $master +} + +boot() { + # Restore original implementation where the eth1 (port 6) was used + # for the lan port and the eth0 (port 0) was used for the wan port + case $(board_name) in + askey,rt4230w-rev6 |\ + asrock,g10 |\ + buffalo,wxr-2533dhp |\ + compex,wpq864 |\ + nec,wg2600hp |\ + nec,wg2600hp3 |\ + netgear,d7800 |\ + netgear,r7500 |\ + netgear,r7500v2 |\ + netgear,r7800 |\ + netgear,xr450 |\ + netgear,xr500 |\ + nokia,ac400i |\ + tplink,ad7200 |\ + tplink,c2600 |\ + tplink,vr2600v |\ + zyxel,nbg6817) + set_qca8k_port lan1 eth1 + set_qca8k_port lan2 eth1 + set_qca8k_port lan3 eth1 + set_qca8k_port lan4 eth1 + set_qca8k_port wan eth0 + ;; + asus,onhub |\ + tplink,onhub) + set_qca8k_port lan1 eth1 + set_qca8k_port wan eth0 + ;; + esac +} diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8062-wg2600hp3.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8062-wg2600hp3.dts index e3987c6d07df..5f78d91b9ea9 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8062-wg2600hp3.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8062-wg2600hp3.dts @@ -471,19 +471,19 @@ phy-handle = <&phy_port5>; }; - /* port@6 { reg = <6>; label = "cpu"; ethernet = <&gmac2>; phy-mode = "sgmii"; + qca,sgmii-enable-pll; + qca,sgmii-rxclk-falling-edge; fixed-link { speed = <1000>; full-duplex; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ad7200-c2600.dtsi b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ad7200-c2600.dtsi index 9d05cf40326a..c425c9cd2ed3 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ad7200-c2600.dtsi +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-ad7200-c2600.dtsi @@ -396,21 +396,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-d7800.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-d7800.dts index c8e4a1810eb9..7e4e0c829c27 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-d7800.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-d7800.dts @@ -399,21 +399,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-eax500.dtsi b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-eax500.dtsi index fac43e785fb2..e5cc2424190e 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-eax500.dtsi +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-eax500.dtsi @@ -244,21 +244,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-g10.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-g10.dts index 6795e8fa4fb3..efcb6ec24110 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-g10.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-g10.dts @@ -217,21 +217,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-onhub.dtsi b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-onhub.dtsi index d20b55c2c296..b84c8512ae91 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-onhub.dtsi +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-onhub.dtsi @@ -100,21 +100,18 @@ phy-handle = <&phy_port2>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500.dts index ff464d9d1e8f..c58c289d35d9 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500.dts @@ -313,19 +313,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts index 030d4456683f..719a423cad3d 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts @@ -396,21 +396,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-vr2600v.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-vr2600v.dts index 4fddf5e90a42..8104ce182984 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-vr2600v.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-vr2600v.dts @@ -428,21 +428,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wg2600hp.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wg2600hp.dts index 47829a08aa27..87b05b57ba97 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wg2600hp.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wg2600hp.dts @@ -199,21 +199,19 @@ switch@10 { phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; + qca,sgmii-rxclk-falling-edge; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wpq864.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wpq864.dts index 37055f110b49..f8b20b0635f2 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wpq864.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wpq864.dts @@ -329,21 +329,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wxr-2533dhp.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wxr-2533dhp.dts index 97d76e11f0d1..2d761ee3557d 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wxr-2533dhp.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-wxr-2533dhp.dts @@ -254,21 +254,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nbg6817.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nbg6817.dts index 96becfb4c1e6..693e14c12077 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nbg6817.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nbg6817.dts @@ -304,21 +304,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi index ecd2c5634a9e..51ad5ac8eefc 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi @@ -361,21 +361,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac2>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-rt4230w-rev6.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-rt4230w-rev6.dts index 87948bb1d6ab..6bf2cfe128ac 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-rt4230w-rev6.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-rt4230w-rev6.dts @@ -356,21 +356,18 @@ phy-handle = <&phy_port5>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; - ethernet = <&gmac2>; - phy-mode = "rgmii"; + ethernet = <&gmac1>; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-tr4400-v2.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-tr4400-v2.dts index bb00bbe7d317..600bcc8421d9 100644 --- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-tr4400-v2.dts +++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-tr4400-v2.dts @@ -363,21 +363,18 @@ phy-handle = <&phy_port4>; }; - /* port@6 { - reg = <0>; + reg = <6>; label = "cpu"; ethernet = <&gmac1>; - phy-mode = "rgmii"; + phy-mode = "sgmii"; + qca,sgmii-enable-pll; fixed-link { speed = <1000>; full-duplex; - pause; - asym-pause; }; }; - */ }; mdio { -- 2.30.2