From: David Bauer Date: Tue, 15 Jul 2025 13:44:44 +0000 (+0200) Subject: generic: import patches to support QMAPv5 datapath X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=3d2f7677957166dbbcc1fc59e1c464c5065ffc90;p=openwrt%2Fstaging%2Fblocktrron.git generic: import patches to support QMAPv5 datapath Import patches required to make the QMAPv5 datapath usable with the rmnet layer. Signed-off-by: David Bauer --- diff --git a/target/linux/generic/pending-6.6/620-net-qualcomm-rmnet-account-for-v5-headroom.patch b/target/linux/generic/pending-6.6/620-net-qualcomm-rmnet-account-for-v5-headroom.patch new file mode 100644 index 0000000000..4a7c48bb6e --- /dev/null +++ b/target/linux/generic/pending-6.6/620-net-qualcomm-rmnet-account-for-v5-headroom.patch @@ -0,0 +1,33 @@ +From 6ec5b85ebb283798eb6e2c41c04d2c330f19a322 Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Mon, 10 Feb 2025 04:53:51 +0100 +Subject: [PATCH 1/3] net: qualcomm: rmnet: account for v5 headroom + +In case checksum header version 5 is used, the headroom +was not accounted for correctly when changing the MTU. + +Add the specific case to rmnet_vnd_headroom. + +Fixes: b6e5d27e32ef ("net: ethernet: rmnet: Add support for MAPv5 egress packets") + +Signed-off-by: David Bauer +--- + drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c +index 4f0ddcedfa97..850ea02b4713 100644 +--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c ++++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c +@@ -72,6 +72,8 @@ static int rmnet_vnd_headroom(struct rmnet_port *port) + + if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV4) + headroom += sizeof(struct rmnet_map_ul_csum_header); ++ else if (port->data_format & RMNET_FLAGS_EGRESS_MAP_CKSUMV5) ++ headroom += sizeof(struct rmnet_map_v5_csum_header); + + return headroom; + } +-- +2.47.2 + diff --git a/target/linux/generic/pending-6.6/621-net-qualcomm-rmnet-increase-maximum-packet-size.patch b/target/linux/generic/pending-6.6/621-net-qualcomm-rmnet-increase-maximum-packet-size.patch new file mode 100644 index 0000000000..0c540a028c --- /dev/null +++ b/target/linux/generic/pending-6.6/621-net-qualcomm-rmnet-increase-maximum-packet-size.patch @@ -0,0 +1,63 @@ +From 0754c7596a3922abc8c9920047539bfdf958fb09 Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Mon, 10 Feb 2025 05:01:59 +0100 +Subject: [PATCH 2/3] net: qualcomm: rmnet: increase maximum packet size + +On modern Qualcomm 5G platforms, the maximum aggregated packet size +with QMAPv5 has been doubled to 32KiB. + +Allow configuration of rmnet interfaces on parent interfaces +with an MTU of 32KiB in case protocol version 5 is used in downlink +direction. + +Fixes: e1d9a90a9bfd ("net: ethernet: rmnet: Support for ingress MAPv5 checksum offload") + +Signed-off-by: David Bauer +--- + drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h | 1 + + drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c | 10 +++++++++- + 2 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h b/drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h +index e1337f164faa..16b1913bc06a 100644 +--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h ++++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h +@@ -6,6 +6,7 @@ + #define _RMNET_PRIVATE_H_ + + #define RMNET_MAX_PACKET_SIZE 16384 ++#define RMNET_MAX_PACKET_SIZE_V5 32768 + #define RMNET_DFLT_PACKET_SIZE 1500 + #define RMNET_NEEDED_HEADROOM 16 + #define RMNET_TX_QUEUE_LEN 1000 +diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c +index 850ea02b4713..533c36f1a2d3 100644 +--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c ++++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c +@@ -78,6 +78,14 @@ static int rmnet_vnd_headroom(struct rmnet_port *port) + return headroom; + } + ++static int rmnet_vnd_max_packet_size(struct rmnet_port *port) ++{ ++ if (port->data_format & RMNET_FLAGS_INGRESS_MAP_CKSUMV5) ++ return RMNET_MAX_PACKET_SIZE_V5; ++ ++ return RMNET_MAX_PACKET_SIZE; ++} ++ + static int rmnet_vnd_change_mtu(struct net_device *rmnet_dev, int new_mtu) + { + struct rmnet_priv *priv = netdev_priv(rmnet_dev); +@@ -88,7 +96,7 @@ static int rmnet_vnd_change_mtu(struct net_device *rmnet_dev, int new_mtu) + + headroom = rmnet_vnd_headroom(port); + +- if (new_mtu < 0 || new_mtu > RMNET_MAX_PACKET_SIZE || ++ if (new_mtu < 0 || new_mtu > rmnet_vnd_max_packet_size(port) || + new_mtu > (priv->real_dev->mtu - headroom)) + return -EINVAL; + +-- +2.47.2 + diff --git a/target/linux/generic/pending-6.6/622-net-qualcomm-rmnet-parse-rmnet-flags-before-link-cre.patch b/target/linux/generic/pending-6.6/622-net-qualcomm-rmnet-parse-rmnet-flags-before-link-cre.patch new file mode 100644 index 0000000000..b1921ffe41 --- /dev/null +++ b/target/linux/generic/pending-6.6/622-net-qualcomm-rmnet-parse-rmnet-flags-before-link-cre.patch @@ -0,0 +1,61 @@ +From ef51ca796794a31ec6cffa6f0e784dfc3154d217 Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Sun, 16 Feb 2025 22:19:21 +0100 +Subject: [PATCH 3/3] net: qualcomm: rmnet: parse rmnet flags before link + creation + +The rmnet specific flags need to be parsed before link creation. +This is required to determine the correct maximum MTU size based on the +protocol version used. + +Fixes: e1d9a90a9bfd ("net: ethernet: rmnet: Support for ingress MAPv5 checksum offload") + +Signed-off-by: David Bauer +--- + .../ethernet/qualcomm/rmnet/rmnet_config.c | 23 ++++++++++--------- + 1 file changed, 12 insertions(+), 11 deletions(-) + +diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +index ba8763cac9d9..b8eaa13237e0 100644 +--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c ++++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +@@ -154,6 +154,18 @@ static int rmnet_newlink(struct net_device *dev, + goto err0; + + port = rmnet_get_port_rtnl(real_dev); ++ ++ if (data[IFLA_RMNET_FLAGS]) { ++ struct ifla_rmnet_flags *flags; ++ ++ flags = nla_data(data[IFLA_RMNET_FLAGS]); ++ data_format &= ~flags->mask; ++ data_format |= flags->flags & flags->mask; ++ } ++ ++ netdev_dbg(dev, "data format [0x%08X]\n", data_format); ++ port->data_format = data_format; ++ + err = rmnet_vnd_newlink(mux_id, dev, port, real_dev, ep, extack); + if (err) + goto err1; +@@ -167,17 +179,6 @@ static int rmnet_newlink(struct net_device *dev, + + hlist_add_head_rcu(&ep->hlnode, &port->muxed_ep[mux_id]); + +- if (data[IFLA_RMNET_FLAGS]) { +- struct ifla_rmnet_flags *flags; +- +- flags = nla_data(data[IFLA_RMNET_FLAGS]); +- data_format &= ~flags->mask; +- data_format |= flags->flags & flags->mask; +- } +- +- netdev_dbg(dev, "data format [0x%08X]\n", data_format); +- port->data_format = data_format; +- + return 0; + + err2: +-- +2.47.2 +