Commit 183f6825 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'net-usb-lan78xx-accumulated-bug-fixes'

Oleksij Rempel says:

====================
net: usb: lan78xx: accumulated bug fixes

This series contains a collection of standalone bug fixes for the
Microchip LAN78xx driver, addressing packet handling, TX statistics,
invalid register accesses, and a kernel warning during disconnect.
====================

Link: https://patch.msgid.link/20260305143429.530909-1-o.rempel@pengutronix.de


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 7a85d370 312c816c
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -3119,6 +3119,10 @@ static int lan78xx_init_ltm(struct lan78xx_net *dev)
	int ret;
	u32 buf;

	/* LAN7850 is USB 2.0 and does not support LTM */
	if (dev->chipid == ID_REV_CHIP_ID_7850_)
		return 0;

	ret = lan78xx_read_reg(dev, USB_CFG1, &buf);
	if (ret < 0)
		goto init_ltm_failed;
@@ -3829,6 +3833,7 @@ static void lan78xx_rx_csum_offload(struct lan78xx_net *dev,
	 */
	if (!(dev->net->features & NETIF_F_RXCSUM) ||
	    unlikely(rx_cmd_a & RX_CMD_A_ICSM_) ||
	    unlikely(rx_cmd_a & RX_CMD_A_CSE_MASK_) ||
	    ((rx_cmd_a & RX_CMD_A_FVTG_) &&
	     !(dev->net->features & NETIF_F_HW_VLAN_CTAG_RX))) {
		skb->ip_summed = CHECKSUM_NONE;
@@ -3901,7 +3906,8 @@ static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb,
			return 0;
		}

		if (unlikely(rx_cmd_a & RX_CMD_A_RED_)) {
		if (unlikely(rx_cmd_a & RX_CMD_A_RED_) &&
		    (rx_cmd_a & RX_CMD_A_RX_HARD_ERRS_MASK_)) {
			netif_dbg(dev, rx_err, dev->net,
				  "Error rx_cmd_a=0x%08x", rx_cmd_a);
		} else {
@@ -4176,7 +4182,7 @@ static struct skb_data *lan78xx_tx_buf_fill(struct lan78xx_net *dev,
		}

		tx_data += len;
		entry->length += len;
		entry->length += max_t(unsigned int, len, ETH_ZLEN);
		entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1;

		dev_kfree_skb_any(skb);
@@ -4546,8 +4552,6 @@ static void lan78xx_disconnect(struct usb_interface *intf)
	phylink_disconnect_phy(dev->phylink);
	rtnl_unlock();

	netif_napi_del(&dev->napi);

	unregister_netdev(net);

	timer_shutdown_sync(&dev->stat_monitor);
+3 −0
Original line number Diff line number Diff line
@@ -74,6 +74,9 @@
#define RX_CMD_A_ICSM_			(0x00004000)
#define RX_CMD_A_LEN_MASK_		(0x00003FFF)

#define RX_CMD_A_RX_HARD_ERRS_MASK_ \
	(RX_CMD_A_RX_ERRS_MASK_ & ~RX_CMD_A_CSE_MASK_)

/* Rx Command B */
#define RX_CMD_B_CSUM_SHIFT_		(16)
#define RX_CMD_B_CSUM_MASK_		(0xFFFF0000)