From nobody Fri Oct 2 09:26:35 2026 Received: from fhigh-a7-smtp.messagingengine.com (fhigh-a7-smtp.messagingengine.com [103.168.172.158]) (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 1102936B934; Mon, 3 Aug 2026 09:52:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.158 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785750773; cv=none; b=tc7jD26z1lt1aA9hE/LtHjzdesij6Mbqe5kL+dtWs2VOmef52GFX9G/pzVzw7TNHkkEms8yj8zvvHQWKbB0YTAFHkUWtnJoCrAkqwTCh1DQ7PwbpfehAv8TJXER9lyb0FjVlJ3SxvEePvexFnP6zj3IKdP1/osivNnkIOdj7378= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785750773; c=relaxed/simple; bh=LVnvGiOieHd+XJvGm99GQcQVlMlewiOhTJ7dLKCtiY4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=F4+kLPUAvm5h2R2VtHwrI++pN9GdkRzU1K6rIcy/kAsvCcMzNKf1KuznGF7MLUsof1MT6u1Yy7x4rEfSOzJ9yEvd6BDTQ6OFUwFNUvdKyF9Q+yFutyLxPjyfqA7Oa9Euhfr3sVmC53diGeI0pXqMan8Me63Ok5xlMlTpy5buD1g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ragnatech.se; spf=pass smtp.mailfrom=ragnatech.se; dkim=pass (2048-bit key) header.d=ragnatech.se header.i=@ragnatech.se header.b=UU+Tx4wU; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=VBhPqKAz; arc=none smtp.client-ip=103.168.172.158 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ragnatech.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ragnatech.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ragnatech.se header.i=@ragnatech.se header.b="UU+Tx4wU"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="VBhPqKAz" Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 3C78414000EA; Mon, 3 Aug 2026 05:52:50 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Mon, 03 Aug 2026 05:52:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ragnatech.se; h= cc:cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1785750770; x=1785837170; bh=gPIfil4OJWXKE+cPhQ3VvjLvj1+8dgNtFN6E32wGS8g=; b= UU+Tx4wUuHmrkOf8RWifCWHRnrnnX9FIDf141yUpaXK8nI6Ut2Jglh6FTH2yBdLB IiRCBN61GFrfi8Qp7wq2kZJi7F/Mk5Blqt6WgTnFRb7uN2Ak1V8Q6YnNmjh72oZX sU/NZ4wM5S58n4VFRePGXHo9asBVU9VAzGqvc+38Ff3r/atIVogw14mthyDljHZH 8RQHzhFs5o4rVzsnCyYDZVo+YCU8JCJlrfnZkWNdNWsiyWBjq83O3KmBoGYkXE8s L0nIXcxeSYLbiNKSVIA5CJ6M5Qbl54ipBsTU0rmFY5MwsU4cH0S0UzLRLso1bYi/ Rn6YU+2sndGp4Sbpco9o4g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1785750770; x= 1785837170; bh=gPIfil4OJWXKE+cPhQ3VvjLvj1+8dgNtFN6E32wGS8g=; b=V BhPqKAzEym17aZdlPMPicWfo3q0oCAL+wA5ZEijZ9LKuEHedfBZ+NSpWQIuEC/zJ s4N8P9WL2Tf0hrZQWkimc9QB+YTJ21e/vkkNFO5ktwGiYrmLUtS8p4bGPXn1vrn2 7wfxWI5O+NZ5rg7twGte3XpoQ3BpLX/MoVLjX1fgpPAudOWT6jMv7ftgMlW4mI4u ZDDQ5dIE6WFrC3EkbHKkSyjk7AaZ6F5oLHbFS/i1cQwdA82YdvQZ8A+TibDRqnhG 5XypDXUl3tZON0Qfi0NZvm1qR3n+eH8ZqvJNGX7Bg0fIvjFg/VSGJgvF0sIs/o2/ YI0QFjlqBtDnmmVXptsnA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTEO1UYlvuVhLJUMtijhb1LwOPe3aQDHMkSckFeiZ5/ic7keZTFx1yDzntUd8bkWhw plWNcRxym0s67z+2aJsnzDzaR7UxjGQQYm9eWbUo60SucofwtozuwQZo/r5mvk0tjtbBZ5 OMCaFzg9ZmUCj33vNXmaRiSLTtXSAUXJPT02G6AVT7Jevw6r08/2rOnSuuPndlLT3oFtYq BzAl/v12hDCW+iBTWVfxis6qNqnPUFQny00XUIRsGemaZxVG4oIf31ZoC2T0bhdNFv98/L e+SepMPxqsO17PNH7c9LH9UD7Kj4uxBTiv20blv1EnMPs7Ci31g3hmeGcUrPUEgqVhQ7tW snVMjYgOmdFrcuh+1L9WmR+8j/9sXxCr99vgRwR58To1a0Jzvo3APcx9+6Wq0AwboAKlYk Ntgw0HRuBXgaRq6MB7b70Y5vW4RA96pAhy+1wgsshzAkS12q9knFhZFNLVw3f5RbMoTc3U n21z39RQRZ2Amy4XpQOIFkWn4Nbb2SPnKY3gJ3oUOYEoVZRWjS1x17SYXTVpuKEMO54eyw oBshsWvs36GT+enjHMsI4qqfGqVOeSWvLsh2QdraUBKHAv6Vbeu064m1tu5+BRnJ+ZP8zD r2kCOxwsIxlW5vyJXTRa6h2BwWBAecaSFPnuL1pqRtZHUQTFYDt+MWS4A9HA X-ME-Proxy: Feedback-ID: i80c9496c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 3 Aug 2026 05:52:49 -0400 (EDT) From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm , Richard Cochran , Andrew Lunn , "DavidS. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Vadim Fedorenko , linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: =?UTF-8?q?Niklas=20S=C3=B6derlund?= , Krzysztof Kozlowski Subject: [PATCH net-next v6 1/3] dt-bindings: ptp: renesas,rcar-gen4-gptp: Add R-Car Gen4 Date: Mon, 3 Aug 2026 11:52:30 +0200 Message-ID: <20260803095232.3527111-2-niklas.soderlund+renesas@ragnatech.se> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260803095232.3527111-1-niklas.soderlund+renesas@ragnatech.se> References: <20260803095232.3527111-1-niklas.soderlund+renesas@ragnatech.se> 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 Add bindings for the R-Car Gen4 gPTP timer. The timer enables accurate synchronization of the clock in the control system. The timer is system-wide and used by different Ethernet devices on each Gen4 platform. - On R-Car S4 it is shared between RSWITCH and RAVB. - On R-Car V4H it is shared between RTSN and RAVB. - On R-Car V4M it is only used by RAVB. Signed-off-by: Niklas S=C3=B6derlund Reviewed-by: Krzysztof Kozlowski --- * Changes since v1 - Drop 'binding for' for patch subject. - Drop comment for renesas,rcar-gen4-gptp compatible to match other Renesas bindings. - Drop unused label in example. - Rename node ptp in example. --- .../bindings/ptp/renesas,rcar-gen4-gptp.yaml | 64 +++++++++++++++++++ MAINTAINERS | 6 ++ 2 files changed, 70 insertions(+) create mode 100644 Documentation/devicetree/bindings/ptp/renesas,rcar-gen4= -gptp.yaml diff --git a/Documentation/devicetree/bindings/ptp/renesas,rcar-gen4-gptp.y= aml b/Documentation/devicetree/bindings/ptp/renesas,rcar-gen4-gptp.yaml new file mode 100644 index 000000000000..3edd64d40038 --- /dev/null +++ b/Documentation/devicetree/bindings/ptp/renesas,rcar-gen4-gptp.yaml @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +# Copyright (C) 2026 Renesas Electronics Corp. +# Copyright (C) 2026 Niklas S=C3=B6derlund +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/ptp/renesas,rcar-gen4-gptp.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas R-Car Gen4 gPTP timer + +maintainers: + - Niklas S=C3=B6derlund + +description: + The R-Car Gen4 gPTP timer enables accurate synchronization of the clock = in + the control system. The timer is system-wide and used by different Ether= net + devices on each Gen4 platform. + + - On R-Car S4 it is shared between RSWITCH and RAVB. + - On R-Car V4H it is shared between RTSN and RAVB. + - On R-Car V4M it is only used by RAVB. + +properties: + compatible: + items: + - enum: + - renesas,r8a779f0-gptp # S4-8 + - renesas,r8a779g0-gptp # V4H + - renesas,r8a779h0-gptp # V4M + - const: renesas,rcar-gen4-gptp + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + power-domains: + maxItems: 1 + + resets: + maxItems: 1 + +required: + - compatible + - reg + - clocks + - power-domains + - resets + +additionalProperties: false + +examples: + - | + #include + #include + + ptp@e6449000 { + compatible =3D "renesas,r8a779g0-gptp", "renesas,rcar-gen4-gpt= p"; + reg =3D <0xe6449000 0x500>; + clocks =3D <&cpg CPG_MOD 2723>; + power-domains =3D <&sysc R8A779G0_PD_ALWAYS_ON>; + resets =3D <&cpg 2723>; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 932ea1db048e..ba83c5792c8c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -22941,6 +22941,12 @@ S: Maintained F: Documentation/devicetree/bindings/mtd/renesas-nandc.yaml F: drivers/mtd/nand/raw/renesas-nand-controller.c =20 +RENESAS R-CAR GEN4 GPTP DRIVER +M: Niklas S=C3=B6derlund +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/ptp/renesas,rcar-gen4-gptp.yaml + RENESAS R-CAR GYROADC DRIVER M: Marek Vasut L: linux-iio@vger.kernel.org --=20 2.55.0 From nobody Fri Oct 2 09:26:35 2026 Received: from fout-a4-smtp.messagingengine.com (fout-a4-smtp.messagingengine.com [103.168.172.147]) (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 AD6B6372046; Mon, 3 Aug 2026 09:52:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.147 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785750775; cv=none; b=QjJNXDVpAKMs9fKg7vHNrzo+UEFR5sdeJfNJyNfa1QiSwGvnqt+jAVdnnM5ArMlHE0lh4jKRMP/zpuKbsdVM6/dbsQj9o181sLo2Lnj1oXU01U5PTHwfQRH4i2mXTa4fFK6G5fNZesFKor7W0Ib61UM0M/qUxLcthkUw5giStso= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785750775; c=relaxed/simple; bh=cSrYqjbfzb5Rd3cbGL+m0q3WkekwZBgDC0HrHX0YklY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MKFKQyyIqt5p9BpFiaYp74UNv4E8hy9i1b838Nc+p8eu1sX+7bQPopmoerH0r6Zz+8eDwlTa3ZOlZcT15rKpagQEPChaHuA7u00EjDhJkGFLdbCg9Wba/HazllC9M72sYfHQn2heenAr/B/N4SNNxWBJaQ5Q6OspJUCZPFA8DDA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ragnatech.se; spf=pass smtp.mailfrom=ragnatech.se; dkim=pass (2048-bit key) header.d=ragnatech.se header.i=@ragnatech.se header.b=izRu5izQ; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=mRAOynRC; arc=none smtp.client-ip=103.168.172.147 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ragnatech.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ragnatech.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ragnatech.se header.i=@ragnatech.se header.b="izRu5izQ"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="mRAOynRC" Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.phl.internal (Postfix) with ESMTP id C9037EC00CA; Mon, 3 Aug 2026 05:52:52 -0400 (EDT) Received: from phl-frontend-03 ([10.202.2.162]) by phl-compute-03.internal (MEProxy); Mon, 03 Aug 2026 05:52:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ragnatech.se; h= cc:cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1785750772; x=1785837172; bh=Y9NMGgUEgcADFnguDLhrcTld3f/bP67UQewOn3U0EEE=; b= izRu5izQUAfL/yj2IaXlnKVPoz5P35d3yZ/vYVcueChzyMFqnSsnavYxhu3/LLMc JbXwQZWD+4cm2q9nN5CfsGlZtFG88sXJ01fSROFLxgQ469Kyw55heg21e4KsEwWk aegcObiZiRSDnosC7r+tz2QHQ1F0FlX1OFFciAFlsHr6HfwnLDsEC7bVKk9JuOik mUg/npVPczOXY2AClYxQOml9l9ZHmd/LnnpTjFNHUJr6YXAyaLIIBhmK+HInHkhv 4d0nEya1LRwZx2X8Fwpo1p5ZIDEzm3YGDPXN6o+uQRJFEeAebp6M5vPCxTfxh6e0 7QdB7wbLiYeYU8Ru6UQF+Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1785750772; x= 1785837172; bh=Y9NMGgUEgcADFnguDLhrcTld3f/bP67UQewOn3U0EEE=; b=m RAOynRCxcsIOW1vZowOU/TjsSyS+aUoHyBSqZK2RTpJR1ApoMvjT3x++O2ciFyNS h0nJzB+pOxJYj7dp4PG3VECFtwjns+eiwtapgIdf2ZD5NFeez6Xnp4ZGQb7fxA6n op4m5b9Imp8jMElv9vqdCYTfqbuU0YEZGX9We3eGveg4OtSa4iAA7ww5duG1r7+g 5gWs6WwPsNRfWKQKnJYZ4Iitt+8royi8Elhq5ZHMpzb6se+P46f/HGR71fmix7bc z5Lf51xK6I7e86p67TPZvZl4xMfdLbh6hGJGgHWEmMHtStW5NNvyjifq5OapyeN7 QwwOa5r5O3BWRIuhZYiKA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGaw2MGFH1ODEzDSV7dl184Z6QAfIVegXYtNYr963CDtgLgyB05+35lhv3YdYSKYU IHw2UQe3VxMvsWZvaKOEjyWLCQEKT8NsqdDh08tQAfOQIrPWaaXT0CeDd0nKMVKOT80FSu UPEqkMCAE9s/QSnFvu3ZS/JeI4QEATCw5nwIjvx4oJziPmZi6BW4D4q3UQXzTmH6yBBQOQ h8IEpQnejeV+GpT/NAIkU4l8mISC0TdnLSXqUuStwq50Rzt+8wApMGWppeADSPXgRSsFmk ImrK9LEsyNDTOb+19GQcAO6irFncRSPaGoUA1OBm4lZ8j8ftwj0T5xnvZsscO3AKOKMijR U17P8odQv07qke2fQ6oYBwou7cQCDWHIXS/Wv6TUdGvBLyKaqfen8yEIXN+tiNKQED1zFV YGMXnF2PnAGUYjiA4sLFveoLbQD5QicdJCIClC3Pqmw4rBWgxg8hZKNFxuLRTwTGZSkuUC gp1YX43xdCfGz/xMUi026BMhJIaYpSJKplqL7SvqRoTb1n+G9BY8OB5JX+el/1jkpHXwGj 6/pBpTB90K23XNs+wiWB6WhiXI6ZI05TJywxglqr4r9TVR7UKOUEufo+lMcYQlbZT/aLCn 2zOsosGQBCIDusbyLiBYSfAS9a7R04wI24SLAOJUDfkssnd+9/JwO4M35IfQ X-ME-Proxy: Feedback-ID: i80c9496c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 3 Aug 2026 05:52:52 -0400 (EDT) From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm , Richard Cochran , Andrew Lunn , "DavidS. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Vadim Fedorenko , linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Subject: [PATCH net-next v6 2/3] ptp: Add driver for R-Car Gen4 Date: Mon, 3 Aug 2026 11:52:31 +0200 Message-ID: <20260803095232.3527111-3-niklas.soderlund+renesas@ragnatech.se> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260803095232.3527111-1-niklas.soderlund+renesas@ragnatech.se> References: <20260803095232.3527111-1-niklas.soderlund+renesas@ragnatech.se> 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 Add driver for the gPTP timer found on R-Car Gen4 devices. The timer is system-wide and shared by different Ethernet devices on each Gen4 platform. The operation of the timer is however not completely in depended of the systems Ethernet devices. - On R-Car S4 is gated by the RSWITCH Ethernet module clock. - On R-Car V4H is gated by the RTSN Ethernet module clock. - On R-Car V4M is gated by its own module clock, the system have neither RTSN or RSWITCH device. But the module clock is the same as RTSN on V4H and the documentation referees to it as tsn (EtherTSN). The gPTP device do have its own register space on all three platforms. But on S4 and V4H it will share its clock and reset property with RSWITCH or RTSN, respectively. Signed-off-by: Niklas S=C3=B6derlund Reviewed-by: Vadim Fedorenko --- * Changes since v5 - Use pm_runtime_resume_and_get() instead of pm_runtime_get_sync(). * Changes since v4 - Drop mod_devicetable.h include. - Remove clap of register value as .max_adj prevents any overflow. * Changes since v3 - Clamp increment calculated to register limitations. - Check return value of clk_get_rate(). - Disable PM if ptp_clock_register() fails. --- MAINTAINERS | 1 + drivers/ptp/Kconfig | 12 ++ drivers/ptp/Makefile | 1 + drivers/ptp/ptp_rcar_gen4.c | 225 ++++++++++++++++++++++++++++++++++++ 4 files changed, 239 insertions(+) create mode 100644 drivers/ptp/ptp_rcar_gen4.c diff --git a/MAINTAINERS b/MAINTAINERS index ba83c5792c8c..7b95b4ca41c2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -22946,6 +22946,7 @@ M: Niklas S=C3=B6derlund L: linux-renesas-soc@vger.kernel.org S: Supported F: Documentation/devicetree/bindings/ptp/renesas,rcar-gen4-gptp.yaml +F: drivers/ptp/ptp_rcar_gen4.c =20 RENESAS R-CAR GYROADC DRIVER M: Marek Vasut diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig index b93640ca08b7..3593fd9da92a 100644 --- a/drivers/ptp/Kconfig +++ b/drivers/ptp/Kconfig @@ -263,4 +263,16 @@ config PTP_NETC_V4_TIMER synchronization. It also supports periodic output signal (e.g. PPS) and external trigger timestamping. =20 +config PTP_RCAR_GEN4 + tristate "Renesas R-Car Gen4 PTP Driver" + depends on ARCH_RENESAS || COMPILE_TEST + depends on PTP_1588_CLOCK + help + This driver adds support for using the Renesas R-Car Gen4 gPTP timer + as a PTP clock, the clock can then be used by Gen4 Ethernet drivers + for PTP time synchronization. + + To compile this driver as a module, choose M here: the module + will be called ptp_rcar_gen4. + endmenu diff --git a/drivers/ptp/Makefile b/drivers/ptp/Makefile index bdc47e284f14..0464a586bed2 100644 --- a/drivers/ptp/Makefile +++ b/drivers/ptp/Makefile @@ -22,3 +22,4 @@ obj-$(CONFIG_PTP_1588_CLOCK_OCP) +=3D ptp_ocp.o obj-$(CONFIG_PTP_DFL_TOD) +=3D ptp_dfl_tod.o obj-$(CONFIG_PTP_S390) +=3D ptp_s390.o obj-$(CONFIG_PTP_NETC_V4_TIMER) +=3D ptp_netc.o +obj-$(CONFIG_PTP_RCAR_GEN4) +=3D ptp_rcar_gen4.o diff --git a/drivers/ptp/ptp_rcar_gen4.c b/drivers/ptp/ptp_rcar_gen4.c new file mode 100644 index 000000000000..e82b6c5abc30 --- /dev/null +++ b/drivers/ptp/ptp_rcar_gen4.c @@ -0,0 +1,225 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Renesas R-Car Gen4 gPTP device driver + * + * Copyright (C) 2026 Renesas Electronics Corporation + * Copyright (C) 2026 Niklas S=C3=B6derlund + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define PTPTMEC_REG 0x0010 +#define PTPTMDC_REG 0x0014 +#define PTPTIVC0_REG 0x0020 +#define PTPTOVC00_REG 0x0030 +#define PTPTOVC10_REG 0x0034 +#define PTPTOVC20_REG 0x0038 +#define PTPGPTPTM00_REG 0x0050 +#define PTPGPTPTM10_REG 0x0054 +#define PTPGPTPTM20_REG 0x0058 + +struct ptp_rcar_gen4_priv { + void __iomem *base; + struct clk *clk; + + struct ptp_clock *clock; + struct ptp_clock_info info; + + spinlock_t lock; /* Registers access. */ + s64 default_addend; +}; + +#define ptp_to_priv(ptp) container_of(ptp, struct ptp_rcar_gen4_priv, info) + +static int ptp_rcar_gen4_adjfine(struct ptp_clock_info *ptp, long scaled_p= pm) +{ + struct ptp_rcar_gen4_priv *priv =3D ptp_to_priv(ptp); + s64 addend =3D priv->default_addend; + bool neg_adj =3D scaled_ppm < 0; + unsigned long flags; + s64 diff; + + if (neg_adj) + scaled_ppm =3D -scaled_ppm; + diff =3D div_s64(addend * scaled_ppm_to_ppb(scaled_ppm), NSEC_PER_SEC); + addend =3D neg_adj ? addend - diff : addend + diff; + + spin_lock_irqsave(&priv->lock, flags); + iowrite32(addend, priv->base + PTPTIVC0_REG); + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +static void _ptp_rcar_gen4_gettime(struct ptp_clock_info *ptp, + struct timespec64 *ts) +{ + struct ptp_rcar_gen4_priv *priv =3D ptp_to_priv(ptp); + + lockdep_assert_held(&priv->lock); + + ts->tv_nsec =3D ioread32(priv->base + PTPGPTPTM00_REG); + ts->tv_sec =3D ioread32(priv->base + PTPGPTPTM10_REG) | + ((s64)ioread32(priv->base + PTPGPTPTM20_REG) << 32); +} + +static int ptp_rcar_gen4_gettime(struct ptp_clock_info *ptp, + struct timespec64 *ts) +{ + struct ptp_rcar_gen4_priv *priv =3D ptp_to_priv(ptp); + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + _ptp_rcar_gen4_gettime(ptp, ts); + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +static void _ptp_rcar_gen4_settime(struct ptp_clock_info *ptp, + const struct timespec64 *ts) +{ + struct ptp_rcar_gen4_priv *priv =3D ptp_to_priv(ptp); + + lockdep_assert_held(&priv->lock); + + iowrite32(1, priv->base + PTPTMDC_REG); + iowrite32(0, priv->base + PTPTOVC20_REG); + iowrite32(0, priv->base + PTPTOVC10_REG); + iowrite32(0, priv->base + PTPTOVC00_REG); + iowrite32(1, priv->base + PTPTMEC_REG); + iowrite32(ts->tv_sec >> 32, priv->base + PTPTOVC20_REG); + iowrite32(ts->tv_sec, priv->base + PTPTOVC10_REG); + iowrite32(ts->tv_nsec, priv->base + PTPTOVC00_REG); +} + +static int ptp_rcar_gen4_settime(struct ptp_clock_info *ptp, + const struct timespec64 *ts) +{ + struct ptp_rcar_gen4_priv *priv =3D ptp_to_priv(ptp); + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + _ptp_rcar_gen4_settime(ptp, ts); + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +static int ptp_rcar_gen4_adjtime(struct ptp_clock_info *ptp, s64 delta) +{ + struct ptp_rcar_gen4_priv *priv =3D ptp_to_priv(ptp); + struct timespec64 ts; + unsigned long flags; + s64 now; + + spin_lock_irqsave(&priv->lock, flags); + _ptp_rcar_gen4_gettime(ptp, &ts); + now =3D ktime_to_ns(timespec64_to_ktime(ts)); + ts =3D ns_to_timespec64(now + delta); + _ptp_rcar_gen4_settime(ptp, &ts); + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +static struct ptp_clock_info ptp_rcar_gen4_info =3D { + .owner =3D THIS_MODULE, + .name =3D "R-Car Gen4 gPTP", + .max_adj =3D 50000000, + .adjfine =3D ptp_rcar_gen4_adjfine, + .adjtime =3D ptp_rcar_gen4_adjtime, + .gettime64 =3D ptp_rcar_gen4_gettime, + .settime64 =3D ptp_rcar_gen4_settime, +}; + +static int ptp_rcar_gen4_probe(struct platform_device *pdev) +{ + struct ptp_rcar_gen4_priv *priv; + struct device *dev =3D &pdev->dev; + unsigned long rate; + + priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + platform_set_drvdata(pdev, priv); + + priv->base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(priv->base)) + return PTR_ERR(priv->base); + + priv->clk =3D devm_clk_get(dev, NULL); + if (IS_ERR(priv->clk)) + return PTR_ERR(priv->clk); + + rate =3D clk_get_rate(priv->clk); + if (!rate) + return -ENODEV; + + spin_lock_init(&priv->lock); + + priv->info =3D ptp_rcar_gen4_info; + + /* Default timer increment in ns. + * bit[31:27] - integer + * bit[26:0] - decimal + * increment[ns] =3D perid[ns] * 2^27 =3D> (1ns * 2^27) / rate[hz] + */ + + priv->default_addend =3D div_s64(1000000000LL << 27, rate); + + pm_runtime_enable(dev); + pm_runtime_resume_and_get(dev); + + iowrite32(priv->default_addend, priv->base + PTPTIVC0_REG); + iowrite32(1, priv->base + PTPTMEC_REG); + + priv->clock =3D ptp_clock_register(&priv->info, dev); + if (IS_ERR(priv->clock)) { + pm_runtime_put_sync(dev); + pm_runtime_disable(dev); + return PTR_ERR(priv->clock); + } + + return 0; +} + +static void ptp_rcar_gen4_remove(struct platform_device *pdev) +{ + struct ptp_rcar_gen4_priv *priv =3D platform_get_drvdata(pdev); + struct device *dev =3D &pdev->dev; + + ptp_clock_unregister(priv->clock); + + iowrite32(1, priv->base + PTPTMDC_REG); + + pm_runtime_put_sync(dev); + pm_runtime_disable(dev); +} + +static const struct of_device_id ptp_rcar_gen4_of_match[] =3D { + { .compatible =3D "renesas,rcar-gen4-gptp", }, + { /* Sentinel */ }, +}; +MODULE_DEVICE_TABLE(of, ptp_rcar_gen4_of_match); + +static struct platform_driver ptp_rcar_gen4_driver =3D { + .driver =3D { + .name =3D "ptp-rcar-gen4", + .of_match_table =3D ptp_rcar_gen4_of_match, + }, + .probe =3D ptp_rcar_gen4_probe, + .remove =3D ptp_rcar_gen4_remove, +}; +module_platform_driver(ptp_rcar_gen4_driver); + +MODULE_AUTHOR("Niklas S=C3=B6derlund"); +MODULE_DESCRIPTION("Renesas R-Car Gen4 gPTP driver"); +MODULE_LICENSE("GPL"); --=20 2.55.0 From nobody Fri Oct 2 09:26:35 2026 Received: from fout-a4-smtp.messagingengine.com (fout-a4-smtp.messagingengine.com [103.168.172.147]) (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 CADC1372B5E; Mon, 3 Aug 2026 09:52:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.147 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785750777; cv=none; b=hfYsHq0u6VZ1K9ogULBa5PpP7RrOaOYMu/wZzEhIwGsDZ5fhriOx+JRZXSwb6q6oLbm09+knABlTsFPZy8AmZU17TPxBHbe5EmoI2DB1BF0jSnLsMkydJhzc0y+VwYLnEmgbOLDJNYuHbO6Ez42m03Px/b2WK4OwPL3q2+/7o/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785750777; c=relaxed/simple; bh=PpoJ8mSDeO5J500ag0sun37EeE6AvIqeZEsWDfHGEXw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OxK0Yiu42EAdLzURC6yUl1Pw2OIpkmqbZdxGgYDe2y241kNTmRRlfZAU6C9XCHDC0lDmi/hxhajl4t4WQNVnIPWsucw8DtnlAT3W10arg/9WvbumHBZglngm0vF/H8RwBfdot6WW/YOGARGHgcCurRWfDJ8kzJnRJqL2pyzhIrg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ragnatech.se; spf=pass smtp.mailfrom=ragnatech.se; dkim=pass (2048-bit key) header.d=ragnatech.se header.i=@ragnatech.se header.b=Obns7FDw; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=TkKRScf4; arc=none smtp.client-ip=103.168.172.147 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ragnatech.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ragnatech.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ragnatech.se header.i=@ragnatech.se header.b="Obns7FDw"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="TkKRScf4" Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfout.phl.internal (Postfix) with ESMTP id ECBAFEC010E; Mon, 3 Aug 2026 05:52:54 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Mon, 03 Aug 2026 05:52:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ragnatech.se; h= cc:cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1785750774; x=1785837174; bh=sLmOrxWgSzKesbLl24YL8N9oK1UdIQD9gnT9tarZDw8=; b= Obns7FDwMh3/0IkS1sdALZiAVY6yIOgARv4ntkPVHWg/cl/Poiah6uvHVMnFIzD/ YRUIWlWKncd7R+Ey1xAsFQBNzMBl63+PzFcWhuM2SA66u+SnsBvUfGG9aXSHK3cx 3tr3nxcWM2rcCdE4UtZVFjD//nVC28kWsSxXQ4mh1Pd9jahWjo5ImoECKTC8Lv8i 4RR86uan4peBzwlc4Q3LQNI6LMcqgQD+B9SL+ojLfiKX1l/1+hWxCZMkFxss9HE4 LJYw9rCedtrfIVUzIqqZwvPSwt/WDaM++qAZVIeHvycW0y0i1d8RRyMQZjffwe8t 6qA3imeAGuyNT/jjghxP+w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1785750774; x= 1785837174; bh=sLmOrxWgSzKesbLl24YL8N9oK1UdIQD9gnT9tarZDw8=; b=T kKRScf4zHv4weOG59WM4syRTdzb4v+Lv/mxDMtVgmggwIhxkZ3xqKv+34gPiCkfy sV4/rvsEj74Rw6Ra9a2/7va3vc9yXKhfnSYoBul+v0Vz4EqYYmHPuz5/iuuLLzW9 Dcm9XZBxxWXkAHbb79gdM/vFeQFuWYe9qK3AnCwo0wIGzelMnx6GYWKLV8Cag2bZ oe6wxdNQmZi4jFNw+QC/oa4IIPUOLIh/om27bpywlBLBn8wPvcrtPcMCOhXnMdci Off7DBS4VXIeb0Bw7H060NZwTcIJGhQedgC/sI3kbULcLy3UrRoWrncWM0vQsJRp qK1d0vf8+YODc4JKJGw4Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTEMQcaLM4G7F8T469MzRDySTwXwtTZysuNZjG7d4SEShkbR55q6QEQYGLZAOfR0W3 qX+c43CkoJp43hQ6+MsVG2ar/Ag2yll4kAu+tgP92WQPNQ+ICX5OXWzmzry25XoTaeiSSi CRjCq71qJmyfPzHorRZG1zDyJX1MflxVa1L17BL0wT55CnSW9YxMJVsOR2/ZWIUl1F1IYB 8IMFcEhITOkAmbFKlMiGhr5SqBJjG4WwvcHbtmNVPr/LrVQLolB9g6Zjr6kj/s/NP+Hk9P niawvdbMWrOfV9MASYvkC7mreMxSiwzbYiAz99WaGHhhnNasGaXyhRz74r6qR2jaCKmlf1 XkaGQ19jXyCwOuEdQoFGoVM0FFrRwl6lbhITtRyqfdCuBiBwmQZGzSW3eu6t2eXqKoXeck QKB2jjmMR90gsZFejg7AItDdb5rfsYtgiz04mcLEWghxpKXVNOXxNl0YQOTcbO+U22BBUU Xu/TegfRUV15xJaFHQ4tHvLmNRmp2OBKlTr2qBlUyiBcENsG1ZpM5H+vxI65VwUafR2gUE TwpgkJoB3xDdIqdZEYN7XZbhJvHk6yYiaNQ12XDNwgZSiEmdYGB+I3Xe1sL8oqZ7WWQXYM fNBt3gsR3nzrDBPuF5WQ9XE9s1aLoI3vBt2xc7SyUS0k9Xuk1pcCEdshk2fQ X-ME-Proxy: Feedback-ID: i80c9496c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 3 Aug 2026 05:52:54 -0400 (EDT) From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm , Richard Cochran , Andrew Lunn , "DavidS. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Vadim Fedorenko , linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: =?UTF-8?q?Niklas=20S=C3=B6derlund?= Subject: [PATCH net-next v6 3/3] arm64: dts: renesas: r8a779g0: Add gPTP node Date: Mon, 3 Aug 2026 11:52:32 +0200 Message-ID: <20260803095232.3527111-4-niklas.soderlund+renesas@ragnatech.se> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260803095232.3527111-1-niklas.soderlund+renesas@ragnatech.se> References: <20260803095232.3527111-1-niklas.soderlund+renesas@ragnatech.se> 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 The gPTP module is shared between the RAVB and RTSN Ethernet devices on the SoC. Signed-off-by: Niklas S=C3=B6derlund --- * Changes since v2 - Preserve sort order by unit-address. * Changes since v1 - Rename node ptp. --- arch/arm64/boot/dts/renesas/r8a779g0.dtsi | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/arm64/boot/dts/renesas/r8a779g0.dtsi b/arch/arm64/boot/dt= s/renesas/r8a779g0.dtsi index 82a7278836e5..b9b860ef7035 100644 --- a/arch/arm64/boot/dts/renesas/r8a779g0.dtsi +++ b/arch/arm64/boot/dts/renesas/r8a779g0.dtsi @@ -589,6 +589,15 @@ tmu4: timer@ffc00000 { status =3D "disabled"; }; =20 + gptp: ptp@e6449000 { + compatible =3D "renesas,r8a779g0-gptp", "renesas,rcar-gen4-gptp"; + reg =3D <0 0xe6449000 0 0x500>; + clocks =3D <&cpg CPG_MOD 2723>; + power-domains =3D <&sysc R8A779G0_PD_ALWAYS_ON>; + resets =3D <&cpg 2723>; + status =3D "disabled"; + }; + tsn0: ethernet@e6460000 { compatible =3D "renesas,r8a779g0-ethertsn", "renesas,rcar-gen4-ethertsn= "; reg =3D <0 0xe6460000 0 0x7000>, --=20 2.55.0