From nobody Tue Aug 11 20:59:56 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hKPC110GNz6X17Q for ; Tue, 11 Aug 2026 20:59:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hKPC060wGz4CB9 for ; Tue, 11 Aug 2026 20:59:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786481996; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=inMgLer5Q8qNNPhj6lyqRqRbRZYT83+DFAPEWqCVGDM=; b=EVASJMF8quW88mRXTiD6hyOmHTX6GtRz1GUgOQnkB9L1UNgmbK8S0ApC6m9bSD1j+8gSSu HyvrY4rJ+MfmjNmL9bnXhYgp9iLtVnXapH7ECmCFiCOGz6R4rhYYlmT8E7tDvQLi9XO/xh NFZ7gJGfLMXavbyDkukpkaPnAOvh6JclU1ypz4lcBbxTtrDuxfWSc/euL1ppncfm36EjgK Rh1DR4p/J5HUMm42PNQ0/+Ffx41e6/P1JRppQslQA8KI8uYgyN4C08IFIvfkIQXbIpQ042 LIq1bOV1IiyNe0uHSPD8m/JXyeKEszh84JDCkv0M+of3QDCO41HbC5OIGcgYSQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786481996; a=rsa-sha256; cv=none; b=EUVPskqX8G9f6m73cU7pq1jaknJ0RMaJSXqE52UuEPwE7VblUpn74cichufHpMHEcpWR9o s5axLGxv9Rsa4pc+ObmASRtLcXQ437I3xeSkHeY6sogK4q/vJYk3AHk8cTVTY+o6DDyyVr dEO/q+S7dT9j8CSIMVS63YFSTquFwFwIt1ajH0btW7dHKR7llsX908efZtqrERY+g7N16M CqNnykNjuVNtNUrxPIZEyjzyUu3+AOozH1/HGDfVbzxo8miVe7z9/kgsaIPDluwG3NaRIk aQefFMPlQdz9AHCnjY7jKihV0KEz2+5dDrHkBByezFJaJF8KRbcGrU1u8w3+dQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786481996; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=inMgLer5Q8qNNPhj6lyqRqRbRZYT83+DFAPEWqCVGDM=; b=PE6esBp7f967NTNhICKfHOAssnQpKf42z4pEOgwuDC8KheebydbqS8figHLmhpDVjvw2Vp 1Z0MfdQO4DOeWns7lS4nlNjFhx7kquFQHx4owqA37r1CifU+x0wHdAgrHWZTcREEoy7wYS gDb6RWL07AlJSTa/yUVaogWQp6UYVtTOMTA3BFgQquGm1J8jFtAKgI78YoDcgEfZf1JaXH Y66WvKw3kBCqhRiB31eWg2fTkyiWoOy2ovlmehP6xRlXqeCWtAVE3BujtDD9oOaK69upSG VNsPmZgD2vgo5fpIZVvNe7L/i8VYUf+0WrYOsNLTtPl2o1ToSL/A7DmAoXZI9w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hKPC04jHZz19fK for ; Tue, 11 Aug 2026 20:59:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37049 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 11 Aug 2026 20:59:56 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: bb8d0944b5d5 - main - e1000: Verify i210 and i211 multicast table writes List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bb8d0944b5d53863f00492b69b7bf13d2618fc95 Auto-Submitted: auto-generated Date: Tue, 11 Aug 2026 20:59:56 +0000 Message-Id: <6a7b8d4c.37049.2ffc1c53@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=bb8d0944b5d53863f00492b69b7bf13d2618fc95 commit bb8d0944b5d53863f00492b69b7bf13d2618fc95 Author: Kevin Bowling AuthorDate: 2026-08-11 17:35:43 +0000 Commit: Kevin Bowling CommitDate: 2026-08-11 20:59:32 +0000 e1000: Verify i210 and i211 multicast table writes The i210 and i211 can occasionally fail to accept multicast table writes, particularly while addresses are added and removed rapidly. Read the table back and rewrite mismatches for up to three passes. This prevents multicast reception from retaining stale filter state while keeping the workaround limited to the affected controllers. MFC after: 2 weeks --- sys/dev/e1000/e1000_mac.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/sys/dev/e1000/e1000_mac.c b/sys/dev/e1000/e1000_mac.c index 46e91773c126..f311df658d78 100644 --- a/sys/dev/e1000/e1000_mac.c +++ b/sys/dev/e1000/e1000_mac.c @@ -584,6 +584,37 @@ u32 e1000_hash_mc_addr_generic(struct e1000_hw *hw, u8 *mc_addr) return hash_value; } +/** + * e1000_i21x_check_mta - Verify MTA writes on i210 and i211 + * @hw: pointer to the HW structure + * + * The i210 and i211 can occasionally fail to accept MTA writes. Read the + * table back and rewrite mismatched entries, with a bounded retry count. + **/ +static void +e1000_i21x_check_mta(struct e1000_hw *hw) +{ + bool failed; + int i, retries = 3; + + do { + failed = false; + for (i = hw->mac.mta_reg_count - 1; i >= 0; i--) { + if (E1000_READ_REG_ARRAY(hw, E1000_MTA, i) == + hw->mac.mta_shadow[i]) + continue; + failed = true; + E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, + hw->mac.mta_shadow[i]); + E1000_WRITE_FLUSH(hw); + } + if (failed && --retries == 0) { + DEBUGOUT("Failed to update MTA after retries\n"); + break; + } + } while (failed); +} + /** * e1000_update_mc_addr_list_generic - Update Multicast addresses * @hw: pointer to the HW structure @@ -619,6 +650,8 @@ void e1000_update_mc_addr_list_generic(struct e1000_hw *hw, for (i = hw->mac.mta_reg_count - 1; i >= 0; i--) E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, hw->mac.mta_shadow[i]); E1000_WRITE_FLUSH(hw); + if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211) + e1000_i21x_check_mta(hw); } /**