[rdkb][common][bsp][Refactor and sync kernel from openwrt]

[Description]
6427cab [MAC80211][app][Update smp.sh for eth2]
87b6df6 [MAC80211][infra][Update dts for mt76 to support flash mode]
98ac6c0 [kernel][common][eth][Add phy state sanity check to heartbeat thread for Aquantia firwmare download]

[Release-log]

Change-Id: Ia4c8cfb59a43343a6b4f2d32e7b57b3c8ef44f50
diff --git a/recipes-devtools/smp/files/001-rdkb-smp-ifname.patch b/recipes-devtools/smp/files/001-rdkb-smp-ifname.patch
new file mode 100644
index 0000000..fc0e19b
--- /dev/null
+++ b/recipes-devtools/smp/files/001-rdkb-smp-ifname.patch
@@ -0,0 +1,44 @@
+diff --git a/smp-mt76.sh b/smp-mt76.sh
+index b71c90a..d43ebe8 100755
+--- a/smp-mt76.sh
++++ b/smp-mt76.sh
+@@ -5,7 +5,8 @@ CPU_LIST=`cat /proc/interrupts | sed -n '1p'`
+ NUM_OF_CPU=0; for i in $CPU_LIST; do NUM_OF_CPU=`expr $NUM_OF_CPU + 1`; done;
+ DEFAULT_RPS=0
+ 
+-. /lib/functions.sh
++#. /lib/functions.sh
++board_name=`cat /proc/device-tree/model`
+ 
+ RPS_IF_LIST=""
+ NUM_WIFI_CARD=0
+@@ -22,9 +23,9 @@ get_if_info()
+ 	NET_IF_LIST=`ls /sys/class/net`
+ 	for vif in $NET_IF_LIST;
+ 	do
+-		if [[ "$vif" == "eth"* ]] ||  \
++		if [[ "$vif" == "eth"* ]] || [[ "$vif" == "erouter"* ]] || \
+ 		[[ "$vif" == "lan"* ]] || [[ "$vif" == "wan"* ]] || \
+-		[[ "$vif" == "wlan"* ]] || [[ "$vif" == "phy"* ]]; then
++		[[ "$vif" == "wlan"* ]] || [[ "$vif" == "wifi"* ]]; then
+ 			RPS_IF_LIST="$RPS_IF_LIST $vif"
+ 		fi
+ 	done;
+@@ -122,7 +123,7 @@ MT7988()
+ 
+ 	for vif in $NET_IF_LIST;
+ 	do
+-		if [[ "$vif" == "wlan"* ]] || [[ "$vif" == "phy"* ]]; then
++		if [[ "$vif" == "wlan"* ]] || [[ "$vif" == "wifi"* ]]; then
+ 			WIFI_IF_LIST="$WIFI_IF_LIST $vif"
+ 		fi
+ 	done;
+@@ -325,7 +326,7 @@ MT7622()
+ 
+ setup_model()
+ {
+-	board=$(board_name)
++	board=$board_name
+ 	num_of_wifi=$NUM_WIFI_CARD
+ 
+ 	if [[ $board == *"7988"* ]]; then
diff --git a/recipes-devtools/smp/files/smp-mt76.sh b/recipes-devtools/smp/files/smp-mt76.sh
index a03bd7c..b71c90a 100644
--- a/recipes-devtools/smp/files/smp-mt76.sh
+++ b/recipes-devtools/smp/files/smp-mt76.sh
@@ -5,8 +5,8 @@
 NUM_OF_CPU=0; for i in $CPU_LIST; do NUM_OF_CPU=`expr $NUM_OF_CPU + 1`; done;
 DEFAULT_RPS=0
 
-#. /lib/functions.sh
-board_name=`cat /proc/device-tree/model`
+. /lib/functions.sh
+
 RPS_IF_LIST=""
 NUM_WIFI_CARD=0
 WIFI_RADIO1=0
@@ -14,6 +14,7 @@
 WIFI_RADIO3=0
 WED_ENABLE=0
 
+module_param=/sys/module/mt7915e/parameters/wed_enable
 get_if_info()
 {
 	# try to get all wifi and eth net interface.
@@ -21,9 +22,9 @@
 	NET_IF_LIST=`ls /sys/class/net`
 	for vif in $NET_IF_LIST;
 	do
-		if [[ "$vif" == "erouter"* ]] || [[ "$vif" == "eth1" ]] || \
-		[[ "$vif" == "lan"* ]] || \
-		[[ "$vif" == "wifi"* ]]; then
+		if [[ "$vif" == "eth"* ]] ||  \
+		[[ "$vif" == "lan"* ]] || [[ "$vif" == "wan"* ]] || \
+		[[ "$vif" == "wlan"* ]] || [[ "$vif" == "phy"* ]]; then
 			RPS_IF_LIST="$RPS_IF_LIST $vif"
 		fi
 	done;
@@ -39,9 +40,10 @@
 		if [[ $v == *"wmac"* ]]; then
 			WIFI_RADIO1=1
 		fi
+
 		if [[ $v == *"wbsys"* ]]; then
-                        WIFI_RADIO1=1
-                fi
+			WIFI_RADIO1=1
+		fi
 
 		if [[ $v == *"pci0000"* ]]; then
 			WIFI_RADIO2=1
@@ -52,7 +54,10 @@
 		fi
 	done;
 
-	WED_ENABLE_LIST=`cat /sys/module/mt7915e/parameters/wed_enable`
+	WED_ENABLE_LIST=
+	if [[ -f "$module_param" ]]; then
+		WED_ENABLE_LIST=`cat $module_param`
+	fi
 	for v in $WED_ENABLE_LIST;
 	do
 		dbg2 "wed enable ori info $v"
@@ -84,6 +89,75 @@
 	dbg2 "CPU${1}_RPS=\"\$CPU${1}_RPS $2\""
 }
 
+MT7988()
+{
+	num_of_wifi=$1
+	DEFAULT_RPS=0
+
+	#Physical IRQ# setting
+	eth0_irq=229
+	eth1_irq=230
+	eth2_irq=231
+	wifi1_irq_pcie0=524288
+	wifi1_irq_pcie1=134742016
+	wifi2_irq_pcie0=
+	wifi2_irq_pcie1=
+
+	if [[ "$WED_ENABLE" -eq "1" ]]; then
+		dbg2 "WED_ENABLE ON irq/iptable setting"
+		#TCP Binding
+		iptables -D FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j FLOWOFFLOAD --hw
+		iptables -I FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j FLOWOFFLOAD --hw
+		ip6tables -D FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j FLOWOFFLOAD --hw
+		ip6tables -I FORWARD -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j FLOWOFFLOAD --hw
+		#UDP Binding
+		iptables -D FORWARD -p udp -j FLOWOFFLOAD --hw
+		iptables -I FORWARD -p udp -j FLOWOFFLOAD --hw
+		ip6tables -D FORWARD -p udp -j FLOWOFFLOAD --hw
+		ip6tables -I FORWARD -p udp -j FLOWOFFLOAD --hw
+
+	else
+		dbg2 "WED_ENABLE OFF irq/iptable seting"
+	fi
+
+	for vif in $NET_IF_LIST;
+	do
+		if [[ "$vif" == "wlan"* ]] || [[ "$vif" == "phy"* ]]; then
+			WIFI_IF_LIST="$WIFI_IF_LIST $vif"
+		fi
+	done;
+	dbg2 "$WIFI_IF_LIST = $WIFI_IF_LIST"
+	# Please update the CPU binding in each cases.
+	# CPU#_AFFINITY="add binding irq number here"
+	# CPU#_RPS="add binding interface name here"
+	if [ "$num_of_wifi" = "0" ]; then
+		CPU0_AFFINITY="$eth0_irq"
+		CPU1_AFFINITY="$eth1_irq"
+		CPU2_AFFINITY="$eth2_irq"
+		CPU3_AFFINITY=""
+
+		CPU0_RPS="$RPS_IF_LIST"
+		CPU1_RPS="$RPS_IF_LIST"
+		CPU2_RPS="$RPS_IF_LIST"
+		CPU3_RPS="$RPS_IF_LIST"
+	else
+		#we bound all wifi card to cpu0 and bound eth to cpu
+		CPU0_AFFINITY=""
+		CPU1_AFFINITY=""
+		CPU2_AFFINITY="$eth1_irq"
+		CPU3_AFFINITY="$eth0_irq $eth2_irq"
+
+		CPU0_RPS="$WIFI_IF_LIST"
+		CPU1_RPS="$WIFI_IF_LIST"
+		CPU2_RPS="$WIFI_IF_LIST"
+		CPU3_RPS=""
+	fi
+	dbg2 "CPU0_AFFINITY = $CPU0_AFFINITY"
+	dbg2 "CPU1_AFFINITY = $CPU1_AFFINITY"
+	dbg2 "CPU2_AFFINITY = $CPU2_AFFINITY"
+	dbg2 "CPU3_AFFINITY = $CPU3_AFFINITY"
+}
+
 MT7986()
 {
 	num_of_wifi=$1
@@ -251,10 +325,13 @@
 
 setup_model()
 {
-	board=$board_name
+	board=$(board_name)
 	num_of_wifi=$NUM_WIFI_CARD
 
-	if [[ $board == *"7986"* ]]; then
+	if [[ $board == *"7988"* ]]; then
+		dbg "setup_model: MT7988 NUM_WIFI_CARD=$num_of_wifi"
+		MT7988 $num_of_wifi
+	elif [[ $board == *"7986"* ]]; then
 		dbg "setup_model: MT7986 NUM_WIFI_CARD=$num_of_wifi"
 		MT7986 $num_of_wifi
 	elif [[ $board == *"7981"* ]]; then
diff --git a/recipes-devtools/smp/files/smp.service b/recipes-devtools/smp/files/smp.service
index e0d91ec..4473e08 100644
--- a/recipes-devtools/smp/files/smp.service
+++ b/recipes-devtools/smp/files/smp.service
@@ -7,6 +7,7 @@
 Type=oneshot
 #StandardOutput=kmsg+console
 ExecStart=/bin/sh /usr/sbin/smp-mt76.sh
+RemainAfterExit=yes
 
 [Install]
 WantedBy=wifi-initialized.target
diff --git a/recipes-devtools/smp/smp_1.0.bb b/recipes-devtools/smp/smp_1.0.bb
index ce7b2ba..ceaaf88 100644
--- a/recipes-devtools/smp/smp_1.0.bb
+++ b/recipes-devtools/smp/smp_1.0.bb
@@ -10,6 +10,7 @@
     file://COPYING \
     file://smp-mt76.sh \
     file://smp.service \
+    file://001-rdkb-smp-ifname.patch \
     "
 
 SYSTEMD_PACKAGES = "${PN}"
@@ -18,7 +19,7 @@
 
 do_install() {
     install -d ${D}${sbindir}
-    install -m 0755 ${WORKDIR}/smp-mt76.sh ${D}${sbindir}
+    install -m 0755 ${S}/smp-mt76.sh ${D}${sbindir}
 	install -d ${D}${systemd_unitdir}/system/
 	install -m 0644 ${S}/smp.service ${D}${systemd_unitdir}/system
 }
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988.dtsi
index 3dd999f..46f0708 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988.dtsi
@@ -582,6 +582,10 @@
 			#interrupt-cells = <1>;
 			interrupt-controller;
 		};
+
+		slot0: pcie@0,0 {
+			reg = <0x0000 0 0 0 0>;
+		};
 	};
 
 	pcie1: pcie@11310000 {
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-10g-spim-nand.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-10g-spim-nand.dts
index c7aa87b..0352d83 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-10g-spim-nand.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-dsa-10g-spim-nand.dts
@@ -490,3 +490,11 @@
 	mtketh-max-gmac = <3>;
 	status = "okay";
 };
+
+&slot0 {
+	mt7996@0,0 {
+		reg = <0x0000 0 0 0 0>;
+		device_type = "pci";
+		mediatek,mtd-eeprom = <&factory 0x0>;
+	};
+};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-gsw-10g-spim-nand.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-gsw-10g-spim-nand.dts
index 58d0733..6045169 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-gsw-10g-spim-nand.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7988a-gsw-10g-spim-nand.dts
@@ -449,3 +449,11 @@
 	no-sdio;
 	status = "okay";
 };
+
+&slot0 {
+	mt7996@0,0 {
+		reg = <0x0000 0 0 0 0>;
+		device_type = "pci";
+		mediatek,mtd-eeprom = <&factory 0x0>;
+	};
+};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/751-net-phy-aquantia-add-firmware-download.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/751-net-phy-aquantia-add-firmware-download.patch
index f568322..6eb5bf4 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/751-net-phy-aquantia-add-firmware-download.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/751-net-phy-aquantia-add-firmware-download.patch
@@ -148,7 +148,7 @@
 index 0000000..7aeec86
 --- /dev/null
 +++ b/drivers/net/phy/aquantia_firmware.c
-@@ -0,0 +1,1095 @@
+@@ -0,0 +1,1096 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/* FW download driver for Aquantia PHY
 + */
@@ -1062,7 +1062,8 @@
 +		if (kthread_should_stop())
 +			break;
 +
-+		if (aqr_firmware_check_heartbeat(phydev) == 1) {
++		if (phydev->state != PHY_HALTED &&
++		    aqr_firmware_check_heartbeat(phydev) == 1) {
 +			priv->fw_initialized = false;
 +			aqr_firmware_download_single(phydev);
 +		}