From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl1-f68.google.com (mail-dl1-f68.google.com [74.125.82.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8377A32F74F for ; Fri, 23 Jan 2026 07:00:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.68 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769151661; cv=none; b=ptqwsihMMS1LwRQ6wgWWrgOY8JgIR1W9IlSFbuSZAukrPMPxiJg+i51wlrcB6u5Juv9TY2vnrwsOygrT9j/KUUCnNSeIUCHGj3Slj6lXsuZtfquUEKfa1d3BNoDumzNZdTIJKPaBeETKn1s7yUwA9XIJgOl107qAKia04KNvXtQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769151661; c=relaxed/simple; bh=pTvK1Ud2AQSq+kngrcLZfGqilvW+N3NLkcbJ+VzW5FY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=ZB/ctf/2q+VsV3VK9thnfuVFUPWZaCi882Sh3qJ40yzeG3730O+/onZ2XwNSIFNn1hqKlsc/AghUMf1t+syLrJCEyFknrAOLnqcUMBHLN9wxwLFW1wmlpQ2NO0W/URKTeK/0iDBQhv4CfIoXlUsQPVNQmwzK/L5uiBm6XUYKsgQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=g+syrcdD; arc=none smtp.client-ip=74.125.82.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g+syrcdD" Received: by mail-dl1-f68.google.com with SMTP id a92af1059eb24-1233c155a42so2649917c88.1 for ; Thu, 22 Jan 2026 23:00:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769151655; x=1769756455; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=w71v06CmCz9lwXzUHMcZAQbNs0uiKvgExrKC9KJWhR0=; b=g+syrcdD+2VUkQNHHAGgSZM53srD2BGeabfGsDajhFpU37qka5wCwkTWqDqj3yR7v0 5csJuIQJoDvm42p4ZTS7CJGXETOlGKiHO9MzdUzkRjGICpFWyHtlA75Z8XhP4Ktatj2X BSee0Y8X6VJjV+5S+37r4lHzEUsMVVxtRuT/uo/wyKBeiGRD8+Z8aGADlKOFSOOPwpWx bO9rg9WYXKdteKqABYC5khISChlAoGnjWJWVqvuRueu4W8JqwuLNC6PzkoiamOOm+2sr NqfpdEd7PCbQHKMlKyooMRO7I1bICa7Pdzy0rUspKmd4RtA2HdWvAw4vmouxRDjVE7Lu rKAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769151655; x=1769756455; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=w71v06CmCz9lwXzUHMcZAQbNs0uiKvgExrKC9KJWhR0=; b=vb2j4uRqZeGtgm6EIIqY569RiAaU0R4S03p1J1YHtZEcOES16VZwKAAcP5DM00poQs tw56G/bvOq53H3M6fIlgrcs/ga6ElOadj0U+U7Pa06DbzDvalBvCSO2cWx+6DV+OVN1o Wdyy79oPT5OUY+oS7Lb7TN2kdMDIe3TiEEBgIYbCelYvA9kiaZ2byE86s0IFGLcrDJ7h CObyKFRWHMYGhQb8e+mOEfVn8Bsjt39AuZVLiTF5agvrPmzG90+0fVddPbJzM8fVVjDK k0PxdHE0FB0p1O6oKL5J16oT2/oQ6iQNjfuoSeOscKST4DIVlX01gJdO3YEf0vw625Kv 8fuQ== X-Forwarded-Encrypted: i=1; AJvYcCV5hZej7/h85B3wifDqqDqiCNb2ZiEdyCvkdv3wcLWGWC1NrRrqKfnyy80rSeI39fleWmpyT/0uKQc=@vger.kernel.org X-Gm-Message-State: AOJu0YxySiEP4wWBkNn0VaItdwpCDbR/7EG3TxZ6ONMDYxxEmQm05CT6 EjJo5VXac7z50oyc5e2qNHPt3JAF16ux5dSaiJZK/jsKjih8GD6zImos X-Gm-Gg: AZuq6aLsoDSN5NqM5XPMQxJc2ucP6VLjq06WWV2nlSZYjCPAq7oF/TM7TAJXCavqa5d j9l5yBE8FAGh2LX5xWmOgJIvdg4W564nSHx/0szvWLLm8PkS6jUBt+tnaYk2zl/mn9+SXfa626y 2BD9l4NEPWrD7jyKE5aX4ydX/3htcSzuc+fkI614Pe0dRjoD9t1siIkWE9vdt7vtH0NtBf1dDzW 1FJpErXNZpioFt8xA4y0b2LIgflm4GxXgEZ4GXg88H2ZblLQ9FNEtnVbh87zptdH5RNadXblvtN qohNOfeWFBIDtdbKPrjrq95IMuUd3Hy9yzMEiTt/fmxeDpwPoAKObet5XXEoIx/pWmmGAwXO8Og r/qNMufvqNT9hti3Zkmd4hD2ZW79A9pwxBwy5cSjGRO2r9SlxjA+t6fGw68OStUKNbidIOZj8tD 5GPgIJvtZduWNg6kiEizSsppH1QXUWTKU9DM0mxqKP8LzoOa3+rMPIemAM2KdgewvZzEyX17d70 2vMViBfWRKdeaYF24zGvH8Pp9UGVLQCzb0ePUdMCommgiHv02ay03fTuDg+bpkPlfPqtta5TUxX rXTO X-Received: by 2002:a05:7022:78f:b0:119:e56b:98c1 with SMTP id a92af1059eb24-1247dc0a63bmr805456c88.40.1769151654530; Thu, 22 Jan 2026 23:00:54 -0800 (PST) Received: from ethan-latitude5420.. (host-127-24.cafrjco.fresno.ca.us.clients.pavlovmedia.net. [68.180.127.24]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1247d91c541sm2730485c88.7.2026.01.22.23.00.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:00:54 -0800 (PST) From: Ethan Nelson-Moore To: netdev@vger.kernel.org, linux-usb@vger.kernel.org Cc: Ethan Nelson-Moore , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Peter Korsgaard Subject: [PATCH net-next] net: usb: sr9700: remove code to drive nonexistent multicast filter Date: Thu, 22 Jan 2026 22:58:32 -0800 Message-ID: <20260123065842.53669-1-enelsonmoore@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Several registers referenced in this driver's source code do not actually exist (they are not writable and read as zero in my testing). They exist in this driver because it originated as a copy of the dm9601 driver. Notably, these include the multicast filter registers - this causes the driver to not support multicast packets correctly. Remove the multicast filter code and instead set the chip to receive all multicast filter packets when any multicast addresses are in the list. Also take the opportunity to remove definitions for a few other nonexistent registers, and a couple pointless comments. Signed-off-by: Ethan Nelson-Moore --- drivers/net/usb/sr9700.c | 26 ++++---------------------- drivers/net/usb/sr9700.h | 19 +++---------------- 2 files changed, 7 insertions(+), 38 deletions(-) diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c index 9c7cd0db1768..19c36b0d441c 100644 --- a/drivers/net/usb/sr9700.c +++ b/drivers/net/usb/sr9700.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include "sr9700.h" @@ -231,31 +230,14 @@ static const struct ethtool_ops sr9700_ethtool_ops = { static void sr9700_set_multicast(struct net_device *netdev) { struct usbnet *dev = netdev_priv(netdev); - /* We use the 20 byte dev->data for our 8 byte filter buffer - * to avoid allocating memory that is tricky to free later - */ - u8 *hashes = (u8 *)&dev->data; - /* rx_ctl setting : enable, disable_long, disable_crc */ u8 rx_ctl = RCR_RXEN | RCR_DIS_CRC | RCR_DIS_LONG; - memset(hashes, 0x00, SR_MCAST_SIZE); - /* broadcast address */ - hashes[SR_MCAST_SIZE - 1] |= SR_MCAST_ADDR_FLAG; - if (netdev->flags & IFF_PROMISC) { + if (netdev->flags & IFF_PROMISC) rx_ctl |= RCR_PRMSC; - } else if (netdev->flags & IFF_ALLMULTI || - netdev_mc_count(netdev) > SR_MCAST_MAX) { - rx_ctl |= RCR_RUNT; - } else if (!netdev_mc_empty(netdev)) { - struct netdev_hw_addr *ha; - - netdev_for_each_mc_addr(ha, netdev) { - u32 crc = ether_crc(ETH_ALEN, ha->addr) >> 26; - hashes[crc >> 3] |= 1 << (crc & 0x7); - } - } + else if (netdev->flags & IFF_ALLMULTI || netdev_mc_count(netdev) > 0) + /* The chip has no multicast filter */ + rx_ctl |= RCR_ALL; - sr_write_async(dev, SR_MAR, SR_MCAST_SIZE, hashes); sr_write_reg_async(dev, SR_RCR, rx_ctl); } diff --git a/drivers/net/usb/sr9700.h b/drivers/net/usb/sr9700.h index 3212859830dc..51c696108d80 100644 --- a/drivers/net/usb/sr9700.h +++ b/drivers/net/usb/sr9700.h @@ -8,8 +8,6 @@ #ifndef _SR9700_H #define _SR9700_H -/* sr9700 spec. register table on Linux platform */ - /* Network Control Reg */ #define SR_NCR 0x00 #define NCR_RST (1 << 0) @@ -101,9 +99,7 @@ #define WCR_LINKEN (1 << 5) /* Physical Address Reg */ #define SR_PAR 0x10 /* 0x10 ~ 0x15 6 bytes for PAR */ -/* Multicast Address Reg */ -#define SR_MAR 0x16 /* 0x16 ~ 0x1D 8 bytes for MAR */ -/* 0x1e unused */ +/* 0x16 --> 0x1E unused */ /* Phy Reset Reg */ #define SR_PRR 0x1F #define PRR_PHY_RST (1 << 0) @@ -123,10 +119,7 @@ #define SR_RRPAL 0x26 /* Rx sdram Read Pointer Address High */ #define SR_RRPAH 0x27 -/* Vendor ID register */ -#define SR_VID 0x28 /* 0x28 ~ 0x29 2 bytes for VID */ -/* Product ID register */ -#define SR_PID 0x2A /* 0x2A ~ 0x2B 2 bytes for PID */ +/* 0x28 --> 0x2B unused */ /* CHIP Revision register */ #define SR_CHIPR 0x2C /* 0x2D --> 0xEF unused */ @@ -143,10 +136,7 @@ #define TXC_USBS_EP1RDY (1 << 5) #define TXC_USBS_SUSFLAG (1 << 6) #define TXC_USBS_RXFAULT (1 << 7) -/* USB Control register */ -#define SR_USBC 0xF4 -#define USBC_EP3NAK (1 << 4) -#define USBC_EP3ACK (1 << 5) +/* 0xF4 --> 0xFF unused */ /* Register access commands and flags */ #define SR_RD_REGS 0x00 @@ -158,9 +148,6 @@ /* parameters */ #define SR_EEPROM_TIMEOUT 1000 #define SR_EEPROM_LEN 256 -#define SR_MCAST_SIZE 8 -#define SR_MCAST_ADDR_FLAG 0x80 -#define SR_MCAST_MAX 64 #define SR_TX_OVERHEAD 2 /* 2bytes header */ #define SR_RX_OVERHEAD 7 /* 3bytes header + 4crc tail */ -- 2.43.0