From ce1b42e095b64641fe5e9ec951906fd31e0c42db Mon Sep 17 00:00:00 2001 From: Markus Gothe Date: Mon, 10 Nov 2025 19:25:25 +0100 Subject: [PATCH] qosmngr: airoha: Fix QoS issue with EN7523+IFC. When the LUT1 IFC table overflows it seems to affect tagged TCP-based VLAN traffic and ingress flows are not properly setup in HW NAT. --- qosmngr/files/airoha/lib/qos/airoha.sh | 61 +++++++++++++++----------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/qosmngr/files/airoha/lib/qos/airoha.sh b/qosmngr/files/airoha/lib/qos/airoha.sh index 00ca24580..e3827d83b 100755 --- a/qosmngr/files/airoha/lib/qos/airoha.sh +++ b/qosmngr/files/airoha/lib/qos/airoha.sh @@ -411,33 +411,42 @@ hw_commit_all() { /userfs/bin/qosrule discpline Enable 0 fi - if [ -x /userfs/bin/blapi_cmd ]; then - echo 1 > /proc/ifc_send_to_ppe - for tc in $(seq 0 7); do - if [ -s "/tmp/qos/dscp_values_${tc}_4" ]; then - sort -un "/tmp/qos/dscp_values_${tc}_4" | awk 'NR==1{first=$1;last=$1;next} - $1 == last+1 {last=$1;next} - {system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first} - END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}' - fi - if [ -s "/tmp/qos/dscp_values_${tc}_6" ]; then - [ -s "/tmp/qos/dscp_values_${tc}_4" ] && sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next} - $1 == last+1 {last=$1;next} - {system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0");first=$1;last=first} - END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0")}' - sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next} - $1 == last+1 {last=$1;next} - {system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first} - END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}' - fi - done - fi + if ! strings /proc/device-tree/compatible | grep -qFx econet,en7523; then + if [ -x /userfs/bin/blapi_cmd ]; then + echo 1 > /proc/ifc_send_to_ppe + for tc in $(seq 0 7); do + if [ -s "/tmp/qos/dscp_values_${tc}_4" ]; then + sort -un "/tmp/qos/dscp_values_${tc}_4" | awk 'NR==1{first=$1;last=$1;next} + $1 == last+1 {last=$1;next} + {system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first} + END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}' + fi + if [ -s "/tmp/qos/dscp_values_${tc}_6" ]; then + [ -s "/tmp/qos/dscp_values_${tc}_4" ] && sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next} + $1 == last+1 {last=$1;next} + {system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0");first=$1;last=first} + END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 0")}' + sort -un "/tmp/qos/dscp_values_${tc}_6" | awk 'NR==1{first=$1;last=$1;next} + $1 == last+1 {last=$1;next} + {system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1");first=$1;last=first} + END{system("/userfs/bin/blapi_cmd traffic set_traffic_class DSCP " first*4 " " or(last*4, 0x3) " 1")}' + fi + done + fi - if [ -x /userfs/bin/ifc ]; then - echo 1 > /proc/ifc_send_to_ppe - for pbit in $(seq 0 7); do - /userfs/bin/ifc add vip pbit $pbit - done + if [ -x /userfs/bin/ifc ]; then + echo 1 > /proc/ifc_send_to_ppe + for pbit in $(seq 0 7); do + /userfs/bin/ifc add vip pbit $pbit + done + fi + else + if [ -x /userfs/bin/ifc ]; then + echo 1 > /proc/ifc_send_to_ppe + for pbit in $(seq 1 7); do + /userfs/bin/ifc add vip pbit $pbit + done + fi fi hw_nat -! > /dev/null 2>&1