From nobody Thu Feb 12 20:26:26 2026 Received: from mta-64-227.siemens.flowmailer.net (mta-64-227.siemens.flowmailer.net [185.136.64.227]) (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 B9829194A7A for ; Fri, 7 Jun 2024 13:14:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.136.64.227 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766060; cv=none; b=AXwN46yamb/X2SXk0AjnE5aM+XLcWYyLSM7P8Eh2UUIMgbnzRv0j7EjpMdLskL5f7K1GGwtG98VkaVyDD7E+keALWJG3dyL2+UIEJT83N+Pa5BauPGNceJ+XL2Vuyjd7AopFEDpAjlTDF1Dfydp8kA8msmXTKBSyh8VxGBQzuk0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766060; c=relaxed/simple; bh=gVkjhihYssjxx3HmUUIcdEn5ObHN127myBwzSS6vJW0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BrUAD+xc/pCI0c7DfflnxaImVmupAoERSnRqW9cZVF93Ffo1uUPYizF8lb2V7i6lk3NHrZRwW88Q7QG52RhybHvPSeWH9filp8GC641cmZplLRpr6r3sLXL/yxE5A6I7ZUcKwX7uWx4CUBR8tAuMP1AKa6104Cko7THVdZ2Xrz0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b=nYmeSFk7; arc=none smtp.client-ip=185.136.64.227 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b="nYmeSFk7" Received: by mta-64-227.siemens.flowmailer.net with ESMTPSA id 202406071314119738299f05800c3fab for ; Fri, 07 Jun 2024 15:14:11 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=diogo.ivo@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=x4YRkE+XFm1D29pl4Ld17TEKG1sVow5yeZQG9PSUP5I=; b=nYmeSFk74uBHWoVjis9ZQ9m+FJ9ij+amjNoT5PiUDD19q+62u5h477q3LMBZEY35Y4szWD ZZ1ceJVATUF1+IlD/agl8j+BVQT71CKyZFsU5ts4olczCHLXSh4BhjzWp6BBIv+e7K0YLEyp 3FZ5vgtAqCBDgIU33fY3yPszvUC2I=; From: Diogo Ivo Date: Fri, 07 Jun 2024 14:02:42 +0100 Subject: [PATCH net-next v3 1/4] net: ti: icssg-prueth: Enable PTP timestamping support for SR1.0 devices 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: <20240607-iep-v3-1-4824224105bc@siemens.com> References: <20240607-iep-v3-0-4824224105bc@siemens.com> In-Reply-To: <20240607-iep-v3-0-4824224105bc@siemens.com> To: MD Danish Anwar , Roger Quadros , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jan Kiszka , Jacob Keller , Simon Horman Cc: linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Diogo Ivo , Wojciech Drewek X-Developer-Signature: v=1; a=ed25519-sha256; t=1717766048; l=3143; i=diogo.ivo@siemens.com; s=20240529; h=from:subject:message-id; bh=gVkjhihYssjxx3HmUUIcdEn5ObHN127myBwzSS6vJW0=; b=/6z6UNJ8Q+JAQ6UI+lCH/iEhQ/GrLgj+QGFY9A2csJuBtmOkHvOKse56pxv2KMMjJJjIJUK9J MF01S7dd/yjDI6b2d/bGrge50GTXcT0N6AK54YGXc68BgCqoa4utP88 X-Developer-Key: i=diogo.ivo@siemens.com; a=ed25519; pk=BRGXhMh1q5KDlZ9y2B8SodFFY8FGupal+NMtJPwRpUQ= X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1320519:519-21489:flowmailer Enable PTP support for AM65x SR1.0 devices by registering with the IEP infrastructure in order to expose a PTP clock to userspace. Reviewed-by: Jacob Keller Reviewed-by: Wojciech Drewek Signed-off-by: Diogo Ivo --- drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c | 51 ++++++++++++++++++++= +++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c b/drivers/net= /ethernet/ti/icssg/icssg_prueth_sr1.c index 7b3304bbd7fc..fa98bdb11ece 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c +++ b/drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c @@ -1011,16 +1011,44 @@ static int prueth_probe(struct platform_device *pde= v) dev_dbg(dev, "sram: pa %llx va %p size %zx\n", prueth->msmcram.pa, prueth->msmcram.va, prueth->msmcram.size); =20 + prueth->iep0 =3D icss_iep_get_idx(np, 0); + if (IS_ERR(prueth->iep0)) { + ret =3D dev_err_probe(dev, PTR_ERR(prueth->iep0), + "iep0 get failed\n"); + goto free_pool; + } + + prueth->iep1 =3D icss_iep_get_idx(np, 1); + if (IS_ERR(prueth->iep1)) { + ret =3D dev_err_probe(dev, PTR_ERR(prueth->iep1), + "iep1 get failed\n"); + goto put_iep0; + } + + ret =3D icss_iep_init(prueth->iep0, NULL, NULL, 0); + if (ret) { + dev_err_probe(dev, ret, "failed to init iep0\n"); + goto put_iep; + } + + ret =3D icss_iep_init(prueth->iep1, NULL, NULL, 0); + if (ret) { + dev_err_probe(dev, ret, "failed to init iep1\n"); + goto exit_iep0; + } + if (eth0_node) { ret =3D prueth_netdev_init(prueth, eth0_node); if (ret) { dev_err_probe(dev, ret, "netdev init %s failed\n", eth0_node->name); - goto free_pool; + goto exit_iep; } =20 if (of_find_property(eth0_node, "ti,half-duplex-capable", NULL)) prueth->emac[PRUETH_MAC0]->half_duplex =3D 1; + + prueth->emac[PRUETH_MAC0]->iep =3D prueth->iep0; } =20 if (eth1_node) { @@ -1033,6 +1061,8 @@ static int prueth_probe(struct platform_device *pdev) =20 if (of_find_property(eth1_node, "ti,half-duplex-capable", NULL)) prueth->emac[PRUETH_MAC1]->half_duplex =3D 1; + + prueth->emac[PRUETH_MAC1]->iep =3D prueth->iep1; } =20 /* register the network devices */ @@ -1091,6 +1121,19 @@ static int prueth_probe(struct platform_device *pdev) prueth_netdev_exit(prueth, eth_node); } =20 +exit_iep: + icss_iep_exit(prueth->iep1); +exit_iep0: + icss_iep_exit(prueth->iep0); + +put_iep: + icss_iep_put(prueth->iep1); + +put_iep0: + icss_iep_put(prueth->iep0); + prueth->iep0 =3D NULL; + prueth->iep1 =3D NULL; + free_pool: gen_pool_free(prueth->sram_pool, (unsigned long)prueth->msmcram.va, msmc_ram_size); @@ -1138,6 +1181,12 @@ static void prueth_remove(struct platform_device *pd= ev) prueth_netdev_exit(prueth, eth_node); } =20 + icss_iep_exit(prueth->iep1); + icss_iep_exit(prueth->iep0); + + icss_iep_put(prueth->iep1); + icss_iep_put(prueth->iep0); + gen_pool_free(prueth->sram_pool, (unsigned long)prueth->msmcram.va, MSMC_RAM_SIZE_SR1); --=20 2.45.2 From nobody Thu Feb 12 20:26:26 2026 Received: from mta-64-226.siemens.flowmailer.net (mta-64-226.siemens.flowmailer.net [185.136.64.226]) (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 C9CC1193074 for ; Fri, 7 Jun 2024 13:14:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.136.64.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766056; cv=none; b=hrKA1905dQseRqX0nVKCWIcEMIQVzc4+ND6DuY7mQNHqEpMF0j+OMWRru1fRjhqO2jXac47MHetUWenkXxOMmmcNllX7hZPLTAsxySsZ8lGQgS54Y0ONqdIQFipnqAdGODv+emPdblxYkhYq7TBy6bl11H6VTE0uEmDK0zi4ueU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766056; c=relaxed/simple; bh=Lubo51aFliEiy57U/CSrVnSv9x7BSB7UF3Ec1ulGl4U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OVpEQ35QEBqDkasaCYmYLXmRl1PoC+8XCjmdcPYayYeUpOLBY4RrBnKTdab1JeOGsj5L4/TQGawynlRuYaHTuroi0ZIIMGqcqLutg31VyRpxBBvHUL9dICrK9zjiXvOiF0BOa1JTeX7to7+X4DSGXwdqSbt+sXZm/KeDO30tp28= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b=D20CPWSO; arc=none smtp.client-ip=185.136.64.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b="D20CPWSO" Received: by mta-64-226.siemens.flowmailer.net with ESMTPSA id 20240607131412d742d5fa78e77c91a2 for ; Fri, 07 Jun 2024 15:14:12 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=diogo.ivo@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=xLX7+CQO0TEbMXn1aOXc/7bQGueWhuMmOf9S1qPGGjk=; b=D20CPWSO8w869qairY0Y5ea1kXH2yfbUrNqtsM/k5ZxVDQfe5j1K0aJwTnkJgqeIk/YYDi XCJy1xFil/yCNVXRyOth/cYdzF+cFX4pQcKfAmRJleatBxmAlz9QBWfp0kqzeGf6rm2bdnsr K92FaLURrh1NDc0FkYTGUNraDewMc=; From: Diogo Ivo Date: Fri, 07 Jun 2024 14:02:43 +0100 Subject: [PATCH net-next v3 2/4] net: ti: icss-iep: Remove spinlock-based synchronization 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: <20240607-iep-v3-2-4824224105bc@siemens.com> References: <20240607-iep-v3-0-4824224105bc@siemens.com> In-Reply-To: <20240607-iep-v3-0-4824224105bc@siemens.com> To: MD Danish Anwar , Roger Quadros , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jan Kiszka , Jacob Keller , Simon Horman Cc: linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Diogo Ivo X-Developer-Signature: v=1; a=ed25519-sha256; t=1717766048; l=2559; i=diogo.ivo@siemens.com; s=20240529; h=from:subject:message-id; bh=Lubo51aFliEiy57U/CSrVnSv9x7BSB7UF3Ec1ulGl4U=; b=Ilvq9R68ZKnCvFAGqplauA7xOO0uEcY3dD+RILon+Vwb7nES3d+1FW+V5FuKziyYgRngL4gjp OsIH2tJxAYeD2jvHJ8+PI4+L/As4lC4Ol/AjL/iQKEJ34cUROXSmD1R X-Developer-Key: i=diogo.ivo@siemens.com; a=ed25519; pk=BRGXhMh1q5KDlZ9y2B8SodFFY8FGupal+NMtJPwRpUQ= X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1320519:519-21489:flowmailer As all sources of concurrency in hardware register access occur in non-interrupt context eliminate spinlock-based synchronization and rely on the mutex-based synchronization that is already present. Signed-off-by: Diogo Ivo --- drivers/net/ethernet/ti/icssg/icss_iep.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/drivers/net/ethernet/ti/icssg/icss_iep.c b/drivers/net/etherne= t/ti/icssg/icss_iep.c index 3025e9c18970..1d6ccdf2583f 100644 --- a/drivers/net/ethernet/ti/icssg/icss_iep.c +++ b/drivers/net/ethernet/ti/icssg/icss_iep.c @@ -110,7 +110,6 @@ struct icss_iep { struct ptp_clock_info ptp_info; struct ptp_clock *ptp_clock; struct mutex ptp_clk_mutex; /* PHC access serializer */ - spinlock_t irq_lock; /* CMP IRQ vs icss_iep_ptp_enable access */ u32 def_inc; s16 slow_cmp_inc; u32 slow_cmp_count; @@ -199,7 +198,6 @@ static void icss_iep_settime(struct icss_iep *iep, u64 = ns) return; } =20 - spin_lock_irqsave(&iep->irq_lock, flags); if (iep->pps_enabled || iep->perout_enabled) writel(0, iep->base + iep->plat_data->reg_offs[ICSS_IEP_SYNC_CTRL_REG]); =20 @@ -210,7 +208,6 @@ static void icss_iep_settime(struct icss_iep *iep, u64 = ns) writel(IEP_SYNC_CTRL_SYNC_N_EN(0) | IEP_SYNC_CTRL_SYNC_EN, iep->base + iep->plat_data->reg_offs[ICSS_IEP_SYNC_CTRL_REG]); } - spin_unlock_irqrestore(&iep->irq_lock, flags); } =20 /** @@ -559,11 +556,9 @@ static int icss_iep_perout_enable(struct icss_iep *iep, if (iep->perout_enabled =3D=3D !!on) goto exit; =20 - spin_lock_irqsave(&iep->irq_lock, flags); ret =3D icss_iep_perout_enable_hw(iep, req, on); if (!ret) iep->perout_enabled =3D !!on; - spin_unlock_irqrestore(&iep->irq_lock, flags); =20 exit: mutex_unlock(&iep->ptp_clk_mutex); @@ -589,8 +584,6 @@ static int icss_iep_pps_enable(struct icss_iep *iep, in= t on) if (iep->pps_enabled =3D=3D !!on) goto exit; =20 - spin_lock_irqsave(&iep->irq_lock, flags); - rq.perout.index =3D 0; if (on) { ns =3D icss_iep_gettime(iep, NULL); @@ -607,8 +600,6 @@ static int icss_iep_pps_enable(struct icss_iep *iep, in= t on) if (!ret) iep->pps_enabled =3D !!on; =20 - spin_unlock_irqrestore(&iep->irq_lock, flags); - exit: mutex_unlock(&iep->ptp_clk_mutex); =20 @@ -853,7 +844,6 @@ static int icss_iep_probe(struct platform_device *pdev) =20 iep->ptp_info =3D icss_iep_ptp_info; mutex_init(&iep->ptp_clk_mutex); - spin_lock_init(&iep->irq_lock); dev_set_drvdata(dev, iep); icss_iep_disable(iep); =20 --=20 2.45.2 From nobody Thu Feb 12 20:26:26 2026 Received: from mta-65-226.siemens.flowmailer.net (mta-65-226.siemens.flowmailer.net [185.136.65.226]) (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 BDA481940B5 for ; Fri, 7 Jun 2024 13:14:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.136.65.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766057; cv=none; b=dUkATl0IRBspr6FTQFG8TOMuohWeYcAq0SPZA4zkHRdkDIAxw7k8NiQRXmbx6IHgbOLPgsGLv4tVPau9lqRLhj7aZDIppyx9nIHEV0zWJb/wnBiS9Ko/ybe2pTkOv/9FS8Pz7vI35uBxbPR4yj1VYTogLi125Nd1si/6qj4kaQ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766057; c=relaxed/simple; bh=juK+50b52n4kfYS0KW+PIbmXFXKcTLpm4iS/b9Wtl6Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YssW9oma687wwuweMWAijQqpudpql9wVuDsaCeGYargL+Y3FRVUeGl0zhbINHql5euZL0FBxe7sQEoBjfshn/cSDHQiQmbEohpJYR/RpdIQR8kViWMR7WHI2x2NAQ9CLsmIn2/e+2CiQWOQi1huWxZbbRjG/x9RzGiQvc5TkQOI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b=Cv/RubYi; arc=none smtp.client-ip=185.136.65.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b="Cv/RubYi" Received: by mta-65-226.siemens.flowmailer.net with ESMTPSA id 2024060713141316df4d114621553ea6 for ; Fri, 07 Jun 2024 15:14:13 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=diogo.ivo@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=mtDl2NTrL/rjH7z6rqMb1zJotedr1wMSwfxQI2sSLT0=; b=Cv/RubYi4k5Sa/uWGBJCpu1YRtLNXR3cos5ve3hf0s1RsA6BjSFvfsmY33KmSApEPcZzRw dbO4jhlEA4H7CwQsmnXuP4o7AvEP0F5hPOT8miZ5J5GoeNNtINNKeN3Yvg84oWqB7L1AtPLS FqSc0L4cvrNA7REGns03OH0/nhvrI=; From: Diogo Ivo Date: Fri, 07 Jun 2024 14:02:44 +0100 Subject: [PATCH net-next v3 3/4] net: ti: icss-iep: Enable compare events 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: <20240607-iep-v3-3-4824224105bc@siemens.com> References: <20240607-iep-v3-0-4824224105bc@siemens.com> In-Reply-To: <20240607-iep-v3-0-4824224105bc@siemens.com> To: MD Danish Anwar , Roger Quadros , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jan Kiszka , Jacob Keller , Simon Horman Cc: linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Diogo Ivo , Wojciech Drewek X-Developer-Signature: v=1; a=ed25519-sha256; t=1717766048; l=4428; i=diogo.ivo@siemens.com; s=20240529; h=from:subject:message-id; bh=juK+50b52n4kfYS0KW+PIbmXFXKcTLpm4iS/b9Wtl6Y=; b=wrdlrG0di9FppBXNBtEzFFCH4sCVEhjZ+OtGWuDagKG4cahCg2NUTzyz5lwfc1vbbu1+AXJE0 0Kfqkl5kwOGBTIC2afl3JISNjk7kmt7PZzl8WwDCCSVLXJT/9zAocYS X-Developer-Key: i=diogo.ivo@siemens.com; a=ed25519; pk=BRGXhMh1q5KDlZ9y2B8SodFFY8FGupal+NMtJPwRpUQ= X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1320519:519-21489:flowmailer The IEP module supports compare events, in which a value is written to a hardware register and when the IEP counter reaches the written value an interrupt is generated. Add handling for this interrupt in order to support PPS events. Reviewed-by: Jacob Keller Reviewed-by: Wojciech Drewek Signed-off-by: Diogo Ivo --- drivers/net/ethernet/ti/icssg/icss_iep.c | 74 ++++++++++++++++++++++++++++= ++++ 1 file changed, 74 insertions(+) diff --git a/drivers/net/ethernet/ti/icssg/icss_iep.c b/drivers/net/etherne= t/ti/icssg/icss_iep.c index 1d6ccdf2583f..7d1f058283a4 100644 --- a/drivers/net/ethernet/ti/icssg/icss_iep.c +++ b/drivers/net/ethernet/ti/icssg/icss_iep.c @@ -17,6 +17,7 @@ #include #include #include +#include =20 #include "icss_iep.h" =20 @@ -121,6 +122,7 @@ struct icss_iep { int cap_cmp_irq; u64 period; u32 latch_enable; + struct work_struct work; }; =20 /** @@ -566,6 +568,57 @@ static int icss_iep_perout_enable(struct icss_iep *iep, return ret; } =20 +static void icss_iep_cap_cmp_work(struct work_struct *work) +{ + struct icss_iep *iep =3D container_of(work, struct icss_iep, work); + const u32 *reg_offs =3D iep->plat_data->reg_offs; + struct ptp_clock_event pevent; + unsigned int val; + u64 ns, ns_next; + + mutex_lock(&iep->ptp_clk_mutex); + + ns =3D readl(iep->base + reg_offs[ICSS_IEP_CMP1_REG0]); + if (iep->plat_data->flags & ICSS_IEP_64BIT_COUNTER_SUPPORT) { + val =3D readl(iep->base + reg_offs[ICSS_IEP_CMP1_REG1]); + ns |=3D (u64)val << 32; + } + /* set next event */ + ns_next =3D ns + iep->period; + writel(lower_32_bits(ns_next), + iep->base + reg_offs[ICSS_IEP_CMP1_REG0]); + if (iep->plat_data->flags & ICSS_IEP_64BIT_COUNTER_SUPPORT) + writel(upper_32_bits(ns_next), + iep->base + reg_offs[ICSS_IEP_CMP1_REG1]); + + pevent.pps_times.ts_real =3D ns_to_timespec64(ns); + pevent.type =3D PTP_CLOCK_PPSUSR; + pevent.index =3D 0; + ptp_clock_event(iep->ptp_clock, &pevent); + dev_dbg(iep->dev, "IEP:pps ts: %llu next:%llu:\n", ns, ns_next); + + mutex_unlock(&iep->ptp_clk_mutex); +} + +static irqreturn_t icss_iep_cap_cmp_irq(int irq, void *dev_id) +{ + struct icss_iep *iep =3D (struct icss_iep *)dev_id; + const u32 *reg_offs =3D iep->plat_data->reg_offs; + unsigned int val; + + val =3D readl(iep->base + reg_offs[ICSS_IEP_CMP_STAT_REG]); + /* The driver only enables CMP1 */ + if (val & BIT(1)) { + /* Clear the event */ + writel(BIT(1), iep->base + reg_offs[ICSS_IEP_CMP_STAT_REG]); + if (iep->pps_enabled || iep->perout_enabled) + schedule_work(&iep->work); + return IRQ_HANDLED; + } + + return IRQ_NONE; +} + static int icss_iep_pps_enable(struct icss_iep *iep, int on) { struct ptp_clock_request rq; @@ -595,6 +648,8 @@ static int icss_iep_pps_enable(struct icss_iep *iep, in= t on) ret =3D icss_iep_perout_enable_hw(iep, &rq.perout, on); } else { ret =3D icss_iep_perout_enable_hw(iep, &rq.perout, on); + if (iep->cap_cmp_irq) + cancel_work_sync(&iep->work); } =20 if (!ret) @@ -768,6 +823,8 @@ int icss_iep_init(struct icss_iep *iep, const struct ic= ss_iep_clockops *clkops, if (iep->ops && iep->ops->perout_enable) { iep->ptp_info.n_per_out =3D 1; iep->ptp_info.pps =3D 1; + } else if (iep->cap_cmp_irq) { + iep->ptp_info.pps =3D 1; } =20 if (iep->ops && iep->ops->extts_enable) @@ -808,6 +865,7 @@ static int icss_iep_probe(struct platform_device *pdev) struct device *dev =3D &pdev->dev; struct icss_iep *iep; struct clk *iep_clk; + int ret, irq; =20 iep =3D devm_kzalloc(dev, sizeof(*iep), GFP_KERNEL); if (!iep) @@ -818,6 +876,22 @@ static int icss_iep_probe(struct platform_device *pdev) if (IS_ERR(iep->base)) return -ENODEV; =20 + irq =3D platform_get_irq_byname_optional(pdev, "iep_cap_cmp"); + if (irq =3D=3D -EPROBE_DEFER) + return irq; + + if (irq > 0) { + ret =3D devm_request_irq(dev, irq, icss_iep_cap_cmp_irq, + IRQF_TRIGGER_HIGH, "iep_cap_cmp", iep); + if (ret) { + dev_info(iep->dev, "cap_cmp irq request failed: %x\n", + ret); + } else { + iep->cap_cmp_irq =3D irq; + INIT_WORK(&iep->work, icss_iep_cap_cmp_work); + } + } + iep_clk =3D devm_clk_get(dev, NULL); if (IS_ERR(iep_clk)) return PTR_ERR(iep_clk); --=20 2.45.2 From nobody Thu Feb 12 20:26:26 2026 Received: from mta-65-225.siemens.flowmailer.net (mta-65-225.siemens.flowmailer.net [185.136.65.225]) (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 1410E1940AA for ; Fri, 7 Jun 2024 13:14:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.136.65.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766064; cv=none; b=GDBqGJbzuC9FD/bYTsA86HFyzXM7sXMQZjKRyaVe9La2csl+iWkE5g8B81dsehy83Aa6TreOn6j1mbb1QF/3yxlBQGHhMxfOlwwiyGOOt3weaVdDwZgnOPQkGMyGfw1Df/L74UeEAY+jvbBlzsQc3Bok1Fu8N0X4sPeEKnzwsCY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717766064; c=relaxed/simple; bh=NUfirnAzHuSC6GjuRr39bgT7xFG/QnrzxnLmvJJpzEw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ItYJeTUDceG/fJW7cZtkFzjLaDM3SxilIbm769e0cyoJPiDjrc017fdtJEbjjayIeALoQVuvCqkkd4KXLpODi8T7KHt5yC+any+1K6h8QJUNOMDHCmFlBzNoSLobKpJN0qbR29EOL0YiI3Hwt9ZrAdd7ty4hAcwOKTXWdOipwXw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b=Hts1WagL; arc=none smtp.client-ip=185.136.65.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=siemens.com header.i=diogo.ivo@siemens.com header.b="Hts1WagL" Received: by mta-65-225.siemens.flowmailer.net with ESMTPSA id 2024060713141457bce1ce04e0f45061 for ; Fri, 07 Jun 2024 15:14:14 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=diogo.ivo@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=Oycy2PZfe8iU4x5Oth2BIpAhAkhezYYXv0lKcaObIIg=; b=Hts1WagL1MoKxWIov/Ui/vCscCONTxpJxont7fwKKkWi4/LEr1IgyYETl3y4aAIffX3Dfs Za366X+F14Axcc8C8u0iCOgjcTzG8zvcdr7+WHpXwHLOzTCZ33lA9yN3GDPNerzTVvaCBwO1 PFg55mpnDIsG2uoPPQ92d5kI7TSQQ=; From: Diogo Ivo Date: Fri, 07 Jun 2024 14:02:45 +0100 Subject: [PATCH net-next v3 4/4] arm64: dts: ti: iot2050: Add IEP interrupts for SR1.0 devices 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: <20240607-iep-v3-4-4824224105bc@siemens.com> References: <20240607-iep-v3-0-4824224105bc@siemens.com> In-Reply-To: <20240607-iep-v3-0-4824224105bc@siemens.com> To: MD Danish Anwar , Roger Quadros , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Richard Cochran , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jan Kiszka , Jacob Keller , Simon Horman Cc: linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Diogo Ivo X-Developer-Signature: v=1; a=ed25519-sha256; t=1717766048; l=952; i=diogo.ivo@siemens.com; s=20240529; h=from:subject:message-id; bh=NUfirnAzHuSC6GjuRr39bgT7xFG/QnrzxnLmvJJpzEw=; b=JVJ6rTXzt+GHz1gD+Z/N30MZ/Qv8SCnhwWgduEiiF8LG4ZtsMShKgGLII5IOD6cKr94fXXe3Y uJmuByrQNPOB6tv5M516Ai3M1S9WSzouzitgYH6cNU14D0KAquJIvov X-Developer-Key: i=diogo.ivo@siemens.com; a=ed25519; pk=BRGXhMh1q5KDlZ9y2B8SodFFY8FGupal+NMtJPwRpUQ= X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1320519:519-21489:flowmailer Add the interrupts needed for PTP Hardware Clock support via IEP in SR1.0 devices. Reviewed-by: Jacob Keller Signed-off-by: Diogo Ivo --- arch/arm64/boot/dts/ti/k3-am65-iot2050-common-pg1.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arm64/boot/dts/ti/k3-am65-iot2050-common-pg1.dtsi b/arch/= arm64/boot/dts/ti/k3-am65-iot2050-common-pg1.dtsi index ef7897763ef8..0a29ed172215 100644 --- a/arch/arm64/boot/dts/ti/k3-am65-iot2050-common-pg1.dtsi +++ b/arch/arm64/boot/dts/ti/k3-am65-iot2050-common-pg1.dtsi @@ -73,3 +73,15 @@ &icssg0_eth { "rx0", "rx1", "rxmgm0", "rxmgm1"; }; + +&icssg0_iep0 { + interrupt-parent =3D <&icssg0_intc>; + interrupts =3D <7 7 7>; + interrupt-names =3D "iep_cap_cmp"; +}; + +&icssg0_iep1 { + interrupt-parent =3D <&icssg0_intc>; + interrupts =3D <56 8 8>; + interrupt-names =3D "iep_cap_cmp"; +}; --=20 2.45.2