From nobody Tue Dec 2 00:25:19 2025 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (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 9C1982D9EF3 for ; Tue, 25 Nov 2025 07:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764057132; cv=none; b=BNUQlwWDpcHnoM68UpHGi+swWAbS81AlVRS9IyT9dWKZLZaBdUGiTE9pWwfA6gqVd3AFp87x3XxUzygBBQPek1kC7M884086aAitkoJxO1bwzvkEpK9nNnsaPRxmkY/tKAqXCRG46GhYWe9+cyOPXJd/WIfBmZSzoPLdIgoUTL8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764057132; c=relaxed/simple; bh=q1IKP+j9PFBXI9VECNtuhPrYa6qPbjLTzChyrHb6Ui0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WtcG18Szo2GYjrNwlEBIKoZbEm7wubGaz1EZbv1iFqyVv2DUyKy4wiRASHUAVyBcw5KfZU2VkNheDSM+ReBvvYl0gJRH2OKjWDHzO4bqEbSKbM9t23Z20s7xN3CrSq/JTvFa6VAk18/UxT+y7RlBKb6K1yPprqZoWOrIY4F5gOs= 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=KvcvSCk5; arc=none smtp.client-ip=209.85.208.44 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="KvcvSCk5" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-6419b7b4b80so7380798a12.2 for ; Mon, 24 Nov 2025 23:52:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764057129; x=1764661929; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0V+iOBjztOFiOh8XvFtucaeDeOd2zLS6YUjWGQu28Ko=; b=KvcvSCk58BkXcnjQeIhGGClq3+qDZS94+R/LL128FtdGmb0Zavs7Dj5pip5jLzGEgf huNDNLCbWfFmyKg4PQujH2l1wSfUoeWe1q46lN2oqTBfFO/Ibrbpk0+LGlZkcOI9uWto 8LKBeMgFEvvGohslgLzCJYgQTV6pMwf5A8OSTA0a4yjKNqjAdlje3uBTHDKz0cxNRreb njm1s25/bRssJRVl/3v7wvxgjyyYc5lX1OVHYFMsfeQKzNGUgCM0lmUFeMeiHZFBiqAD H6OBh89larz/Oau4QqDjo1mjro1OU6nxfzVdtSLAsmEdAY7D3tH8RmI/GWdiNSkt7lbX hJBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764057129; x=1764661929; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0V+iOBjztOFiOh8XvFtucaeDeOd2zLS6YUjWGQu28Ko=; b=HkF9xW5fzth97VeXGINrzL7iwqDQnXymDGxZeeWzs5hKnCUN3KWFUY0oGc+TDNmgub 47m9Ss8MEocb7LlaLbSBSxrEPOvXqDyHtf8DirVexlQorsBHbFxzRlD8QeD0RRjQtIkS d2YqoJca5lpANfbwSJ0q2ovipeLpwIBXhvQ0Q2PiXZFTY1WMEqvbf5G9+8LvKSbYtQ7e HbjMZ+zqGMNQ9jjQ7QcOMfWvRI9u/vo12BtREsmoIg+RAPEZ4wylfO152CNikcpQgvCw m872kt/Qmhudpo+G7kTL8Vp2oKKsv6StGFKsVQI6BdeJfFws1UcHWBoEOH/X7L1fqGzW 43tw== X-Forwarded-Encrypted: i=1; AJvYcCXm+3oyaQUbXwvPdQK5umuvHzCaFInHRV6mK4tP1kA+akuoswy+M2r675oQfQcbdGIx7ITgwWR/LY7vNAY=@vger.kernel.org X-Gm-Message-State: AOJu0Yzs5zSHaYQJfBI9keWh1GzdXs+Z63xEOqhk0BASgVzv/iBOO94B JtTUOr+o921NowgIkfYgpEfcmzR4XzHROsNygUWP+oUxTWMcXiQ6URhJ X-Gm-Gg: ASbGncswdP+hZvyHkN4bga3ZuJlG8Dc4pE8ddZM1dakghwZl2S/F25RY/iXqmhaOf6M XT7L/tLUqpxuLIQUzrmjayUVpwGyE0hYzSPo6AM6rwEF+HZ3GhpETPBax1uPogJ0MqLeorqoAdI H6L0hv8malMmsKdlRleNuQ4+YS4e4JNpD2fHnid9pGO4mnhKPz3fiHoQa67Czb7Prs1Xin0yy4O XSaqjPCivduWtbvIALRaymvIWeqF9YBk0H5ywd7sVMD1rmm/yE6tGafQ0J91Ye4TB2jDjjt56XQ GqENykFu5RTwri8+toWZo+BWCW7zj3te5oGoBK+izDRX6VWkggXSKko8N/uMCyCo3gk9NJUylkW whBRkN2yL9ZSKDQHSv+TUIZQKZOfMpxUL3JVwG3y7avxkX7jg8+TFkq1ggMpLEGF2/kNOTodmb7 c8zWAed5tYNB3kvKS+gnZTux3wlRhxvodqZD4j01/RkqAVBJcUWzrtDM/twxEqlFJiyGjylaSNS xVoug== X-Google-Smtp-Source: AGHT+IFk77GelQTFcD92LcQnmuvfhCPsowRD//MZHMAJK96B1Vx8M3nO5H9fm/u7Xvl37U98LQQeqQ== X-Received: by 2002:a05:6402:2111:b0:640:a9fb:3464 with SMTP id 4fb4d7f45d1cf-645544421efmr12259245a12.7.1764057128901; Mon, 24 Nov 2025 23:52:08 -0800 (PST) Received: from localhost (dslb-002-205-018-238.002.205.pools.vodafone-ip.de. [2.205.18.238]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-645363b62cesm14126718a12.13.2025.11.24.23.52.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Nov 2025 23:52:08 -0800 (PST) From: Jonas Gorski To: Florian Fainelli , Andrew Lunn , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Cc: Florian Fainelli , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 6/7] net: dsa: b53: fix BCM5325/65 ARL entry VIDs Date: Tue, 25 Nov 2025 08:51:49 +0100 Message-ID: <20251125075150.13879-7-jonas.gorski@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251125075150.13879-1-jonas.gorski@gmail.com> References: <20251125075150.13879-1-jonas.gorski@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" BCM5325/65's ARL entry registers do not contain the VID, only the search result register does. ARL entries have a separate VID entry register for the index into the VLAN table. So make ARL entry accessors use the VID entry registers instead, and move the VLAN ID field definition to the search register definition. Fixes: c45655386e53 ("net: dsa: b53: add support for FDB operations on 5325= /5365") Signed-off-by: Jonas Gorski --- drivers/net/dsa/b53/b53_common.c | 9 +++++++-- drivers/net/dsa/b53/b53_priv.h | 12 ++++++------ drivers/net/dsa/b53/b53_regs.h | 7 +++++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_com= mon.c index 09a64812cd84..ac995f36ed95 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -1853,19 +1853,24 @@ static int b53_arl_rw_op(struct b53_device *dev, un= signed int op) static void b53_arl_read_entry_25(struct b53_device *dev, struct b53_arl_entry *ent, u8 idx) { + u8 vid_entry; u64 mac_vid; =20 + b53_read8(dev, B53_ARLIO_PAGE, B53_ARLTBL_VID_ENTRY_25(idx), + &vid_entry); b53_read64(dev, B53_ARLIO_PAGE, B53_ARLTBL_MAC_VID_ENTRY(idx), &mac_vid); - b53_arl_to_entry_25(ent, mac_vid); + b53_arl_to_entry_25(ent, mac_vid, vid_entry); } =20 static void b53_arl_write_entry_25(struct b53_device *dev, const struct b53_arl_entry *ent, u8 idx) { + u8 vid_entry; u64 mac_vid; =20 - b53_arl_from_entry_25(&mac_vid, ent); + b53_arl_from_entry_25(&mac_vid, &vid_entry, ent); + b53_write8(dev, B53_ARLIO_PAGE, B53_ARLTBL_VID_ENTRY_25(idx), vid_entry); b53_write64(dev, B53_ARLIO_PAGE, B53_ARLTBL_MAC_VID_ENTRY(idx), mac_vid); } diff --git a/drivers/net/dsa/b53/b53_priv.h b/drivers/net/dsa/b53/b53_priv.h index 24df3ab64395..ea99e4d322bd 100644 --- a/drivers/net/dsa/b53/b53_priv.h +++ b/drivers/net/dsa/b53/b53_priv.h @@ -341,7 +341,7 @@ static inline void b53_arl_to_entry(struct b53_arl_entr= y *ent, } =20 static inline void b53_arl_to_entry_25(struct b53_arl_entry *ent, - u64 mac_vid) + u64 mac_vid, u8 vid_entry) { memset(ent, 0, sizeof(*ent)); ent->is_valid =3D !!(mac_vid & ARLTBL_VALID_25); @@ -352,7 +352,7 @@ static inline void b53_arl_to_entry_25(struct b53_arl_e= ntry *ent, ARLTBL_DATA_PORT_ID_S_25; if (!is_multicast_ether_addr(ent->mac) && ent->port =3D=3D B53_CPU_PORT) ent->port =3D B53_CPU_PORT_25; - ent->vid =3D (mac_vid >> ARLTBL_VID_S_65) & ARLTBL_VID_MASK_25; + ent->vid =3D vid_entry; } =20 static inline void b53_arl_to_entry_89(struct b53_arl_entry *ent, @@ -381,7 +381,7 @@ static inline void b53_arl_from_entry(u64 *mac_vid, u32= *fwd_entry, *fwd_entry |=3D ARLTBL_AGE; } =20 -static inline void b53_arl_from_entry_25(u64 *mac_vid, +static inline void b53_arl_from_entry_25(u64 *mac_vid, u8 *vid_entry, const struct b53_arl_entry *ent) { *mac_vid =3D ether_addr_to_u64(ent->mac); @@ -390,14 +390,13 @@ static inline void b53_arl_from_entry_25(u64 *mac_vid, else *mac_vid |=3D ((u64)ent->port << ARLTBL_DATA_PORT_ID_S_25) & ARLTBL_DATA_PORT_ID_MASK_25; - *mac_vid |=3D (u64)(ent->vid & ARLTBL_VID_MASK_25) << - ARLTBL_VID_S_65; if (ent->is_valid) *mac_vid |=3D ARLTBL_VALID_25; if (ent->is_static) *mac_vid |=3D ARLTBL_STATIC_25; if (ent->is_age) *mac_vid |=3D ARLTBL_AGE_25; + *vid_entry =3D ent->vid; } =20 static inline void b53_arl_from_entry_89(u64 *mac_vid, u32 *fwd_entry, @@ -422,7 +421,8 @@ static inline void b53_arl_search_to_entry_25(struct b5= 3_arl_entry *ent, ent->is_age =3D !!(mac_vid & ARLTBL_AGE_25); ent->is_static =3D !!(mac_vid & ARLTBL_STATIC_25); u64_to_ether_addr(mac_vid, ent->mac); - ent->vid =3D (mac_vid >> ARLTBL_VID_S_65) & ARLTBL_VID_MASK_25; + ent->vid =3D (mac_vid & ARL_SRCH_RSLT_VID_MASK_25) >> + ARL_SRCH_RSLT_VID_S_25; ent->port =3D (mac_vid & ARL_SRCH_RSLT_PORT_ID_MASK_25) >> ARL_SRCH_RSLT_PORT_ID_S_25; if (is_multicast_ether_addr(ent->mac) && (ext & ARL_SRCH_RSLT_EXT_MC_MII)) diff --git a/drivers/net/dsa/b53/b53_regs.h b/drivers/net/dsa/b53/b53_regs.h index 54b1016eb7eb..54a278db67c9 100644 --- a/drivers/net/dsa/b53/b53_regs.h +++ b/drivers/net/dsa/b53/b53_regs.h @@ -329,11 +329,9 @@ #define B53_ARLTBL_MAC_VID_ENTRY(n) ((0x10 * (n)) + 0x10) #define ARLTBL_MAC_MASK 0xffffffffffffULL #define ARLTBL_VID_S 48 -#define ARLTBL_VID_MASK_25 0xff #define ARLTBL_VID_MASK 0xfff #define ARLTBL_DATA_PORT_ID_S_25 48 #define ARLTBL_DATA_PORT_ID_MASK_25 GENMASK_ULL(53, 48) -#define ARLTBL_VID_S_65 53 #define ARLTBL_AGE_25 BIT_ULL(61) #define ARLTBL_STATIC_25 BIT_ULL(62) #define ARLTBL_VALID_25 BIT_ULL(63) @@ -353,6 +351,9 @@ #define ARLTBL_STATIC_89 BIT(14) #define ARLTBL_VALID_89 BIT(15) =20 +/* BCM5325/BCM565 ARL Table VID Entry N Registers (8 bit) */ +#define B53_ARLTBL_VID_ENTRY_25(n) ((0x2 * (n)) + 0x30) + /* Maximum number of bin entries in the ARL for all switches */ #define B53_ARLTBL_MAX_BIN_ENTRIES 4 =20 @@ -380,6 +381,8 @@ #define B53_ARL_SRCH_RSTL_0_MACVID_25 0x24 #define ARL_SRCH_RSLT_PORT_ID_S_25 48 #define ARL_SRCH_RSLT_PORT_ID_MASK_25 GENMASK_ULL(52, 48) +#define ARL_SRCH_RSLT_VID_S_25 53 +#define ARL_SRCH_RSLT_VID_MASK_25 GENMASK_ULL(60, 53) =20 /* BCM5325/5365 Search result extend register (8 bit) */ #define B53_ARL_SRCH_RSLT_EXT_25 0x2c --=20 2.43.0