From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFE5E13A258; Fri, 24 Oct 2025 20:46:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338773; cv=none; b=orpVwh4oA62PPM6POd8TqT3c2GhIoU8skApyrCVuWu56r6FZA7ffDxtS6zXchs9oiorLiykF9Cl2XyqGpa0FoI4uU5sZijWFo69VVj8u9DLwx2BwbXQYObWnfdKm7LWzzE+EJXz0q1A/gXLHRyReNP7A77fWksXsPJq0QEc6WIk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338773; c=relaxed/simple; bh=/IC480uC6uDL2r9MYvnZlp9d29TYaLU7QOMq0cRry6s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K9Xo9yaZq3/xxu4HuAYvVErev6hhlvTOpSuvH0Ovq9x4e9krIQLNFUA4xHC3PI1U1KXJdMpP0U5H0EvoPdD666b5JFoBwoVZvevYz0brxzAGi0r2g4pivcOvhbRnAUzDNzt2M4x/QcIHDDmaqjj29KtRt4QT8NehOLr+YjbR/sc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WTUvz56d; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="WTUvz56d" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 95AD5C4CEFF; Fri, 24 Oct 2025 20:46:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338773; bh=/IC480uC6uDL2r9MYvnZlp9d29TYaLU7QOMq0cRry6s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WTUvz56dtSYKWH42ek+gz6bm3zxmKOdlXEb2hzz0W4NoI1+8cbzOSrejda0c2ydpV AJgQGY5r6L1BsXuJXRETbZ94e41xqPe90Ab1lg79toAgxsNPFHEqiFRM29lI6q65FC WE9xmHNpwq0V6ML5rTQiwa6Vx1ys+8gPVRDllLyFpbZ4oaTP/46qFTyYjzJvnBMtV9 mKugCvfpbmv0eH9EVgvHzCR/SahAZZppQqJZ3Zcu5pYaeUUFpnZT6KZ4VX9JiwFMP2 CSH4+xM8LrARH2/SM9ZRrim/6GLNGzk2L2MLih+fZNzSKIF20JDr54dUYhTG2xyvSc 8rSa2zlW3B4fA== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:00 +0300 Subject: [PATCH net-next v5 1/9] net: ethernet: ti: cpsw_ale: Update Policer fields for more ALE size/ports Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-1-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2767; i=rogerq@kernel.org; h=from:subject:message-id; bh=/IC480uC6uDL2r9MYvnZlp9d29TYaLU7QOMq0cRry6s=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOJAC2fE2AWAyMjhX9qeweLimVhebf1sS2K 1OM3NJQV6WJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw k8k+EAC24iQOn0euf4pZbWOdKgIifMSpYA7NobOIibave903H6h2Kx7KBXxHSMx5eppBcKx5Rus vluz5v7UCwQXoipcOpRn+Lfruti2Hlfo9sWgEQ1Kko/Xu4BVVfrp6Ow8T64xLjRu1jR/4sPcGpF hJkI7oWZQLw42p7aoQakTBKk6CTUBvWteFwK+svCdvjqB517Wb+JxdpKuhE7gf71myDf8eXfI3c Q73smKAmQKikywtz48rB9cIfLZGEZEoj7Knonz24CEdKTPzWPGUSV3XUCIaCp4GeVEle9pJMszG XFueYcNxBrbILx0OXoxjKWgMYl3koIJt9JEsf59B+BB7XVK41+nTWQH/3XP5egL/Pr7AS9epVB0 ljSDtSUbFC8MF9Q6KeP4rWH67cZG9LcRhFnrAL1Q5P0dFVPTx6iQNQ9oWyNjSx31fkda0+6Yjs4 H60q5toQOFm0xSpbI4BYPRx4PiUBKGC4RveRvi6j22vhexKbn5cFpWbJdQDWNjFttcBXD5tJ50r U0CiVp1eEJMepA1qneMYivyFK1OiqG0m8oCwJF1ElTd+NPpP+yEUCvfsHdrrFwoSSXHqD02dBy1 GOEUGxevptGlPrSjXe+YEtIfstfiQaFnSS2J5ppvKSrd0r5A74B46zUXk0DAxDkT7/1l/AVQAlb /sjGpg37DHiCKaA== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 Different SoCs have different sized ALE table and number of ports. Expand the Policer fields to support 16 ports and 1024 ALE entries. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/cpsw_ale.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index fbe35af615a6f05861683032873fb6c30b2e057c..2e294fea999f3ba9545a68f6884= c313feb35c587 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -1341,33 +1341,33 @@ static const struct reg_field ale_fields_cpsw_nu[] = =3D { /* CPSW_ALE_POLICER_PORT_OUI_REG */ [POL_PORT_MEN] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 31, 31), [POL_TRUNK_ID] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 30, 30), - [POL_PORT_NUM] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 25, 25), + [POL_PORT_NUM] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 25, 28), [POL_PRI_MEN] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 19, 19), [POL_PRI_VAL] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 16, 18), [POL_OUI_MEN] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 15, 15), - [POL_OUI_INDEX] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 0, 5), + [POL_OUI_INDEX] =3D REG_FIELD(ALE_POLICER_PORT_OUI, 0, 9), =20 /* CPSW_ALE_POLICER_DA_SA_REG */ [POL_DST_MEN] =3D REG_FIELD(ALE_POLICER_DA_SA, 31, 31), - [POL_DST_INDEX] =3D REG_FIELD(ALE_POLICER_DA_SA, 16, 21), + [POL_DST_INDEX] =3D REG_FIELD(ALE_POLICER_DA_SA, 16, 25), [POL_SRC_MEN] =3D REG_FIELD(ALE_POLICER_DA_SA, 15, 15), - [POL_SRC_INDEX] =3D REG_FIELD(ALE_POLICER_DA_SA, 0, 5), + [POL_SRC_INDEX] =3D REG_FIELD(ALE_POLICER_DA_SA, 0, 9), =20 /* CPSW_ALE_POLICER_VLAN_REG */ [POL_OVLAN_MEN] =3D REG_FIELD(ALE_POLICER_VLAN, 31, 31), - [POL_OVLAN_INDEX] =3D REG_FIELD(ALE_POLICER_VLAN, 16, 21), + [POL_OVLAN_INDEX] =3D REG_FIELD(ALE_POLICER_VLAN, 16, 25), [POL_IVLAN_MEN] =3D REG_FIELD(ALE_POLICER_VLAN, 15, 15), - [POL_IVLAN_INDEX] =3D REG_FIELD(ALE_POLICER_VLAN, 0, 5), + [POL_IVLAN_INDEX] =3D REG_FIELD(ALE_POLICER_VLAN, 0, 9), =20 /* CPSW_ALE_POLICER_ETHERTYPE_IPSA_REG */ [POL_ETHERTYPE_MEN] =3D REG_FIELD(ALE_POLICER_ETHERTYPE_IPSA, 31, 31), - [POL_ETHERTYPE_INDEX] =3D REG_FIELD(ALE_POLICER_ETHERTYPE_IPSA, 16, 21), + [POL_ETHERTYPE_INDEX] =3D REG_FIELD(ALE_POLICER_ETHERTYPE_IPSA, 16, 25), [POL_IPSRC_MEN] =3D REG_FIELD(ALE_POLICER_ETHERTYPE_IPSA, 15, 15), - [POL_IPSRC_INDEX] =3D REG_FIELD(ALE_POLICER_ETHERTYPE_IPSA, 0, 5), + [POL_IPSRC_INDEX] =3D REG_FIELD(ALE_POLICER_ETHERTYPE_IPSA, 0, 9), =20 /* CPSW_ALE_POLICER_IPDA_REG */ [POL_IPDST_MEN] =3D REG_FIELD(ALE_POLICER_IPDA, 31, 31), - [POL_IPDST_INDEX] =3D REG_FIELD(ALE_POLICER_IPDA, 16, 21), + [POL_IPDST_INDEX] =3D REG_FIELD(ALE_POLICER_IPDA, 16, 25), =20 /* CPSW_ALE_POLICER_TBL_CTL_REG */ /** --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 070D82FBDF4; Fri, 24 Oct 2025 20:46:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338777; cv=none; b=a5ymNkcZTl+ZyujktwJtctrZboK1tmuSjyiuhuVg99Vrxh/UHLB7Sv7wcv2ADWzmI37C1u6KpP/yb0GqWaI3OpV7Cd0EZ22XaiNcN47Dnm9xDZlUEeirygSXrl2N2tfS8exO05Rs+ub13NdmTKr/vNJ3rU8c55ThLHQPFr7WItE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338777; c=relaxed/simple; bh=i8q7dEZiiJ1a8p5k8OATPXo0h7mF6Jxue5/RExPUox4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gmUwyBNIxaRoft8i3AEIefGXWE1WuyvXZVYIVShszZGCQFIyfQws+aiVYLEe7jaSCguo5jr8OaSxbXOhlpjAJGXfyqyoPzW/q0617ZA2uFWz3NHEXwvCBmV2gTDiWVPf77OZIhHX56G6qwbmN6Wrf+Yz3PlKqiYXhvNoorECsEA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qfEkBc30; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qfEkBc30" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C00FFC4CEF7; Fri, 24 Oct 2025 20:46:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338776; bh=i8q7dEZiiJ1a8p5k8OATPXo0h7mF6Jxue5/RExPUox4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qfEkBc30K9+0dbZqW3Ui8NAhVLLLz7mtf6XFgtAF58m6uudiibxxSm7CvehppUsuR PsvC/ldR9uA0t5D+bBvRp8nnayMZiwOIgFs+q8LPA1KAYdteGM0SUxaFzq7l8ho0GK SoE0HMo8pJOzWCtKnj/TPFfKRIX3Cc6nCZqaPe7kXhFXC57dWHVRkR+RcVfMOEcibo AhumJx3mZa6jQrhzc47XCALB7kX0B7YkeLQYupixOY9ZP7etVL+eKQOyxU5qAgZCP7 Tzbh7tMhb+BR/CiUFSGo/KoX5lnCvq46I3Ic0V/9N3lC0FNqmaK9jbsu0XhfmzW1Em lmwxdcQ54/ryg== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:01 +0300 Subject: [PATCH net-next v5 2/9] net: ethernet: ti: cpsw_ale: return ALE index in cpsw_ale_add_vlan() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-2-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2642; i=rogerq@kernel.org; h=from:subject:message-id; bh=i8q7dEZiiJ1a8p5k8OATPXo0h7mF6Jxue5/RExPUox4=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOZU6NYoEgZFZRjNhjRf12CJAM5dxtC8Bv5 DXjte3EeXOJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw kxrBD/4x5h9nj3jUS8NUCxgsDPL3K4zNZ3u2XZVwya1/zVXSi5fFQpHqkA7sZMah6c2YNsEya3m vrY/efWwZit4Mvkk5Bqu7beGOIrgjOM8/XpOHx2nLx1W+FtOY4bHdPffxPiGkQeIvb9TPE5JKuY ymoIHqspA60yroyzWIbpmZrMPOhg4CXi8DcfgMx+QNod6/lCvcix0odA3fE5dtzvxDI3IKgXWHO CcS+zf6nIS7XqTiN/m125fJaHnbU7i5GKqeC+US9/NIGWVvWkuQOvLU78ffGZ5LkCaRcQe9q2eO uzwEPist8x2vOLBsHf3MYX9lnEjwgqR7PM0eUqjd/lvnh9nctVVioM02mrmxv0/nj6t2yU3QnkB EZGNda98kXxJEsM8KBR0wm4xaNcCC6+fLHgQRFn5LwAhs2fUbVcQqI1UMtnhMPujUf/4g/kH6tM OzDuUMMWS50MYuaDr8GQwobqe7mHmhcl6n0+BX1jXK/QQwIEcSW6SmEbWaTvTvDiT2EnZoHIa5S fDy6K1iMrmH4EvifUTN8zhHZX/rSUqXhQIoJ0YOe0Ufc+EvaFW1W0hjNMZE7UID4Zm60s1M6i+p y8RlqhyqmFL8/IcdVW3JDXXxhpPVmlxzbqd240/9pYv0arvyQ+7QYtS9NCS57PM7m4+8KSVRfSB tjLa7iNNcehaHzQ== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 Policer helpers will be interested to know what ALE index was used for the added VLAN entry. So return the ALE index instead of zero on success. Modify existing users to check for less than zero as error case. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/cpsw.c | 2 +- drivers/net/ethernet/ti/cpsw_ale.c | 6 +++--- drivers/net/ethernet/ti/cpsw_new.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 54c24cd3d3be639c90111856efaf154cd77f7ee4..11ee08b52cc102673187ac921a7= e23b1cb9e631d 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -1026,7 +1026,7 @@ static inline int cpsw_add_vlan_ale_entry(struct cpsw= _priv *priv, =20 ret =3D cpsw_ale_add_vlan(cpsw->ale, vid, port_mask, 0, port_mask, unreg_mcast_mask); - if (ret !=3D 0) + if (ret < 0) return ret; =20 ret =3D cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr, diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index 2e294fea999f3ba9545a68f6884c313feb35c587..166de524d22a78a93d2f8c995f6= 2e8c93b145943 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -680,7 +680,7 @@ int cpsw_ale_add_vlan(struct cpsw_ale *ale, u16 vid, in= t port_mask, int untag, return -ENOMEM; =20 cpsw_ale_write(ale, idx, ale_entry); - return 0; + return idx; } =20 static void cpsw_ale_vlan_del_modify_int(struct cpsw_ale *ale, u32 *ale_e= ntry, @@ -803,14 +803,14 @@ int cpsw_ale_vlan_add_modify(struct cpsw_ale *ale, u1= 6 vid, int port_mask, =20 ret =3D cpsw_ale_add_vlan(ale, vid, vlan_members, untag_members, reg_mcast_members, unreg_mcast_members); - if (ret) { + if (ret < 0) { dev_err(ale->params.dev, "Unable to add vlan\n"); return ret; } dev_dbg(ale->params.dev, "port mask 0x%x untag 0x%x\n", vlan_members, untag_mask); =20 - return ret; + return 0; } =20 void cpsw_ale_set_unreg_mcast(struct cpsw_ale *ale, int unreg_mcast_mask, diff --git a/drivers/net/ethernet/ti/cpsw_new.c b/drivers/net/ethernet/ti/c= psw_new.c index 8b9e2078c6025a099e0f90d4d80395b7622cf0f6..adde50e7731d16af1a7f68bf3f8= f8626fbe8b037 100644 --- a/drivers/net/ethernet/ti/cpsw_new.c +++ b/drivers/net/ethernet/ti/cpsw_new.c @@ -417,7 +417,7 @@ static int cpsw_add_vlan_ale_entry(struct cpsw_priv *pr= iv, =20 ret =3D cpsw_ale_add_vlan(cpsw->ale, vid, port_mask, 0, port_mask, unreg_mcast_mask); - if (ret !=3D 0) + if (ret < 0) return ret; =20 ret =3D cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr, --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F1842FC893; Fri, 24 Oct 2025 20:46:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338780; cv=none; b=L1RWjtqc9NKJMw1p3YRbN8DP6oYCnU1iMstxXAPfo3Jte0jA2+Z9XODKwHPa8bLs98jn7bsj+Ds57e3P9JWLSaUew/s3abdOsKj+2WtSc/Qjgfn0pNSFqF8JUpnXAJVSaZfjFtMNzk+ViWzxpZ3P/uDuVuEACs5zUo/u53QrSo0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338780; c=relaxed/simple; bh=VproYPN/It1JURWA/m4TsPnS5S/rti+LRb1lbwdpJxU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ufUpkEbDsaXoK8IYn4MK2vBJffj0jvUNMtX+4/oVVASzYuE9DFj+az+rpSOYzK5n1sTeF9zk4BDrMm+idBQGaRtMnYIIg7XCWSXIBYt5M1jn2/S9WdIcR7Qs7QQKauNj/keeur+w5K2nXSvqqXqpFqnFKBd0SqTlEg/+yLNBJlA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QIWPZYgH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QIWPZYgH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EAD7FC4CEF1; Fri, 24 Oct 2025 20:46:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338779; bh=VproYPN/It1JURWA/m4TsPnS5S/rti+LRb1lbwdpJxU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QIWPZYgHwtGNqjD1IsJs733BeokyN5PTF5PubwnP16laIrQM/APKKTwH4bDvFJRXN FMUM71paazQNT3wVZJ3D7b/aX1exaze6Y3Rku6UX3ZlQiD4TX0E8jNW70+27RrgrWX vbgRcBa5u4WowoqvH7sKj3eKDaUDyWzJ9NROyS0f6AaQB5TGSiuwdA2pT8wvazgl/x AJCCrNB7Vjn75memhZxtdRJObjBFC2or65JpnBLFymc1EoYTBF0JTweEGTfkXC6Azl Pn0kgOJKR8umFKAo5vNXLS1AUyurCl3iQM64Bpxoywwz8aSlBbNqnYIGFElZap22Cr 1kDJWgptyZfGA== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:02 +0300 Subject: [PATCH net-next v5 3/9] net: ethernet: ti: cpsw_ale: return ALE index in cpsw_ale_vlan_add_modify() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-3-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4787; i=rogerq@kernel.org; h=from:subject:message-id; bh=VproYPN/It1JURWA/m4TsPnS5S/rti+LRb1lbwdpJxU=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOrGUTHoiKuYAud5ObYVWB0lyuW3I17e+7Q 3EXzwLQTjuJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw k9iIEAC0Hd9RBv+Pd52F9HtMSNMS1NxgW1fgPvwM1WGfhBBpSs737P52QTV4hqwV0KE9cn2dbbY L1XzCTbiUuYtxTMsylcGfOfOje9aF2NHTj8A64Bq9zbgtFUUTuHrLZWZYir6h/txVYGRX5WOmBX 6L2DO6QKGDikUkTVd77v/XMV51tOLoXnl0ukZGoX1St+We6uucqk2hgsuyHrBK2j+YCxFRL7lRY uqQ84hGTtrJuk/+qcN1Yv/ZxcVNfC+lh+qwKmVGyrCMxkvsYVQO6jDiVqn+c+CmPpedaH48M4EM OW+ZKW5xSSKL8il3ETqvGjkx3jr2k+JEn0Gc72nEzhFD5yYsWHn98fQJCgRxtebf7pdhPQve0T9 9ov/6KFCPQCYwXuTNOUIGWWlxY1BgKF32uXmepKPTkJFKqmRo6kR6nnBBRHYifpUPuJ+cxMnnET jYsA/GCTE6dVg+eF8lmhLnL+8vp5e+auNHqdvQSEuP+00sd08EVZvz0ZBwfaCdWt3ZloCgjkmMA aSyB1pQESUNjbZc02pLXMdG6IUFuHuk+qi2CXDssh8pOOFzuRU0oscJNwGTKzUAwTDuRYcFgIDs FSfF+lyYpWhi5TMEjV9Xkv54ZuUShEpWmEtn1sdVq3PrniKVy2abYnUdFWYJelBb9929dd35W++ UqAcOrSZNCo3u7g== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 Policer helpers will need to know what ALE index was used for the added VLAN entry. So return the ALE index instead of zero on success. Modify existing users to check for less than zero as error case. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 2 ++ drivers/net/ethernet/ti/am65-cpsw-switchdev.c | 6 +++--- drivers/net/ethernet/ti/cpsw_ale.c | 10 +++++----- drivers/net/ethernet/ti/cpsw_switchdev.c | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/etherne= t/ti/am65-cpsw-nuss.c index d5f358ec982050751a63039e73887bf6e7f684e7..977f32962cd0bc63528718e47a4= bfae813676f01 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -321,6 +321,8 @@ static int am65_cpsw_nuss_ndo_slave_add_vid(struct net_= device *ndev, dev_info(common->dev, "Adding vlan %d to vlan filter\n", vid); ret =3D cpsw_ale_vlan_add_modify(common->ale, vid, port_mask, unreg_mcast, port_mask, 0); + if (ret > 0) + ret =3D 0; =20 pm_runtime_put(common->dev); return ret; diff --git a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c b/drivers/net/et= hernet/ti/am65-cpsw-switchdev.c index d4c56da98a6aac1b90dca475fc49fb1f0ce5dd5e..b284202bf480d22c4722f8ab511= 4ff7e7ecaf7b9 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-switchdev.c +++ b/drivers/net/ethernet/ti/am65-cpsw-switchdev.c @@ -175,7 +175,7 @@ static int am65_cpsw_port_vlan_add(struct am65_cpsw_por= t *port, bool untag, bool =20 ret =3D cpsw_ale_vlan_add_modify(cpsw->ale, vid, port_mask, untag_mask, reg_mcast_mask, unreg_mcast_mask); - if (ret) { + if (ret < 0) { netdev_err(port->ndev, "Unable to add vlan\n"); return ret; } @@ -184,14 +184,14 @@ static int am65_cpsw_port_vlan_add(struct am65_cpsw_p= ort *port, bool untag, bool cpsw_ale_add_ucast(cpsw->ale, port->slave.mac_addr, HOST_PORT_NUM, ALE_VLAN | ALE_SECURE, vid); if (!pvid) - return ret; + return 0; =20 am65_cpsw_set_pvid(port, vid, 0, 0); =20 netdev_dbg(port->ndev, "VID add: %s: vid:%u ports:%X\n", port->ndev->name, vid, port_mask); =20 - return ret; + return 0; } =20 static int am65_cpsw_port_vlan_del(struct am65_cpsw_port *port, u16 vid, diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index 166de524d22a78a93d2f8c995f62e8c93b145943..d46b14e87d836c9da190b5a27dd= e3fb85760080e 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -780,7 +780,7 @@ int cpsw_ale_vlan_add_modify(struct cpsw_ale *ale, u16 = vid, int port_mask, u32 ale_entry[ALE_ENTRY_WORDS] =3D {0, 0, 0}; int reg_mcast_members, unreg_mcast_members; int vlan_members, untag_members; - int idx, ret =3D 0; + int idx; =20 idx =3D cpsw_ale_match_vlan(ale, vid); if (idx >=3D 0) @@ -801,16 +801,16 @@ int cpsw_ale_vlan_add_modify(struct cpsw_ale *ale, u1= 6 vid, int port_mask, reg_mcast_members =3D (reg_mcast_members & ~port_mask) | reg_mask; unreg_mcast_members =3D (unreg_mcast_members & ~port_mask) | unreg_mask; =20 - ret =3D cpsw_ale_add_vlan(ale, vid, vlan_members, untag_members, + idx =3D cpsw_ale_add_vlan(ale, vid, vlan_members, untag_members, reg_mcast_members, unreg_mcast_members); - if (ret < 0) { + if (idx < 0) { dev_err(ale->params.dev, "Unable to add vlan\n"); - return ret; + return idx; } dev_dbg(ale->params.dev, "port mask 0x%x untag 0x%x\n", vlan_members, untag_mask); =20 - return 0; + return idx; } =20 void cpsw_ale_set_unreg_mcast(struct cpsw_ale *ale, int unreg_mcast_mask, diff --git a/drivers/net/ethernet/ti/cpsw_switchdev.c b/drivers/net/etherne= t/ti/cpsw_switchdev.c index ce85f7610273e6d66d8a6350216feb64aeb55982..c767a47b2039accbac01a5f25fd= bf5a5e94525f2 100644 --- a/drivers/net/ethernet/ti/cpsw_switchdev.c +++ b/drivers/net/ethernet/ti/cpsw_switchdev.c @@ -191,7 +191,7 @@ static int cpsw_port_vlan_add(struct cpsw_priv *priv, b= ool untag, bool pvid, =20 ret =3D cpsw_ale_vlan_add_modify(cpsw->ale, vid, port_mask, untag_mask, reg_mcast_mask, unreg_mcast_mask); - if (ret) { + if (ret < 0) { dev_err(priv->dev, "Unable to add vlan\n"); return ret; } @@ -200,13 +200,13 @@ static int cpsw_port_vlan_add(struct cpsw_priv *priv,= bool untag, bool pvid, cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr, HOST_PORT_NUM, ALE_VLAN, vid); if (!pvid) - return ret; + return 0; =20 cpsw_set_pvid(priv, vid, 0, 0); =20 dev_dbg(priv->dev, "VID add: %s: vid:%u ports:%X\n", priv->ndev->name, vid, port_mask); - return ret; + return 0; } =20 static int cpsw_port_vlan_del(struct cpsw_priv *priv, u16 vid, --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4FF422FD66F; Fri, 24 Oct 2025 20:46:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338783; cv=none; b=KZvPQyzJ4r7KdHvt1kVzUf05kt1cnBlcduU0r256yvhnRzozNV5+3RQEvqydz35h7LN1d3CmDKWEoJguto4VwIccoZ6NfDvHmXpUjMQSxYK6cFmw52lint8qgpAy4Ghy784SGj2TqUJThgpbWS5tzqiE6Esd6ud8jz6kTbR2FPA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338783; c=relaxed/simple; bh=wqXdV4rD2eGMQ2gQ3K5CQxSUeggPo9nfI+UKAsg4OGs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GM0oLX8jr3X3XrhrCR1mFPcJs/dUdN1eiYgsE12U0JwqelqO5k23eVsAFmcVrk/qQ3MirynngzLips2KlqErsYgEve661WDdYSJ28I/t7B+Qb76T6tYvk85k1m/CeqKaD/1ScWJpoZ6WzZAjlFkeEs2xAj3N/uuKhJ7hPPK7XQc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HSSPyRyc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HSSPyRyc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 210FFC4CEF7; Fri, 24 Oct 2025 20:46:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338782; bh=wqXdV4rD2eGMQ2gQ3K5CQxSUeggPo9nfI+UKAsg4OGs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HSSPyRycf6/TMTmmH47r/b4hc3rRjerIbVkxdJVpqO7a/pWK8cBiF8y5ooP+SeK6g 9KmvsMCQid9CBiHYhy8unWuL4EJihEfdqIw5NjniDgbVlejXI7o7dejuy8f2ozyZTS RBf77eJf5sgKbGYC5zX1YFuAo3DCbQ3C198ouxBb/z6wPPXjBcWoDIajco9sIZ0r9u X/gtZZTVYvYQMJgOXz0ltihkwJibTSD9nfNqBcLnjZfZSLn4NoJDc/BKxxdq7jWsYs pTLrG+NrXEIKzWdq8Cja2DIzI56fHvKVx0T7s4DAGC0wjkdNtp7qHxDFK6Jgd6tAdS APVqpJ1YTCzcA== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:03 +0300 Subject: [PATCH net-next v5 4/9] net: ethernet: ti: cpsw_ale: return ALE index in cpsw_ale_add_ucast() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-4-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2112; i=rogerq@kernel.org; h=from:subject:message-id; bh=wqXdV4rD2eGMQ2gQ3K5CQxSUeggPo9nfI+UKAsg4OGs=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOzTDEExucxTIX0/NRf51IHNKnGt3NyPQb4 Ptwh7ucnCWJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw kw/wD/9kOIxb0zaNHsALX8sioxIkjjnrQR0QQ26Is/YfzVqvEnZFfjkC2OWNm4nCUckxuKAmgv1 JfDadvkp/PZmcb/hCBk7WMGS8Ewp494BeRPJjOmEdm/PoYsuTg2rBfkaPdgqiJIweB5s9s+v+Ao CK9BHs4Nv2epdkf5VCiA39RE7H45UvrxsHr4yzNh7o2yEx/Vg0pS8PSb/kagijMArVBNxDNx1lh bJsNk5xAYVuOgn+rLbaWuVsaJgRketSX6jwuBkZ8lj4rVjpvp+I0/h1eDIZicTmcA/Fvz13T/tp U4AGG58Stkn9aK/ScI0fk298guvjIZw3S9N5FlnUZ+ZeYTejkrLb3ZJepJf5GUXu5p1s0YElN5N sGZFKcKPH31Bn8F7NvKw72I/N+fwx+YItzVltos14rgm4KWO5Q6SH3qw7q/MN9m/T1wY/Bv++qP 5wIQFLdnzYFqTG8y5nQ8DN160MwxuzNGd8M96dGWhSpoTe01gdVH44Sd4ohs4aKJqrDPAD05j68 EIyti3s/PCYXdnOnBC16UzVbYUrpxYHM6sbMXhI10hHAgTu3t6qW7MxgaofJfmN8g6lkxQRQ9IO pUdZ/wMkMr8aOByrPWIO+xIM3nP7JPVSVon2qAvIY/Go7imrVrWA0wOBSrbTxqbLW/DVUcTgIyi Dc7G9HoBNt5jnOw== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 Policer helpers will need to know what ALE index was used for the added unicast entry. So return the ALE index instead of zero on success. Modify existing users to check for less than zero as error case. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/cpsw.c | 2 +- drivers/net/ethernet/ti/cpsw_ale.c | 2 +- drivers/net/ethernet/ti/cpsw_new.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 11ee08b52cc102673187ac921a7e23b1cb9e631d..4d0141b63b1760b33fa670d9c00= addb7ab816738 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -1031,7 +1031,7 @@ static inline int cpsw_add_vlan_ale_entry(struct cpsw= _priv *priv, =20 ret =3D cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr, HOST_PORT_NUM, ALE_VLAN, vid); - if (ret !=3D 0) + if (ret < 0) goto clean_vid; =20 ret =3D cpsw_ale_add_mcast(cpsw->ale, priv->ndev->broadcast, diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index d46b14e87d836c9da190b5a27dde3fb85760080e..f0cd6a9b1700fa061f7042a81c0= 73d835cc5cb87 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -534,7 +534,7 @@ int cpsw_ale_add_ucast(struct cpsw_ale *ale, const u8 *= addr, int port, return -ENOMEM; =20 cpsw_ale_write(ale, idx, ale_entry); - return 0; + return idx; } =20 int cpsw_ale_del_ucast(struct cpsw_ale *ale, const u8 *addr, int port, diff --git a/drivers/net/ethernet/ti/cpsw_new.c b/drivers/net/ethernet/ti/c= psw_new.c index adde50e7731d16af1a7f68bf3f8f8626fbe8b037..77bd34a8821d3044f5cee7d9c23= 43f960a4cbc64 100644 --- a/drivers/net/ethernet/ti/cpsw_new.c +++ b/drivers/net/ethernet/ti/cpsw_new.c @@ -422,7 +422,7 @@ static int cpsw_add_vlan_ale_entry(struct cpsw_priv *pr= iv, =20 ret =3D cpsw_ale_add_ucast(cpsw->ale, priv->mac_addr, HOST_PORT_NUM, ALE_VLAN, vid); - if (ret !=3D 0) + if (ret < 0) goto clean_vid; =20 ret =3D cpsw_ale_add_mcast(cpsw->ale, priv->ndev->broadcast, --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6B0F42FD66F; Fri, 24 Oct 2025 20:46:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338786; cv=none; b=Lbkp9C5tgc2KfpRIGZ0Te33hH5VtPdDVvjT5yyMKPokOiSOQ/Q2NefosATd3ShGdHMoKMhA6927i+uvn39FBvfT8imjKpkaUH9nSu1Cw175CFr3EkJyLx9MHTNh127ckqQivtDeW+CvkmeErHLKtkcg4fpOVgmMKwUNWT8GGtZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338786; c=relaxed/simple; bh=14/Pch89N+rlN9f4R8wQhFGpvUooT1HqZSwrT7vMOQ4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q3q4NpzhPHcgyxiJSdec8NgdvGsJeLd8zoJJXFzgaxnDmcQmuO1tdaVQRTjyeic2YTtwPekjbhyeLrToLR5h8VDYdgZOKGtvC13UbA1rnZ7lEsU3+DGl1N+sDCPeT8FpGv8zzEYO6XU5CM9lQSLOWOydshRIiZFkpf0hvTxqA4o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=M14D9OB+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="M14D9OB+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4BED8C4CEF1; Fri, 24 Oct 2025 20:46:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338786; bh=14/Pch89N+rlN9f4R8wQhFGpvUooT1HqZSwrT7vMOQ4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=M14D9OB+cofH5k+lDg+B9OHP949Z+o64gff2LLFQR8jqQthN0EDgFBVZWmdP1TybU Sy3ALH1f9DBIUNR7GujIC08MYDVy1zVS8dLHJDWV/bAXoi/WHahPU0KuZkLHIeCq+6 BpGUapDP3mlYIOkZ4TgNvCZPypK/ChVac6GiCdaAcbHfY7BFRsHxHOCOYweZPJaaqa 0Kwptm42sAGRTtaRkVBb7z4GlB2w6Ml10EyaEzQYHr2fZ25nYr5BFYBIT1oOOrG9Ad FiP0c7Jbb8xzuUsWB+vLPJ9OYdfwCTeBrs/hNGaPQZof91c/lnMoNVCX5uAQNd2Nne kMkKnG++ugu+A== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:04 +0300 Subject: [PATCH net-next v5 5/9] net: ethernet: ti: cpsw_ale: add cpsw_ale_policer_reset_entry() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-5-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3516; i=rogerq@kernel.org; h=from:subject:message-id; bh=14/Pch89N+rlN9f4R8wQhFGpvUooT1HqZSwrT7vMOQ4=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOMfEih83bEDvDNSC/QVzqnuatc1suO8Aq7 Cjwu0i3EPqJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw k4McD/0R1yOKhMxyzBVkY3Gue8MRBJfOfS4qRFE0Z7y/6luqBotq9wARDcE2a8yvEU3PYLIcUC3 aVe5pDsj5WRnMtL80P9zSQdmBSUsFsEBcgxBk+STEnGBLfl+OxEEXWb1WLUkfxrbALV1ZlJyo0q zYMLahvVRDondD89x8eDXCrvokFJWynM8oMtlbYLQjdrsqidp9PH/YGC4p1zNS7aLmRZ/Y+6AvA 70jNHTmdL85SLRvt3MVIDbvgApREpOmvICpLX7lWfzrTC8cyGi/CodC5j4PM/xosHuuC4s3IRPk zK6MbPkB1GuO2XCfZInOmJfqBte9WlGbOFUSPsfMT8dj61zHPac1XyzARZlWvOKQkMHH5P8nrDS GDuDG7ve94yUT7EhgPPp8XGOFBFAsS8Pq0Q/KPxK2PIq7PIPitx+ikGnnP8FyiSLQegfIgTr6qh xquv7TUP2pJq+uCw42ok7ylMNI14bKkM81zFFj4EryDlOs5SRvaEExs/zlsiDRgjF2DuvHfLblf QCqiyFu4u9zH6NDlj5whm7x/ZJGA+aUeAC36b66ASELwviwJemFmucxYZ+WF9o4kYPf8k6XPBQO D1qNwFkk1KgG5cctyWkxPXNAqbzaM6QD1rjuTHDYBLUvaUGVBPA1bPOh3/41mykEk7BpZ5MPfuj wL8QKqWu3DwObOQ== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 Add new helper cpsw_ale_policer_reset_entry() to reset a single policer entry. Clear all fields instead of just clearing the enable bits. Export cpsw_ale_policer_reset() as it will be required by cpsw drivers using policer. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/cpsw_ale.c | 35 +++++++++++++++-------------------- drivers/net/ethernet/ti/cpsw_ale.h | 4 ++++ 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index f0cd6a9b1700fa061f7042a81c073d835cc5cb87..e259662f38cb8ea780b8d42dde2= 0a81fc88780ae 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -1674,30 +1674,25 @@ static void cpsw_ale_policer_thread_idx_enable(stru= ct cpsw_ale *ale, u32 idx, regmap_field_write(ale->fields[ALE_THREAD_ENABLE], enable ? 1 : 0); } =20 +static void cpsw_ale_policer_reset_entry(struct cpsw_ale *ale, u32 idx) +{ + int i; + + cpsw_ale_policer_read_idx(ale, idx); + for (i =3D 0; i < CPSW_ALE_POLICER_ENTRY_WORDS; i++) + writel_relaxed(0, ale->params.ale_regs + + ALE_POLICER_PORT_OUI + 4 * i); + cpsw_ale_policer_thread_idx_enable(ale, idx, 0, 0); + cpsw_ale_policer_write_idx(ale, idx); +} + /* Disable all policer entries and thread mappings */ -static void cpsw_ale_policer_reset(struct cpsw_ale *ale) +void cpsw_ale_policer_reset(struct cpsw_ale *ale) { int i; =20 - for (i =3D 0; i < ale->params.num_policers ; i++) { - cpsw_ale_policer_read_idx(ale, i); - regmap_field_write(ale->fields[POL_PORT_MEN], 0); - regmap_field_write(ale->fields[POL_PRI_MEN], 0); - regmap_field_write(ale->fields[POL_OUI_MEN], 0); - regmap_field_write(ale->fields[POL_DST_MEN], 0); - regmap_field_write(ale->fields[POL_SRC_MEN], 0); - regmap_field_write(ale->fields[POL_OVLAN_MEN], 0); - regmap_field_write(ale->fields[POL_IVLAN_MEN], 0); - regmap_field_write(ale->fields[POL_ETHERTYPE_MEN], 0); - regmap_field_write(ale->fields[POL_IPSRC_MEN], 0); - regmap_field_write(ale->fields[POL_IPDST_MEN], 0); - regmap_field_write(ale->fields[POL_EN], 0); - regmap_field_write(ale->fields[POL_RED_DROP_EN], 0); - regmap_field_write(ale->fields[POL_YELLOW_DROP_EN], 0); - regmap_field_write(ale->fields[POL_PRIORITY_THREAD_EN], 0); - - cpsw_ale_policer_thread_idx_enable(ale, i, 0, 0); - } + for (i =3D 0; i < ale->params.num_policers ; i++) + cpsw_ale_policer_reset_entry(ale, i); } =20 /* Default classifier is to map 8 user priorities to N receive channels */ diff --git a/drivers/net/ethernet/ti/cpsw_ale.h b/drivers/net/ethernet/ti/c= psw_ale.h index 87b7d1b3a34a90ec1bf1435ace6fbb565bd2ad81..ce59fec757746ccd784a320b47c= b7021da639325 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.h +++ b/drivers/net/ethernet/ti/cpsw_ale.h @@ -156,6 +156,9 @@ enum cpsw_ale_port_state { #define ALE_ENTRY_BITS 68 #define ALE_ENTRY_WORDS DIV_ROUND_UP(ALE_ENTRY_BITS, 32) =20 +/* Policer */ +#define CPSW_ALE_POLICER_ENTRY_WORDS 8 + struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params); =20 void cpsw_ale_start(struct cpsw_ale *ale); @@ -195,5 +198,6 @@ int cpsw_ale_vlan_del_modify(struct cpsw_ale *ale, u16 = vid, int port_mask); void cpsw_ale_set_unreg_mcast(struct cpsw_ale *ale, int unreg_mcast_mask, bool add); void cpsw_ale_classifier_setup_default(struct cpsw_ale *ale, int num_rx_ch= ); +void cpsw_ale_policer_reset(struct cpsw_ale *ale); =20 #endif --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CF9D2FE06C; Fri, 24 Oct 2025 20:46:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338789; cv=none; b=ic//vvivBJUVlQz8nrhNYF1Wd0d4YLjKJ1hge77R5neatxMeT0Z7HLA2XTmpCWK6wchrPBMPwrfuNjL1/UWipGhY9nqCejdnyvZCQYKyLPjGnuMf0NvchmpgXaAhY296OKrLtDY0eoRV8OGubTT6fZK9u435rzM0+8cfR0w5DF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338789; c=relaxed/simple; bh=M/aUW5obACDgDZ0RhUKkgWsr4wrkfElDfJmYdGn2wh4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=L/EmzdKIQSJ6LkdH8Kx7DpqSBiGEQOcYR5pTWDHBpa0UQvm18yx6YlgbBJFzS1WdkMRFvR1CJiq5WNfIXzBvupLqxrE0eTVxfVC+mnfqsWr4qbeWRiXda/FYKY+8EZtpK6oE0nFZYvpR/4iASezN+OFuc0JRqLeUI6T8PGc+AVQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ke711KnG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ke711KnG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 78609C4CEF7; Fri, 24 Oct 2025 20:46:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338789; bh=M/aUW5obACDgDZ0RhUKkgWsr4wrkfElDfJmYdGn2wh4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ke711KnGi5KDfP6dLjW/J6pQ1L/y837X/CW1jsT14tTrXcB3koUIro3yO0bjbv8Qp 6oZEglXXjWQzyFPg6WstOHqfHIRExOZdD6MTvnUn/8b+RbE91rgd+J0M22erYGWUjr PL3P7KKNopDXyPVn+eHlL7kxUoJ390OEv29Mg46Q5epF37ZpoxxJNkmnnkRpd4CuKQ C9qa2fU150XuBqhxmg8whQ+ykzcUt/sPtQ7inSDmBEEGq633cMs9e3/5qVdT5V4av8 iwinKxKpHh+9K/GXacDA1vNkcZZ890GREf4JUvNpB+snBkB1iKyHS3tqfDPE0fpH2u RicR5OSfP9JEQ== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:05 +0300 Subject: [PATCH net-next v5 6/9] net: ethernet: ti: cpsw_ale: add cpsw_ale_policer_set/clr_entry() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-6-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4904; i=rogerq@kernel.org; h=from:subject:message-id; bh=M/aUW5obACDgDZ0RhUKkgWsr4wrkfElDfJmYdGn2wh4=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOnBqmEJ4VGb9jmnRoYiAr+BPXSaKgyCaP3 rdiN5ik+EyJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw k0dJD/0Y9iU4F9RDQCQV/ZsBn3x1lTzx4Ctw/vcncyVTIjnF+Y+mrT373dOjGZIKafqYy7ppR/K 3NJbm3gwYO9jPQ0Sbq9/7mSr2aZCnrrMdqpYrf86sYOY1paUd/8axCXwxvFfn1/Hct6tfXAsQm+ r0qs9iXl5volIlfhCZm5Ng4z7vf1GvQzDg0hm/bTM5MY8l1J7DCCB7BNZBO7udzK9JTktFjVabC /SWe3xBYN04u9p43zHL4/4tXM9P2jeKH1xaFW0RL4fMFlLXrDbb0SNEPhWyWTHiBsRzPqJ+fhRZ j3T7abf0kXCP71F0uUs+7hDHmmt8nyuwgs5HTB5nBWtU44RVj3sJxApYerxNoJYV2ABPG/B2pch H27ShslweQqfTUxApZxta1iyCyJzF/qX+veW5PSBGQT0O237MJroqVN7B/uGJOSKhiGhglGtFHC Er5HfMqg5U6xSArpqsK0rdzfHrxRupdPs/Y6Zbq6vKVgMXDI8AKXCBlV8vOP09p7DF001eqvb9O 9MfyQfWn0AxySf2czNUsGgSvjZgIfV0enQl+Z25oPIccyx22C4nwVaw2B5BTa/eJo7xUeFOvTkG /GvkffsM8blx0gUUFfwytmxs7YqIl/sOQWSxcMhqU3hEwdG8Du0N232+os7tCpQXl5xyg9E5a7Y DsUho/9ASgbwtMA== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 Add cpsw_ale_policer_set/clr_entry() helpers. So far Raw Ethernet matching based on Source/Destination address and VLAN Priority (PCP) is supported. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/cpsw_ale.c | 77 ++++++++++++++++++++++++++++++++++= ++++ drivers/net/ethernet/ti/cpsw_ale.h | 28 ++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index e259662f38cb8ea780b8d42dde20a81fc88780ae..9641c3d688c768a227b557f7c1a= 31fe77c9a738b 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -1746,3 +1746,80 @@ void cpsw_ale_classifier_setup_default(struct cpsw_a= le *ale, int num_rx_ch) 1); } } + +#define HOST_PORT_NUM 0 + +/* Clear Policer and associated ALE table entries */ +void cpsw_ale_policer_clr_entry(struct cpsw_ale *ale, u32 policer_idx, + struct cpsw_ale_policer_cfg *cfg) +{ + cpsw_ale_policer_reset_entry(ale, policer_idx); + + /* We do not delete ALE entries that were added in set_entry + * as they might still be in use by the port e.g. VLAN id + * or port MAC address + */ + + /* clear BLOCKED in case we set it */ + if ((cfg->match_flags & CPSW_ALE_POLICER_MATCH_MACSRC) && cfg->drop) + cpsw_ale_add_ucast(ale, cfg->src_addr, HOST_PORT_NUM, 0, 0); + + if ((cfg->match_flags & CPSW_ALE_POLICER_MATCH_MACDST) && cfg->drop) + cpsw_ale_add_ucast(ale, cfg->dst_addr, HOST_PORT_NUM, 0, 0); +} + +int cpsw_ale_policer_set_entry(struct cpsw_ale *ale, u32 policer_idx, + struct cpsw_ale_policer_cfg *cfg) +{ + int ale_idx; + u16 ale_flags =3D cfg->drop ? ALE_BLOCKED : 0; + + /* A single policer can support multiple match types simultaneously + * There can be only one ALE entry per address + */ + cpsw_ale_policer_reset_entry(ale, policer_idx); + cpsw_ale_policer_read_idx(ale, policer_idx); + + if (cfg->match_flags & CPSW_ALE_POLICER_MATCH_MACSRC) { + ale_idx =3D cpsw_ale_add_ucast(ale, cfg->src_addr, HOST_PORT_NUM, + ale_flags, 0); + if (ale_idx < 0) + return -ENOENT; + + /* update policer entry */ + regmap_field_write(ale->fields[POL_SRC_INDEX], ale_idx); + regmap_field_write(ale->fields[POL_SRC_MEN], 1); + } + + if (cfg->match_flags & CPSW_ALE_POLICER_MATCH_MACDST) { + ale_idx =3D cpsw_ale_add_ucast(ale, cfg->dst_addr, HOST_PORT_NUM, + ale_flags, 0); + if (ale_idx < 0) + return -ENOENT; + + /* update policer entry */ + regmap_field_write(ale->fields[POL_DST_INDEX], ale_idx); + regmap_field_write(ale->fields[POL_DST_MEN], 1); + } + + if (cfg->match_flags & CPSW_ALE_POLICER_MATCH_OVLAN) { + /* VLAN ID based flow routing not yet working, + * only PCP matching for now + */ + if (cfg->vid > 0) + return -EINVAL; + + regmap_field_write(ale->fields[POL_PRI_VAL], cfg->vlan_prio); + regmap_field_write(ale->fields[POL_PRI_MEN], 1); + } + + cpsw_ale_policer_write_idx(ale, policer_idx); + + /* Map to thread id provided by the config */ + if (!cfg->drop) { + cpsw_ale_policer_thread_idx_enable(ale, policer_idx, + cfg->thread_id, true); + } + + return 0; +} diff --git a/drivers/net/ethernet/ti/cpsw_ale.h b/drivers/net/ethernet/ti/c= psw_ale.h index ce59fec757746ccd784a320b47cb7021da639325..11d333bf5a5280374573833050a= 4e3893d85dc28 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.h +++ b/drivers/net/ethernet/ti/cpsw_ale.h @@ -159,6 +159,30 @@ enum cpsw_ale_port_state { /* Policer */ #define CPSW_ALE_POLICER_ENTRY_WORDS 8 =20 +/* Policer match flags */ +#define CPSW_ALE_POLICER_MATCH_PORT BIT(0) +#define CPSW_ALE_POLICER_MATCH_PRI BIT(1) +#define CPSW_ALE_POLICER_MATCH_OUI BIT(2) +#define CPSW_ALE_POLICER_MATCH_MACDST BIT(3) +#define CPSW_ALE_POLICER_MATCH_MACSRC BIT(4) +#define CPSW_ALE_POLICER_MATCH_OVLAN BIT(5) +#define CPSW_ALE_POLICER_MATCH_IVLAN BIT(6) +#define CPSW_ALE_POLICER_MATCH_ETHTYPE BIT(7) +#define CPSW_ALE_POLICER_MATCH_IPSRC BIT(8) +#define CPSW_ALE_POLICER_MATCH_IPDST BIT(9) + +struct cpsw_ale_policer_cfg { + u32 match_flags; + u16 ether_type; + u16 vid; + u8 vlan_prio; + u8 src_addr[ETH_ALEN]; + u8 dst_addr[ETH_ALEN]; + bool drop; + u64 thread_id; + int port_id; +}; + struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params); =20 void cpsw_ale_start(struct cpsw_ale *ale); @@ -199,5 +223,9 @@ void cpsw_ale_set_unreg_mcast(struct cpsw_ale *ale, int= unreg_mcast_mask, bool add); void cpsw_ale_classifier_setup_default(struct cpsw_ale *ale, int num_rx_ch= ); void cpsw_ale_policer_reset(struct cpsw_ale *ale); +int cpsw_ale_policer_set_entry(struct cpsw_ale *ale, u32 policer_idx, + struct cpsw_ale_policer_cfg *cfg); +void cpsw_ale_policer_clr_entry(struct cpsw_ale *ale, u32 policer_idx, + struct cpsw_ale_policer_cfg *cfg); =20 #endif --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D12232FB0B5; Fri, 24 Oct 2025 20:46:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338792; cv=none; b=g0yXcjzloKJP2fmW8OSWN5g16IflaUltkOmOCDEzCgEcZDSgiZw2Z+j1KopeOfome6XLwq+JOfvIFNSwFIQT/8SAE4AxdvzBQSvmNZsyKhSCxzWqlo+txYNRzRjdTv+f2YVQJDaH6WtGWUUJvdBsDeQJiFpxInCwOk4XSr3Uc64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338792; c=relaxed/simple; bh=RdFfCnJkmUXNXNzHLyaMWfYKDsG3Xqljb2qSbUhkbFw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tJMGVMa8R+Iq9j743xvZ5WaPI+FbfrxPMh/LDKKv3PErbXvrpl+vmekwhdqt0yhRuZn6PwwzQk4A5wDqOS5j7BDOIp7EUmTiJ6/Uoi8FCFQT6sFYZ4z401xuI11mukzeuWSz57dBNQUrfSqjJpuFD9M1yoHCvn+blHHb0X94nMw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GsP10Q8D; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GsP10Q8D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A31A3C4CEF1; Fri, 24 Oct 2025 20:46:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338792; bh=RdFfCnJkmUXNXNzHLyaMWfYKDsG3Xqljb2qSbUhkbFw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GsP10Q8DX0eNAntfW5yTm7MeeiMUQSofI29l2eByV5JjspLozXmcodJDFgataVjfN KIMs0uSWNs5Ht1oGcElUjv2FzzsK2He5HtKAGkLVHA8rOdc6Hy1dKwACR7gZ7L0PuC FVpJe/7ceapwYKz8kkz68ZVX/9269edNWverW3vG+lKC5F4RTLLr6JwclTA/jAqg+U oSsiey1FQ0Gv/b8MQfXlwAG8vYZrbRem9gUUQq2zAi849L8WeoiQZLy43YU63cGnMP yaBBTyznlt8kNljivTfBllksIcZVyAlWQIgwltA9XF2sGEXFIMEfLQ4WjZP+Vbt5rI t5J3HHKK518Gw== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:06 +0300 Subject: [PATCH net-next v5 7/9] net: ethernet: ti: cpsw_ale: add policer save restore for PM sleep Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-7-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5765; i=rogerq@kernel.org; h=from:subject:message-id; bh=RdFfCnJkmUXNXNzHLyaMWfYKDsG3Xqljb2qSbUhkbFw=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOrTD8bFoD5Lo8d4+lbarjovhF++QArNFCa ApTzNR6YESJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw k5F/D/9fkZJKtPalmzEvHPfHZCxv4T1goCZhNbfY7Ev0ZNFa4xMTQrPed50gyyPTnssdajhA3Ys 8YDiWjvo7GXndJNi7UQT8oDYBiZfEQ7tWbMd/samHYHWIuBuMl/AvOLAVrDYzZe0nGqy0TC1JFy WjSpZtK4nyxK1mDC/LRYePyaCCSznvZfs6V/+HOABf+H5J8TVsEucNaz2jzhYQUN0D4mcHsn3t8 JYybqbfUa06py/9osAqo/bKopD44sDPGJTJuJoe5qh9yQRvg4xIgNZw5LV91+TPgXWfb+z39M+V sByluBwinO6u5l5NX6026HioQtecinJTIixlQu7/A8NX7pX50SnNh29xI8+DwPZs/baE4wd6OzE et5LLTZRchPA4tm1uD+j6AJoKudMBor3c9NO/xOpRBQA1cvtsFykvG9vbH2o4YSICigxqG2KZzr SQwroCiI8R76IdjUm42MIDF0qFi5H23V/GCvhHpt2MgUUDaNL9MsEcYiydb0HcHinM0vviPP4XE yjtPzPxfwWeAVD1e6NJlIl3KLeMfKb040W2AVrEEnhQUA0kUY7Wskhu/3xL5ivJvRe4GjaRTPmJ HbPfLqC6KcMTtoICruDU51ZIQKavJ9Lt1yNqUHlbtOtAcau3C5wa3q30FmQDLVHzDPxUFNWCMKL OGG5rh5GllCjQLA== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 On some K3 platforms CPSW context is lost during PM sleep. Add cpsw_ale_policer_save() and cpsw_ale_policer_restore() helpers. In am65-cpsw driver, save the policer context during PM suspend and restore it during PM resume. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 24 +++++++++++++++--- drivers/net/ethernet/ti/am65-cpsw-nuss.h | 1 + drivers/net/ethernet/ti/cpsw_ale.c | 42 ++++++++++++++++++++++++++++= ++++ drivers/net/ethernet/ti/cpsw_ale.h | 4 +++ 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/etherne= t/ti/am65-cpsw-nuss.c index 977f32962cd0bc63528718e47a4bfae813676f01..93ff139966ea0e26d3cd44a2f6e= b7f9cbd2611d5 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -3523,7 +3523,7 @@ static int am65_cpsw_nuss_probe(struct platform_devic= e *pdev) struct device_node *node; struct resource *res; struct clk *clk; - int ale_entries; + int tbl_entries; __be64 id_temp; int ret, i; =20 @@ -3626,10 +3626,26 @@ static int am65_cpsw_nuss_probe(struct platform_dev= ice *pdev) goto err_of_clear; } =20 - ale_entries =3D common->ale->params.ale_entries; + tbl_entries =3D common->ale->params.ale_entries; common->ale_context =3D devm_kzalloc(dev, - ale_entries * ALE_ENTRY_WORDS * sizeof(u32), + tbl_entries * ALE_ENTRY_WORDS * sizeof(u32), GFP_KERNEL); + if (!common->ale_context) { + ret =3D -ENOMEM; + goto err_of_clear; + } + + tbl_entries =3D common->ale->params.num_policers; + i =3D CPSW_ALE_POLICER_ENTRY_WORDS + 1; /* 8 CFG + 1 Thread_val */ + i *=3D tbl_entries; /* for all policers */ + i +=3D 1; /* thread_def register */ + common->policer_context =3D devm_kzalloc(dev, i * sizeof(u32), + GFP_KERNEL); + if (!common->policer_context) { + ret =3D -ENOMEM; + goto err_of_clear; + } + ret =3D am65_cpsw_init_cpts(common); if (ret) goto err_of_clear; @@ -3715,6 +3731,7 @@ static int am65_cpsw_nuss_suspend(struct device *dev) int i, ret; =20 cpsw_ale_dump(common->ale, common->ale_context); + cpsw_ale_policer_save(common->ale, common->policer_context); host_p->vid_context =3D readl(host_p->port_base + AM65_CPSW_PORT_VLAN_REG= _OFFSET); for (i =3D 0; i < common->port_num; i++) { port =3D &common->ports[i]; @@ -3792,6 +3809,7 @@ static int am65_cpsw_nuss_resume(struct device *dev) =20 writel(host_p->vid_context, host_p->port_base + AM65_CPSW_PORT_VLAN_REG_O= FFSET); cpsw_ale_restore(common->ale, common->ale_context); + cpsw_ale_policer_restore(common->ale, common->policer_context); =20 return 0; } diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.h b/drivers/net/etherne= t/ti/am65-cpsw-nuss.h index 917c37e4e89bd933d3001f6c35a62db01cd8da4c..61daa5db12e631588eba71351ba= 3bc0139456bf5 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.h +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.h @@ -190,6 +190,7 @@ struct am65_cpsw_common { unsigned char switch_id[MAX_PHYS_ITEM_ID_LEN]; /* only for suspend/resume context restore */ u32 *ale_context; + u32 *policer_context; }; =20 struct am65_cpsw_ndev_priv { diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index 9641c3d688c768a227b557f7c1a31fe77c9a738b..9492d0cf06bbbe227899e9a235f= 2fe52da3acad6 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -1823,3 +1823,45 @@ int cpsw_ale_policer_set_entry(struct cpsw_ale *ale,= u32 policer_idx, =20 return 0; } + +void cpsw_ale_policer_save(struct cpsw_ale *ale, u32 *data) +{ + int i, idx; + + for (idx =3D 0; idx < ale->params.num_policers; idx++) { + cpsw_ale_policer_read_idx(ale, idx); + + for (i =3D 0; i < CPSW_ALE_POLICER_ENTRY_WORDS; i++) + data[i] =3D readl_relaxed(ale->params.ale_regs + + ALE_POLICER_PORT_OUI + 4 * i); + + regmap_field_write(ale->fields[ALE_THREAD_CLASS_INDEX], idx); + data[i++] =3D readl_relaxed(ale->params.ale_regs + + ALE_THREAD_VAL); + data +=3D i; + } + + data[0] =3D readl_relaxed(ale->params.ale_regs + ALE_THREAD_DEF); +} + +void cpsw_ale_policer_restore(struct cpsw_ale *ale, u32 *data) +{ + int i, idx; + + for (idx =3D 0; idx < ale->params.num_policers; idx++) { + cpsw_ale_policer_read_idx(ale, idx); + + for (i =3D 0; i < CPSW_ALE_POLICER_ENTRY_WORDS; i++) + writel_relaxed(data[i], ale->params.ale_regs + + ALE_POLICER_PORT_OUI + 4 * i); + + cpsw_ale_policer_write_idx(ale, idx); + + regmap_field_write(ale->fields[ALE_THREAD_CLASS_INDEX], idx); + writel_relaxed(data[i++], ale->params.ale_regs + + ALE_THREAD_VAL); + data +=3D i; + } + + writel_relaxed(data[0], ale->params.ale_regs + ALE_THREAD_DEF); +} diff --git a/drivers/net/ethernet/ti/cpsw_ale.h b/drivers/net/ethernet/ti/c= psw_ale.h index 11d333bf5a5280374573833050a4e3893d85dc28..dbc095397389d36df54a29d46e9= 05f7eeb790e87 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.h +++ b/drivers/net/ethernet/ti/cpsw_ale.h @@ -171,6 +171,8 @@ enum cpsw_ale_port_state { #define CPSW_ALE_POLICER_MATCH_IPSRC BIT(8) #define CPSW_ALE_POLICER_MATCH_IPDST BIT(9) =20 +#define CPSW_ALE_POLICER_ENTRY_WORDS 8 + struct cpsw_ale_policer_cfg { u32 match_flags; u16 ether_type; @@ -227,5 +229,7 @@ int cpsw_ale_policer_set_entry(struct cpsw_ale *ale, u3= 2 policer_idx, struct cpsw_ale_policer_cfg *cfg); void cpsw_ale_policer_clr_entry(struct cpsw_ale *ale, u32 policer_idx, struct cpsw_ale_policer_cfg *cfg); +void cpsw_ale_policer_save(struct cpsw_ale *ale, u32 *data); +void cpsw_ale_policer_restore(struct cpsw_ale *ale, u32 *data); =20 #endif --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34D972FB61F; Fri, 24 Oct 2025 20:46:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338796; cv=none; b=jxN4CJt1YLNfraXfJr2xs+dei2mHebhUYW+oQKaYg4J8HGgMKC+HQqpzd57gSHD1A0Zp6RFNPkPMi3P/tgbQzgxsE4BTnMAqOdTT7SYs002MFpwuFNeGqoGZ4/sJpgYoSGTDNm6RDFsbEaeaOQclM8rniIyq/ynT4A3YdaNMKk4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338796; c=relaxed/simple; bh=kXiuxMiFWV7mI53KfvjpKzguuc2BNbV1HpqLHCAIPxA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DLmzoGDWTjhYyRKwRGujgpKz2qc19YXcVr+jPEJhikxHYuLdD0RpqecK8nxV4VDUtBw3RQYcIsxfBIkp2L7TlpcF9nsjAPTyoiKakdVvJkZnngEp726rCJqFpa4BkVANZx0H1v+MurZ0dpK+WP/N0H1KFDmMKtl3GO8nXLoN0tU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kO8zpcqX; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kO8zpcqX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CD988C4CEF7; Fri, 24 Oct 2025 20:46:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338795; bh=kXiuxMiFWV7mI53KfvjpKzguuc2BNbV1HpqLHCAIPxA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=kO8zpcqXyBDngV8s/ypFbXAKhOBBzq9YW9pgyGOaxpfXobp4F32I3cybJZXRzWsiQ 9AdqIaOHUIfq30dUxWYrqGEeQ03RTXTbRFIXuzhOpDukLOGyLbQb6YRtUmW/gc0Dqb 4qtYgW7uuNHFxkRXvEDsvY89LhyUrvhbhtINSmP4g/6MGw30Fey+Vtz42KUUDwukXC 251yi2IkWIvwBp1RxnmTMQ3QZCKs/WOMiCCAv+meAmbCGKWhyv8S9t1v6g4bLcq7dH tfGkmE5f/fZL0CSLeMWksmCqAQXzkERpxN7s4WzIoY0DmMSnu9TRGHzVIbYjBu0/WB QZdsqAhd6qxyw== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:07 +0300 Subject: [PATCH net-next v5 8/9] net: ethernet: ti: am65-cpsw: add network flow classification support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-8-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=15492; i=rogerq@kernel.org; h=from:subject:message-id; bh=kXiuxMiFWV7mI53KfvjpKzguuc2BNbV1HpqLHCAIPxA=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WOlfARKClTZ+5k6uHQtEDVN5mlrWKtpTVqF 33DchcAxwCJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljgAKCRDSWmvTvnYw kyJLEACs72esq9Itcv7QR5eV8bsO+4rexV1TI/u5w2MXdQi9by5xgysMfdYsKmYS7tcr3dv0wgq +C7NviPyUsjvF0qlafAuV+nohNE97Ipz/KyuZfXClo4LM3B0DYDKo/0X0QSoUkha9nZFfwhvw7X xkHsS4te/rua/ZtM0P9oQIl53ck9MzuTnqewVRpGcRSjPfZEFH3hUgkEjVZRMIsNxrL9CrbHGzG OILnS+UzustFYShQoMCHEV2hR36lTAEblyFiWoA+3zMrbEJ22ywTUPL9Vlz2RrCg4yQkOh4g42d tEpUUdJyxhEsvu7tug1+KOAvEbZ8ikNA9CpOPZLuN49K18U1jbW2Y4zTI7s9Ui5l1aWBJTO6oyi ufl+4LZpqv7iWDZQszm4UWa3yUtgO3/BuWW3wA+FtWenkTFxEtT1Tk0eCpqfDr6JTJKEDVCxvxo G6E+Jgm14x/nHvccsvpnKS8P7eYU8PDUgN2G5oLMkeL2GiHfpb++rtjG3MW93IiKoFDCUIC64I4 PXRsfY6kFxKCWAIEl7sTp3xqdc1uAdRG9HtgOfM8YpaF0N5kT/jkE+J4ZpWuM+M3KxVC2YSS94h AQEAwpefDlUIrSdguuAQ978lfZFW3qdqrs0HLUvB7BVc7e69e/pYGy+Xtrwi5CGf45HYoH2Vaa9 ZdJwgQTux3IcE0A== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 Adds support for -N/--config-nfc ethtool command for configuring RX classfiers. Currently only raw Ethernet (flow-type ether) matching is added based on source/destination addresses and VLAN Priority (PCP). The ALE policer engine is used to perform the matching and routing to a specific RX channel. The TRM doesn't mention much about order of evaluation of the classifier rules, however, it does mention [1] "if multiple classifier matches occur, the highest match with thread enable bit set will be used." [2] "If multiple classifier matches occur, the highest matching entry with a thread enable bit set will be used." Based on this information and tests it was found out that on multiple classifier matches the higher indexed classifier is used. [1] 12.3.1.4.6.1.12.3.1 Classifier to CPPI Transmit Flow ID Mapping [2] 12.3.1.4.6.1.12.2 Classifier to Host Thread Mapping in AM62x TRM https://www.ti.com/lit/pdf/spruiv7 Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/am65-cpsw-ethtool.c | 395 ++++++++++++++++++++++++= ++++ drivers/net/ethernet/ti/am65-cpsw-nuss.c | 3 + drivers/net/ethernet/ti/am65-cpsw-nuss.h | 16 ++ 3 files changed, 414 insertions(+) diff --git a/drivers/net/ethernet/ti/am65-cpsw-ethtool.c b/drivers/net/ethe= rnet/ti/am65-cpsw-ethtool.c index c57497074ae60d88b4f5944d3386bfc3a987ce95..6de1c3b8c86d86ebeb83b1b94d2= 9338f909aa967 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-ethtool.c +++ b/drivers/net/ethernet/ti/am65-cpsw-ethtool.c @@ -973,6 +973,399 @@ static int am65_cpsw_set_coalesce(struct net_device *= ndev, struct ethtool_coales return am65_cpsw_set_per_queue_coalesce(ndev, 0, coal); } =20 +#define AM65_CPSW_FLOW_TYPE(f) ((f) & ~(FLOW_EXT | FLOW_MAC_EXT)) + +/* rxnfc_lock must be held */ +static struct am65_cpsw_rxnfc_rule *am65_cpsw_get_rule(struct am65_cpsw_po= rt *port, + int location) +{ + struct am65_cpsw_rxnfc_rule *rule; + + list_for_each_entry(rule, &port->rxnfc_rules, list) { + if (rule->location =3D=3D location) + return rule; + } + + return NULL; +} + +/* rxnfc_lock must be held */ +static void am65_cpsw_del_rule(struct am65_cpsw_port *port, + struct am65_cpsw_rxnfc_rule *rule) +{ + int loc; + + /* reverse location as higher locations have higher priority + * but ethtool expects lower locations to have higher priority + */ + loc =3D port->rxnfc_max - rule->location - 1; + + cpsw_ale_policer_clr_entry(port->common->ale, loc, + &rule->cfg); + list_del(&rule->list); + port->rxnfc_count--; + port->policer_in_use_bitmask &=3D ~BIT(rule->location); + kfree(rule); +} + +/* rxnfc_lock must be held */ +static int am65_cpsw_add_rule(struct am65_cpsw_port *port, + struct am65_cpsw_rxnfc_rule *rule) +{ + struct am65_cpsw_rxnfc_rule *prev =3D NULL, *cur; + int ret, loc; + + /* reverse location as higher locations have higher priority + * but ethtool expects lower locations to have higher priority + */ + loc =3D port->rxnfc_max - rule->location - 1; + + ret =3D cpsw_ale_policer_set_entry(port->common->ale, loc, + &rule->cfg); + if (ret) + return ret; + + list_for_each_entry(cur, &port->rxnfc_rules, list) { + if (cur->location >=3D rule->location) + break; + prev =3D cur; + } + + list_add(&rule->list, prev ? &prev->list : &port->rxnfc_rules); + port->rxnfc_count++; + port->policer_in_use_bitmask |=3D BIT(rule->location); + + return 0; +} + +#define ETHER_TYPE_FULL_MASK cpu_to_be16(FIELD_MAX(U16_MAX)) +#define VLAN_TCI_FULL_MASK ETHER_TYPE_FULL_MASK + +static int am65_cpsw_rxnfc_get_rule(struct am65_cpsw_port *port, + struct ethtool_rxnfc *rxnfc) +{ + struct ethtool_rx_flow_spec *fs =3D &rxnfc->fs; + struct am65_cpsw_rxnfc_rule *rule; + struct cpsw_ale_policer_cfg *cfg; + + mutex_lock(&port->rxnfc_lock); + rule =3D am65_cpsw_get_rule(port, fs->location); + if (!rule) { + mutex_unlock(&port->rxnfc_lock); + return -ENOENT; + } + + cfg =3D &rule->cfg; + + /* build flowspec from policer_cfg */ + fs->flow_type =3D ETHER_FLOW; + fs->ring_cookie =3D cfg->thread_id; + + /* clear all masks. Seems to be inverted */ + eth_broadcast_addr(fs->m_u.ether_spec.h_dest); + eth_broadcast_addr(fs->m_u.ether_spec.h_source); + fs->m_u.ether_spec.h_proto =3D ETHER_TYPE_FULL_MASK; + fs->m_ext.vlan_tci =3D htons(0xFFFF); + fs->m_ext.vlan_etype =3D ETHER_TYPE_FULL_MASK; + fs->m_ext.data[0] =3D cpu_to_be32(FIELD_MAX(U32_MAX)); + fs->m_ext.data[1] =3D cpu_to_be32(FIELD_MAX(U32_MAX)); + + if (cfg->match_flags & CPSW_ALE_POLICER_MATCH_MACDST) { + ether_addr_copy(fs->h_u.ether_spec.h_dest, + cfg->dst_addr); + eth_zero_addr(fs->m_u.ether_spec.h_dest); + } + + if (cfg->match_flags & CPSW_ALE_POLICER_MATCH_MACSRC) { + ether_addr_copy(fs->h_u.ether_spec.h_source, + cfg->src_addr); + eth_zero_addr(fs->m_u.ether_spec.h_source); + } + + if (cfg->match_flags & CPSW_ALE_POLICER_MATCH_OVLAN) { + fs->flow_type |=3D FLOW_EXT; + fs->h_ext.vlan_tci =3D htons(FIELD_PREP(VLAN_VID_MASK, cfg->vid) + | FIELD_PREP(VLAN_PRIO_MASK, cfg->vlan_prio)); + fs->m_ext.vlan_tci =3D 0; + } + + mutex_unlock(&port->rxnfc_lock); + + return 0; +} + +static int am65_cpsw_rxnfc_get_all(struct am65_cpsw_port *port, + struct ethtool_rxnfc *rxnfc, + u32 *rule_locs) +{ + struct am65_cpsw_rxnfc_rule *rule; + int count =3D 0; + + rxnfc->data =3D port->rxnfc_max; + mutex_lock(&port->rxnfc_lock); + + list_for_each_entry(rule, &port->rxnfc_rules, list) { + if (count =3D=3D rxnfc->rule_cnt) { + mutex_unlock(&port->rxnfc_lock); + return -EMSGSIZE; + } + + rule_locs[count] =3D rule->location; + count++; + } + + mutex_unlock(&port->rxnfc_lock); + rxnfc->rule_cnt =3D count; + + return 0; +} + +static int am65_cpsw_get_rxnfc(struct net_device *ndev, + struct ethtool_rxnfc *rxnfc, + u32 *rule_locs) +{ + struct am65_cpsw_common *common =3D am65_ndev_to_common(ndev); + struct am65_cpsw_port *port =3D am65_ndev_to_port(ndev); + + switch (rxnfc->cmd) { + case ETHTOOL_GRXRINGS: + rxnfc->data =3D common->rx_ch_num_flows; + return 0; + case ETHTOOL_GRXCLSRLCNT: /* Get RX classification rule count */ + rxnfc->rule_cnt =3D port->rxnfc_count; + rxnfc->data =3D port->rxnfc_max; + rxnfc->data |=3D RX_CLS_LOC_SPECIAL; + return 0; + case ETHTOOL_GRXCLSRULE: /* Get RX classification rule */ + return am65_cpsw_rxnfc_get_rule(port, rxnfc); + case ETHTOOL_GRXCLSRLALL: /* Get all RX classification rules */ + return am65_cpsw_rxnfc_get_all(port, rxnfc, rule_locs); + default: + return -EOPNOTSUPP; + } +} + +/* validate the rxnfc rule and convert it to policer config */ +static int am65_cpsw_rxnfc_validate(struct am65_cpsw_port *port, + struct ethtool_rxnfc *rxnfc, + struct cpsw_ale_policer_cfg *cfg) +{ + struct ethtool_rx_flow_spec *fs =3D &rxnfc->fs; + struct ethhdr *eth_mask; + int flow_type; + + flow_type =3D AM65_CPSW_FLOW_TYPE(fs->flow_type); + memset(cfg, 0, sizeof(*cfg)); + + if (flow_type & FLOW_RSS) + return -EINVAL; + + if (fs->location !=3D RX_CLS_LOC_ANY && + fs->location >=3D port->rxnfc_max) + return -EINVAL; + + if (fs->ring_cookie =3D=3D RX_CLS_FLOW_DISC) + cfg->drop =3D true; + else if (fs->ring_cookie > AM65_CPSW_MAX_QUEUES) + return -EINVAL; + + cfg->port_id =3D port->port_id; + cfg->thread_id =3D fs->ring_cookie; + + switch (flow_type) { + case ETHER_FLOW: + eth_mask =3D &fs->m_u.ether_spec; + + /* etherType matching is supported by h/w but not yet here */ + if (eth_mask->h_proto) + return -EINVAL; + + /* Only support source matching addresses by full mask */ + if (is_broadcast_ether_addr(eth_mask->h_source)) { + cfg->match_flags |=3D CPSW_ALE_POLICER_MATCH_MACSRC; + ether_addr_copy(cfg->src_addr, + fs->h_u.ether_spec.h_source); + } + + /* Only support destination matching addresses by full mask */ + if (is_broadcast_ether_addr(eth_mask->h_dest)) { + cfg->match_flags |=3D CPSW_ALE_POLICER_MATCH_MACDST; + ether_addr_copy(cfg->dst_addr, + fs->h_u.ether_spec.h_dest); + } + + if ((fs->flow_type & FLOW_EXT) && fs->m_ext.vlan_tci) { + /* Don't yet support vlan ethertype */ + if (fs->m_ext.vlan_etype) + return -EINVAL; + + if (fs->m_ext.vlan_tci !=3D VLAN_TCI_FULL_MASK) + return -EINVAL; + + cfg->vid =3D FIELD_GET(VLAN_VID_MASK, + ntohs(fs->h_ext.vlan_tci)); + cfg->vlan_prio =3D FIELD_GET(VLAN_PRIO_MASK, + ntohs(fs->h_ext.vlan_tci)); + cfg->match_flags |=3D CPSW_ALE_POLICER_MATCH_OVLAN; + } + + break; + default: + return -EINVAL; + } + + return 0; +} + +/* rxnfc_lock must be held */ +static int am65_cpsw_policer_find_match(struct am65_cpsw_port *port, + struct cpsw_ale_policer_cfg *cfg) +{ + struct am65_cpsw_rxnfc_rule *rule; + int loc =3D -EINVAL; + + list_for_each_entry(rule, &port->rxnfc_rules, list) { + if (!memcmp(&rule->cfg, cfg, sizeof(*cfg))) { + loc =3D rule->location; + break; + } + } + + mutex_unlock(&port->rxnfc_lock); + + return loc; +} + +static int am65_cpsw_policer_find_free_location(struct am65_cpsw_port *por= t) +{ + int loc; + + for (loc =3D 0; loc <=3D port->rxnfc_max; loc++) { + if (!(BIT(loc) & port->policer_in_use_bitmask)) + return loc; + } + + return -ENOMEM; +} + +static int am65_cpsw_rxnfc_add_rule(struct am65_cpsw_port *port, + struct ethtool_rxnfc *rxnfc) +{ + struct ethtool_rx_flow_spec *fs =3D &rxnfc->fs; + struct am65_cpsw_rxnfc_rule *rule; + struct cpsw_ale_policer_cfg cfg; + int location, ret; + + if (am65_cpsw_rxnfc_validate(port, rxnfc, &cfg)) + return -EINVAL; + + /* need to check if similar rule is already present at another location, + * if yes error out + */ + mutex_lock(&port->rxnfc_lock); + location =3D am65_cpsw_policer_find_match(port, &cfg); + if (location >=3D 0) { + netdev_info(port->ndev, + "same rule already exists in location %d. not adding\n", + location); + mutex_unlock(&port->rxnfc_lock); + return -EINVAL; + } + + if (fs->location =3D=3D RX_CLS_LOC_ANY) { + fs->location =3D am65_cpsw_policer_find_free_location(port); + if (fs->location < 0) { + netdev_info(port->ndev, + "no free location found in rule table\n"); + mutex_unlock(&port->rxnfc_lock); + return -ENOMEM; + } + } else { + if (BIT(fs->location) & port->policer_in_use_bitmask) { + netdev_info(port->ndev, + "another rule exists in location %d. not adding\n", + fs->location); + mutex_unlock(&port->rxnfc_lock); + return -EINVAL; + } + } + + rule =3D kzalloc(sizeof(*rule), GFP_KERNEL); + if (!rule) { + mutex_unlock(&port->rxnfc_lock); + return -ENOMEM; + } + + INIT_LIST_HEAD(&rule->list); + memcpy(&rule->cfg, &cfg, sizeof(cfg)); + rule->location =3D fs->location; + ret =3D am65_cpsw_add_rule(port, rule); + if (ret) + kfree(rule); + + mutex_unlock(&port->rxnfc_lock); + return ret; +} + +static int am65_cpsw_rxnfc_del_rule(struct am65_cpsw_port *port, + struct ethtool_rxnfc *rxnfc) +{ + struct ethtool_rx_flow_spec *fs =3D &rxnfc->fs; + struct am65_cpsw_rxnfc_rule *rule; + + mutex_lock(&port->rxnfc_lock); + rule =3D am65_cpsw_get_rule(port, fs->location); + if (!rule) { + mutex_unlock(&port->rxnfc_lock); + return -ENOENT; + } + + am65_cpsw_del_rule(port, rule); + /* rule freed in am65_cpsw_del_rule() */ + mutex_unlock(&port->rxnfc_lock); + + return 0; +} + +void am65_cpsw_rxnfc_init(struct am65_cpsw_port *port) +{ + struct cpsw_ale *ale =3D port->common->ale; + + mutex_init(&port->rxnfc_lock); + INIT_LIST_HEAD(&port->rxnfc_rules); + port->rxnfc_max =3D ale->params.num_policers; + + /* disable all rules */ + cpsw_ale_policer_reset(ale); +} + +void am65_cpsw_rxnfc_cleanup(struct am65_cpsw_port *port) +{ + struct am65_cpsw_rxnfc_rule *rule, *tmp; + + mutex_lock(&port->rxnfc_lock); + + list_for_each_entry_safe(rule, tmp, &port->rxnfc_rules, list) + am65_cpsw_del_rule(port, rule); + + mutex_unlock(&port->rxnfc_lock); +} + +static int am65_cpsw_set_rxnfc(struct net_device *ndev, + struct ethtool_rxnfc *rxnfc) +{ + struct am65_cpsw_port *port =3D am65_ndev_to_port(ndev); + + switch (rxnfc->cmd) { + case ETHTOOL_SRXCLSRLINS: + return am65_cpsw_rxnfc_add_rule(port, rxnfc); + case ETHTOOL_SRXCLSRLDEL: + return am65_cpsw_rxnfc_del_rule(port, rxnfc); + default: + return -EOPNOTSUPP; + } +} + const struct ethtool_ops am65_cpsw_ethtool_ops_slave =3D { .begin =3D am65_cpsw_ethtool_op_begin, .complete =3D am65_cpsw_ethtool_op_complete, @@ -1010,4 +1403,6 @@ const struct ethtool_ops am65_cpsw_ethtool_ops_slave = =3D { .get_mm =3D am65_cpsw_get_mm, .set_mm =3D am65_cpsw_set_mm, .get_mm_stats =3D am65_cpsw_get_mm_stats, + .get_rxnfc =3D am65_cpsw_get_rxnfc, + .set_rxnfc =3D am65_cpsw_set_rxnfc, }; diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/etherne= t/ti/am65-cpsw-nuss.c index 93ff139966ea0e26d3cd44a2f6eb7f9cbd2611d5..1466cf5706c911ede9e03d53f58= af83c24a66544 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -2778,6 +2778,7 @@ am65_cpsw_nuss_init_port_ndev(struct am65_cpsw_common= *common, u32 port_idx) return -ENOMEM; } =20 + am65_cpsw_rxnfc_init(port); ndev_priv =3D netdev_priv(port->ndev); ndev_priv->port =3D port; ndev_priv->msg_enable =3D AM65_CPSW_DEBUG; @@ -2890,6 +2891,7 @@ static void am65_cpsw_nuss_cleanup_ndev(struct am65_c= psw_common *common) unregister_netdev(port->ndev); free_netdev(port->ndev); port->ndev =3D NULL; + am65_cpsw_rxnfc_cleanup(port); } } =20 @@ -3192,6 +3194,7 @@ static int am65_cpsw_dl_switch_mode_set(struct devlin= k *dl, u32 id, /* clean up ALE table */ cpsw_ale_control_set(cpsw->ale, HOST_PORT_NUM, ALE_CLEAR, 1); cpsw_ale_control_get(cpsw->ale, HOST_PORT_NUM, ALE_AGEOUT); + cpsw_ale_policer_reset(cpsw->ale); =20 if (switch_en) { dev_info(cpsw->dev, "Enable switch mode\n"); diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.h b/drivers/net/etherne= t/ti/am65-cpsw-nuss.h index 61daa5db12e631588eba71351ba3bc0139456bf5..320da76cfbac0cbc878859ca78c= 651c5c54db83a 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.h +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.h @@ -16,6 +16,7 @@ #include #include #include "am65-cpsw-qos.h" +#include "cpsw_ale.h" =20 struct am65_cpts; =20 @@ -40,6 +41,12 @@ struct am65_cpsw_slave_data { struct phylink_config phylink_config; }; =20 +struct am65_cpsw_rxnfc_rule { + struct list_head list; + unsigned int location; + struct cpsw_ale_policer_cfg cfg; +}; + struct am65_cpsw_port { struct am65_cpsw_common *common; struct net_device *ndev; @@ -59,6 +66,12 @@ struct am65_cpsw_port { struct xdp_rxq_info xdp_rxq[AM65_CPSW_MAX_QUEUES]; /* Only for suspend resume context */ u32 vid_context; + /* Classifier flows */ + struct mutex rxnfc_lock; + struct list_head rxnfc_rules; + int rxnfc_count; + int rxnfc_max; + u64 policer_in_use_bitmask; }; =20 enum am65_cpsw_tx_buf_type { @@ -229,4 +242,7 @@ int am65_cpsw_nuss_update_tx_rx_chns(struct am65_cpsw_c= ommon *common, =20 bool am65_cpsw_port_dev_check(const struct net_device *dev); =20 +void am65_cpsw_rxnfc_init(struct am65_cpsw_port *port); +void am65_cpsw_rxnfc_cleanup(struct am65_cpsw_port *port); + #endif /* AM65_CPSW_NUSS_H_ */ --=20 2.34.1 From nobody Thu Dec 18 06:16:03 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 097922FB967; Fri, 24 Oct 2025 20:46:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338799; cv=none; b=g/WmDZ7xAH9ROqgqiUg2pv7ccjC06omQsDP8th6w9iob2TWKQH5B7lilGXv57+OEF6CJEWodBvB+8yy/TfVisYw8V50E8Y0qXxZmz7g5yqFs1ivku0hy1fRcQBHctn1r3gohA8foYJpHvwxJAZmj87KhlQ+ruzH2ainiq9UhosI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761338799; c=relaxed/simple; bh=98Zvu5AgaYK6qIu+QJmSlANsfadhBZxpzytMkLF+ZG8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kk2MiiWHvrF6VrqgF9gk7FNlpQi/CUzH81awfKbr1HM70KoSGTEqEFIB/6MHv0USd0H5qm+1PhzS2D3GLrOSH8ORi2XLYsN8OLzj0ONeIp3kfWf/Wz+9AmihlGvu9bBtAPkKWoc3qVasVJ4kRLT4LhbPq26axN8Inasd60BKSEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nefs8UR7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nefs8UR7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 33FECC4CEF1; Fri, 24 Oct 2025 20:46:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761338798; bh=98Zvu5AgaYK6qIu+QJmSlANsfadhBZxpzytMkLF+ZG8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nefs8UR750e0K0a+YYbAC2jVN2w+u4rejn/5PerP3v2Fy5ObZhCuyeqLo8Hf7qc20 wjZqz0L5iQVrSzqUWhwl3apnJVLdrK+N9wckhlOJwgjNpAWYosAGaJgVIg7VSTuY6n SAKFek9l1NQOotL9DK6jTwlIBTpvlckruL6tcxnSvGpk6OcdQrzGzcWoJV49DX2wRu c8CEBz93aRbD9bF0sod2WzcKwmsJAg7vp/hgQcxM4SoILZ8LyL8Ovd3ke9pwRtc3Kq tMW5hMIi9A/lsx2vPs5j66OUTHD3Me/AjuBabgeMMbNbmEq9PR4tWKdEdy5LROyHd8 qRY42Z7dy64tA== From: Roger Quadros Date: Fri, 24 Oct 2025 23:46:08 +0300 Subject: [PATCH net-next v5 9/9] net: ethernet: ti: am65-cpsw: remove cpsw_ale_classifier_setup_default() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251024-am65-cpsw-rx-class-v5-9-c7c2950a2d25@kernel.org> References: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> In-Reply-To: <20251024-am65-cpsw-rx-class-v5-0-c7c2950a2d25@kernel.org> To: Siddharth Vadapalli , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Russell King , danishanwar@ti.com Cc: srk@ti.com, linux-omap@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Roger Quadros X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4315; i=rogerq@kernel.org; h=from:subject:message-id; bh=98Zvu5AgaYK6qIu+QJmSlANsfadhBZxpzytMkLF+ZG8=; b=owEBbQKS/ZANAwAIAdJaa9O+djCTAcsmYgBo++WPqP7IZYNhaxFFIMaOQcg+W3lN/wjISsj2l WOyDAc7OfGJAjMEAAEIAB0WIQRBIWXUTJ9SeA+rEFjSWmvTvnYwkwUCaPvljwAKCRDSWmvTvnYw k/5AD/9Uv+uX9P7Q8tdGjufveTOSOoBcgTdQbnFqD2G/uot5NHOXVeukD2FCHR8p0/LbvPNtSdo M2/oRvkRlBVNklglGGAMGtW7CbpgXBsUIDotqwjzRVvjl3rR0a/OAuJQM6zGOW5QB7JvAps8REe b6STPcdNjOeO6LLazG08e2xKMGoUz4XwpYlW3OKRfedYrHldJBaJ0Tt61jySPxcWclazUL2GyTZ v1aaPJCLyIQ7vyLm9nap5ZoKP/N9ZbG451eGYTEVInnYhSexE6epNawKhkD5vp2PXhJ/35oXWsf DCFbZGJe7+tTUWScE0CPMDCpWiNH9ZwiuowUxYgFE7aehcGmABiOJqGi79I92JkT+YNy70/nWwh EtmDj6nIHj8fa0SDdNOMa7A83jHSCzyD7WNrGExrTTC8Ppon057GId4sPIGRrrZw++BcKKyia/j IZGC+G9MpNL9kK31CKR9eWcO4MMgg8WfS+DxEsYRY+pycyyt66Dp7T7T6QTSqui5Ihn7VqTLZUD SbUGAOzHAVhNtUxMKEeSZSVLD7huq42OW/XgGEdzqx4/jiwUxs4srh6LrfpbkQtj8nsGX/jejc/ ufaUkHTWt2sFO1JcRVpg6LmzE7KhlP0zA+HyCymh8iCkAf9DQAU6zW4q0hXi/XKsgMJPraQrbTc VZ8oyhiwhCegOZA== X-Developer-Key: i=rogerq@kernel.org; a=openpgp; fpr=412165D44C9F52780FAB1058D25A6BD3BE763093 The RX classifier can now be configured by user using ethtool -N. So drop cpsw_ale_classifier_setup_default(). The default behaviour is that all RX traffic is routed to channel 0. Signed-off-by: Roger Quadros --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 3 -- drivers/net/ethernet/ti/cpsw_ale.c | 52 ----------------------------= ---- drivers/net/ethernet/ti/cpsw_ale.h | 1 - 3 files changed, 56 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/etherne= t/ti/am65-cpsw-nuss.c index 1466cf5706c911ede9e03d53f58af83c24a66544..366b70fc79726fa7ca26e6d3aba= fac3468fdfdf8 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -2494,9 +2494,6 @@ static int am65_cpsw_nuss_init_rx_chns(struct am65_cp= sw_common *common) } } =20 - /* setup classifier to route priorities to flows */ - cpsw_ale_classifier_setup_default(common->ale, common->rx_ch_num_flows); - return 0; =20 err_request_irq: diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/c= psw_ale.c index 9492d0cf06bbbe227899e9a235f2fe52da3acad6..141523f34d9a9441d47248d24cb= d8f3cf0a97bf2 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -1695,58 +1695,6 @@ void cpsw_ale_policer_reset(struct cpsw_ale *ale) cpsw_ale_policer_reset_entry(ale, i); } =20 -/* Default classifier is to map 8 user priorities to N receive channels */ -void cpsw_ale_classifier_setup_default(struct cpsw_ale *ale, int num_rx_ch) -{ - int pri, idx; - - /* Reference: - * IEEE802.1Q-2014, Standard for Local and metropolitan area networks - * Table I-2 - Traffic type acronyms - * Table I-3 - Defining traffic types - * Section I.4 Traffic types and priority values, states: - * "0 is thus used both for default priority and for Best Effort, and - * Background is associated with a priority value of 1. This means - * that the value 1 effectively communicates a lower priority than 0." - * - * In the table below, Priority Code Point (PCP) 0 is assigned - * to a higher priority thread than PCP 1 wherever possible. - * The table maps which thread the PCP traffic needs to be - * sent to for a given number of threads (RX channels). Upper threads - * have higher priority. - * e.g. if number of threads is 8 then user priority 0 will map to - * pri_thread_map[8-1][0] i.e. thread 1 - */ - - int pri_thread_map[8][8] =3D { /* BK,BE,EE,CA,VI,VO,IC,NC */ - { 0, 0, 0, 0, 0, 0, 0, 0, }, - { 0, 0, 0, 0, 1, 1, 1, 1, }, - { 0, 0, 0, 0, 1, 1, 2, 2, }, - { 0, 0, 1, 1, 2, 2, 3, 3, }, - { 0, 0, 1, 1, 2, 2, 3, 4, }, - { 1, 0, 2, 2, 3, 3, 4, 5, }, - { 1, 0, 2, 3, 4, 4, 5, 6, }, - { 1, 0, 2, 3, 4, 5, 6, 7 } }; - - cpsw_ale_policer_reset(ale); - - /* use first 8 classifiers to map 8 (DSCP/PCP) priorities to channels */ - for (pri =3D 0; pri < 8; pri++) { - idx =3D pri; - - /* Classifier 'idx' match on priority 'pri' */ - cpsw_ale_policer_read_idx(ale, idx); - regmap_field_write(ale->fields[POL_PRI_VAL], pri); - regmap_field_write(ale->fields[POL_PRI_MEN], 1); - cpsw_ale_policer_write_idx(ale, idx); - - /* Map Classifier 'idx' to thread provided by the map */ - cpsw_ale_policer_thread_idx_enable(ale, idx, - pri_thread_map[num_rx_ch - 1][pri], - 1); - } -} - #define HOST_PORT_NUM 0 =20 /* Clear Policer and associated ALE table entries */ diff --git a/drivers/net/ethernet/ti/cpsw_ale.h b/drivers/net/ethernet/ti/c= psw_ale.h index dbc095397389d36df54a29d46e905f7eeb790e87..5c96147309988a675c3ec6d1361= 250f927695641 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.h +++ b/drivers/net/ethernet/ti/cpsw_ale.h @@ -223,7 +223,6 @@ int cpsw_ale_vlan_add_modify(struct cpsw_ale *ale, u16 = vid, int port_mask, int cpsw_ale_vlan_del_modify(struct cpsw_ale *ale, u16 vid, int port_mask); void cpsw_ale_set_unreg_mcast(struct cpsw_ale *ale, int unreg_mcast_mask, bool add); -void cpsw_ale_classifier_setup_default(struct cpsw_ale *ale, int num_rx_ch= ); void cpsw_ale_policer_reset(struct cpsw_ale *ale); int cpsw_ale_policer_set_entry(struct cpsw_ale *ale, u32 policer_idx, struct cpsw_ale_policer_cfg *cfg); --=20 2.34.1