From nobody Mon Dec 1 22:03:57 2025 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.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 4247D2DEA80 for ; Fri, 28 Nov 2025 08:06:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764317211; cv=none; b=agMX7ske9yxMeHnCZOQ879S0et11OYr7gzPX+ldem3ToUNlifCa2XqugYnGiP9PPN/1ApST8Hm25nQh7+kC/Af4mjux2jNcBYpjSWEYSCWBgS23FAfAY+Lr2eivXZ45YFciYkG2zgBoO22BxWC9sgsN1iuYOuoCaBdpcf58BTE4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764317211; c=relaxed/simple; bh=Rgs2EQ3Q36rzped/ecsC+M5qqjYWihe5acs+Gfc5BMs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QYeNQX2Tr91DzfA6Sc0mIewiARh1K/4a3RZ6wr0trqd0cQFtMV44yx49zwk0GRjmpUyuca5t3QuCSL0KZAXLFlisrDEw0jWmbPm986XS/mqqesN5n2vxnBDTIUhJpZz/blhdfLEuq7shJ36VbF2QoVN0JiFqzIZo10mUDXiMuy0= 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=J/ThSavi; arc=none smtp.client-ip=209.85.218.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="J/ThSavi" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-b73875aa527so241594366b.3 for ; Fri, 28 Nov 2025 00:06:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764317208; x=1764922008; 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=lYp7E+XRleF9Ba/rdsGt5FOtJp0XS5WeD2C0kR30ens=; b=J/ThSaviOkr1kCpDo32mtPbPlBAEGL/ytV4/tTjr+GLc2SYEgyAwLTy2yr9ma+aggq akRLWMcq67Q3XwLdOPr/Vtn8BeGK8Y6mXy/gPD3SLkh4A0rVvQIMWrzTpSfSyBYZM6Mt 8Q3tpv7o/Mx0jVdoDNWPnPvobLXD1daC5k8ITBKgMra/zgMMutbZXewwPAqrKXNBY/Di gFBVytBGvUzQnHpSGc9vTA+jKqaY0idWDm4ggzT8y8AfTZDugBpBsXxUN82yt82TKQco N26F4RLEkYznn7RwecURMwbtUMBJF9bK2mSILZu7UL50zy0b8sDcGA5DmhCvetYFulbh Ou7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764317208; x=1764922008; 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=lYp7E+XRleF9Ba/rdsGt5FOtJp0XS5WeD2C0kR30ens=; b=CEq08HElC3mpeplZttKH8fRQwD1x/BdR/4cJTa1XrOUeEinP3UFHiPWN19dXcjBCZ1 a0ZCuFGCHaQhaOuj6r1ty0VBD0+d/zpM5Sxizwt7pcw8fZGlCR6i9Tw4Otl0zE6vh6uU mv+xbglBEZO4uyXBLHuoZ4l0AR3qCL10oOxuOMCgg36DuoPmOG7dNT6WkZfepT0PYCv7 C4xCy9C18gmSMHIwkNWqPnyoRz6a1z40XuiYBAy2oFHs089iLSVmirEwWKKYwf7y7/o2 KqbmLvulmE8Sbz7truENq9T4mnvuC04xwbvSVzNWVYk+EmIhJGbuFKYm3vSNAEg/Z0d8 pd0g== X-Forwarded-Encrypted: i=1; AJvYcCXW5hER+3tFrspQA436VAWH2bDwJPGbtKlIyn8I+M24aB5Rm91By8p05a0+mD95NJ9N0n7TDuWgilsK2OE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+iw9gx6hcl22fsOKWXnY52Zp834TrN3eTxHfHi0mKf8tL8rME w4JCEN57E2pOFuWsrPptacXwWk0TYI8fV6LQ80q0WWX5oZEuzv+Ij05A X-Gm-Gg: ASbGncunsYt+yCANKl5wBiILuDmKqn0hd6liKd2ovbgy+gGTWdpa6SbHcaAwPoNCzhK MXCX3lPRK2HCyV8wxfAeeAHW0OPHBN4i/q5Qs53cX7AvksROzDSDhmcPylYV9zYXbp0Ap/LOnvD zr/CAMPcn3jr6u+tXjoikm2zaVBSAeQ4PqqBR9nO6euiphcsQORYOjtZMOADwo1w/RoPqwuoY9N 6djXwecLqtY00fGiksl8/h9sVcdO5ZUtlrNCpvCGKIhKaYUFOk2dDLTjPU47ad9vQbnvz8aRx/F raOIAiUdfG+nc/NwtswP6MGlPCcNfZJwgDNGWOy2WMzI1VZ4YIAfe6NM/mqirW1a1A/tpxz0oge SCKUCg+xo/7ar/Druo4JgT+bi0pyjVhej+OkJOsMHZHmYOgd1y74QynDoCrRcmd8sfSOgqnZFbP 8Y34w6HTELdLn3ZuFyn6VXOj/uPKQvPJp3WTXP8SeredMTTtLNdrF/Hpv8+4zarKXMsqA= X-Google-Smtp-Source: AGHT+IHlfrMxY5sFsBSX7jadMFZM3qxFUUsTxH86IA5j+iftXghDZIBfXbkK4fd2ZtWlHXEYdAUygQ== X-Received: by 2002:a17:906:478a:b0:b73:42df:29a with SMTP id a640c23a62f3a-b76719ec80fmr2743046266b.59.1764317207486; Fri, 28 Nov 2025 00:06:47 -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 a640c23a62f3a-b76f59e8fdasm379537966b.51.2025.11.28.00.06.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Nov 2025 00:06:47 -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 v2 6/7] net: dsa: b53: fix BCM5325/65 ARL entry VIDs Date: Fri, 28 Nov 2025 09:06:24 +0100 Message-ID: <20251128080625.27181-7-jonas.gorski@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251128080625.27181-1-jonas.gorski@gmail.com> References: <20251128080625.27181-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 --- v1 -> v2: * no changes 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 f4afbfcc345e..bd6849e5bb93 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_unicast_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