generic: import patches to support QMAPv5 datapath
authorDavid Bauer <[email protected]>
Tue, 15 Jul 2025 13:44:44 +0000 (15:44 +0200)
committerDavid Bauer <[email protected]>
Sat, 27 Sep 2025 16:08:26 +0000 (18:08 +0200)
Import patches required to make the QMAPv5 datapath usable with the
rmnet layer.

Signed-off-by: David Bauer <[email protected]>
target/linux/generic/pending-6.6/620-net-qualcomm-rmnet-account-for-v5-headroom.patch [new file with mode: 0644]
target/linux/generic/pending-6.6/621-net-qualcomm-rmnet-increase-maximum-packet-size.patch [new file with mode: 0644]
target/linux/generic/pending-6.6/622-net-qualcomm-rmnet-parse-rmnet-flags-before-link-cre.patch [new file with mode: 0644]

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 (file)
index 0000000..4a7c48b
--- /dev/null
@@ -0,0 +1,33 @@
+From 6ec5b85ebb283798eb6e2c41c04d2c330f19a322 Mon Sep 17 00:00:00 2001
+From: David Bauer <[email protected]>
+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 <[email protected]>
+---
+ 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 (file)
index 0000000..0c540a0
--- /dev/null
@@ -0,0 +1,63 @@
+From 0754c7596a3922abc8c9920047539bfdf958fb09 Mon Sep 17 00:00:00 2001
+From: David Bauer <[email protected]>
+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 <[email protected]>
+---
+ 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 (file)
index 0000000..b1921ff
--- /dev/null
@@ -0,0 +1,61 @@
+From ef51ca796794a31ec6cffa6f0e784dfc3154d217 Mon Sep 17 00:00:00 2001
+From: David Bauer <[email protected]>
+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 <[email protected]>
+---
+ .../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
+