From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) (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 90A5D42B736; Fri, 27 Feb 2026 14:57:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.153.233 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204250; cv=none; b=V1X/y1I44fZLuqlHWToeSPCyA1ATYBJP8tNRrOgZrDf5o0qtAWtnyla00QLwpKcHCTL/hrI8DxgJ0B1gcps/BsjrYe4hqqvJL80d0v8mneb/Ii6i26ZQm/J7ICrVprT3YxIXPRQFn7dgyQ9f/ZLd+VeVsXsrT6JxT7gjZ3xv0fI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204250; c=relaxed/simple; bh=QuZtKrwJ6nTCMVf8hjdLyFF0aUMoEHD05EoYboEqLIU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=NrkhKzJWsRFWAruWlVIsbKJ+z48k8V/IUToNsUGadrTrcO5d98RpzIgouZlxIzaesz2swse+SJOi7+E7/w70a0dppPvzx2rpAECbBDjCiFUVNpBIlGOxK8iqOovj1h02n5vBQ9efXqdCe+nqZh8gnZwb2B/+A+tW9vIb1myhB24= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=GomUfPy+; arc=none smtp.client-ip=68.232.153.233 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="GomUfPy+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204248; x=1803740248; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=QuZtKrwJ6nTCMVf8hjdLyFF0aUMoEHD05EoYboEqLIU=; b=GomUfPy+OZUOjGQBd3SCFRh3TTnVuFFG+qU1IQCzBpvzj4++d0h4QMHA q/scxXWRD7m+A7yG+8r9nnorm7IR+mESOhkh3BeyvRdK1M0/XSde0IJTT nxWZNo5cxlUCmLAKRsdIsRH9Ttcq0oHlGmVXWpIOk+lOVJ9/SbqlRTI90 AaTs+zgxNP4FewhTSa/r0IPoIMzYY0yTMCvcermQ37q+cfTaZq1Jwd63d mrV/jclWPkN1Bc2+WCHJehOKF5HTO9O8tvSfsO7pdsthYMhSej89DTzkU 5+9/55wY0lrxhn6kwj8GMbrMgXoQGQYgvaPUwBc6wZtmfNNJOQbfMTWfj Q==; X-CSE-ConnectionGUID: wgI98+BBT5OZU+rH87zgwA== X-CSE-MsgGUID: cYck7q/MSl603WhN33PF+g== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="53970560" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 27 Feb 2026 07:57:27 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex02.mchp-main.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.58; Fri, 27 Feb 2026 07:57:01 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:56:58 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:39 +0100 Subject: [PATCH net-next v2 1/9] net: sparx5: move netdev and notifier block registration to probe 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: <20260227-sparx5-init-deinit-v2-1-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 Move netdev registration and notifier block registration from sparx5_start() to probe(). This allows proper cleanup via goto-based error labels in probe(). Also, remove the sparx5_cleanup_ports() helper as its functionality is now split between sparx5_unregister_netdevs() and sparx5_destroy_netdevs() called at appropriate points. Signed-off-by: Daniel Machon --- .../net/ethernet/microchip/sparx5/sparx5_main.c | 41 +++++++++++-------= ---- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index 582145713cfd..0ca4001a3667 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -773,20 +773,11 @@ static int sparx5_start(struct sparx5 *sparx5) mutex_init(&sparx5->mdb_lock); INIT_LIST_HEAD(&sparx5->mdb_entries); =20 - err =3D sparx5_register_netdevs(sparx5); - if (err) - return err; - sparx5_board_init(sparx5); - err =3D sparx5_register_notifier_blocks(sparx5); - if (err) - return err; =20 err =3D sparx5_vcap_init(sparx5); - if (err) { - sparx5_unregister_notifier_blocks(sparx5); + if (err) return err; - } =20 /* Start Frame DMA with fallback to register based INJ/XTR */ err =3D -ENXIO; @@ -835,12 +826,6 @@ static int sparx5_start(struct sparx5 *sparx5) return err; } =20 -static void sparx5_cleanup_ports(struct sparx5 *sparx5) -{ - sparx5_unregister_netdevs(sparx5); - sparx5_destroy_netdevs(sparx5); -} - static int mchp_sparx5_probe(struct platform_device *pdev) { struct initial_port_config *configs, *config; @@ -1020,10 +1005,26 @@ static int mchp_sparx5_probe(struct platform_device= *pdev) =20 INIT_LIST_HEAD(&sparx5->mall_entries); =20 + err =3D sparx5_register_netdevs(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to register net devices\n"); + goto cleanup_ptp; + } + + err =3D sparx5_register_notifier_blocks(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to register notifier blocks\n"); + goto cleanup_netdevs; + } + goto cleanup_config; =20 +cleanup_netdevs: + sparx5_unregister_netdevs(sparx5); +cleanup_ptp: + sparx5_ptp_deinit(sparx5); cleanup_ports: - sparx5_cleanup_ports(sparx5); + sparx5_destroy_netdevs(sparx5); if (sparx5->mact_queue) destroy_workqueue(sparx5->mact_queue); cleanup_config: @@ -1047,12 +1048,12 @@ static void mchp_sparx5_remove(struct platform_devi= ce *pdev) disable_irq(sparx5->fdma_irq); sparx5->fdma_irq =3D -ENXIO; } + sparx5_unregister_notifier_blocks(sparx5); + sparx5_unregister_netdevs(sparx5); sparx5_ptp_deinit(sparx5); ops->fdma_deinit(sparx5); - sparx5_cleanup_ports(sparx5); sparx5_vcap_destroy(sparx5); - /* Unregister netdevs */ - sparx5_unregister_notifier_blocks(sparx5); + sparx5_destroy_netdevs(sparx5); destroy_workqueue(sparx5->mact_queue); } =20 --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) (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 942E542B736; Fri, 27 Feb 2026 14:57:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.154.123 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204265; cv=none; b=XxAr7k2WuQbUnMSrz0Wsb84hEM82a3lTEVigwL9hK+xBkdzBl1IbBoHbO7vkdWc1fXCSFD0urXJ1bdI5CDYDV+lJeDGHJ1Jxj2U6reKmOSQIZziFwzmBOyz06TCW+iLoV/M2AEbNhCulJBszCA8ezPi9RPqeuRSQ2zzcZl5Crho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204265; c=relaxed/simple; bh=ad/LhZWihMSxoB3f8xRbFoDYpgaS3dn/F656MTIvq44=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=aQSoHtWrytGSzqjY+5bB36eFWWy3zddPVY7EDhUNsw6COfFKxNJB12/dW+Hv5HyhsaySQnHIpBeTO5kt4+CPdDNmw3sCUViLOLs7KZmW5pKKDUBAnq7eQzLpMH3tI+0W391ux08uExZs+HOUpLDffYoVbMzKXR0cGQB17DOvK90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=kS2DFg8h; arc=none smtp.client-ip=68.232.154.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="kS2DFg8h" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204264; x=1803740264; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=ad/LhZWihMSxoB3f8xRbFoDYpgaS3dn/F656MTIvq44=; b=kS2DFg8hEMrrA2E0supP/0iOk0hPl/w4PQFCqmUDoyArHaxCa3SCcBJE qmicbeKev7eWfrrblHYCnotnRIYA6ZH0rPhk0TzNI+HMST40R7kPzRF98 EmGHYWiM11nKXmi/3D1Ipoe8CISC1Crt+oDXes6vSkVjMK1NPZj/kUGtw FzjmBqRxZjwaa1Ja/oHqsck5HIgWPARKU36lTR4MFoE1BBqCHXrUqFs0N 8se64KIO3U4Iu9tWJ8kRlzcKpfjIOivxW5GzLtuCHaNIkBkBWF6vDBqcK N8CrF2hdA212W7knvR0O29z1APp1Yinc/b44u7wU2i/ZE5U0r4193AAu8 w==; X-CSE-ConnectionGUID: wDbLW9d7SnOseX1061A6kw== X-CSE-MsgGUID: QlVELnkhTC+anAGdFG6OVQ== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="221253468" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2026 07:57:44 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex4.mchp-main.com (10.10.87.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Fri, 27 Feb 2026 07:57:03 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:01 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:40 +0100 Subject: [PATCH net-next v2 2/9] net: sparx5: move VCAP initialization to probe 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: <20260227-sparx5-init-deinit-v2-2-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 Move the VCAP initialization code from sparx5_start() to probe(). Add proper error handling with a cleanup_vcap label and sparx5_vcap_deinit() call. Also, rename sparx5_vcap_destroy() to sparx5_vcap_deinit() to stay consistent with the naming. Signed-off-by: Daniel Machon --- drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 16 ++++++++++--= ---- drivers/net/ethernet/microchip/sparx5/sparx5_main.h | 2 +- drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index 0ca4001a3667..fbd75423f2a7 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -775,10 +775,6 @@ static int sparx5_start(struct sparx5 *sparx5) =20 sparx5_board_init(sparx5); =20 - err =3D sparx5_vcap_init(sparx5); - if (err) - return err; - /* Start Frame DMA with fallback to register based INJ/XTR */ err =3D -ENXIO; if (sparx5->fdma_irq >=3D 0) { @@ -1003,12 +999,18 @@ static int mchp_sparx5_probe(struct platform_device = *pdev) goto cleanup_ports; } =20 + err =3D sparx5_vcap_init(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to initialize VCAP\n"); + goto cleanup_ptp; + } + INIT_LIST_HEAD(&sparx5->mall_entries); =20 err =3D sparx5_register_netdevs(sparx5); if (err) { dev_err(sparx5->dev, "Failed to register net devices\n"); - goto cleanup_ptp; + goto cleanup_vcap; } =20 err =3D sparx5_register_notifier_blocks(sparx5); @@ -1021,6 +1023,8 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) =20 cleanup_netdevs: sparx5_unregister_netdevs(sparx5); +cleanup_vcap: + sparx5_vcap_deinit(sparx5); cleanup_ptp: sparx5_ptp_deinit(sparx5); cleanup_ports: @@ -1050,9 +1054,9 @@ static void mchp_sparx5_remove(struct platform_device= *pdev) } sparx5_unregister_notifier_blocks(sparx5); sparx5_unregister_netdevs(sparx5); + sparx5_vcap_deinit(sparx5); sparx5_ptp_deinit(sparx5); ops->fdma_deinit(sparx5); - sparx5_vcap_destroy(sparx5); sparx5_destroy_netdevs(sparx5); destroy_workqueue(sparx5->mact_queue); } diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.h index fe7d8bcc0cd9..6a069434fca6 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.h @@ -563,7 +563,7 @@ void sparx5_get_hwtimestamp(struct sparx5 *sparx5, =20 /* sparx5_vcap_impl.c */ int sparx5_vcap_init(struct sparx5 *sparx5); -void sparx5_vcap_destroy(struct sparx5 *sparx5); +void sparx5_vcap_deinit(struct sparx5 *sparx5); =20 /* sparx5_pgid.c */ enum sparx5_pgid_type { diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c b/dri= vers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c index 25066ddb8d4d..9b4ea3e22ef8 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c @@ -2083,7 +2083,7 @@ int sparx5_vcap_init(struct sparx5 *sparx5) return err; } =20 -void sparx5_vcap_destroy(struct sparx5 *sparx5) +void sparx5_vcap_deinit(struct sparx5 *sparx5) { struct vcap_control *ctrl =3D sparx5->vcap_ctrl; struct vcap_admin *admin, *admin_next; --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) (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 8C8C742B751; Fri, 27 Feb 2026 14:58:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.153.233 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204285; cv=none; b=YgpeOA9aEQ87XVygK5I3Q1cYuM6q+CavHXMr2BCPtXrJCMydyOm/u0Y3MrbROtTftGMWoOesV1IXFt4SnFD1YkPyokbyXboTyYNQP6hrFOMwfA6mWWVo36eCdHBoJeQnXzZ+nSwjw6rn8uDM00IFD1GZ4OQAONRhJCdYxbn5Aj8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204285; c=relaxed/simple; bh=g+Ri/oDlf8DOqNdyvpzURzYOTW/XRkVHBnEW5vmfepI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=EbrGpcw3V5kfb6hWUa0LrTYk4h2ea3Rd0kLNbjmOodAELCaVSSc0c0Jxn3hf6WDDhe4UdtVANzHDP0CW/+GpNThPxPg8TgxFxT0hIrFeaUa29BtRcmD6A/jz8zjSWvCh8pmjmOOKgc9WrcI0bd22JdEzg83GI0aBmKHq6EUqQcU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=UwmADwbe; arc=none smtp.client-ip=68.232.153.233 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="UwmADwbe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204282; x=1803740282; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=g+Ri/oDlf8DOqNdyvpzURzYOTW/XRkVHBnEW5vmfepI=; b=UwmADwbeydaEf4akQ30TuI54EEyyUfHHSudz+oUtCe/onl0Oh9ewhTq1 iPHFwq2PMJEiPsrJ2E+Prpqga6mrtTuiy2zJTeiLmh+Lf4iZvYYNeJSp1 glaXhbK39BvsF99NawVooyHIvQiQSlpZbpcNtjUF00k/NhzkJtgsyqUwE slzq/tWnK64bu1DCxbysLeIB7AbITaMAF4JAJWFPvZI2ViRL6hzUlRyP1 aSuqY8CRaMxeCgWpttnJ7x7zP2anGieBjD3swDbj2RZfu8xPkHQleZ+VI pQgY7FoSfY8iVc/QbBc6K/n+Serolk//aDq/KN1zMDhm5NCxmJLIdRPG6 g==; X-CSE-ConnectionGUID: G0BlzcC7T0WxDxHhnL2Jcg== X-CSE-MsgGUID: d1A61+2GSOOufFWdLtXU3w== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="285349971" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa5.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2026 07:58:02 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex4.mchp-main.com (10.10.87.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Fri, 27 Feb 2026 07:57:06 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:03 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:41 +0100 Subject: [PATCH net-next v2 3/9] net: sparx5: move MAC table initialization and add deinit function 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: <20260227-sparx5-init-deinit-v2-3-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 Consolidate all MAC table initialization from sparx5_start() into sparx5_mact_init(), move it to probe(), and add a deinit function for proper teardown. Also, make sparx5_mact_pull_work() static since it is only used within sparx5_mactable.c. Signed-off-by: Daniel Machon --- .../ethernet/microchip/sparx5/sparx5_mactable.c | 34 +++++++++++++++++-- .../net/ethernet/microchip/sparx5/sparx5_main.c | 39 ++++++------------= ---- .../net/ethernet/microchip/sparx5/sparx5_main.h | 4 +-- 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c b/driv= ers/net/ethernet/microchip/sparx5/sparx5_mactable.c index f5584244612c..2bf9c5f64151 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c @@ -419,7 +419,7 @@ static void sparx5_mact_handle_entry(struct sparx5 *spa= rx5, true); } =20 -void sparx5_mact_pull_work(struct work_struct *work) +static void sparx5_mact_pull_work(struct work_struct *work) { struct delayed_work *del_work =3D to_delayed_work(work); struct sparx5 *sparx5 =3D container_of(del_work, struct sparx5, @@ -489,8 +489,10 @@ void sparx5_set_ageing(struct sparx5 *sparx5, int msec= s) LRN_AUTOAGE_CFG(0)); } =20 -void sparx5_mact_init(struct sparx5 *sparx5) +int sparx5_mact_init(struct sparx5 *sparx5) { + char queue_name[32]; + mutex_init(&sparx5->lock); =20 /* Flush MAC table */ @@ -502,4 +504,32 @@ void sparx5_mact_init(struct sparx5 *sparx5) dev_warn(sparx5->dev, "MAC flush error\n"); =20 sparx5_set_ageing(sparx5, BR_DEFAULT_AGEING_TIME / HZ * 1000); + + /* Add host mode BC address (points only to CPU) */ + sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU), + (unsigned char[]){0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, + NULL_VID); + + mutex_init(&sparx5->mdb_lock); + INIT_LIST_HEAD(&sparx5->mdb_entries); + mutex_init(&sparx5->mact_lock); + INIT_LIST_HEAD(&sparx5->mact_entries); + snprintf(queue_name, sizeof(queue_name), "%s-mact", + dev_name(sparx5->dev)); + sparx5->mact_queue =3D create_singlethread_workqueue(queue_name); + if (!sparx5->mact_queue) + return -ENOMEM; + + INIT_DELAYED_WORK(&sparx5->mact_work, sparx5_mact_pull_work); + queue_delayed_work(sparx5->mact_queue, &sparx5->mact_work, + SPX5_MACT_PULL_DELAY); + + return 0; +} + +void sparx5_mact_deinit(struct sparx5 *sparx5) +{ + cancel_delayed_work_sync(&sparx5->mact_work); + destroy_workqueue(sparx5->mact_queue); + mutex_destroy(&sparx5->mact_lock); } diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index fbd75423f2a7..4271f4a29cad 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -685,10 +685,8 @@ static void sparx5_board_init(struct sparx5 *sparx5) =20 static int sparx5_start(struct sparx5 *sparx5) { - u8 broadcast[ETH_ALEN] =3D {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; const struct sparx5_consts *consts =3D sparx5->data->consts; const struct sparx5_ops *ops =3D sparx5->data->ops; - char queue_name[32]; u32 idx; int err; =20 @@ -728,19 +726,12 @@ static int sparx5_start(struct sparx5 *sparx5) ANA_CL_FILTER_CTRL_FORCE_FCS_UPDATE_ENA, sparx5, ANA_CL_FILTER_CTRL(idx)); =20 - /* Init MAC table, ageing */ - sparx5_mact_init(sparx5); - /* Init PGID table arbitrator */ sparx5_pgid_init(sparx5); =20 /* Setup VLANs */ sparx5_vlan_init(sparx5); =20 - /* Add host mode BC address (points only to CPU) */ - sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU), broadcast, - NULL_VID); - /* Enable queue limitation watermarks */ sparx5_qlim_set(sparx5); =20 @@ -757,22 +748,6 @@ static int sparx5_start(struct sparx5 *sparx5) if (err) return err; =20 - /* Init mact_sw struct */ - mutex_init(&sparx5->mact_lock); - INIT_LIST_HEAD(&sparx5->mact_entries); - snprintf(queue_name, sizeof(queue_name), "%s-mact", - dev_name(sparx5->dev)); - sparx5->mact_queue =3D create_singlethread_workqueue(queue_name); - if (!sparx5->mact_queue) - return -ENOMEM; - - INIT_DELAYED_WORK(&sparx5->mact_work, sparx5_mact_pull_work); - queue_delayed_work(sparx5->mact_queue, &sparx5->mact_work, - SPX5_MACT_PULL_DELAY); - - mutex_init(&sparx5->mdb_lock); - INIT_LIST_HEAD(&sparx5->mdb_entries); - sparx5_board_init(sparx5); =20 /* Start Frame DMA with fallback to register based INJ/XTR */ @@ -1005,12 +980,18 @@ static int mchp_sparx5_probe(struct platform_device = *pdev) goto cleanup_ptp; } =20 + err =3D sparx5_mact_init(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to initialize MAC table\n"); + goto cleanup_vcap; + } + INIT_LIST_HEAD(&sparx5->mall_entries); =20 err =3D sparx5_register_netdevs(sparx5); if (err) { dev_err(sparx5->dev, "Failed to register net devices\n"); - goto cleanup_vcap; + goto cleanup_mact; } =20 err =3D sparx5_register_notifier_blocks(sparx5); @@ -1023,14 +1004,14 @@ static int mchp_sparx5_probe(struct platform_device= *pdev) =20 cleanup_netdevs: sparx5_unregister_netdevs(sparx5); +cleanup_mact: + sparx5_mact_deinit(sparx5); cleanup_vcap: sparx5_vcap_deinit(sparx5); cleanup_ptp: sparx5_ptp_deinit(sparx5); cleanup_ports: sparx5_destroy_netdevs(sparx5); - if (sparx5->mact_queue) - destroy_workqueue(sparx5->mact_queue); cleanup_config: kfree(configs); cleanup_pnode: @@ -1054,11 +1035,11 @@ static void mchp_sparx5_remove(struct platform_devi= ce *pdev) } sparx5_unregister_notifier_blocks(sparx5); sparx5_unregister_netdevs(sparx5); + sparx5_mact_deinit(sparx5); sparx5_vcap_deinit(sparx5); sparx5_ptp_deinit(sparx5); ops->fdma_deinit(sparx5); sparx5_destroy_netdevs(sparx5); - destroy_workqueue(sparx5->mact_queue); } =20 static const struct sparx5_regs sparx5_regs =3D { diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.h index 6a069434fca6..e4c39cca7b26 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.h @@ -470,7 +470,6 @@ void sparx5_fdma_reload(struct sparx5 *sparx5, struct f= dma *fdma); void sparx5_fdma_injection_mode(struct sparx5 *sparx5); =20 /* sparx5_mactable.c */ -void sparx5_mact_pull_work(struct work_struct *work); int sparx5_mact_learn(struct sparx5 *sparx5, int port, const unsigned char mac[ETH_ALEN], u16 vid); bool sparx5_mact_getnext(struct sparx5 *sparx5, @@ -489,7 +488,8 @@ int sparx5_del_mact_entry(struct sparx5 *sparx5, int sparx5_mc_sync(struct net_device *dev, const unsigned char *addr); int sparx5_mc_unsync(struct net_device *dev, const unsigned char *addr); void sparx5_set_ageing(struct sparx5 *sparx5, int msecs); -void sparx5_mact_init(struct sparx5 *sparx5); +int sparx5_mact_init(struct sparx5 *sparx5); +void sparx5_mact_deinit(struct sparx5 *sparx5); =20 /* sparx5_vlan.c */ void sparx5_pgid_update_mask(struct sparx5_port *port, int pgid, bool enab= le); --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) (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 E58CA42B740; Fri, 27 Feb 2026 14:57:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.153.233 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204252; cv=none; b=EWsAKQmEIfdYy0u0UwMLUIBnyJPXT+hSATZVoIu32/FWsBX7t17y7KpYM9psSkUZ2a3tTcv8eXtL6EuYBtDqHpiG5hW5C1FYXrBB/5gNEyPYoroDhqtPAi07KejLW8K8VQPHdWefAKA2xtA9Uu3ntqZn9qVQpIAIYu1q20rTdPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204252; c=relaxed/simple; bh=jDlPP0Dhjhl6jNJafNK8XeaZ3H+YJC5WkqOkIyeSUdo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=FH4lw7wqnsW02EAiBUk2CREX2vEeNVjR1+b5G07Zg/A3Uf0lUXeRauOSvKZmYbK421wvqgfCOwxctUBnC3DPCdkFPTgqFklD4QrqSGguqFduDMOEw+ESU8cbNNhFKFVCjOsTwygAvHxs5QMCbPd21yAo2tDAtPFobhKCdR/jk+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=2pJN77z6; arc=none smtp.client-ip=68.232.153.233 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="2pJN77z6" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204249; x=1803740249; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=jDlPP0Dhjhl6jNJafNK8XeaZ3H+YJC5WkqOkIyeSUdo=; b=2pJN77z680UOEkhRW4RUHRTe3/q/qopPtY/tOphCBfQ1pdVlE0AGlsdH ZwmzTJgaOUaXJsR7LJQTD8RVtJhChme5irdTlyfUd+7gWQHsO999rz7LY oeyhOyBF2CmNM3g94Z8KvQxQMLKTA9foYf8MBTkyIrrLyKaXzuGktdikC 2c79hDI5de/o/JV6bwHNtjEeJdZuUUCjGVH8vd0FTvlV+JKCkAc8lh65S 1QL0TyJZjaIf2PaV6P/LVM9jg9XvyGtUhID1Kx7vSFpIkuiugf17dEBSJ c4a0EMrwU3aLD/RzoeSqM4TjvQIdeNGEN1wtmbKEoXh8TbVXUNdqtp1WG g==; X-CSE-ConnectionGUID: wgI98+BBT5OZU+rH87zgwA== X-CSE-MsgGUID: V/pfDvvOTpKSt0UAbksa+Q== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="53970561" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 27 Feb 2026 07:57:27 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex02.mchp-main.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.58; Fri, 27 Feb 2026 07:57:08 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:06 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:42 +0100 Subject: [PATCH net-next v2 4/9] net: sparx5: move stats initialization and add deinit function 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: <20260227-sparx5-init-deinit-v2-4-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 The sparx5_stats_init() function starts a worker thread which needs to be cleaned up. Move the initialization code to probe() and add a deinit() function for proper teardown. Also, rename sparx_stats_init() to sparx5_stats_init() to match the driver naming convention. Signed-off-by: Daniel Machon --- drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c | 9 ++++++++- drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 16 ++++++++++----= -- drivers/net/ethernet/microchip/sparx5/sparx5_main.h | 3 ++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c b/drive= rs/net/ethernet/microchip/sparx5/sparx5_ethtool.c index 049541eeaae0..d42c57bead89 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c @@ -1244,7 +1244,7 @@ const struct ethtool_ops sparx5_ethtool_ops =3D { .set_pauseparam =3D sparx5_set_pauseparam, }; =20 -int sparx_stats_init(struct sparx5 *sparx5) +int sparx5_stats_init(struct sparx5 *sparx5) { const struct sparx5_consts *consts =3D sparx5->data->consts; char queue_name[32]; @@ -1278,3 +1278,10 @@ int sparx_stats_init(struct sparx5 *sparx5) =20 return 0; } + +void sparx5_stats_deinit(struct sparx5 *sparx5) +{ + cancel_delayed_work_sync(&sparx5->stats_work); + destroy_workqueue(sparx5->stats_queue); + mutex_destroy(&sparx5->queue_stats_lock); +} diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index 4271f4a29cad..bcc7b895fad6 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -743,11 +743,6 @@ static int sparx5_start(struct sparx5 *sparx5) if (err) return err; =20 - /* Init stats */ - err =3D sparx_stats_init(sparx5); - if (err) - return err; - sparx5_board_init(sparx5); =20 /* Start Frame DMA with fallback to register based INJ/XTR */ @@ -986,12 +981,18 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) goto cleanup_vcap; } =20 + err =3D sparx5_stats_init(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to initialize stats\n"); + goto cleanup_mact; + } + INIT_LIST_HEAD(&sparx5->mall_entries); =20 err =3D sparx5_register_netdevs(sparx5); if (err) { dev_err(sparx5->dev, "Failed to register net devices\n"); - goto cleanup_mact; + goto cleanup_stats; } =20 err =3D sparx5_register_notifier_blocks(sparx5); @@ -1004,6 +1005,8 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) =20 cleanup_netdevs: sparx5_unregister_netdevs(sparx5); +cleanup_stats: + sparx5_stats_deinit(sparx5); cleanup_mact: sparx5_mact_deinit(sparx5); cleanup_vcap: @@ -1035,6 +1038,7 @@ static void mchp_sparx5_remove(struct platform_device= *pdev) } sparx5_unregister_notifier_blocks(sparx5); sparx5_unregister_netdevs(sparx5); + sparx5_stats_deinit(sparx5); sparx5_mact_deinit(sparx5); sparx5_vcap_deinit(sparx5); sparx5_ptp_deinit(sparx5); diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.h index e4c39cca7b26..97d53e229ad6 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.h @@ -514,7 +514,8 @@ enum sparx5_cal_bw sparx5_get_port_cal_speed(struct spa= rx5 *sparx5, u32 portno); =20 /* sparx5_ethtool.c */ void sparx5_get_stats64(struct net_device *ndev, struct rtnl_link_stats64 = *stats); -int sparx_stats_init(struct sparx5 *sparx5); +int sparx5_stats_init(struct sparx5 *sparx5); +void sparx5_stats_deinit(struct sparx5 *sparx5); =20 /* sparx5_dcb.c */ #ifdef CONFIG_SPARX5_DCB --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) (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 4E99642DFE1; Fri, 27 Feb 2026 14:57:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.153.233 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204252; cv=none; b=p3vUsKzGNo2qBYNaDxEJz8QFQNFC5N/lCqnv3L33da4Bbb8X1N+W/jvgL4ODS6U/Tl5CEi0tyN39g4PdmcV0pO15nP/spuiviqTGnK5aJyIaxwhCXpjFSiwLk8ZJku0NKkCmCQvMIWFSjPGGVUsbw3Xmq8KPH9ZRFEsgrmpgyjk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204252; c=relaxed/simple; bh=RQO7SOnyMSiFimAVkR4/LqCQgGBb+zZjAdqVt9ehHc0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=UUl8CN+1l/f1OnM/Al7OIK1fDt2iqW2ymJu92qjWUSPCKdskTSLCYy52S33BHUhTWT+Q5mATOGkGzzSOYS9C3WKVKCqWMu/XQIdThNCkZU6v/gUse5fNrcapqO7+CatTehDykqqtlM2Vb4g6NNDNbCjQuPtVYUTCdIy4y6/y3Mc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=ZrJxVxvc; arc=none smtp.client-ip=68.232.153.233 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="ZrJxVxvc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204250; x=1803740250; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=RQO7SOnyMSiFimAVkR4/LqCQgGBb+zZjAdqVt9ehHc0=; b=ZrJxVxvclHJUobWVyXOB42egQQjV2rIkKfti2ayD0MY0nX99c0BscgEw dPep26ItwaBsCEX9YznipozTXEFHH75ifOlHGFYAzNJg6Q8dfqQgiSBXm 6Hwsq3rlH+Z8n3Jvfoy3e6IifTB7jY99yfQNviiictXUZi/gplO13GVz2 AGdhoKUGAfNiKxGye5wBkQf5fIwns7+2K2hWZD6KRtRu1ukdw/UVfmZga MUgR8RPRHueamPKvb+Iam6AMMaX1xCIFO3STpa94Ac8vhXaCoodhsxyMA C1bBa3DLOqthvAQGB/5ZUZIqiLXcWcaAeNhXLxP/92hFWbFCQ4r7S2qPp w==; X-CSE-ConnectionGUID: wgI98+BBT5OZU+rH87zgwA== X-CSE-MsgGUID: fAnVqOe3R9CLic7WyNqizg== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="53970562" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 27 Feb 2026 07:57:28 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex02.mchp-main.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.58; Fri, 27 Feb 2026 07:57:11 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:09 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:43 +0100 Subject: [PATCH net-next v2 5/9] net: sparx5: move calendar initialization to probe 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: <20260227-sparx5-init-deinit-v2-5-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 Move the calendar initialization from sparx5_start() to probe() by creating a new sparx5_calendar_init() wrapper function that calls both sparx5_config_auto_calendar() and sparx5_config_dsm_calendar(). Calendar initialization does not require cleanup. Also, make the individual calendar config functions static since they are now only called from within sparx5_calendar.c. Signed-off-by: Daniel Machon --- drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c | 15 +++++++++++++= -- drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 14 ++++++-------- drivers/net/ethernet/microchip/sparx5/sparx5_main.h | 3 +-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c b/driv= ers/net/ethernet/microchip/sparx5/sparx5_calendar.c index 5c46d81de530..4ec95590a3c6 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c @@ -151,7 +151,7 @@ enum sparx5_cal_bw sparx5_get_port_cal_speed(struct spa= rx5 *sparx5, u32 portno) } =20 /* Auto configure the QSYS calendar based on port configuration */ -int sparx5_config_auto_calendar(struct sparx5 *sparx5) +static int sparx5_config_auto_calendar(struct sparx5 *sparx5) { const struct sparx5_consts *consts =3D sparx5->data->consts; u32 cal[7], value, idx, portno; @@ -578,7 +578,7 @@ static int sparx5_dsm_calendar_update(struct sparx5 *sp= arx5, u32 taxi, } =20 /* Configure the DSM calendar based on port configuration */ -int sparx5_config_dsm_calendar(struct sparx5 *sparx5) +static int sparx5_config_dsm_calendar(struct sparx5 *sparx5) { const struct sparx5_ops *ops =3D sparx5->data->ops; int taxi; @@ -610,3 +610,14 @@ int sparx5_config_dsm_calendar(struct sparx5 *sparx5) kfree(data); return err; } + +int sparx5_calendar_init(struct sparx5 *sparx5) +{ + int err; + + err =3D sparx5_config_auto_calendar(sparx5); + if (err) + return err; + + return sparx5_config_dsm_calendar(sparx5); +} diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index bcc7b895fad6..a58c79a6e873 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -735,14 +735,6 @@ static int sparx5_start(struct sparx5 *sparx5) /* Enable queue limitation watermarks */ sparx5_qlim_set(sparx5); =20 - err =3D sparx5_config_auto_calendar(sparx5); - if (err) - return err; - - err =3D sparx5_config_dsm_calendar(sparx5); - if (err) - return err; - sparx5_board_init(sparx5); =20 /* Start Frame DMA with fallback to register based INJ/XTR */ @@ -957,6 +949,12 @@ static int mchp_sparx5_probe(struct platform_device *p= dev) goto cleanup_ports; } =20 + err =3D sparx5_calendar_init(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to initialize calendar\n"); + goto cleanup_ports; + } + err =3D sparx5_qos_init(sparx5); if (err) { dev_err(sparx5->dev, "Failed to initialize QoS\n"); diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.h index 97d53e229ad6..6a745bb71b5c 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.h @@ -504,8 +504,7 @@ int sparx5_vlan_vid_del(struct sparx5_port *port, u16 v= id); void sparx5_vlan_port_apply(struct sparx5 *sparx5, struct sparx5_port *por= t); =20 /* sparx5_calendar.c */ -int sparx5_config_auto_calendar(struct sparx5 *sparx5); -int sparx5_config_dsm_calendar(struct sparx5 *sparx5); +int sparx5_calendar_init(struct sparx5 *sparx5); int sparx5_dsm_calendar_calc(struct sparx5 *sparx5, u32 taxi, struct sparx5_calendar_data *data); u32 sparx5_cal_speed_to_value(enum sparx5_cal_bw speed); --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) (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 1634742B75B; Fri, 27 Feb 2026 14:57:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.154.123 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204267; cv=none; b=C89XGOrPdAL+R/eeBQhuEvkdzyc2id3kbMash74OOgStLwETYKNFCCt2PRZv8YwsRAEY+2QxEZ9sZpIl0hnhfdBSEdzUQeq4uYQTUonS1IiLqoSBl2kugM+GF6SVxkZJYQw0i1jvIvSO20irwXjzAF7pUdvG0NjR8nGuRtJ6xHQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204267; c=relaxed/simple; bh=gVcNnj+ZlXLYFHsDMZvUG7C8eoXS0EkcdZXKECQ31PQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=oSQK8SJ2sHO0hysORGUeLIouWryVBC/cFmKNWPNchOfUkv9+SwGXA/otRJ+bl4orx0l+ZtPVHSazljs6xfFXASFU70Do61JfGhprghCFWq4N1JxH1p/AS16j0/PboFVZXEOmlPJtGEqob8F9roEQemYXi+EeNd9zfCr6SwqLTcI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=S9YfkOvz; arc=none smtp.client-ip=68.232.154.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="S9YfkOvz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204266; x=1803740266; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=gVcNnj+ZlXLYFHsDMZvUG7C8eoXS0EkcdZXKECQ31PQ=; b=S9YfkOvzzz6zVD8L6UzUUA9AA2C9A0L04o5hcpZWnzxwZOtvLrJr5dym w/Je862nm+5Jre+GH7VkfMr7f/KBaPsL0HNkyJhetj/P8BIGICgFBoxPn fsg1J6bEcZawTVxbdTMIdADepOb/dnC2T+6pei0sglsCZrxnqqcYdPrN1 OimCXI+06WCQLaEJttQJwh1Oj4/6fxYAiSXZ/oxNtnWjAHVf/eb1vdl6u 5lgCsYLQZLW9LSZkOZQ53iYyZWqYQ4rXdFtwjuTuEvfySwoX6cxjHagB+ ThYm6+tUW2HQdkQugjXHUajaM36ZKbU7YhptYm7TJXnSM87bsqWFb7FTO w==; X-CSE-ConnectionGUID: wDbLW9d7SnOseX1061A6kw== X-CSE-MsgGUID: qJfegyn5QBW4ymcFlia6Gg== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="221253469" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2026 07:57:44 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex4.mchp-main.com (10.10.87.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Fri, 27 Feb 2026 07:57:14 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:11 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:44 +0100 Subject: [PATCH net-next v2 6/9] net: sparx5: move remaining init functions from start() to probe() 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: <20260227-sparx5-init-deinit-v2-6-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 Move sparx5_pgid_init(), sparx5_vlan_init(), and sparx5_board_init() from sparx5_start() to probe(). These functions do not require cleanup. Signed-off-by: Daniel Machon --- drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index a58c79a6e873..d37f34197e84 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -726,17 +726,9 @@ static int sparx5_start(struct sparx5 *sparx5) ANA_CL_FILTER_CTRL_FORCE_FCS_UPDATE_ENA, sparx5, ANA_CL_FILTER_CTRL(idx)); =20 - /* Init PGID table arbitrator */ - sparx5_pgid_init(sparx5); - - /* Setup VLANs */ - sparx5_vlan_init(sparx5); - /* Enable queue limitation watermarks */ sparx5_qlim_set(sparx5); =20 - sparx5_board_init(sparx5); - /* Start Frame DMA with fallback to register based INJ/XTR */ err =3D -ENXIO; if (sparx5->fdma_irq >=3D 0) { @@ -943,6 +935,10 @@ static int mchp_sparx5_probe(struct platform_device *p= dev) } } =20 + sparx5_pgid_init(sparx5); + sparx5_vlan_init(sparx5); + sparx5_board_init(sparx5); + err =3D sparx5_start(sparx5); if (err) { dev_err(sparx5->dev, "Start failed\n"); --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) (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 6CE2F42E017; Fri, 27 Feb 2026 14:57:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.153.233 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204253; cv=none; b=Reh949/CpkCM2/Y7iolUOAk6J6BkETXfYAtLKQwmKqkFD+I2xh6+Zdrqx5K8+mFH0sTERBKmX8nKyhPk32EzENKn8CnKS98S4VvORg6NXOU9GLjvgWhOgB68n3BaRZbiZJfR6E4cxgH6qTpFBcxJgoi1msDlPqYHMusXgEKD9Q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204253; c=relaxed/simple; bh=TZmrEqNYunFkfCNtjB0WvV61y+JRk2jGtPFp6ATKH94=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=c0tFT0SFbEHI+D4YmQJyiORWoxe03+Vm0ddx4U89LQe8BXe1S8f6Ahx64VDQnNv8xbxFMaplcP34bHtjXtIY/vE7HzhVBcBccoEx8IoXkMk42407VNGZjBQ53OghOt9y9fSB3aboSXjGVeLspjL59fhwk/7F20VrqkOLTPyz8Zg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=ZKfeLAgF; arc=none smtp.client-ip=68.232.153.233 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="ZKfeLAgF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204251; x=1803740251; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=TZmrEqNYunFkfCNtjB0WvV61y+JRk2jGtPFp6ATKH94=; b=ZKfeLAgF7dHnPzio1etutrp4VYyRS/j3QXa+Xr+ISdQ+U8hP3D/ufIXR ofHgsckE0gQu8UmZr+huJ9kX8JJWoqhhzgfo6UzzEsN/PRm8oRsvHRNXS YHBKrpdv3qkcCw5VZwp+sBwiYJms16jOBw08ohoUs4SGM50vLZHas2Qc3 96W3I/zHvO7MziE/S9vzMLOAfL3jvk/Gqjm15VFLBXiWJvSHFxVTHZCkA Aui1WIkIVT1KoGeL0PELQSw9jvByWfftgQ7C+dD8xYheIoOLNj+MtkA9G RpRAUUBrolQjHuSdd4khAx12e4P2CR9ovk+KIAhei/jbNqD+kWaHvUaaX w==; X-CSE-ConnectionGUID: wgI98+BBT5OZU+rH87zgwA== X-CSE-MsgGUID: NwFtLTw4RKuhXMCJaqmLrw== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="53970563" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 27 Feb 2026 07:57:28 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex02.mchp-main.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.58; Fri, 27 Feb 2026 07:57:16 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:14 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:45 +0100 Subject: [PATCH net-next v2 7/9] net: sparx5: move PTP IRQ handling out of sparx5_start() 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: <20260227-sparx5-init-deinit-v2-7-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 Move the PTP IRQ request into sparx5_ptp_init() so all PTP setup is done in one place. Also move the sparx5_ptp_init() call to right before sparx5_register_netdevs() and add a cleanup_ptp label. Update remove() to disable the PTP IRQ and reorder ptp_deinit accordingly. Signed-off-by: Daniel Machon --- .../net/ethernet/microchip/sparx5/sparx5_main.c | 34 +++++++-----------= ---- drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c | 18 ++++++++++++ 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index d37f34197e84..f359008d2205 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -761,18 +761,6 @@ static int sparx5_start(struct sparx5 *sparx5) sparx5->xtr_irq =3D -ENXIO; } =20 - if (sparx5->ptp_irq >=3D 0 && - sparx5_has_feature(sparx5, SPX5_FEATURE_PTP)) { - err =3D devm_request_threaded_irq(sparx5->dev, sparx5->ptp_irq, - NULL, ops->ptp_irq_handler, - IRQF_ONESHOT, "sparx5-ptp", - sparx5); - if (err) - sparx5->ptp_irq =3D -ENXIO; - - sparx5->ptp =3D 1; - } - return err; } =20 @@ -957,16 +945,10 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) goto cleanup_ports; } =20 - err =3D sparx5_ptp_init(sparx5); - if (err) { - dev_err(sparx5->dev, "PTP failed\n"); - goto cleanup_ports; - } - err =3D sparx5_vcap_init(sparx5); if (err) { dev_err(sparx5->dev, "Failed to initialize VCAP\n"); - goto cleanup_ptp; + goto cleanup_ports; } =20 err =3D sparx5_mact_init(sparx5); @@ -983,10 +965,16 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) =20 INIT_LIST_HEAD(&sparx5->mall_entries); =20 + err =3D sparx5_ptp_init(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to initialize PTP\n"); + goto cleanup_stats; + } + err =3D sparx5_register_netdevs(sparx5); if (err) { dev_err(sparx5->dev, "Failed to register net devices\n"); - goto cleanup_stats; + goto cleanup_ptp; } =20 err =3D sparx5_register_notifier_blocks(sparx5); @@ -999,14 +987,14 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) =20 cleanup_netdevs: sparx5_unregister_netdevs(sparx5); +cleanup_ptp: + sparx5_ptp_deinit(sparx5); cleanup_stats: sparx5_stats_deinit(sparx5); cleanup_mact: sparx5_mact_deinit(sparx5); cleanup_vcap: sparx5_vcap_deinit(sparx5); -cleanup_ptp: - sparx5_ptp_deinit(sparx5); cleanup_ports: sparx5_destroy_netdevs(sparx5); cleanup_config: @@ -1032,10 +1020,10 @@ static void mchp_sparx5_remove(struct platform_devi= ce *pdev) } sparx5_unregister_notifier_blocks(sparx5); sparx5_unregister_netdevs(sparx5); + sparx5_ptp_deinit(sparx5); sparx5_stats_deinit(sparx5); sparx5_mact_deinit(sparx5); sparx5_vcap_deinit(sparx5); - sparx5_ptp_deinit(sparx5); ops->fdma_deinit(sparx5); sparx5_destroy_netdevs(sparx5); } diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c b/drivers/n= et/ethernet/microchip/sparx5/sparx5_ptp.c index 8b2e07821a95..a16ec8136d6d 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c @@ -606,9 +606,22 @@ static int sparx5_ptp_phc_init(struct sparx5 *sparx5, int sparx5_ptp_init(struct sparx5 *sparx5) { u64 tod_adj =3D sparx5_ptp_get_nominal_value(sparx5); + const struct sparx5_ops *ops =3D sparx5->data->ops; struct sparx5_port *port; int err, i; =20 + if (sparx5->ptp_irq >=3D 0 && + sparx5_has_feature(sparx5, SPX5_FEATURE_PTP)) { + err =3D devm_request_threaded_irq(sparx5->dev, sparx5->ptp_irq, + NULL, ops->ptp_irq_handler, + IRQF_ONESHOT, "sparx5-ptp", + sparx5); + if (err) + sparx5->ptp_irq =3D -ENXIO; + + sparx5->ptp =3D 1; + } + if (!sparx5->ptp) return 0; =20 @@ -660,6 +673,11 @@ void sparx5_ptp_deinit(struct sparx5 *sparx5) struct sparx5_port *port; int i; =20 + if (sparx5->ptp_irq >=3D 0) { + disable_irq(sparx5->ptp_irq); + sparx5->ptp_irq =3D -ENXIO; + } + for (i =3D 0; i < sparx5->data->consts->n_ports; i++) { port =3D sparx5->ports[i]; if (!port) --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) (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 6E43E42DFE6; Fri, 27 Feb 2026 14:57:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.154.123 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204267; cv=none; b=URhkyTsYQBIJwqctGDg4xqriUsI43GweIgHJGU1rCSPmCfSJNAb2jChmY4SmMYYOTzFjqHSMyQepQeP7HrtvQXt804sI49wqqXlJf3JyvYYYnaUVXorGzaD39XyS+RwdDfNHTW8tdEMs0Vi8Fof+zVxUaIebH5/rEwdaiYYY6uw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204267; c=relaxed/simple; bh=JGGgjQLyYr4k2tf/YRLE0LmiapfLAIzxEgTqt5+t/F8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=VnB9u+EwZLmUsQXcykuXG0A95Pg+IvzDhWq953RKf3CHxO6kK8+pe8Fm4gEQFE1lRIk24fqvNV7jA+j8JHXRgns1haPw7hcaueFTM/zW/eJnpBlbDiuMFIv6yv1kftgoEphwoDMlG0xAG+FX91bOPPZ7hO8006x/U0F0Th+2afA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=T/YocOQd; arc=none smtp.client-ip=68.232.154.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="T/YocOQd" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204266; x=1803740266; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=JGGgjQLyYr4k2tf/YRLE0LmiapfLAIzxEgTqt5+t/F8=; b=T/YocOQd8e9zCXniuufzAykde7n1r/n8jqNJ9ctjJ9go2p8K1GU+/bj3 IUUucmgv1wPRJuXExPYMeUDXBmZ0zNE+AZYTIjb6zTsIo1U7ZX6nf+nlD 6jqLXXYapUd5QTR1lXMU/BLOW8/RsJD82hO1rabJ5/jks+1aqOklNjaCU dYeplRmbLSJ7NeGb2VWFO2sFJEonSS0rVgUz6sOtDPnv63DiKKFc1dyLC HYO3lpmrAr8KcAqTBS/6uqtJY/V1wi7xJYuQe8c7R2I0XRscfX29Z3B95 GP/9Nu26qKDePgfQ7MMSnX4jDMoaAb78Q/jjvuvkmPMo3KLcuVzsJljtb Q==; X-CSE-ConnectionGUID: wDbLW9d7SnOseX1061A6kw== X-CSE-MsgGUID: YOtBsiwHQzexSo0RYhF6Qw== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="221253470" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2026 07:57:44 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex4.mchp-main.com (10.10.87.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Fri, 27 Feb 2026 07:57:19 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:16 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:46 +0100 Subject: [PATCH net-next v2 8/9] net: sparx5: move FDMA/XTR initialization out of sparx5_start() 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: <20260227-sparx5-init-deinit-v2-8-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 Move the Frame DMA and register-based extraction initialization out of sparx5_start() and into a new sparx5_frame_io_init() function, called from probe(). Also, add sparx5_frame_io_deinit() for the cleanup path. Signed-off-by: Daniel Machon --- .../net/ethernet/microchip/sparx5/sparx5_main.c | 109 ++++++++++++-----= ---- 1 file changed, 63 insertions(+), 46 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index f359008d2205..e4a448fd2b30 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -658,6 +658,58 @@ static int sparx5_qlim_set(struct sparx5 *sparx5) return 0; } =20 +static int sparx5_frame_io_init(struct sparx5 *sparx5) +{ + const struct sparx5_ops *ops =3D sparx5->data->ops; + int err =3D -ENXIO; + + /* Start Frame DMA with fallback to register based INJ/XTR */ + if (sparx5->fdma_irq >=3D 0) { + if (GCB_CHIP_ID_REV_ID_GET(sparx5->chip_id) > 0 || + !is_sparx5(sparx5)) + err =3D devm_request_irq(sparx5->dev, + sparx5->fdma_irq, + sparx5_fdma_handler, + 0, + "sparx5-fdma", sparx5); + if (!err) { + err =3D ops->fdma_init(sparx5); + if (!err) + sparx5_fdma_start(sparx5); + } + if (err) + sparx5->fdma_irq =3D -ENXIO; + } else { + sparx5->fdma_irq =3D -ENXIO; + } + if (err && sparx5->xtr_irq >=3D 0) { + err =3D devm_request_irq(sparx5->dev, sparx5->xtr_irq, + sparx5_xtr_handler, IRQF_SHARED, + "sparx5-xtr", sparx5); + if (!err) + err =3D sparx5_manual_injection_mode(sparx5); + if (err) + sparx5->xtr_irq =3D -ENXIO; + } else { + sparx5->xtr_irq =3D -ENXIO; + } + + return err; +} + +static void sparx5_frame_io_deinit(struct sparx5 *sparx5) +{ + if (sparx5->xtr_irq >=3D 0) { + disable_irq(sparx5->xtr_irq); + sparx5->xtr_irq =3D -ENXIO; + } + if (sparx5->fdma_irq >=3D 0) { + disable_irq(sparx5->fdma_irq); + sparx5->data->ops->fdma_deinit(sparx5); + sparx5->fdma_irq =3D -ENXIO; + } +} + /* Some boards needs to map the SGPIO for signal detect explicitly to the * port module */ @@ -686,9 +738,7 @@ static void sparx5_board_init(struct sparx5 *sparx5) static int sparx5_start(struct sparx5 *sparx5) { const struct sparx5_consts *consts =3D sparx5->data->consts; - const struct sparx5_ops *ops =3D sparx5->data->ops; u32 idx; - int err; =20 /* Setup own UPSIDs */ for (idx =3D 0; idx < consts->n_own_upsids; idx++) { @@ -729,39 +779,7 @@ static int sparx5_start(struct sparx5 *sparx5) /* Enable queue limitation watermarks */ sparx5_qlim_set(sparx5); =20 - /* Start Frame DMA with fallback to register based INJ/XTR */ - err =3D -ENXIO; - if (sparx5->fdma_irq >=3D 0) { - if (GCB_CHIP_ID_REV_ID_GET(sparx5->chip_id) > 0 || - !is_sparx5(sparx5)) - err =3D devm_request_irq(sparx5->dev, - sparx5->fdma_irq, - sparx5_fdma_handler, - 0, - "sparx5-fdma", sparx5); - if (!err) { - err =3D ops->fdma_init(sparx5); - if (!err) - sparx5_fdma_start(sparx5); - } - if (err) - sparx5->fdma_irq =3D -ENXIO; - } else { - sparx5->fdma_irq =3D -ENXIO; - } - if (err && sparx5->xtr_irq >=3D 0) { - err =3D devm_request_irq(sparx5->dev, sparx5->xtr_irq, - sparx5_xtr_handler, IRQF_SHARED, - "sparx5-xtr", sparx5); - if (!err) - err =3D sparx5_manual_injection_mode(sparx5); - if (err) - sparx5->xtr_irq =3D -ENXIO; - } else { - sparx5->xtr_irq =3D -ENXIO; - } - - return err; + return 0; } =20 static int mchp_sparx5_probe(struct platform_device *pdev) @@ -965,10 +983,16 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) =20 INIT_LIST_HEAD(&sparx5->mall_entries); =20 + err =3D sparx5_frame_io_init(sparx5); + if (err) { + dev_err(sparx5->dev, "Failed to initialize frame I/O\n"); + goto cleanup_stats; + } + err =3D sparx5_ptp_init(sparx5); if (err) { dev_err(sparx5->dev, "Failed to initialize PTP\n"); - goto cleanup_stats; + goto cleanup_frame_io; } =20 err =3D sparx5_register_netdevs(sparx5); @@ -989,6 +1013,8 @@ static int mchp_sparx5_probe(struct platform_device *p= dev) sparx5_unregister_netdevs(sparx5); cleanup_ptp: sparx5_ptp_deinit(sparx5); +cleanup_frame_io: + sparx5_frame_io_deinit(sparx5); cleanup_stats: sparx5_stats_deinit(sparx5); cleanup_mact: @@ -1007,24 +1033,15 @@ static int mchp_sparx5_probe(struct platform_device= *pdev) static void mchp_sparx5_remove(struct platform_device *pdev) { struct sparx5 *sparx5 =3D platform_get_drvdata(pdev); - const struct sparx5_ops *ops =3D sparx5->data->ops; =20 debugfs_remove_recursive(sparx5->debugfs_root); - if (sparx5->xtr_irq) { - disable_irq(sparx5->xtr_irq); - sparx5->xtr_irq =3D -ENXIO; - } - if (sparx5->fdma_irq) { - disable_irq(sparx5->fdma_irq); - sparx5->fdma_irq =3D -ENXIO; - } sparx5_unregister_notifier_blocks(sparx5); sparx5_unregister_netdevs(sparx5); sparx5_ptp_deinit(sparx5); + sparx5_frame_io_deinit(sparx5); sparx5_stats_deinit(sparx5); sparx5_mact_deinit(sparx5); sparx5_vcap_deinit(sparx5); - ops->fdma_deinit(sparx5); sparx5_destroy_netdevs(sparx5); } =20 --=20 2.34.1 From nobody Tue Apr 7 18:46:40 2026 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) (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 62CDD42E00D; Fri, 27 Feb 2026 14:57:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=68.232.154.123 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204268; cv=none; b=LtbulmDL9z1MZT9zphUKLU+ZsXYYfkKaBLYb6u1tlVRt1A0P2YLoprtC6fwuzy6Bjiz3uQybE4vabUr7ow7PkLmyu2IJdzNFdWW/BRdCZc4/b7aWdMriy3RsOWneJpaVnLDWIetQfuoThi3lA8l9HIm7znIERpfdnfAE42g+Dm0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772204268; c=relaxed/simple; bh=iZqObIlnGsrxaMJ/K/m7e8CKplLt7VJNcogmW6z0W/U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=RIZReXwJ5UdU1TYqPhD0m9a9BXEKygbFjVhpiUM4G+yd9BJKnwrpSVVwXORODOYOOoOGuowGOMoeur4trAETITe2U4QLXy94KdbV++8C1hpSZmHChICGXfD9vRr0EGtwaH4CzdYBmAt40f7UFAA0sGCFX0RUYakGxj/+Jw6wZTE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com; spf=pass smtp.mailfrom=microchip.com; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b=pn+OG6zU; arc=none smtp.client-ip=68.232.154.123 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microchip.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=microchip.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=microchip.com header.i=@microchip.com header.b="pn+OG6zU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772204267; x=1803740267; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=iZqObIlnGsrxaMJ/K/m7e8CKplLt7VJNcogmW6z0W/U=; b=pn+OG6zUgdY23fDIbcsrcjzMkJ17NjyU4s74QoP00Az14jetXVzfT8D5 2mHtW9x1nQrlR+UK7X8aUK3/OZm8a+YnXZrEUlHw1+1Dl1SHRDLCS3qZz Sm1UOR54yHYNZNlCXvoSd0PKAoEntfTiLCvE0loZcSVB0P5Q+x0hIuZVf ME/wMMRSwWZUPWQWE2zCsLIjx7Wx9IYKnPxYz2/O6lfhCizDMQU3ssY20 g8+aL6YkHJlysi56vv+ZEZlwSVnCX7TA34jJsGvt1NnXxxpU9WNNzMVtH 1EQjvCHhYF9q7mp5+snGATavcocDFl6E+xiSIjLq8UyGi45CwBeqmuyn5 Q==; X-CSE-ConnectionGUID: wDbLW9d7SnOseX1061A6kw== X-CSE-MsgGUID: 5z+WZYXARCGYoexIWYfVfg== X-IronPort-AV: E=Sophos;i="6.21,314,1763449200"; d="scan'208";a="221253471" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa6.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Feb 2026 07:57:44 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex4.mchp-main.com (10.10.87.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Fri, 27 Feb 2026 07:57:21 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Fri, 27 Feb 2026 07:57:19 -0700 From: Daniel Machon Date: Fri, 27 Feb 2026 15:56:47 +0100 Subject: [PATCH net-next v2 9/9] net: sparx5: replace sparx5_start() with sparx5_forwarding_init() 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: <20260227-sparx5-init-deinit-v2-9-10ba54ccf005@microchip.com> References: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> In-Reply-To: <20260227-sparx5-init-deinit-v2-0-10ba54ccf005@microchip.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Steen Hegelund , , "Richard Cochran" , , CC: , , X-Mailer: b4 0.14.3 With all subsystem initializations moved out, sparx5_start() only sets up forwarding (UPSIDs, CPU ports, masks, PGIDs, FCS, watermarks). Rename it to sparx5_forwarding_init() and make it void since it cannot fail. This removes sparx5_start() entirely. Signed-off-by: Daniel Machon --- drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index e4a448fd2b30..cab5daf265c2 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -735,7 +735,7 @@ static void sparx5_board_init(struct sparx5 *sparx5) GCB_HW_SGPIO_TO_SD_MAP_CFG(idx)); } =20 -static int sparx5_start(struct sparx5 *sparx5) +static void sparx5_forwarding_init(struct sparx5 *sparx5) { const struct sparx5_consts *consts =3D sparx5->data->consts; u32 idx; @@ -779,7 +779,6 @@ static int sparx5_start(struct sparx5 *sparx5) /* Enable queue limitation watermarks */ sparx5_qlim_set(sparx5); =20 - return 0; } =20 static int mchp_sparx5_probe(struct platform_device *pdev) @@ -944,12 +943,7 @@ static int mchp_sparx5_probe(struct platform_device *p= dev) sparx5_pgid_init(sparx5); sparx5_vlan_init(sparx5); sparx5_board_init(sparx5); - - err =3D sparx5_start(sparx5); - if (err) { - dev_err(sparx5->dev, "Start failed\n"); - goto cleanup_ports; - } + sparx5_forwarding_init(sparx5); =20 err =3D sparx5_calendar_init(sparx5); if (err) { --=20 2.34.1