From patchwork Tue Mar 11 05:38:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14011175 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B178CC28B2E for ; Tue, 11 Mar 2025 06:11:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=6qzDxX0DIlMzbmGUBw7+OLnlgDRwamz3CNAwoupBurQ=; b=v3KkYGMoF+fCCCARDSUY6lrkeQ GpwPaThH30StEj3Ytj25lP7jqwlaTo0lk2uf82rIOVp6nM7LS8F5UkuYISPxDd5Y5MTQ71Pnjd42a ln19tRFOkw3dhYP6T3uFUBBMYkq5dvj/Y40idK6Hvm08nTaCW4hGx4+4V0i0Mns64lS8c+9341JRe TKQFQs3fuwnimNpkVOVHyG2S14D6UiWxo9QwCbIVhMrey/JItEAmrfPKlCKLQ7zOLYTSh7/FCo5qu fL5uvL9rA2n9nwB7nXJsZn0uC/oPcKbXH+dBujBurFRe2Jdx4neZ2IRCE7yeY5+W1vfnIOllTRYw4 pmuKC8Kw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trspX-00000004iuS-2E7S; Tue, 11 Mar 2025 06:11:07 +0000 Received: from mail-northeuropeazlp170120003.outbound.protection.outlook.com ([2a01:111:f403:c200::3] helo=DU2PR03CU002.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trsbb-00000004gdn-0R2T for linux-arm-kernel@lists.infradead.org; Tue, 11 Mar 2025 05:56:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A/al8S1/Ya/L1MeQrOrGw2GCojzmJH+IY4iHU6bFZLqZ9WxWwgDN4gZLeHYdquMs5HdQancl+nIDWXqR3GiNVTnwLUeHxW1PP4Q0qrBZmeKktAGw0H18ubjQsRQuMnxlKAsU1AoDkODWdgNjrJmgAUm458lohCvXvf7BXmzPJ8dP5Pqz5rzZpltHYRPcmvEZ8rRW4PHcMUmBbKT5EUTOFW2lDogZ0UYBbh99znJqVlN9bxPgr26G9GcRSc3hdofWJohO8x1oQ8h53h49Gtd7PurJonHLacbMvv8k7gGnCVIOYycgwbqcjdZBZWBAJwBtp1L8qZQCDWmhdIMMQIdQ+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6qzDxX0DIlMzbmGUBw7+OLnlgDRwamz3CNAwoupBurQ=; b=TbRY8xOkRe4MLH6izDXBumus/w/6M5s6vjl7akaA5NXPJplqewuQ0cWRNh1N/riDw6wSRr7m/cGDpKjUOzFuCzXWptZ4zbnQURmkk/RpXNP4Kat0t+9/En3bFyLwCB+oTxlErCqt5DZ3kUUoHpU5qENGL8iOOl+EO6RGR73BssfOSFL9ulvyB9m+N/jWkjtGSei3ggTZTlZj8ENG3qJ796UgT9Unu9H0A1gXGyyrRnsWzkrh/yMLjPxx+3rj0Jki+4EzB2E1+0jEdzT59nAYLJ8GTWnQ95bWsmSGjClVQcqA/anz/E3kZVSZl6eQNR2ugKKG3UZcyE8ONJS1B7dViQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6qzDxX0DIlMzbmGUBw7+OLnlgDRwamz3CNAwoupBurQ=; b=LTGGb2OMde69PQQD5YCtcsuH+uNMDh4/SA9Rzs89e28N9WGZ3qh1pDDC5OlHxjrRaiLX01N/nZWop1PoGeboRJ72zLphHCXDwgHBpem5oUfprQ4jkDRUrurGSuJK5yCn3bPGXwLG9dCTMy0MAcccdfrgR+Y7evrcDABTUAFpY45Pe5jyVRxtRL10l36ACMTSAsy77TkHbP5QkLIcDebc3FWYQZGIB3PAvhZlPkGPAYugU2S9GsPLPLV7/VWxFMBaHaJwfShRpsQpKDbttLRBdnwFPrGbnqmlFllQ03ZB8E3ezMhqL4zrDuSfEuZPj2pYP/fTknrt8wPKu5FSbhJcIw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by GVXPR04MB10945.eurprd04.prod.outlook.com (2603:10a6:150:21e::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Tue, 11 Mar 2025 05:56:40 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8511.026; Tue, 11 Mar 2025 05:56:40 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 net-next 08/14] net: enetc: add RSS support for i.MX95 ENETC PF Date: Tue, 11 Mar 2025 13:38:24 +0800 Message-Id: <20250311053830.1516523-9-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250311053830.1516523-1-wei.fang@nxp.com> References: <20250311053830.1516523-1-wei.fang@nxp.com> X-ClientProxiedBy: SGBP274CA0011.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::23) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|GVXPR04MB10945:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a5c25b5-865e-4d50-387e-08dd60617df6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|7416014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: Bjjlhs1zobSnNfEWSYmPe/v45faQ9VmCThQUuXm/2Ep2LVQLO5bv18Qi3iLZfNodK1bYXoWE0yKInyM/ghy9ofdc0KZiUed6+yEPr6ex5jAkRLXYNEYIB2ivFUhcZlKMDGOUxB6WYDMRcMg6GsGPWOboMAyTYLB+p/hByt3D6tC71zlWLqocxAt91thq7uSFehCNum1w5VwqN/+eA7ocHzKq1kk6jQXvKTibdTEsPwE+mZJx8v6eCKDB3yhsR7+m8KqmLLj1+EH7fKCsDLcacd4xaxRkUI1TkBzhJkzxcwhIDP3FuMnGQ2dGZOJb1PsmLIVwZYsHfTpS00L+ds8sscKH13eT+vxBXA03RRuOa/8lRY46EdZ8V6lqqw6X9sqrGxoL737Kuq7IbIfKYA4tuc/VSuxxB3RkrCi5sTuO+dP76IYkJgj3dO0O+a6Dm1nOSF5MtUWyMMUfHhFOUUvYtX3GXYVlSufFMh8yTt8l33NUlKvMM++FAausHMarO9MIvLsreBdc9kyupvybk4fNG9TGkOrCTpPhChelBYkvgWs02q5xBWMPbWbypbbwHEQce2HiKYH+pS4EXQN8mjIbMWeb2lsw4mbqG52fzdhcUV0Tp4SnmUxVHo5WBsoFgbxxiOKPXeT53ckbU3qENijQChMfsiE3qptztGthlDuObMkv9dix1klFlga5ky392ZKzMY8Bv8CJUqKpzjZYAH5aMle1Lxt2tD/jRS2nfYxLUrjlxibsKBGxGwyJngKN6VE22rQ0gp3n1c0sQwcOJsd85OVQBF6vfh/F5a1OBhXhCZZPKNQBbtFACGYatTOZO+wJh/eugau+G6KShA4/yxvK1t0dntIAslr48aIK5UGvp6QQ2udwwsHHsYF6+xr8c40GH5FjsEPw70uwsIpUI3QC9WzRkTuwqDnyT8h0CJRmbFF/IuHk+P+X7dF/4s7SijWZLR1RR0KNk+0i7K02Yi1kQR3+1XpLmlhjCMzj6/CyvJU6aJGgW5SdfSrDVQskPGNOfgA9j2XVthzIew8gLYJpZkzptwjSKOhyxgAe9R8gISxgIqCSpYfjRqLEQac2fYeX7Rvcb4SLqA3dlBjtVPFgrxeyWUjauDsyQ2hbDZDTnACoTAaIqWAZ2Iblz/QcfgThvflo3napdxEni3G7n0C23haef8IBAwTb4m8X0HbCnDlOsj86d9dUQDFWqx9N8z9K9J0b0lZJq9I2XCR5J+tBSVeBCWmCC9J1MZCN5mFBY7e5SKxOG8o0XZkXPc4X6kVgdKRutuTKzvsHHy71Fx381VvObu4Ub5eWOwjl6sIOUz8eCqMwwYkuY2ptOo1XwNriX79hl6bgHy05EOd8k4wMXCXsYFaAkTXI76HYr+oVaDCLThvkmJtt1kEOyzbnldF97+ICLS+UjbPvsLULt3PkUI7sgOsJb4wWlztarQeO8e3+SFBXiMUGsI08JmHkqZiG X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /xgHJnTMGgaHoURFXRH+2552opTOZB1CsOQJDU78C5rV5/DT+q711UmBUJajh9MkcU73y7cb5e3yhpzLAXYv4WQIsrlYnDyHhf4Nvgu2ua7MZOB+tXqEAMoZ4P2RkpBMLyD1ShMCqhHdQCU7nWJZgPXwFi1NL/Jji0nkvLrLCoaajPQQ/fZfdRfiI0o95BMkYTW88s/+0zgzUYKBwBXpASh0AWmXGC7PAqzSfFfOeElgWhr2WXbFQNJz9i/2oS9xLerrn711WLH8L/xvMoj+Xg1h8jU+BfPGF193Cijh/Ac3xIpypS092elK5/jXTRoGM+2nSwW5j0S8G6bVgczT7KfrWYeCKa1xRMdva6eofcokREW5bTyNrzW8dGo57ar6Aiyn2sucDeSVNYJHZFkBPr5OqAfbAoouwuyIHNO7fNJ66ko7Jj+nmNoFPjJpcbaIVZexMdq8gU4y5oCYq9icucT/YWbvf5uDgHIsmqvfnDR+39XtVZWAOVCf+GVqPpR2t7tlkYoGtMz8fBswCIf9hAUzWmCO0BQJvFJdh4JIay411lwlAHdewF2zZXOSMS8ctFkQPf/HRu3pj5UxPCno4m2eob085PY9SHhax1/SR3x7j9W4c3ReqHKP84dCIYJOB8UUK2uOj5Y5k9r4E82Kz021QsCuywJTPYXchuqMjo805rhhZv+PSdc7blMfvGwLW1ZXRT7+ao1uCcMrwRVtPsvvzmG1zQTCTJCiXbZ48gyqKHWCRE/aBrI3VJ1l2SpaUk/nlwJcnkNemh/FExBM+cC9rALEgzDxU9Uiwo1k78eFhWW+o0HuB38dJyiiZKwMDNNaM30cooNgiGLrTMn6rqOMnGPK/uF0smLp7zTAvo/6iw3jOXDo45VZIWlldX+OB3TAyvpwlDyKOkjgmfitJP7XpsEOW0U7lE22j294l1TC4IRnw+hthxBn4VqHpYEqA9r/XH+unIaYMap2WDNYE+li1uZmvCkhnpD+f0w8GFte0hwes3m55UmZxpL33Kc7ca0cqsD6B7YxBLTDniubcgHwSTqNhovWaJ7yuwrHIVhfxbPiu1qS2bTnjx5ZR6z8gLUEQXdVBSi1FCNnN4/CKS/eoNPBqUQMMWb1vQSOdZQMUQTb2tfKQ7vg8AFVEWl64px3LOeXC9dCx6FvgDcQlW0DYZrZX6fHyjIgFmqxy6unrAd2OtMHPnQpTu27LPGs4IjsTuXcAXcUAitGenrRu4i3E3RWTkKLTq3EspQw874PdjBL5fV95NQTEaTxochPZ6tU88O/JRQwiinuRkMrxSmr+MjGJde5MH4dBBNrCcgjeynteEfko3m63SetuptfaE1egVLkXMxHiFFxFocKXLyoD+Y4066sasBtehx1PNROoFqyDbz8BETm8SpJb4PKqi49k/iIH6RZKDoeUbTKGMZ+bkIjpwoZZkIZFC6yyiiemdSg2yO9kMKmh8lQieBNNyNkkeDdj9AEO8XHzzUAE+6oehRdv512o9JO4dA19LhiDX1v2w6eXyJIRzhalbhXkpDJ+wDNzXeQtI4MQNxjCyZHXxgED8NLobCnD1r3mnmelz18az8n5E+Y/XTtILuc X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a5c25b5-865e-4d50-387e-08dd60617df6 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2025 05:56:39.9995 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: p1wauOI1gwi7cgQIacWwl9X4dnWUkW1bi+KrhM5LmfPlsPt7UTit7PQG/3PPXHGoRD9X1OAw8eqh/JcT6QhpDQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR04MB10945 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250310_225643_295026_0F03AD52 X-CRM114-Status: GOOD ( 18.84 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Compared with LS1028A, there are two main differences: first, i.MX95 ENETC uses NTMP 2.0 to manage the RSS table, and second, the offset of the RSS Key registers is different. Some modifications have been made in the previous patches based on these differences to ensure that the relevant interfaces are compatible with i.MX95. So it's time to add RSS support to i.MX95 ENETC PF. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 5 +-- drivers/net/ethernet/freescale/enetc/enetc.h | 2 + .../net/ethernet/freescale/enetc/enetc4_pf.c | 11 +++++ .../net/ethernet/freescale/enetc/enetc_cbdr.c | 14 +++++++ .../ethernet/freescale/enetc/enetc_ethtool.c | 42 ++++++++++++++++--- .../freescale/enetc/enetc_pf_common.c | 6 +-- 6 files changed, 67 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c index 2a8fa455e96b..5b5e65ac8fab 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -2436,10 +2436,7 @@ int enetc_configure_si(struct enetc_ndev_priv *priv) if (si->hw_features & ENETC_SI_F_LSO) enetc_set_lso_flags_mask(hw); - /* TODO: RSS support for i.MX95 will be supported later, and the - * is_enetc_rev1() condition will be removed - */ - if (si->num_rss && is_enetc_rev1(si)) { + if (si->num_rss) { err = enetc_setup_default_rss_table(si, priv->num_rx_rings); if (err) return err; diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index a3ce324c716c..ecf79338cd79 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -543,6 +543,8 @@ void enetc_set_rss_key(struct enetc_si *si, const u8 *bytes); int enetc_get_rss_table(struct enetc_si *si, u32 *table, int count); int enetc_set_rss_table(struct enetc_si *si, const u32 *table, int count); int enetc_send_cmd(struct enetc_si *si, struct enetc_cbd *cbd); +int enetc4_get_rss_table(struct enetc_si *si, u32 *table, int count); +int enetc4_set_rss_table(struct enetc_si *si, const u32 *table, int count); static inline void *enetc_cbd_alloc_data_mem(struct enetc_si *si, struct enetc_cbd *cbd, diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c index f991e1aae85c..53dbd5d71859 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -693,6 +693,14 @@ static void enetc4_pf_set_rx_mode(struct net_device *ndev) queue_work(si->workqueue, &si->rx_mode_task); } +static int enetc4_pf_set_features(struct net_device *ndev, + netdev_features_t features) +{ + enetc_set_features(ndev, features); + + return 0; +} + static const struct net_device_ops enetc4_ndev_ops = { .ndo_open = enetc_open, .ndo_stop = enetc_close, @@ -700,6 +708,7 @@ static const struct net_device_ops enetc4_ndev_ops = { .ndo_get_stats = enetc_get_stats, .ndo_set_mac_address = enetc_pf_set_mac_addr, .ndo_set_rx_mode = enetc4_pf_set_rx_mode, + .ndo_set_features = enetc4_pf_set_features, }; static struct phylink_pcs * @@ -1108,6 +1117,8 @@ static void enetc4_pf_netdev_destroy(struct enetc_si *si) static const struct enetc_si_ops enetc4_psi_ops = { .setup_cbdr = enetc4_setup_cbdr, .teardown_cbdr = enetc4_teardown_cbdr, + .get_rss_table = enetc4_get_rss_table, + .set_rss_table = enetc4_set_rss_table, }; static int enetc4_pf_wq_task_init(struct enetc_si *si) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c index 4e5125331d7b..1a74b93f1fd3 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c @@ -299,3 +299,17 @@ int enetc_set_rss_table(struct enetc_si *si, const u32 *table, int count) return enetc_cmd_rss_table(si, (u32 *)table, count, false); } EXPORT_SYMBOL_GPL(enetc_set_rss_table); + +int enetc4_get_rss_table(struct enetc_si *si, u32 *table, int count) +{ + return ntmp_rsst_query_or_update_entry(&si->ntmp.cbdrs, + table, count, true); +} +EXPORT_SYMBOL_GPL(enetc4_get_rss_table); + +int enetc4_set_rss_table(struct enetc_si *si, const u32 *table, int count) +{ + return ntmp_rsst_query_or_update_entry(&si->ntmp.cbdrs, + (u32 *)table, count, false); +} +EXPORT_SYMBOL_GPL(enetc4_set_rss_table); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c index 1a8fae3c406b..bc65135925b8 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c @@ -625,6 +625,24 @@ static int enetc_get_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *rxnfc, return 0; } +static int enetc4_get_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *rxnfc, + u32 *rule_locs) +{ + struct enetc_ndev_priv *priv = netdev_priv(ndev); + + switch (rxnfc->cmd) { + case ETHTOOL_GRXRINGS: + rxnfc->data = priv->num_rx_rings; + break; + case ETHTOOL_GRXFH: + return enetc_get_rsshash(rxnfc); + default: + return -EOPNOTSUPP; + } + + return 0; +} + static int enetc_set_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *rxnfc) { struct enetc_ndev_priv *priv = netdev_priv(ndev); @@ -685,22 +703,29 @@ static int enetc_get_rss_key_base(struct enetc_si *si) return ENETC4_PRSSKR(0); } +static void enetc_get_rss_key(struct enetc_si *si, const u8 *key) +{ + int base = enetc_get_rss_key_base(si); + struct enetc_hw *hw = &si->hw; + int i; + + for (i = 0; i < ENETC_RSSHASH_KEY_SIZE / 4; i++) + ((u32 *)key)[i] = enetc_port_rd(hw, base + i * 4); +} + static int enetc_get_rxfh(struct net_device *ndev, struct ethtool_rxfh_param *rxfh) { struct enetc_ndev_priv *priv = netdev_priv(ndev); struct enetc_si *si = priv->si; - struct enetc_hw *hw = &si->hw; - int err = 0, i; + int err = 0; /* return hash function */ rxfh->hfunc = ETH_RSS_HASH_TOP; /* return hash key */ - if (rxfh->key && hw->port) - for (i = 0; i < ENETC_RSSHASH_KEY_SIZE / 4; i++) - ((u32 *)rxfh->key)[i] = enetc_port_rd(hw, - ENETC_PRSSK(i)); + if (rxfh->key && enetc_si_is_pf(si)) + enetc_get_rss_key(si, rxfh->key); /* return RSS table */ if (rxfh->indir) @@ -1249,6 +1274,11 @@ const struct ethtool_ops enetc4_pf_ethtool_ops = { .set_wol = enetc_set_wol, .get_pauseparam = enetc_get_pauseparam, .set_pauseparam = enetc_set_pauseparam, + .get_rxnfc = enetc4_get_rxnfc, + .get_rxfh_key_size = enetc_get_rxfh_key_size, + .get_rxfh_indir_size = enetc_get_rxfh_indir_size, + .get_rxfh = enetc_get_rxfh, + .set_rxfh = enetc_set_rxfh, }; void enetc_set_ethtool_ops(struct net_device *ndev) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c index 3fd9b0727875..c346e0e3ad37 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -128,15 +128,15 @@ void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev, if (si->hw_features & ENETC_SI_F_LSO) priv->active_offloads |= ENETC_F_LSO; + if (si->num_rss) + ndev->hw_features |= NETIF_F_RXHASH; + /* TODO: currently, i.MX95 ENETC driver does not support advanced features */ if (!is_enetc_rev1(si)) { ndev->hw_features &= ~(NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_LOOPBACK); goto end; } - if (si->num_rss) - ndev->hw_features |= NETIF_F_RXHASH; - ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT | NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG | NETDEV_XDP_ACT_NDO_XMIT_SG;