--- /dev/null
+From 6ec5b85ebb283798eb6e2c41c04d2c330f19a322 Mon Sep 17 00:00:00 2001
+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")
+
+---
+ 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
+
--- /dev/null
+From 0754c7596a3922abc8c9920047539bfdf958fb09 Mon Sep 17 00:00:00 2001
+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")
+
+---
+ 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
+
--- /dev/null
+From ef51ca796794a31ec6cffa6f0e784dfc3154d217 Mon Sep 17 00:00:00 2001
+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")
+
+---
+ .../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
+