From c9b9e1a4e48a4098911b8d8d417fa0987d238633 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 13 Jan 2024 10:36:17 +0100 Subject: [PATCH] 5.15-stable patches added patches: net-usb-ax88179_178a-move-priv-to-driver_priv.patch net-usb-ax88179_178a-remove-redundant-init-code.patch --- ...x88179_178a-move-priv-to-driver_priv.patch | 150 ++++++++++++++++++ ...8179_178a-remove-redundant-init-code.patch | 148 +++++++++++++++++ queue-5.15/series | 2 + 3 files changed, 300 insertions(+) create mode 100644 queue-5.15/net-usb-ax88179_178a-move-priv-to-driver_priv.patch create mode 100644 queue-5.15/net-usb-ax88179_178a-remove-redundant-init-code.patch 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 index 00000000000..7be68ef5a39 --- /dev/null +++ b/queue-5.15/net-usb-ax88179_178a-move-priv-to-driver_priv.patch @@ -0,0 +1,150 @@ +From 2bcbd3d8a7b4525cdb741fe82330edb6f5452c7f Mon Sep 17 00:00:00 2001 +From: Justin Chen +Date: Wed, 20 Jul 2022 17:28:15 -0700 +Subject: net: usb: ax88179_178a: move priv to driver_priv + +From: Justin Chen + +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 +Signed-off-by: Jakub Kicinski +Cc: Jeffery Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 00000000000..ffe5a40e662 --- /dev/null +++ b/queue-5.15/net-usb-ax88179_178a-remove-redundant-init-code.patch @@ -0,0 +1,148 @@ +From 9718f9ce5b86e2f4e6364762018980f0222c2e5e Mon Sep 17 00:00:00 2001 +From: Justin Chen +Date: Wed, 20 Jul 2022 17:28:12 -0700 +Subject: net: usb: ax88179_178a: remove redundant init code + +From: Justin Chen + +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 +Signed-off-by: Jakub Kicinski +Cc: Jeffery Miller +Signed-off-by: Greg Kroah-Hartman +--- + 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; diff --git a/queue-5.15/series b/queue-5.15/series index ba1b15dce9b..64de2029d4a 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -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 -- 2.47.3