[][kernel-6.6][common][eth][Add Ethernet HW LRO support]

[Description]
Add Ethernet HW LRO support.

We can use the standard interface command to adjust the HW LRO
configuration.

Add HW LRO RX rule:
ethtool -N [interface] flow-type tcp4 dst-ip [IP] action 0 loc [0/1]
Delete HW LRO RX rule:
ethtool -N [interface] delete [0/1]
Enable/Disable HW LRO rule:
ethtool -K [interface] lro [on | off]
Show the current offload features:
ethtool -k [interface]

We can use the following command to adjust SMP affinity, ensuring
that interrupts are evenly assigned to 4 CPUs:
echo [CPU bitmap num] > /proc/irq/[virtual IRQ ID]/smp_affinity.
Since HW LRO only has 4 RX rings, we can only accelerate 4 streams
simultaneously. We were able to measure RX throughput of 9.4Gbps
using iperf3 on the MT7988A.

The experimental command is as follows,
PC: iperf3 -c [IP] -P 4
DUT: iperf3 -s

When we added the HW LRO feature, we also adjusted the global
configuration of ADMA and the usage conditions of the page pool,
increasing the RX throughput of RSS from 7.3Gbps to 9Gbps.

[Release-log]
N/A


Change-Id: Id6225bb7ffa66da72db223e7b6bf2e558f8b45e5
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/10305109
3 files changed
tree: f1d929466e4bcd78d2e013ed049838c1dde4f0e2
  1. 21.02/
  2. 24.10/
  3. autobuild/
  4. feed/
  5. master/
  6. scripts/
  7. tools/
  8. .checkpatch.conf
  9. .clang-format
  10. .gitignore
  11. mtk-openwrt-feeds-commit-sha-mapping-table.md
  12. prepare_sdk.sh
  13. Readme.md
Readme.md

Brief introduction for using MediaTek released OpenWrt SDK

1. Build system setup

2. Clone vanilla OpenWrt

Currently two release branches are supported:

  1. 21.02 This is the current in-use branch

    git clone -b openwrt-21.02 https://git.openwrt.org/openwrt/openwrt.git
    
  2. master (will be 24.0x branch later) The next version in development

    git clone https://git.openwrt.org/openwrt/openwrt.git
    

3. Add MediaTek OpenWrt feed

cd openwrt
echo "src-git mtk_openwrt_feed https://git01.mediatek.com/openwrt/feeds/mtk-openwrt-feeds" >> feeds.conf.default
./scripts/feeds update -a
./scripts/feeds install -a

4. Apply MediaTek OpenWrt files and patches

  1. 21.02 branch

    cp -af ./feeds/mtk_openwrt_feed/21.02/files/* .
    cp -af ./feeds/mtk_openwrt_feed/tools .
    for file in $(find ./feeds/mtk_openwrt_feed/21.02/patches-base -name "*.patch" | sort); do patch -f -p1 -i ${file}; done
    for file in $(find ./feeds/mtk_openwrt_feed/21.02/patches-feeds -name "*.patch" | sort); do patch -f -p1 -i ${file}; done
    
  2. master branch

    cp -af ./feeds/mtk_openwrt_feed/master/files/* .
    for file in $(find ./feeds/mtk_openwrt_feed/master/patches-base -name "*.patch" | sort); do patch -f -p1 -i ${file}; done
    

5. Configuration

make menuconfig
  1. 21.02 branch

    Target System -> MediaTek Ralink ARM
    Subtarget -> MT7981 / MT7986 / MT7988
    Target Profile -> select as needed
    
  2. master branch

    Target System -> MediaTek Ralink ARM
    Subtarget -> Filogic 8x0 (MT798x)
    Target Profile -> select as needed
    

6. Build

make V=s -j$(nproc)

MT7987 NPU Only (without WiFi) Build

#Get Openwrt 21.02 source code from Git server
git clone --branch openwrt-21.02 https://git.openwrt.org/openwrt/openwrt.git

#Get Openwrt master source code from Git Server
git clone --branch master https://git.openwrt.org/openwrt/openwrt.git mac80211_package

#Get mtk-openwrt-feeds source code
git clone --branch master https://git01.mediatek.com/openwrt/feeds/mtk-openwrt-feeds

#Change to openwrt folder
cp -rf mtk-openwrt-feeds/autobuild/autobuild_5.4_mac80211_release openwrt
cd openwrt; mv autobuild_5.4_mac80211_release autobuild

#Add MTK feed
echo "src-git mtk_openwrt_feed https://git01.mediatek.com/openwrt/feeds/mtk-openwrt-feeds" >> feeds.conf.default

#Build MT7987 (Only for the 1st build)
bash autobuild/mt7987-npu/lede-branch-build-sanity.sh

#Further Build (After 1st full build)
./scripts/feeds update -a
make V=s PKG_HASH=skip PKG_MIRROR_HASH=skip