From nobody Thu Apr 16 22:33:12 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 06C3937FF75; Wed, 25 Feb 2026 09:07:08 +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=1772010431; cv=none; b=O/pXHos7netlch3KHUd+7XvZq88SHEY07ILaVWG5Wk5WZSUk+8oxptSB471dao5VeyN3aqlP8Qjxz1aOlWNOapykfIB5lwjhebI7iClWoPvBcYKVrudQyN0f+C3r5phIVcYJdsSVbK7mFwCJ0mnKrqIp6C3jNwTa3zBtyGrwMdQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772010431; c=relaxed/simple; bh=wE0FxXJQW3yVDJE1a/1GJUQdpG7aGn8J4V+MDvPXIbQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=urljushxw+irYDDBI7ui48sr0BVXUMwOzL6592nGdg9tHnPLoHQtbvZuLD3Z0pLbi2BSg4BbNYSVO/FW6Rve8IIMCqV4+lnrwlOsOMPjiyWzJG3UY97Vuet/7yrhmCmtvIGNAhLGJMPJ6iYBsAJI0uhQ0QoZobQsCbDPiJsmmzA= 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=ATRk9tW4; 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="ATRk9tW4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772010429; x=1803546429; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=wE0FxXJQW3yVDJE1a/1GJUQdpG7aGn8J4V+MDvPXIbQ=; b=ATRk9tW46N9dNja269BPgDTHBV+kENXJ13FjBhLBsExZFUs5/gco8KlZ z+KLHNN2OaalAxdSrQMbs2v+SnX3rdCpNVQQARUz81IEHAROPDJlWLS0U uUT6kK9Bt3bTchxX+xkqht4JT/Jp1DKSULehqUW2ZnIgLWU7YzQEV4T8U 262Ge3LtPY8TBoffCMkBXFwhKjgesaAGXgHbp2CXaCu92iLQXKNZT8RlN FmhARDSw0XdzZSIUaVrD2uIxJnzFdc5oN5kN1hDOv8guXnQWwErxQ+kp1 7WTeVLqHGQvRiW7MfdpRDF5XNjn9YWMCkTHiuSKPCN2slpO7eozHkEmez w==; X-CSE-ConnectionGUID: 1d+y6PO9SFGcdWGyfjWqeQ== X-CSE-MsgGUID: 70P3UHu5T9G15aTdFF8Lfw== X-IronPort-AV: E=Sophos;i="6.21,310,1763449200"; d="scan'208";a="54259094" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa2.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 25 Feb 2026 02:07:08 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.58; Wed, 25 Feb 2026 02:06:09 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 25 Feb 2026 02:06:07 -0700 From: Daniel Machon Date: Wed, 25 Feb 2026 10:05:24 +0100 Subject: [PATCH net-next 1/7] net: sparx5: call sparx5_start() last in 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: <20260225-sparx5-init-deinit-v1-1-97036580b9f0@microchip.com> References: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@microchip.com> In-Reply-To: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@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_start() function initializes hardware and enables interrupts, so it should be the last function called in probe(). Over time, new init functions have been added after it, breaking this assumption. Move sparx5_start() back to being last. To avoid breaking PTP between patches in this series, also consolidate all PTP initialization into sparx5_ptp_init() and add proper teardown via sparx5_ptp_deinit(). Signed-off-by: Daniel Machon --- .../net/ethernet/microchip/sparx5/sparx5_main.c | 35 ++++++++++--------= ---- drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c | 13 ++++++++ 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index 582145713cfd..d7e823fe4ab9 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -820,18 +820,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 @@ -1000,12 +988,6 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) } } =20 - err =3D sparx5_start(sparx5); - if (err) { - dev_err(sparx5->dev, "Start failed\n"); - goto cleanup_ports; - } - err =3D sparx5_qos_init(sparx5); if (err) { dev_err(sparx5->dev, "Failed to initialize QoS\n"); @@ -1014,14 +996,25 @@ static int mchp_sparx5_probe(struct platform_device = *pdev) =20 err =3D sparx5_ptp_init(sparx5); if (err) { - dev_err(sparx5->dev, "PTP failed\n"); + dev_err(sparx5->dev, "Failed to initialize PTP\n"); goto cleanup_ports; } =20 INIT_LIST_HEAD(&sparx5->mall_entries); =20 + /* Start the rest of the initialization and enable interrupts. Must be + * called last, after all subsystems are initialized. + */ + err =3D sparx5_start(sparx5); + if (err) { + dev_err(sparx5->dev, "Start failed\n"); + goto cleanup_ptp; + } + goto cleanup_config; =20 +cleanup_ptp: + sparx5_ptp_deinit(sparx5); cleanup_ports: sparx5_cleanup_ports(sparx5); if (sparx5->mact_queue) @@ -1047,6 +1040,10 @@ static void mchp_sparx5_remove(struct platform_devic= e *pdev) disable_irq(sparx5->fdma_irq); sparx5->fdma_irq =3D -ENXIO; } + if (sparx5->ptp_irq) { + disable_irq(sparx5->ptp_irq); + sparx5->ptp_irq =3D -ENXIO; + } sparx5_ptp_deinit(sparx5); ops->fdma_deinit(sparx5); sparx5_cleanup_ports(sparx5); diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c b/drivers/n= et/ethernet/microchip/sparx5/sparx5_ptp.c index 8b2e07821a95..84327ee5b8a2 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 --=20 2.34.1 From nobody Thu Apr 16 22:33:12 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 5595A37107B; Wed, 25 Feb 2026 09:06:52 +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=1772010415; cv=none; b=nCkUHQ/CpomqBcRQVnnTmvjWUDWOovLQ6Rc71XduN6SKjNCLYLdcCWBaUTdUnCn0QOtikuKFk86lNlQvsjodooWCWUk4df0pdBfwiCfZWOevawPJ7XBH1gA7piECQGUP5g1U+S6oi0J1oMmKDaHvEWHNJNkc6opiDwTtnuQQ2lA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772010415; c=relaxed/simple; bh=tM4XdMCygnhhnecObA64rz3/1LPZ7QdO3ptWuL+K8Dc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=OM/et8LMjDStWpm7mC4qs/7rL5iVl5kEquucToQ6TB2R6dyOthp2ExQA//nj7tBbKOnQP6ibcm5Ky2rymtGGED7PkQIxDj6sIpeORp0I6Kv/oyU6aTwcYlphrADT73ULTB0smt4t9jM4ZwXVmCZ6DSKD2826yhNmw7fyKNymD/4= 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=SzyTkc61; 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="SzyTkc61" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772010410; x=1803546410; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=tM4XdMCygnhhnecObA64rz3/1LPZ7QdO3ptWuL+K8Dc=; b=SzyTkc61tkWWzPicsnZ7r3j70eQpfdgCowrnldE/fckjeXpclzmMu/cu 6brzQMTC0CxtDUoVzcY6k16mP0cCKMbjMKyX3T3H9GOcRrVULfeQfCht+ 4khIiqODurUtMXXM1dYdaIujGmjDhuqFiizbZyM5ZUrw6QX80NUT6bzB4 XSUeSoNsyIL2VAEDwG+PCrYOq5lE0RJXEC4YbQc5Q0V8Egm4bbt45OxmI 4G/eMyzcRfYbEdBoHpaz2Rlg5aXUfw/SiqLxenwRUS1uXRF7JlnjB9I+l T3N7GyxnHLmo6V9lfJOzcdXiLzuncIqocgXAT/3SXI+cNbQ4gbR5M7Wkh Q==; X-CSE-ConnectionGUID: BbhGCtIlQZOkUhkWOAVukw== X-CSE-MsgGUID: tjMTnoSvSBiVsapcaAugRw== X-IronPort-AV: E=Sophos;i="6.21,310,1763449200"; d="scan'208";a="221112786" 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-AES128-GCM-SHA256; 25 Feb 2026 02:06:46 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.58; Wed, 25 Feb 2026 02:06:12 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 25 Feb 2026 02:06:10 -0700 From: Daniel Machon Date: Wed, 25 Feb 2026 10:05:25 +0100 Subject: [PATCH net-next 2/7] 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: <20260225-sparx5-init-deinit-v1-2-97036580b9f0@microchip.com> References: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@microchip.com> In-Reply-To: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@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 | 43 +++++++++++-------= ---- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/= net/ethernet/microchip/sparx5/sparx5_main.c index d7e823fe4ab9..9887a260bafc 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; @@ -823,12 +814,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; @@ -1002,21 +987,37 @@ 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; + } + /* Start the rest of the initialization and enable interrupts. Must be * called last, after all subsystems are initialized. */ err =3D sparx5_start(sparx5); if (err) { dev_err(sparx5->dev, "Start failed\n"); - goto cleanup_ptp; + goto cleanup_notifiers; } =20 goto cleanup_config; =20 +cleanup_notifiers: + sparx5_unregister_notifier_blocks(sparx5); +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: @@ -1044,12 +1045,12 @@ static void mchp_sparx5_remove(struct platform_devi= ce *pdev) disable_irq(sparx5->ptp_irq); sparx5->ptp_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 Thu Apr 16 22:33:12 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 573C036D4E4; Wed, 25 Feb 2026 09:06:24 +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=1772010386; cv=none; b=FHkd78UjtcdAE/470t+/1+5hWfQ0zgIhmy4ddECG6VgfAo1WVvdBvWBJDtf5GzLNCJ+VThsnlMwseV7MrBBNd6iGkX4fFV4sljXpYU3UXULkVXh6IIZteZbXNQAV3Dv1vwHI/aXNkQoYL8N8hTkwrQS5d0C3dy+QYKKiKLyTwpI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772010386; c=relaxed/simple; bh=Ms5EvdSvw59+pigEbOTMZYJRJle67s3XN/MmS6G0DeM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=G3g7cXKcYpAHILzEzD7Bu9ICsaEnvVcGx4+r2lDrK7r+NHl84S01pL7EKo4azglOyNYedfgdr06FyNqR3c50tZWrn2F+G6g/fh+NZiaR2xxfqECIjg4bS7OKgo49ia7VXAJNHW+F5c7xnu12cGho84xoJiYPwoTFtgdVboV1xHs= 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=lFpp0k4K; 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="lFpp0k4K" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772010384; x=1803546384; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=Ms5EvdSvw59+pigEbOTMZYJRJle67s3XN/MmS6G0DeM=; b=lFpp0k4KQvdHwlO0f7ncNkg0ixmqqESgsmERVC/c/10Fa4wJheIiHtih H9if6dQFVsKTC8sfnNQjW9MVtS63cX39KyEj1lJS4iEq1/MnlBkFugDdr 4GmTptgUmUYf4Wpe3PlRhHGSYdrI9zLu4X32q91dDbWMWwNtD30xGX3he WAeUvr1J+GzawqXwEOq6AQRFCilIWJNxZe6soDR9UHWcOWVPDIhxdC71t LmHt4KeXmVD1dETrF7Yq4LbG5JU4p6bg8gFm4a1xBhEomZN1ZS0G+as5O USoH85bXG1XzWpwxA3EtCASBqG+BhxWhb7GDJVnZA8gcnf0mVGk9nVUTO w==; X-CSE-ConnectionGUID: GvK6L9OjSSuGPw39llTOAQ== X-CSE-MsgGUID: wGZ5CqykQMGMVoCtVHo6Sg== X-IronPort-AV: E=Sophos;i="6.21,310,1763449200"; d="scan'208";a="61259299" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2026 02:06:23 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) by chn-vm-ex3.mchp-main.com (10.10.87.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Wed, 25 Feb 2026 02:06:14 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 25 Feb 2026 02:06:12 -0700 From: Daniel Machon Date: Wed, 25 Feb 2026 10:05:26 +0100 Subject: [PATCH net-next 3/7] 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: <20260225-sparx5-init-deinit-v1-3-97036580b9f0@microchip.com> References: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@microchip.com> In-Reply-To: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@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 9887a260bafc..28ee45815c7f 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) { @@ -985,12 +981,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); @@ -1014,6 +1016,8 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) sparx5_unregister_notifier_blocks(sparx5); cleanup_netdevs: sparx5_unregister_netdevs(sparx5); +cleanup_vcap: + sparx5_vcap_deinit(sparx5); cleanup_ptp: sparx5_ptp_deinit(sparx5); cleanup_ports: @@ -1047,9 +1051,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 Thu Apr 16 22:33:12 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 1629536EA9A; Wed, 25 Feb 2026 09:06:27 +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=1772010390; cv=none; b=nkzY2ac/e9bqgqi9Tug4r8NLNqP2Pj+j16uZmRyNvCNDN694REoB2y8VdBiKTY4/LI4nnbiQtX8k+s8YTmOCZiTa0f/2VFV0t28Bx7tl02m8Ra9m/QjDVoNsyczIFrBLnWk8crq9C8/EY/wtS7ByROM8A2oDzJvLvajSY6pQ7fg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772010390; c=relaxed/simple; bh=SjGo6ZLzuUnmkoqGRlfVYGuWFR89kHfN9qVzMB3AD+4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=uRTFe0/LxPv0mu0yn/Xc/pQ36NXXx0zxJGH3zsxxNmCnHHdrRbhSy1Z9r0uyGUoFw1KLmsBWvjjCKVfngandZvfTmdZfCZgfRSUAcY7TpmYleyhHPMy6vP7R52dENKMM4KhqYtU9lZGW0mWnq62pDe2r4QpD9mCFMM/dzdSDBSo= 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=V7mXltrI; 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="V7mXltrI" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772010386; x=1803546386; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=SjGo6ZLzuUnmkoqGRlfVYGuWFR89kHfN9qVzMB3AD+4=; b=V7mXltrIN1QkLxS9uBxLozuOlrj19W6J2TIhCnJQKUs+2MRsbN0IgW0W qWGjBhNZKrrkVL5bTbb29aQ9/9GS4bVP1wXLYYYkdl4sNXvefLm1KU2Ac rik2v/teDUrS4JoJRz7YJgLC1IXW4PyscVwp6eIM2L6HziYCRdsEh7dQ3 SvnfnRN/Tcke/5Ucqr4lEl0RoYxptSAVRLS5Pci8ksxsSEHVUuZHflN8S JmgPO0rr/bF3GAPrc2ZowacfMURuZUAoKI/7EseD4k+lZLumqj3vAyrTG cZ8cSRc7341Tn1+Y9oaUJAn4LdpWNs3rNWQo2uZiNN/qnJITu8r/QyfEz A==; X-CSE-ConnectionGUID: GvK6L9OjSSuGPw39llTOAQ== X-CSE-MsgGUID: SVwWFSU9S9+y8DN8tRTZiw== X-IronPort-AV: E=Sophos;i="6.21,310,1763449200"; d="scan'208";a="61259300" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2026 02:06:23 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) by chn-vm-ex3.mchp-main.com (10.10.87.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Wed, 25 Feb 2026 02:06:16 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 25 Feb 2026 02:06:14 -0700 From: Daniel Machon Date: Wed, 25 Feb 2026 10:05:27 +0100 Subject: [PATCH net-next 4/7] 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: <20260225-sparx5-init-deinit-v1-4-97036580b9f0@microchip.com> References: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@microchip.com> In-Reply-To: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@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 | 27 +++++++++++++++++-- .../net/ethernet/microchip/sparx5/sparx5_main.c | 31 +++++++-----------= ---- .../net/ethernet/microchip/sparx5/sparx5_main.h | 4 +-- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c b/driv= ers/net/ethernet/microchip/sparx5/sparx5_mactable.c index f5584244612c..626ce6f9046d 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,25 @@ 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); + + 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 28ee45815c7f..97dd3cea0554 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -688,7 +688,6 @@ 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,9 +727,6 @@ 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 @@ -757,19 +753,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); =20 @@ -987,12 +970,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); @@ -1016,14 +1005,14 @@ static int mchp_sparx5_probe(struct platform_device= *pdev) sparx5_unregister_notifier_blocks(sparx5); 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: @@ -1051,11 +1040,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 Thu Apr 16 22:33:12 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 A09C036EAA8; Wed, 25 Feb 2026 09:06:27 +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=1772010390; cv=none; b=rKYIe2eHfkt+LAhrFofEu/lXsHsT/Rl4UYQtQqD7vvsBGts1pSdKHEEr7V/rE9hcieUJWqUdAtGE6WK5I6IGeGHm74Jlm+zAab/XSthUe1GOFrU+9n3LRJaKDy01fOimrdAlbqt9F+DARN3YYROH8HTQ/ERbISEN3gpNz4rM+IE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772010390; c=relaxed/simple; bh=CEOoIShVVz67EX2t2AqHEGK8T7hIP5WU9sisxJNNPzs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=jwZJcHZDQSylc25HQh0yLVDTFl0lY1vnOrEJM7cWWUBpjOSXxgko6gfVQpz4aqtxwn4JWvPtPvzYeqSnTTmMXD9OLzVbspj7x08YtebOx0O5U/rwHCpMv/Ir1GD3dksE0dGthMK1JdsIR26TS8SPHScKy6zgU2jJqS7OQHkN158= 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=BN6/8T5T; 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="BN6/8T5T" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772010387; x=1803546387; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=CEOoIShVVz67EX2t2AqHEGK8T7hIP5WU9sisxJNNPzs=; b=BN6/8T5TYq64T/e/lhmt8kJ1QnRhx3PlACOrQ+Ocy4mlUD79Vhv5QxDa 9kMXd1WsahrAQmHkBbPGWzU863+rA/i/9llH609iLo13/XwmCE0z+Lg7j /fJdTSOxzHb8AFENKlyzQTcZsfdmnJs3l7wiemDO10VkIG0h4qA1u7z8y uAHTOzyvQqApaUO1tb+ueovR1XjKj0XHthnn8oTDT9DAhSu+Pr/HViFIa CgM1ZEGp0XoPv8NJhUTwziw+4+4UrVu8TqyprVtNprbIijTBen4DTlGG5 aLHG+zyFbDwupsrwrXYe9/vbWo54sTre1KigtYUk1oNvpL7NAGgeXpu7l g==; X-CSE-ConnectionGUID: GvK6L9OjSSuGPw39llTOAQ== X-CSE-MsgGUID: ZyZB/CyDSGC4HN5xo0MT/Q== X-IronPort-AV: E=Sophos;i="6.21,310,1763449200"; d="scan'208";a="61259302" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2026 02:06:23 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) by chn-vm-ex3.mchp-main.com (10.10.87.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Wed, 25 Feb 2026 02:06:18 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 25 Feb 2026 02:06:16 -0700 From: Daniel Machon Date: Wed, 25 Feb 2026 10:05:28 +0100 Subject: [PATCH net-next 5/7] 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: <20260225-sparx5-init-deinit-v1-5-97036580b9f0@microchip.com> References: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@microchip.com> In-Reply-To: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@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 97dd3cea0554..17748854ca48 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -748,11 +748,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; - mutex_init(&sparx5->mdb_lock); INIT_LIST_HEAD(&sparx5->mdb_entries); =20 @@ -976,12 +971,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); @@ -1005,6 +1006,8 @@ static int mchp_sparx5_probe(struct platform_device *= pdev) sparx5_unregister_notifier_blocks(sparx5); cleanup_netdevs: sparx5_unregister_netdevs(sparx5); +cleanup_stats: + sparx5_stats_deinit(sparx5); cleanup_mact: sparx5_mact_deinit(sparx5); cleanup_vcap: @@ -1040,6 +1043,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 Thu Apr 16 22:33:12 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 6388136EA94; Wed, 25 Feb 2026 09:06: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=1772010393; cv=none; b=NtLXFpzmateT2E7ELAOt07EPUqy5b1BtvC3r91RDh63d1GZpnmzZFiCxe1q80G0Nwn1ohlYvWLHZZe/woFYJQbWG/iXfIoRVc77cXkle2gW0QZ6J0dvIgHfdeUrPtX+sowB5l9t7XMsaXKLfX57xkQX4nyTKJRmK8YZ8U5o9FJ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772010393; c=relaxed/simple; bh=jAVzK5Hc/AzuV81zaf70lHzotLsm9hxK1qHPaNtwaEs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=ukAc9iMGHPj5tCqEdvTYsGxInrYtpv0lfCyskYlIl1YWwJd2NzY6k/1aEAnH3gZlBmK0KR2tUgZ8irmW2s0r9kjLYmDVoHyg/zEF94qzDrUF7joTvlT+WtW2OPV3M8GJzD35UfB3/fOIuuC9BSuNOdPKq2FrS6TIExJWb/6/eC8= 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=qa4MGJ7I; 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="qa4MGJ7I" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772010390; x=1803546390; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=jAVzK5Hc/AzuV81zaf70lHzotLsm9hxK1qHPaNtwaEs=; b=qa4MGJ7IxS4hIAm7mIF66Q0B8tnWEvIp88YnGJjv3xwowBDhFctU5gHe yiiCcuWPf0YXs/yNZQhr/H5dwI/ElE4MnqNdP4w0KQo5EMxeYPiGfZyYF Spd5bR/5+uGiPXxrmCpfkKkeDYYPZqHhzWH5OQGBQSHsZN6kcqA//JwyP uJVLaPrGlonJF7mxynpOksDe9PDMgW9qWom7khed+43uByFo4pXB6crBI DzxAaMoDq6rr9X8ryAeG7z/d8e+xfdIolMZd1k1blyy/GSGUuAE3jW07c mwIo6bm4s4a31SLOCBOzGz2nBdghtV6K3aUMuUGFin+DhFUqr/e3k8lGL A==; X-CSE-ConnectionGUID: GvK6L9OjSSuGPw39llTOAQ== X-CSE-MsgGUID: M+9u7YjXSSqJIOES4TKBzw== X-IronPort-AV: E=Sophos;i="6.21,310,1763449200"; d="scan'208";a="61259303" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Feb 2026 02:06:24 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) by chn-vm-ex3.mchp-main.com (10.10.87.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.35; Wed, 25 Feb 2026 02:06:21 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 25 Feb 2026 02:06:19 -0700 From: Daniel Machon Date: Wed, 25 Feb 2026 10:05:29 +0100 Subject: [PATCH net-next 6/7] 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: <20260225-sparx5-init-deinit-v1-6-97036580b9f0@microchip.com> References: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@microchip.com> In-Reply-To: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@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 17748854ca48..581f87eb9781 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -740,14 +740,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; - mutex_init(&sparx5->mdb_lock); INIT_LIST_HEAD(&sparx5->mdb_entries); =20 @@ -947,6 +939,12 @@ static int mchp_sparx5_probe(struct platform_device *p= dev) } } =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 Thu Apr 16 22:33:12 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 A68D6371046; Wed, 25 Feb 2026 09:06:58 +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=1772010422; cv=none; b=h17Lz7clLv9ZgKDVIiKcG6eYNqnYXlGoyQ62IM4HYtws1PeqpHTyPx+9CZKH+GXg086kSxMYzy4LMf/0NnAGDDwMW9bnzqVTggb4pTLAX0fV2sNLX471So/sno7KZYhjrBydKT87WKbSVO7cCG6f4k07ZLtqaUHp689D4tlF+bY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772010422; c=relaxed/simple; bh=9VZ1uVovnXCdERkt2fVQaLnP6Cbs4phjqlrfHL7fq2M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=KJSAz4oOzdETaSDmZ92XpLQUWWb0ka7subWygKqdORPti6cLNkWnyG7UEtRxT0+0CQ3B4ZtZZkYluT1AmNwd5HX/uLmVYLhGQ5p8mm48HPQyq93tP4v805hiVxqcRRxO7m4BqhXAUrJz49cl6LCOP2iyExpRUV6j5caCA8bNZWM= 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=Sr8A+pdJ; 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="Sr8A+pdJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1772010418; x=1803546418; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=9VZ1uVovnXCdERkt2fVQaLnP6Cbs4phjqlrfHL7fq2M=; b=Sr8A+pdJzZnxids5YJKv7kTfvrBD8E6tsSwdK++z4mZm1SWn1mzBKo5M YxNPCKR8WT+SOmQdWQoZskknHnMHeuAIKd3fNEsBlOyCQHFVtJ+c0TFy/ 2dTP5/y0Q2KTwCNMoBtQmmOOc1L2u9o97pB6OdOCs8dmW4oqsTEjK7wIu mc4bFnKp+7jL6+ZoBwq2RIQj+8JmHZj6XNPt3twOfaVNza7XyfuhCUh/G Nt/qDdQhefao+W+OIbVf7ft0Vzpm4Nr+nf549BgxtZ+vW+paifHyUaZtl QZZ85vRtVU4tXxlwjqYoHBnbKRC+DN8n7Y0f71JX8CG/mKGfbEY13EhKh A==; X-CSE-ConnectionGUID: qnurV3sJT6mUYuyKYf9Ihg== X-CSE-MsgGUID: vQY8kQEYSXyRvmukcJalZQ== X-IronPort-AV: E=Sophos;i="6.21,310,1763449200"; d="scan'208";a="54259087" X-Amp-Result: SKIPPED(no attachment in message) Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa2.microchip.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 25 Feb 2026 02:06:58 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex02.mchp-main.com (10.10.85.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.58; Wed, 25 Feb 2026 02:06:23 -0700 Received: from DEN-DL-M70577.microsemi.net (10.10.85.11) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2507.58 via Frontend Transport; Wed, 25 Feb 2026 02:06:21 -0700 From: Daniel Machon Date: Wed, 25 Feb 2026 10:05:30 +0100 Subject: [PATCH net-next 7/7] 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: <20260225-sparx5-init-deinit-v1-7-97036580b9f0@microchip.com> References: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@microchip.com> In-Reply-To: <20260225-sparx5-init-deinit-v1-0-97036580b9f0@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 581f87eb9781..fb3010446707 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -727,12 +727,6 @@ 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); - /* Add host mode BC address (points only to CPU) */ sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU), broadcast, NULL_VID); @@ -743,8 +737,6 @@ static int sparx5_start(struct sparx5 *sparx5) mutex_init(&sparx5->mdb_lock); INIT_LIST_HEAD(&sparx5->mdb_entries); =20 - sparx5_board_init(sparx5); - /* Start Frame DMA with fallback to register based INJ/XTR */ err =3D -ENXIO; if (sparx5->fdma_irq >=3D 0) { @@ -939,6 +931,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_calendar_init(sparx5); if (err) { dev_err(sparx5->dev, "Failed to initialize calendar\n"); --=20 2.34.1