]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 13 Jan 2024 09:36:17 +0000 (10:36 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 13 Jan 2024 09:36:17 +0000 (10:36 +0100)
added patches:
net-usb-ax88179_178a-move-priv-to-driver_priv.patch
net-usb-ax88179_178a-remove-redundant-init-code.patch

queue-5.15/net-usb-ax88179_178a-move-priv-to-driver_priv.patch [new file with mode: 0644]
queue-5.15/net-usb-ax88179_178a-remove-redundant-init-code.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/net-usb-ax88179_178a-move-priv-to-driver_priv.patch b/queue-5.15/net-usb-ax88179_178a-move-priv-to-driver_priv.patch
new file mode 100644 (file)
index 0000000..7be68ef
--- /dev/null
@@ -0,0 +1,150 @@
+From 2bcbd3d8a7b4525cdb741fe82330edb6f5452c7f Mon Sep 17 00:00:00 2001
+From: Justin Chen <justinpopo6@gmail.com>
+Date: Wed, 20 Jul 2022 17:28:15 -0700
+Subject: net: usb: ax88179_178a: move priv to driver_priv
+
+From: Justin Chen <justinpopo6@gmail.com>
+
+commit 2bcbd3d8a7b4525cdb741fe82330edb6f5452c7f upstream.
+
+We need more space to save WoL context. So lets allocate memory
+for ax88179_data instead of using struct usbnet data field which
+only supports 5 words. We continue to use the struct usbnet data
+field for multicast filters. However since we no longer have the
+private data stored there, we can shift it to the beginning.
+
+Signed-off-by: Justin Chen <justinpopo6@gmail.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Cc: Jeffery Miller <jefferymiller@google.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/usb/ax88179_178a.c |   32 +++++++++++++++++++-------------
+ 1 file changed, 19 insertions(+), 13 deletions(-)
+
+--- a/drivers/net/usb/ax88179_178a.c
++++ b/drivers/net/usb/ax88179_178a.c
+@@ -170,7 +170,6 @@ struct ax88179_data {
+       u8  eee_enabled;
+       u8  eee_active;
+       u16 rxctl;
+-      u16 reserved;
+       u8 in_pm;
+       u32 wol_supported;
+       u32 wolopts;
+@@ -193,14 +192,14 @@ static const struct {
+ static void ax88179_set_pm_mode(struct usbnet *dev, bool pm_mode)
+ {
+-      struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
++      struct ax88179_data *ax179_data = dev->driver_priv;
+       ax179_data->in_pm = pm_mode;
+ }
+ static int ax88179_in_pm(struct usbnet *dev)
+ {
+-      struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
++      struct ax88179_data *ax179_data = dev->driver_priv;
+       return ax179_data->in_pm;
+ }
+@@ -733,7 +732,7 @@ ax88179_ethtool_set_eee(struct usbnet *d
+ static int ax88179_chk_eee(struct usbnet *dev)
+ {
+       struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
+-      struct ax88179_data *priv = (struct ax88179_data *)dev->data;
++      struct ax88179_data *priv = dev->driver_priv;
+       mii_ethtool_gset(&dev->mii, &ecmd);
+@@ -836,7 +835,7 @@ static void ax88179_enable_eee(struct us
+ static int ax88179_get_eee(struct net_device *net, struct ethtool_eee *edata)
+ {
+       struct usbnet *dev = netdev_priv(net);
+-      struct ax88179_data *priv = (struct ax88179_data *)dev->data;
++      struct ax88179_data *priv = dev->driver_priv;
+       edata->eee_enabled = priv->eee_enabled;
+       edata->eee_active = priv->eee_active;
+@@ -847,7 +846,7 @@ static int ax88179_get_eee(struct net_de
+ static int ax88179_set_eee(struct net_device *net, struct ethtool_eee *edata)
+ {
+       struct usbnet *dev = netdev_priv(net);
+-      struct ax88179_data *priv = (struct ax88179_data *)dev->data;
++      struct ax88179_data *priv = dev->driver_priv;
+       int ret;
+       priv->eee_enabled = edata->eee_enabled;
+@@ -898,8 +897,8 @@ static const struct ethtool_ops ax88179_
+ static void ax88179_set_multicast(struct net_device *net)
+ {
+       struct usbnet *dev = netdev_priv(net);
+-      struct ax88179_data *data = (struct ax88179_data *)dev->data;
+-      u8 *m_filter = ((u8 *)dev->data) + 12;
++      struct ax88179_data *data = dev->driver_priv;
++      u8 *m_filter = ((u8 *)dev->data);
+       data->rxctl = (AX_RX_CTL_START | AX_RX_CTL_AB | AX_RX_CTL_IPE);
+@@ -911,7 +910,7 @@ static void ax88179_set_multicast(struct
+       } else if (netdev_mc_empty(net)) {
+               /* just broadcast and directed */
+       } else {
+-              /* We use the 20 byte dev->data for our 8 byte filter buffer
++              /* We use dev->data for our 8 byte filter buffer
+                * to avoid allocating memory that is tricky to free later
+                */
+               u32 crc_bits;
+@@ -1310,11 +1309,15 @@ static void ax88179_get_mac_addr(struct
+ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)
+ {
+-      struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
++      struct ax88179_data *ax179_data;
+       usbnet_get_endpoints(dev, intf);
+-      memset(ax179_data, 0, sizeof(*ax179_data));
++      ax179_data = kzalloc(sizeof(*ax179_data), GFP_KERNEL);
++      if (!ax179_data)
++              return -ENOMEM;
++
++      dev->driver_priv = ax179_data;
+       dev->net->netdev_ops = &ax88179_netdev_ops;
+       dev->net->ethtool_ops = &ax88179_ethtool_ops;
+@@ -1343,6 +1346,7 @@ static int ax88179_bind(struct usbnet *d
+ static void ax88179_unbind(struct usbnet *dev, struct usb_interface *intf)
+ {
++      struct ax88179_data *ax179_data = dev->driver_priv;
+       u16 tmp16;
+       /* Configure RX control register => stop operation */
+@@ -1355,6 +1359,8 @@ static void ax88179_unbind(struct usbnet
+       /* Power down ethernet PHY */
+       tmp16 = 0;
+       ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, &tmp16);
++
++      kfree(ax179_data);
+ }
+ static void
+@@ -1527,7 +1533,7 @@ ax88179_tx_fixup(struct usbnet *dev, str
+ static int ax88179_link_reset(struct usbnet *dev)
+ {
+-      struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
++      struct ax88179_data *ax179_data = dev->driver_priv;
+       u8 tmp[5], link_sts;
+       u16 mode, tmp16, delay = HZ / 10;
+       u32 tmp32 = 0x40000000;
+@@ -1602,7 +1608,7 @@ static int ax88179_reset(struct usbnet *
+       u8 buf[5];
+       u16 *tmp16;
+       u8 *tmp;
+-      struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
++      struct ax88179_data *ax179_data = dev->driver_priv;
+       struct ethtool_eee eee_data;
+       tmp16 = (u16 *)buf;
diff --git a/queue-5.15/net-usb-ax88179_178a-remove-redundant-init-code.patch b/queue-5.15/net-usb-ax88179_178a-remove-redundant-init-code.patch
new file mode 100644 (file)
index 0000000..ffe5a40
--- /dev/null
@@ -0,0 +1,148 @@
+From 9718f9ce5b86e2f4e6364762018980f0222c2e5e Mon Sep 17 00:00:00 2001
+From: Justin Chen <justinpopo6@gmail.com>
+Date: Wed, 20 Jul 2022 17:28:12 -0700
+Subject: net: usb: ax88179_178a: remove redundant init code
+
+From: Justin Chen <justinpopo6@gmail.com>
+
+commit 9718f9ce5b86e2f4e6364762018980f0222c2e5e upstream.
+
+Bind and reset are basically doing the same thing. Remove the duplicate
+code and have bind call into reset.
+
+Signed-off-by: Justin Chen <justinpopo6@gmail.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Cc: Jeffery Miller <jefferymiller@google.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/usb/ax88179_178a.c |   85 +----------------------------------------
+ 1 file changed, 4 insertions(+), 81 deletions(-)
+
+--- a/drivers/net/usb/ax88179_178a.c
++++ b/drivers/net/usb/ax88179_178a.c
+@@ -164,6 +164,8 @@
+       #define GMII_PHY_PGSEL_PAGE3    0x0003
+       #define GMII_PHY_PGSEL_PAGE5    0x0005
++static int ax88179_reset(struct usbnet *dev);
++
+ struct ax88179_data {
+       u8  eee_enabled;
+       u8  eee_active;
+@@ -1308,47 +1310,12 @@ static void ax88179_get_mac_addr(struct
+ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf)
+ {
+-      u8 buf[5];
+-      u16 *tmp16;
+-      u8 *tmp;
+       struct ax88179_data *ax179_data = (struct ax88179_data *)dev->data;
+-      struct ethtool_eee eee_data;
+       usbnet_get_endpoints(dev, intf);
+-      tmp16 = (u16 *)buf;
+-      tmp = (u8 *)buf;
+-
+       memset(ax179_data, 0, sizeof(*ax179_data));
+-      /* Power up ethernet PHY */
+-      *tmp16 = 0;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, tmp16);
+-      *tmp16 = AX_PHYPWR_RSTCTL_IPRL;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PHYPWR_RSTCTL, 2, 2, tmp16);
+-      msleep(200);
+-
+-      *tmp = AX_CLK_SELECT_ACS | AX_CLK_SELECT_BCS;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_CLK_SELECT, 1, 1, tmp);
+-      msleep(100);
+-
+-      /* Read MAC address from DTB or asix chip */
+-      ax88179_get_mac_addr(dev);
+-      memcpy(dev->net->perm_addr, dev->net->dev_addr, ETH_ALEN);
+-
+-      /* RX bulk configuration */
+-      memcpy(tmp, &AX88179_BULKIN_SIZE[0], 5);
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_RX_BULKIN_QCTRL, 5, 5, tmp);
+-
+-      dev->rx_urb_size = 1024 * 20;
+-
+-      *tmp = 0x34;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PAUSE_WATERLVL_LOW, 1, 1, tmp);
+-
+-      *tmp = 0x52;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PAUSE_WATERLVL_HIGH,
+-                        1, 1, tmp);
+-
+       dev->net->netdev_ops = &ax88179_netdev_ops;
+       dev->net->ethtool_ops = &ax88179_ethtool_ops;
+       dev->net->needed_headroom = 8;
+@@ -1369,46 +1336,7 @@ static int ax88179_bind(struct usbnet *d
+       dev->net->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
+                                NETIF_F_RXCSUM;
+-      /* Enable checksum offload */
+-      *tmp = AX_RXCOE_IP | AX_RXCOE_TCP | AX_RXCOE_UDP |
+-             AX_RXCOE_TCPV6 | AX_RXCOE_UDPV6;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_RXCOE_CTL, 1, 1, tmp);
+-
+-      *tmp = AX_TXCOE_IP | AX_TXCOE_TCP | AX_TXCOE_UDP |
+-             AX_TXCOE_TCPV6 | AX_TXCOE_UDPV6;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_TXCOE_CTL, 1, 1, tmp);
+-
+-      /* Configure RX control register => start operation */
+-      *tmp16 = AX_RX_CTL_DROPCRCERR | AX_RX_CTL_IPE | AX_RX_CTL_START |
+-               AX_RX_CTL_AP | AX_RX_CTL_AMALL | AX_RX_CTL_AB;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_RX_CTL, 2, 2, tmp16);
+-
+-      *tmp = AX_MONITOR_MODE_PMETYPE | AX_MONITOR_MODE_PMEPOL |
+-             AX_MONITOR_MODE_RWMP;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_MONITOR_MOD, 1, 1, tmp);
+-
+-      /* Configure default medium type => giga */
+-      *tmp16 = AX_MEDIUM_RECEIVE_EN | AX_MEDIUM_TXFLOW_CTRLEN |
+-               AX_MEDIUM_RXFLOW_CTRLEN | AX_MEDIUM_FULL_DUPLEX |
+-               AX_MEDIUM_GIGAMODE;
+-      ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_MEDIUM_STATUS_MODE,
+-                        2, 2, tmp16);
+-
+-      ax88179_led_setting(dev);
+-
+-      ax179_data->eee_enabled = 0;
+-      ax179_data->eee_active = 0;
+-
+-      ax88179_disable_eee(dev);
+-
+-      ax88179_ethtool_get_eee(dev, &eee_data);
+-      eee_data.advertised = 0;
+-      ax88179_ethtool_set_eee(dev, &eee_data);
+-
+-      /* Restart autoneg */
+-      mii_nway_restart(&dev->mii);
+-
+-      usbnet_link_change(dev, 0, 0);
++      ax88179_reset(dev);
+       return 0;
+ }
+@@ -1697,6 +1625,7 @@ static int ax88179_reset(struct usbnet *
+       /* Read MAC address from DTB or asix chip */
+       ax88179_get_mac_addr(dev);
++      memcpy(dev->net->perm_addr, dev->net->dev_addr, ETH_ALEN);
+       /* RX bulk configuration */
+       memcpy(tmp, &AX88179_BULKIN_SIZE[0], 5);
+@@ -1711,12 +1640,6 @@ static int ax88179_reset(struct usbnet *
+       ax88179_write_cmd(dev, AX_ACCESS_MAC, AX_PAUSE_WATERLVL_HIGH,
+                         1, 1, tmp);
+-      dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
+-                            NETIF_F_RXCSUM;
+-
+-      dev->net->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
+-                               NETIF_F_RXCSUM;
+-
+       /* Enable checksum offload */
+       *tmp = AX_RXCOE_IP | AX_RXCOE_TCP | AX_RXCOE_UDP |
+              AX_RXCOE_TCPV6 | AX_RXCOE_UDPV6;
index ba1b15dce9bf52159071846d4dc6a7c8e94e4962..64de2029d4a768eab7f733015e169af70777501e 100644 (file)
@@ -55,3 +55,5 @@ perf-inject-fix-gen_elf_text_offset-for-jit.patch
 netfilter-nf_tables-reject-tables-of-unsupported-family.patch
 kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch
 tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch
+net-usb-ax88179_178a-remove-redundant-init-code.patch
+net-usb-ax88179_178a-move-priv-to-driver_priv.patch