From nobody Tue Oct 7 09:02:42 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010047.outbound.protection.outlook.com [52.101.84.47]) (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 23AD31E7C2E; Fri, 11 Jul 2025 07:17:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218245; cv=fail; b=C2Er5ZZIK3AnfHfVy4qMyZNeoewZlF3kt8xq9MyGCLW/TNyWRSLuAwzoZsLJgd72p0TxvFsZ0gGpQGU5JvoR+jBkoJfMoC1y/rMIQUM98rzlsxQSZz63OnxDHlaottMZApTT2mgzXKr4Cxl3YZH3kFZWT0PYB7m7n4ybCKl77rI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218245; c=relaxed/simple; bh=HU1mGodxS7FMZUyqEOmFsYCPWWaGVQUKWxArqq804To=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=MUUq0wxSOJGJ7c1+41avM6seE5G6PVrKF7dOFmUkTBxN+qmlfLY5bKrFG5UThoH1FDdaenEnHqqdiYOCUkc2kCUp0P3lEob/NMfLf6NeT8WO0xH9Fz+Pw9U7pKNiVrt0OAETQQBWFWUjn3PSYehev4N3D5aANmtR7+azU49vPVg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Nw/pj5ac; arc=fail smtp.client-ip=52.101.84.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Nw/pj5ac" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tzN0FOoEyN3YeHhz1ZTh4K918COZORdWYiteBH/ji/cCgJ0bVXPCDbAax25MmDK3/RsYcLRYxR3Dx3OPOy3k/CmDAJoQrZDHWMBVgQPX+GddNfGPAP+AA0rmWROKUJFTIubgx7BvVEogBw7IjrhoAztzIwykKhQHYd0HuHal6eJfxAWktTxVD6iGtPzaf59W9m1l/wYaHYFxxat6C8ZxUJ+nD30g3NLx6+vsbvHcR2iZzJ7Y/7cATkj33iJiX2scAxCZMRnj9HEbqwKdx/Sr5YdKH48TtOiwqAyv/tnOgOlkkNhlPnQpz1PGhLK+9ZQoJCh1YlRzzWQtH8VvuJ5DYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5eSYSszg2lub7okvNs19KKj3YM71Aq8R4q09GGOAzaM=; b=MnsxCP+EhByL0ahZr8Rcyb70kZB5uU70dt0CloGgLwCozFq4SsoypU6MqEGA9m5+TWZQUZlXE+22Q/eA0jE92y/uyZfKR6cKM6clJoPQjk6UYkbprGxA0dkohV4sQWmCI6042sLjCudMSsXekwZOKt/i4t6qXXxK9VEQ0Pt3xsg3OJx6AJQjeM9YTDFgamu++8y60x4f8TCVIpIy1vc2U1vL4H8/DoBmGp4cQNPjVMkFLFv2UfnQdCy7ewntzrWbR+ZZVeOb7S7IEVdXyRG3PPMPdTcd0YAv4OzlpbE+FEfql74S2aNw03+OR9PkHWEREkkRbnvPEPoGDgFrtwO+Kg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5eSYSszg2lub7okvNs19KKj3YM71Aq8R4q09GGOAzaM=; b=Nw/pj5acm/ZhlFlnL/drBHxKk2QSSepCtciRG6fwgxhavJuHJI9KcKtfVPXO1n76sCZjhG4N06kjQNVhXDxYn7hgHl2qkGEiJfqNAB3w6KxwUB4uGEWzs9PKXamMR4ufRCdEk6XdS7rpEOWEQ4mzLxpDJ339T6KJ0OP1igjNMFyUUv+WlwqPlJXAJYAnTbeqRBFrPV6+tdLV0sp/WAuW6nyGl2GdAMEkzf/fRCHbllgt+4lK2VHkofoC05oIiKU/KT4KSYYIa5coYD1nGKeNIkuOVfWeha3Z4429E2+RwDZwxR17C6jSJ/YJ6b8YteAYrotdEyt72u7RNgyGMdROdA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by AS8PR04MB8451.eurprd04.prod.outlook.com (2603:10a6:20b:347::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:17:19 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:19 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 01/12] dt-bindings: ptp: add bindings for NETC Timer Date: Fri, 11 Jul 2025 14:57:37 +0800 Message-Id: <20250711065748.250159-2-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|AS8PR04MB8451:EE_ X-MS-Office365-Filtering-Correlation-Id: 2bcb4763-a5ba-4e10-816a-08ddc04af8d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|52116014|376014|7416014|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ToQqmvXYGjP5M5ub4LZmF/GahoC4GUWK2FgVMUpFYty8CUu7xHjOMvalTcBE?= =?us-ascii?Q?OqEx+ym8lRO+9eMz5lO03xZ5BYpLBJcrUW8wK3AvG0DBCt2QILP+GXEqXquR?= =?us-ascii?Q?LqIAQobK39R99x2bCl/m3nFlndTFOTeyjBhq9G8j7LoAgutQDfHGQfCElZYk?= =?us-ascii?Q?w1jlmFbPhYrzSn8eb1V2neZ5TFQXrYQWEUJ0xHeR2W4yNxbN+vdyGVnfjy0o?= =?us-ascii?Q?oCOAdpSs8oU87Q5PqcOZ8fLsjl33nuomy+99KjxAV6OuvDMKW5aSlEd/GHLs?= =?us-ascii?Q?oun2XxPrb5wsqmMMjeNPxstauGx/5mDTYwhVj6/MGPtzXqVpaFDy4Cso4tKh?= =?us-ascii?Q?P4BgXkmwLLmC4yC9ox8aT7OwOi0mlWSMapLQYWp7rGqB/z6EZR+Jc8aZuwjl?= =?us-ascii?Q?9wc6T88aLUnhqq4C8NBZcufj+/bqqy8rcgLFT9OYzs0zv0T1sDqLIG6xits1?= =?us-ascii?Q?bgKuYFP3Dji+PfD3n+wfx8u2GNiKO+uBjgix5sC5f73ktKjWaBuVxMj5q+pZ?= =?us-ascii?Q?VzH5BuloYaPDvkano/QRiYpM2vAo988U1BT3wNX2utvAjduaboHYUhtcak/X?= =?us-ascii?Q?8VXT77LO1Fi0fVROABDfTr+4OQEmImYhbw4Ad4hBtgPDn1A4QOGXyBi4rVXL?= =?us-ascii?Q?LxKqlEAtQs0UXYyxgKdSBcdgzwDwAuPUbCjmpCuTcvIOPDQm3CT/hQKlTL1d?= =?us-ascii?Q?ZXrZef0mKV/iZP2+kchb8l6EikNLvVD5A9UOcAzWOi3BN/zRvg7yWOPmuJLj?= =?us-ascii?Q?RyKb0G4NcZOY3RRWoI/MRb5foVSGZBPStmsrOLtZUHofQbg8pjy+Ku6z5tMP?= =?us-ascii?Q?+4VoDfxZfLTYjvaXLc3+qLCvDxRjQvv8N7WJ7Nan3qciSLHJ7pW7BA14CZiP?= =?us-ascii?Q?Ne+Xkp8eZTt5/nHr/e9W95W5VYJ/SA55LX5sUJtt5Enm09RJRcmjVN9LMZjC?= =?us-ascii?Q?cr7rUyuuKXcjxuGZ1jbEjUcgendW2kOyiLdVwOcil891mF7lpLsSTuelLSfP?= =?us-ascii?Q?kf7/Krxr/JYEGlq7fKFqVayoYLo+K7rMouSjHPYheHfR4kb6bOObPnfFkvHW?= =?us-ascii?Q?xHMhQCmVjpme1QXXVDUZQ0QVxw5u5cl1wxMJrNj9cS/i45nQOGFU22XtJUER?= =?us-ascii?Q?F81nyNiI3sP2r+E0rdu66W+GkOoh+XoXV1/gz6xrZCLebrrbAhCIYdVGi5pk?= =?us-ascii?Q?dhUdLQLk/7c4ifpL3ja6/FTWSZe/dePOvF4QS85BYGpz8gDbA8a3E4gDE5At?= =?us-ascii?Q?Ou0i5Dw23qCFc+4StLA0ZwAQjYYUDmRsT1yuFEPLn3JsvLXPAVv/tg8aeYYV?= =?us-ascii?Q?n1KnxvH1r+5nt4PYvQiLiM2pcIVIpIVXCoz1bCAYJcdbUQAud1bc341pFigX?= =?us-ascii?Q?h1/ckhIYqmA9JzbS5WbKB4O2Vj+5eosHa7EUN6KH/70CqGGZkzdOcMu+g6C3?= =?us-ascii?Q?mfoGFXysyqpaRlKwaP8IjGq7xaqQDT0jbSFOgsnBCqATJsZL5xQziQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(52116014)(376014)(7416014)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?B0mihizoEkJDpcDi6t1MHzYmE4Gb+g71jlsw/b0SSNMWqjE+W1o/e8wVG2JI?= =?us-ascii?Q?+IbDCqm5L57EOlertoMXqtmLi9RmKK0SyvRUYPPhbQFNQuOI6AFs3PaOu+0I?= =?us-ascii?Q?/YAhAkyGimkcNJlW9tKA3yYpg8phtb5L14LuX2Wi7cjZDa7ouOAiYJDEE9B3?= =?us-ascii?Q?0SBJK6O2WRAGVpcnbzW8PI2BoI4tMPQYjBZt2/diWF0s5mV8KpILQbdhuZZ6?= =?us-ascii?Q?OYVmzxlNcN4HlYunwccrqAS70SJokHPBFUw18BKD6YkZmL+xIJBqJVdDU7K2?= =?us-ascii?Q?4hqRnw7e/ake0DixahODEWhMwVIcaN84lZPoPnQ4lZ0b53lLPyHTkpxsI849?= =?us-ascii?Q?DdfNo5Fz7m5YY74fU23t1ouCHdHVTGCqukF2512ZUpvwPe06kicJof63rkP/?= =?us-ascii?Q?2DCIOzPc67ehXhRnbvDHvLpi4n5JPv59MghyxlIpKWvu7V4rmkYAVDDy/Rc2?= =?us-ascii?Q?v6LAuXfaEukI42kxIyI74sn8JVjhuQZ66O0mmQGPZ9E1rxupSHSh0NGs9Wen?= =?us-ascii?Q?mjqvxBNKObr255bg57Njt2ECuKb7iITq4dg5bEALopAhwCZgtOCPc+CitTKX?= =?us-ascii?Q?1odJXEHGWrjdQaCaJszmZx+6kgRwyXcYNOW2YYzYmsHSyAFOTqcsXrQXDTdD?= =?us-ascii?Q?h8Q4WyKg0gbdOwoDwmNRa+nT1Z6wz3KiiZR1ZWpnlA+YcsDmw7iNRT9MLyDj?= =?us-ascii?Q?tAbiZlz+2qhfgR/p/g851h1EUgIxHogB/EsxXF6/9UoKI7dSCH9wlinG1zbU?= =?us-ascii?Q?GsU3EKOjnp9WwSNmzcsJ+V6YCEZnCHjOMVuucLdNCq30e1S1dWgUcXD3Mrzz?= =?us-ascii?Q?wWohMT47sCay0TrUNJNwRpJfUVpHL/QIf+GUtHYbKWOhWy0XCzNerD8d5HlY?= =?us-ascii?Q?6qvIMPAy4CN3IhweDuYWVrjyIpaIlb3kPMU1pJyRWCgdZowGy4IKYwcjEJqQ?= =?us-ascii?Q?GWqx619KHFsR1KLzU4iTT187qOorFFb4Qc/aI52yfpSmhHYpawOhYwl0ivao?= =?us-ascii?Q?lHTJ8hGPLy3T+aFxI/RbuVpV+nDfQar5UHrzanH1QiTpRuPNg1hNQ2OLRD2L?= =?us-ascii?Q?4FLtJImBBh/toKRYkC+TmPQMc1t0NmjNIY6gOBm9/QU3RrjlgNuwJ8lhojQP?= =?us-ascii?Q?2n5bwP8YNp79YdVn+BGAhxEm9wuOKwY8vh3EiyCToWNDgKC0D3YtQNRUghLV?= =?us-ascii?Q?4cfjHO90E+qzurs4Nb12DK7p1CXgZM3+ZXNP539n8jAnpuV/zL0q8f99pJva?= =?us-ascii?Q?+tYoECkzHpvkOxRvqDYdRR8+33sVyW44CaAgYe2w6NmSfKNJCgxiT2Kb7jXT?= =?us-ascii?Q?1bkHYmGTbBqmW6S6JePWoT15RRkZcYMT9Ld4oGCKsAQwwPEmPLiSTS3Nzd1i?= =?us-ascii?Q?kyr21pktvQTNdR0bMTlzf0XHHS1AjRgBIs1Gbc089U+xWyjEfEbO+cRnLqlY?= =?us-ascii?Q?PKBsPUlGLv19vL89niJwUnK1IOzaZRgwEjQcieR5fI5F/aL8kWRVqw13TI1b?= =?us-ascii?Q?G4mqgxn/cj3abAqzjSYA5O1izB+qbLk6zPs7vXVtqEfU9hS0fzZJJeQsMFNK?= =?us-ascii?Q?eLj4WzLEf2tNsf02MFb8ylzQTqdssbD5qkMrjjii?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2bcb4763-a5ba-4e10-816a-08ddc04af8d9 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:19.7440 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 85u9jWMkYT9V9D3CvLNLlHX+h8YuPNlqVsd7fhomm0Is91yI6WZH4AQJDKKptlGxxEoAQUmNeZei4ap6r+croQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8451 Content-Type: text/plain; charset="utf-8" Add device tree binding doc for the PTP clock based on NETC Timer. Signed-off-by: Wei Fang --- .../devicetree/bindings/ptp/nxp,ptp-netc.yaml | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Documentation/devicetree/bindings/ptp/nxp,ptp-netc.yaml diff --git a/Documentation/devicetree/bindings/ptp/nxp,ptp-netc.yaml b/Docu= mentation/devicetree/bindings/ptp/nxp,ptp-netc.yaml new file mode 100644 index 000000000000..b6b2e881a3c0 --- /dev/null +++ b/Documentation/devicetree/bindings/ptp/nxp,ptp-netc.yaml @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/ptp/nxp,ptp-netc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: NXP NETC Timer PTP clock + +description: + NETC Timer provides current time with nanosecond resolution, precise + periodic pulse, pulse on timeout (alarm), and time capture on external + pulse support. And it supports time synchronization as required for + IEEE 1588 and IEEE 802.1AS-2020. + +maintainers: + - Wei Fang + - Clark Wang + +properties: + compatible: + enum: + - pci1131,ee02 + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + clock-names: + oneOf: + - enum: + - system + - ccm_timer + - ext_1588 + + nxp,pps-channel: + $ref: /schemas/types.yaml#/definitions/uint8 + default: 0 + description: + Specifies to which fixed interval period pulse generator is + used to generate PPS signal. + enum: [0, 1, 2] + +required: + - compatible + - reg + +allOf: + - $ref: /schemas/pci/pci-device.yaml + +unevaluatedProperties: false + +examples: + - | + pcie { + #address-cells =3D <3>; + #size-cells =3D <2>; + + ethernet@18,0 { + compatible =3D "pci1131,ee02"; + reg =3D <0x00c000 0 0 0 0>; + clocks =3D <&scmi_clk 18>; + clock-names =3D "ccm_timer"; + nxp,pps-channel =3D /bits/ 8 <1>; + }; + }; --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012052.outbound.protection.outlook.com [52.101.66.52]) (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 C3F5C1EF09B; Fri, 11 Jul 2025 07:17:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218250; cv=fail; b=dNSg4XSORjd8mYJhhTBbQKEkRYo2NVf8u6LlpkZSJgVgCnsr3mxOSOI90AKThOmX+IvbN5HDzpHZDTFe05T6B+Lh6jE8sdXi63BTiteKgKwmdV85aU3z4kATJmfryNY4RmIpl87E8g9kSBVUh72Aba12DOfw7/AEDx6LUXq7DtI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218250; c=relaxed/simple; bh=RJkcQk/XSwAEILvmgMRLhGPFavPeFCD1P/IBnKpoyfs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=sEfXblZ9AgatZMYUvPQbAvTWLnpsrMVN5QhiAj8FTKLAXhTFkDabnZXbuV+xWYcd2k+ck7OP/q4FdQ7wrSj4M83U3erGDKnkyvM4IACskmc1AreZmPyV8jCxEMjkLcAMvLLbLyNhCZRBiUW7/oM5L2sU0OqeuFStzkhyH14Ww5A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=VAXxa9WF; arc=fail smtp.client-ip=52.101.66.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="VAXxa9WF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RFhhR8JRKJ95r5BAg2KdyNhlnyVT5RvM4dsF2vKeKb+Qg5Fv97gJCtRpZ3p5ymN7yvRCA8DIQPfbd3jPFKF2I5GD7rZYl9OUQKVl3KJfy7dzjiyON70MPo8ByZuHmiYmtTpOyJLR/wO/zaDZPsswXenX22u1oTHtoQgyRxjEZZCq3woc0KzhJQJ5vukn3G6oinYsgSlbd0cLwV/rkcvCHIhVb8Kj299rYUOpmKHSZVSK2jNvfRFtzlJYa297F87TTXezcSMXeWETKkT7LWzkE14QtEx3MRgU9ebacinSqAfET0hyJfIufRno0ykcJRe/ra0OlbNtlm79TU8Mc4cPZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NDGRbE4WvhLUPpNvrr7xHDCMskN6XnmUWFx/hQ+/ot0=; b=DJfElXs/UK5SwFEJZeftS56Tc3GDImbJHR4Bg5z81SVmw/42WkymkM+9YsbvI3Meph3II2o7w0ac6AU+jmb0oq8ZzP2gT/VcrKZMxKi3EiKoQ+TbybQxGb1lxh/EAEUZw2vdbEmDY6sM5hPuvhpCvWJcXCYuofl7Mwc54voNVfg0U8eNoLO9VHEedwfqcD/AvlHpSioebz7VygPUtapr6Tu47mJmlsyCTd5Ka3KgzYLnW5ojRUKrR8CoCUi5Jnlzd1715Og2cGM9hl/atQkU8zXSy/1R9BiHDS5aCWrCd9UW6/y9W53z6C7dbeQP9GCUGYYU/1oIPc6boSehwkG8fQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NDGRbE4WvhLUPpNvrr7xHDCMskN6XnmUWFx/hQ+/ot0=; b=VAXxa9WFhP4QL7g+K6tRQjvbPkFOspg/tZ/Fua3ARsulmfzwkxE4bX6dXXbV8Ap8sSEcLi3Cyu0P5K/rl2QgmECnUgSWA+vPZnOe9xJKUlXG/gpC4eonb8Q64gvpR6K7tHglw2ofaIDDxgO9VcOWQRnc7DgtIilJhaKvIPgR3gA9I9FEJxNhThmoG2aUsPs4X9zzNSorTX/FoNU0inCDOt0YF9cYKLnL9WcQ1jdR2pGwSgcr/b0sUIM7LUFdWlOGfhxT1mUp8c5q1+eVwJulJzTvnFXFSHTgUmpb7TZxdcTwQ8U7u6Moc4Oh5CiOCBlXb4jOkvC7flLrKrMHe54xVA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by AS8PR04MB8451.eurprd04.prod.outlook.com (2603:10a6:20b:347::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:17:25 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:25 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 02/12] ptp: netc: add NETC Timer PTP driver support Date: Fri, 11 Jul 2025 14:57:38 +0800 Message-Id: <20250711065748.250159-3-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|AS8PR04MB8451:EE_ X-MS-Office365-Filtering-Correlation-Id: 91a7d4cc-ef88-4e93-acde-08ddc04afc34 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|52116014|376014|7416014|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ML+c4wxg788LIZfZild/MP0yz4PYco0ZbVUvuFukhrR2ImZVZK1rktT5p8mK?= =?us-ascii?Q?hy4Tig7xnERmxdIJMmq+vVK2JNhp2zYDvR8dd0PHI4gouU4ETyq0xT0X9gxA?= =?us-ascii?Q?KNzt7ehIAurfXM1ltH5xMYGO2BdPPou7+pjR9jTi8ERgKfVAtFzyrCo82Owa?= =?us-ascii?Q?unw/Bk7w82rPkPYIvAqv1ULb5B3/GhIW/5O/bij9fLfSrezS/ScZzEWdE1Ic?= =?us-ascii?Q?u7X9hiHX5QTWzRCWTko1pbKjwQpi+N8m6wQji5cEWSymAR3gEs4mdSJ+JVzx?= =?us-ascii?Q?WEq9S8qjIHk180zBoiGzQzvUvBcfqH2S4brhZ4DLTvhbWQuxN9oPBJIFTYXU?= =?us-ascii?Q?ObUu3ek8tFwbhqmMAOSbd4wVxSjyjPJ3g8+mVUW2GnMpwqAZIHDlocuFcOdq?= =?us-ascii?Q?2WWFgpuTRMIBflPiwJaCzuzQHwEQijSrJaPr610wT5RsJW6KKjiXRl89qWY5?= =?us-ascii?Q?2dVKVBaReQ9thBCZCpccfa+ZSGkBj75fqGADb3JXsMY8IicBITj6ne2oc5nn?= =?us-ascii?Q?GFIorFdd4Wh+NlYfmSp0PDlRlqe8AlL0sPqUS4luqKARyTKzh4LH4YTyA8tG?= =?us-ascii?Q?o+uzZVdOHnAg+DaZOcWVfXUlHhUh3lXFGGnIz8BKDnFC0VrDZbd+0x1slaIO?= =?us-ascii?Q?AkF3Rt3eYc2PMAj9cN2BpjPI5I/zAoIuMn0pxi193/BV1Jqir8v3VOOVmM83?= =?us-ascii?Q?lQ4RXS+F2SRRxDz0iv/JdZ2Yz5b8lwXLHfqhgZxz/x5rej//sGTqQVYJ1unm?= =?us-ascii?Q?iIrEBlvl69LAhX54qtmV0kzxkuECRHPRLASYMWmkHT3D3g0JrUK7YFIKlAMT?= =?us-ascii?Q?20p1NWCgaMEhIIq/5bPll7urcpUykWyaweBQCBbpxLDPolWNLunEWlscaNii?= =?us-ascii?Q?VUGngPQ8w8+X3A2yQPUTXlhKBwVq+fb+mWD4vqTKBOtaLZsrJP/RdBA9Ac5t?= =?us-ascii?Q?yiaTig0eYHiRvrGvTyr3woMy1+fD0pt2HDSU+T2XGNxkNX3IK1Kl+FSY/om5?= =?us-ascii?Q?0QQ+WDBP+iLol96O80Y8M8kxoZCRJCM9Yo9SyzUvden49crV3pz5uZyLSOzF?= =?us-ascii?Q?51MzS29r4TcM0/fiO4kqcztVRFMfBYkNLoA33aY6v/7+9e3IkhRUfYRoGT90?= =?us-ascii?Q?FOl5LsBozkQ2d62E6ot1uWLj4W1M7JPBjFNukmKmPASZ5aaUwfpViRH4PWzJ?= =?us-ascii?Q?bPesQRJwk9F1xamuQPkH4OE+hS/9oiBLcBnpcxn40Bokpnc16WRy3HdKyfHr?= =?us-ascii?Q?zj7I9sZJ6Zr6I4SxofTpCvWoxn+PjSWcayx4LF2iJcBb+VDG0v6DwZmh2E6c?= =?us-ascii?Q?ciagSR2RGWIUcqcH+R6/pZqAY2Z4F+1DnZECRWeWLm/Q4AW0PiFLrEGEQHmP?= =?us-ascii?Q?8KDnQEvhNpIa+pgn0ahGBjCyKQmGK9cDfsQHjZhOxHM8w9WtMWVDoVW9K0ja?= =?us-ascii?Q?jLsHRKnoRr9KCUVZJ36xQ0JtnvqCFvotJTunBUUpXQc4NVZrq4cvrRAMiIh5?= =?us-ascii?Q?efceI5tOMwHYMiQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(52116014)(376014)(7416014)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hCZwuGaF0wbb9BDZDdbLwudgnKrBOv/4AyLI4zOwXCwYHHt5l0ivcH9KEB6E?= =?us-ascii?Q?c50kj0QhEJ8QJFM4fggh60Q1f4VLKAlvwGqv5kV8lNTqwifdhRjYiUFL1YTV?= =?us-ascii?Q?9eeeErqbAZ3CEVfX+g0ZwLVhwzbUajpiYtPP6b+Iu8OIM9ioQBfQwQGxgK1F?= =?us-ascii?Q?m4wjjlvm9230/u8rup64b1ufh7h2ikzDKipZBzVthssnP77X5nVG2GUT5GQJ?= =?us-ascii?Q?pbLn7dbb35rUjcfFkI7nXSicttgAcXzMkOz0sS+vDZCqM1AHJQGThFnHv33x?= =?us-ascii?Q?RllzHCzoV6aZAf2pZB7lqFGlfWn631Q21Lb635Aae8XBRLoy8VaYHX6vUa43?= =?us-ascii?Q?ZH4ir2Z7UsWMf3KwUP7RQHyVMIjvh3ZBuWxzig8QJdFvsIWCij+HfuMI+Vb6?= =?us-ascii?Q?D7Vf8+TcCj0Tot+5c4T7t5O02aJ8VrSb7BQdQW/6EN6tvRds4+4U6jyxjXRJ?= =?us-ascii?Q?UqQCOLRkWqf4ttcmF4eh0EYtG42ExTbBb4QwoQyzNaJofXBn9jzw5lOLXiYT?= =?us-ascii?Q?AeIz6yoxHAYM3wTxFEmdVL+m+VEs2jKbzfRbERFYlzFNb+12VdoQwE3Jnjfl?= =?us-ascii?Q?c9Oju1W43PEe6sbumByEUkeYzLA/TmU5zpVN9kr0NIJZfdVjAzQ/9ow255py?= =?us-ascii?Q?ou0NTTDMyGVCjmVyK0KP4LM7MFvOM3WVUqI8fUwSVtg/AQ5rIvO6AhXLJX7F?= =?us-ascii?Q?BLlj6r1VnbLapAN05tI1RSRdCLt+HdY1XlgLs3d6864VTOKLDsIIX3nudDdU?= =?us-ascii?Q?dz/68vEjDsn7RlAZVJRuhxedql/1sCWhlno/cJHJbVOVSraukEc2r9S1Q25n?= =?us-ascii?Q?vhgBPhbjWSdwA/tM8KH/UwmtWZoLO4Hl5b93O5FM6Zfqxdf3bNdD7soyyh8F?= =?us-ascii?Q?u+SLTyhLYPPFeX8A0KJanL3m13k6ZcBt98jDayByYWGQcqTKuBsuZ+as5jcr?= =?us-ascii?Q?wqDj6L5LGqs1lh4AD4zNHKmfvisB2BaLEkUEd24WYUsR1e8651HzEFPM5+2H?= =?us-ascii?Q?D67I7qbdS2XLIohpWg57ElG2EtxU+JTcxyhbP4h4lkbqA3kCWG048QaAVbRs?= =?us-ascii?Q?/ICs+Bf87oDTBbBAZC1WCzdZcGe2e+dgZr+8JBcdPHBx/ABz78auS2PUa93E?= =?us-ascii?Q?laJL/xNpGDa/GGJNPGa2Rd3IwsW2aLZzbDkhQyc1ozk+4mPM0oRjecJIvCZl?= =?us-ascii?Q?WY1pWDeanr6Pw5UAcSNWFTqTbvYpuAWzAALGQq+g+AiSHrl5WCffCUbfndut?= =?us-ascii?Q?5uw/4lNx6AUpA+FBUMZZBYWM6UdUYXdwc0TzLIQlmY6RJLKx1x6+P+e3EMDL?= =?us-ascii?Q?8+cMoDEwNr5tuoPwbcsbdupguxR6Akvifa5r4k738FmgSLi8XBLPzT93G5cn?= =?us-ascii?Q?Wl0+yCM2lg6JKkm6KkKdQnH0vpnwB2Aq79e2inF65v9pya11VVk0wXdnGc8R?= =?us-ascii?Q?WHfr42whCpftBuzHyVLTXoUv/4v4lHlq7gMzLeXP7zmwpI8wzabMLxR6+3uS?= =?us-ascii?Q?wQfVcUSxM+clD6CyA66STcgXFFlMFvBET6HkDtHvSDjBgrGGrIfRK6dUHJ7E?= =?us-ascii?Q?n/K+Ne1dvCBh/TULWrt/9uMbjbnXUNdL3gWnoQxX?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 91a7d4cc-ef88-4e93-acde-08ddc04afc34 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:25.3429 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xhSJ5FUxgmbIY0oW6+M/74vFTcm/Cpi2aATAxn+pKQZHBmLWY7vn7U1ltyDdwnDzipikTXFELQYBse7RwyFrCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8451 Content-Type: text/plain; charset="utf-8" NETC Timer provides current time with nanosecond resolution, precise periodic pulse, pulse on timeout (alarm), and time capture on external pulse support. And it supports time synchronization as required for IEEE 1588 and IEEE 802.1AS-2020. The enetc v4 driver can implement PTP synchronization through the relevant interfaces provided by the driver. Note that the current driver does not support PEROUT, PPS and EXTTS yet, and support will be added one by one in subsequent patches. Signed-off-by: Wei Fang --- drivers/ptp/Kconfig | 11 + drivers/ptp/Makefile | 1 + drivers/ptp/ptp_netc.c | 565 ++++++++++++++++++++++++++++++++ include/linux/fsl/netc_global.h | 12 +- 4 files changed, 588 insertions(+), 1 deletion(-) create mode 100644 drivers/ptp/ptp_netc.c diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig index 204278eb215e..92eb2ff41180 100644 --- a/drivers/ptp/Kconfig +++ b/drivers/ptp/Kconfig @@ -252,4 +252,15 @@ config PTP_S390 driver provides the raw clock value without the delta to userspace. That way userspace programs like chrony could steer the kernel clock. + +config PTP_1588_CLOCK_NETC + bool "NXP NETC Timer PTP Driver" + depends on PTP_1588_CLOCK + depends on PCI_MSI + help + This driver adds support for using the NXP NETC Timer as a PTP + clock. This clock is used by ENETC MAC or NETC Switch for PTP + synchronization. It also supports periodic output signal (e.g. + PPS) and external trigger timestamping. + endmenu diff --git a/drivers/ptp/Makefile b/drivers/ptp/Makefile index 25f846fe48c9..d48fe4009fa4 100644 --- a/drivers/ptp/Makefile +++ b/drivers/ptp/Makefile @@ -23,3 +23,4 @@ obj-$(CONFIG_PTP_1588_CLOCK_VMW) +=3D ptp_vmw.o 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_1588_CLOCK_NETC) +=3D ptp_netc.o diff --git a/drivers/ptp/ptp_netc.c b/drivers/ptp/ptp_netc.c new file mode 100644 index 000000000000..87d456fcadfd --- /dev/null +++ b/drivers/ptp/ptp_netc.c @@ -0,0 +1,565 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) +/* + * NXP NETC Timer driver + * Copyright 2025 NXP + */ + +#include +#include +#include +#include +#include +#include + +#define NETC_TMR_PCI_VENDOR 0x1131 +#define NETC_TMR_PCI_DEVID 0xee02 + +#define NETC_TMR_CTRL 0x0080 +#define TMR_CTRL_CK_SEL GENMASK(1, 0) +#define TMR_CTRL_TE BIT(2) +#define TMR_COMP_MODE BIT(15) +#define TMR_CTRL_TCLK_PERIOD GENMASK(25, 16) +#define TMR_CTRL_FS BIT(28) +#define TMR_ALARM1P BIT(31) + +#define NETC_TMR_TEVENT 0x0084 +#define TMR_TEVENT_ALM1EN BIT(16) +#define TMR_TEVENT_ALM2EN BIT(17) + +#define NETC_TMR_TEMASK 0x0088 +#define NETC_TMR_CNT_L 0x0098 +#define NETC_TMR_CNT_H 0x009c +#define NETC_TMR_ADD 0x00a0 +#define NETC_TMR_PRSC 0x00a8 +#define NETC_TMR_OFF_L 0x00b0 +#define NETC_TMR_OFF_H 0x00b4 + +/* i =3D 0, 1, i indicates the index of TMR_ALARM */ +#define NETC_TMR_ALARM_L(i) (0x00b8 + (i) * 8) +#define NETC_TMR_ALARM_H(i) (0x00bc + (i) * 8) + +#define NETC_TMR_FIPER_CTRL 0x00dc +#define FIPER_CTRL_DIS(i) (BIT(7) << (i) * 8) +#define FIPER_CTRL_PG(i) (BIT(6) << (i) * 8) + +#define NETC_TMR_CUR_TIME_L 0x00f0 +#define NETC_TMR_CUR_TIME_H 0x00f4 + +#define NETC_TMR_REGS_BAR 0 + +#define NETC_TMR_FIPER_NUM 3 +#define NETC_TMR_DEFAULT_PRSC 2 +#define NETC_TMR_DEFAULT_ALARM GENMASK_ULL(63, 0) + +/* 1588 timer reference clock source select */ +#define NETC_TMR_CCM_TIMER1 0 /* enet_timer1_clk_root, from CCM */ +#define NETC_TMR_SYSTEM_CLK 1 /* enet_clk_root/2, from CCM */ +#define NETC_TMR_EXT_OSC 2 /* tmr_1588_clk, from IO pins */ + +#define NETC_TMR_SYSCLK_333M 333333333U + +struct netc_timer { + void __iomem *base; + struct pci_dev *pdev; + spinlock_t lock; /* Prevent concurrent access to registers */ + + struct clk *src_clk; + struct ptp_clock *clock; + struct ptp_clock_info caps; + int phc_index; + u32 clk_select; + u32 clk_freq; + u32 oclk_prsc; + /* High 32-bit is integer part, low 32-bit is fractional part */ + u64 period; + + int irq; +}; + +#define netc_timer_rd(p, o) netc_read((p)->base + (o)) +#define netc_timer_wr(p, o, v) netc_write((p)->base + (o), v) +#define ptp_to_netc_timer(ptp) container_of((ptp), struct netc_timer, cap= s) + +static u64 netc_timer_cnt_read(struct netc_timer *priv) +{ + u32 tmr_cnt_l, tmr_cnt_h; + u64 ns; + + /* The user must read the TMR_CNC_L register first to get + * correct 64-bit TMR_CNT_H/L counter values. + */ + tmr_cnt_l =3D netc_timer_rd(priv, NETC_TMR_CNT_L); + tmr_cnt_h =3D netc_timer_rd(priv, NETC_TMR_CNT_H); + ns =3D (((u64)tmr_cnt_h) << 32) | tmr_cnt_l; + + return ns; +} + +static void netc_timer_cnt_write(struct netc_timer *priv, u64 ns) +{ + u32 tmr_cnt_h =3D upper_32_bits(ns); + u32 tmr_cnt_l =3D lower_32_bits(ns); + + /* The user must write to TMR_CNT_L register first. */ + netc_timer_wr(priv, NETC_TMR_CNT_L, tmr_cnt_l); + netc_timer_wr(priv, NETC_TMR_CNT_H, tmr_cnt_h); +} + +static u64 netc_timer_offset_read(struct netc_timer *priv) +{ + u32 tmr_off_l, tmr_off_h; + u64 offset; + + tmr_off_l =3D netc_timer_rd(priv, NETC_TMR_OFF_L); + tmr_off_h =3D netc_timer_rd(priv, NETC_TMR_OFF_H); + offset =3D (((u64)tmr_off_h) << 32) | tmr_off_l; + + return offset; +} + +static void netc_timer_offset_write(struct netc_timer *priv, u64 offset) +{ + u32 tmr_off_h =3D upper_32_bits(offset); + u32 tmr_off_l =3D lower_32_bits(offset); + + netc_timer_wr(priv, NETC_TMR_OFF_L, tmr_off_l); + netc_timer_wr(priv, NETC_TMR_OFF_H, tmr_off_h); +} + +static u64 netc_timer_cur_time_read(struct netc_timer *priv) +{ + u32 time_h, time_l; + u64 ns; + + time_l =3D netc_timer_rd(priv, NETC_TMR_CUR_TIME_L); + time_h =3D netc_timer_rd(priv, NETC_TMR_CUR_TIME_H); + ns =3D (u64)time_h << 32 | time_l; + + return ns; +} + +static void netc_timer_alarm_write(struct netc_timer *priv, + u64 alarm, int index) +{ + u32 alarm_h =3D upper_32_bits(alarm); + u32 alarm_l =3D lower_32_bits(alarm); + + netc_timer_wr(priv, NETC_TMR_ALARM_L(index), alarm_l); + netc_timer_wr(priv, NETC_TMR_ALARM_H(index), alarm_h); +} + +static void netc_timer_adjust_period(struct netc_timer *priv, u64 period) +{ + u32 fractional_period =3D lower_32_bits(period); + u32 integral_period =3D upper_32_bits(period); + u32 tmr_ctrl, old_tmr_ctrl; + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + + old_tmr_ctrl =3D netc_timer_rd(priv, NETC_TMR_CTRL); + tmr_ctrl =3D u32_replace_bits(old_tmr_ctrl, integral_period, + TMR_CTRL_TCLK_PERIOD); + if (tmr_ctrl !=3D old_tmr_ctrl) + netc_timer_wr(priv, NETC_TMR_CTRL, tmr_ctrl); + + netc_timer_wr(priv, NETC_TMR_ADD, fractional_period); + + spin_unlock_irqrestore(&priv->lock, flags); +} + +static int netc_timer_adjfine(struct ptp_clock_info *ptp, long scaled_ppm) +{ + struct netc_timer *priv =3D ptp_to_netc_timer(ptp); + u64 new_period; + + if (!scaled_ppm) + return 0; + + new_period =3D adjust_by_scaled_ppm(priv->period, scaled_ppm); + netc_timer_adjust_period(priv, new_period); + + return 0; +} + +static int netc_timer_adjtime(struct ptp_clock_info *ptp, s64 delta) +{ + struct netc_timer *priv =3D ptp_to_netc_timer(ptp); + u64 tmr_cnt, tmr_off; + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + + tmr_off =3D netc_timer_offset_read(priv); + if (delta < 0 && tmr_off < abs(delta)) { + delta +=3D tmr_off; + if (!tmr_off) + netc_timer_offset_write(priv, 0); + + tmr_cnt =3D netc_timer_cnt_read(priv); + tmr_cnt +=3D delta; + netc_timer_cnt_write(priv, tmr_cnt); + } else { + tmr_off +=3D delta; + netc_timer_offset_write(priv, tmr_off); + } + + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +static int netc_timer_gettimex64(struct ptp_clock_info *ptp, + struct timespec64 *ts, + struct ptp_system_timestamp *sts) +{ + struct netc_timer *priv =3D ptp_to_netc_timer(ptp); + unsigned long flags; + u64 ns; + + spin_lock_irqsave(&priv->lock, flags); + + ptp_read_system_prets(sts); + ns =3D netc_timer_cur_time_read(priv); + ptp_read_system_postts(sts); + + spin_unlock_irqrestore(&priv->lock, flags); + + *ts =3D ns_to_timespec64(ns); + + return 0; +} + +static int netc_timer_settime64(struct ptp_clock_info *ptp, + const struct timespec64 *ts) +{ + struct netc_timer *priv =3D ptp_to_netc_timer(ptp); + u64 ns =3D timespec64_to_ns(ts); + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + netc_timer_offset_write(priv, 0); + netc_timer_cnt_write(priv, ns); + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +int netc_timer_get_phc_index(struct pci_dev *timer_pdev) +{ + struct netc_timer *priv; + + if (!timer_pdev) + return -ENODEV; + + priv =3D pci_get_drvdata(timer_pdev); + if (!priv) + return -EINVAL; + + return priv->phc_index; +} +EXPORT_SYMBOL_GPL(netc_timer_get_phc_index); + +static const struct ptp_clock_info netc_timer_ptp_caps =3D { + .owner =3D THIS_MODULE, + .name =3D "NETC Timer PTP clock", + .max_adj =3D 500000000, + .n_alarm =3D 2, + .n_pins =3D 0, + .adjfine =3D netc_timer_adjfine, + .adjtime =3D netc_timer_adjtime, + .gettimex64 =3D netc_timer_gettimex64, + .settime64 =3D netc_timer_settime64, +}; + +static void netc_timer_init(struct netc_timer *priv) +{ + u32 tmr_emask =3D TMR_TEVENT_ALM1EN | TMR_TEVENT_ALM2EN; + u32 fractional_period =3D lower_32_bits(priv->period); + u32 integral_period =3D upper_32_bits(priv->period); + u32 tmr_ctrl, fiper_ctrl; + struct timespec64 now; + u64 ns; + int i; + + /* Software must enable timer first and the clock selected must be + * active, otherwise, the registers which are in the timer clock + * domain are not accessible. + */ + tmr_ctrl =3D (priv->clk_select & TMR_CTRL_CK_SEL) | TMR_CTRL_TE; + netc_timer_wr(priv, NETC_TMR_CTRL, tmr_ctrl); + netc_timer_wr(priv, NETC_TMR_PRSC, priv->oclk_prsc); + + /* Disable FIPER by default */ + fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); + for (i =3D 0; i < NETC_TMR_FIPER_NUM; i++) { + fiper_ctrl |=3D FIPER_CTRL_DIS(i); + fiper_ctrl &=3D ~FIPER_CTRL_PG(i); + } + netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); + + ktime_get_real_ts64(&now); + ns =3D timespec64_to_ns(&now); + netc_timer_cnt_write(priv, ns); + + /* Allow atomic writes to TCLK_PERIOD and TMR_ADD, An update to + * TCLK_PERIOD does not take effect until TMR_ADD is written. + */ + tmr_ctrl |=3D ((integral_period << 16) & TMR_CTRL_TCLK_PERIOD) | + TMR_COMP_MODE | TMR_CTRL_FS; + netc_timer_wr(priv, NETC_TMR_CTRL, tmr_ctrl); + netc_timer_wr(priv, NETC_TMR_ADD, fractional_period); + netc_timer_wr(priv, NETC_TMR_TEMASK, tmr_emask); +} + +static int netc_timer_pci_probe(struct pci_dev *pdev) +{ + struct device *dev =3D &pdev->dev; + struct netc_timer *priv; + int err, len; + + pcie_flr(pdev); + err =3D pci_enable_device_mem(pdev); + if (err) + return dev_err_probe(dev, err, "Failed to enable device\n"); + + err =3D dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64)); + if (err) { + dev_err(dev, "dma_set_mask_and_coherent() failed, err:%pe\n", + ERR_PTR(err)); + goto disable_dev; + } + + err =3D pci_request_mem_regions(pdev, KBUILD_MODNAME); + if (err) { + dev_err(dev, "pci_request_regions() failed, err:%pe\n", + ERR_PTR(err)); + goto disable_dev; + } + + pci_set_master(pdev); + priv =3D kzalloc(sizeof(*priv), GFP_KERNEL); + if (!priv) { + err =3D -ENOMEM; + goto release_mem_regions; + } + + priv->pdev =3D pdev; + len =3D pci_resource_len(pdev, NETC_TMR_REGS_BAR); + priv->base =3D ioremap(pci_resource_start(pdev, NETC_TMR_REGS_BAR), len); + if (!priv->base) { + err =3D -ENXIO; + dev_err(dev, "ioremap() failed\n"); + goto free_priv; + } + + pci_set_drvdata(pdev, priv); + + return 0; + +free_priv: + kfree(priv); +release_mem_regions: + pci_release_mem_regions(pdev); +disable_dev: + pci_disable_device(pdev); + + return err; +} + +static void netc_timer_pci_remove(struct pci_dev *pdev) +{ + struct netc_timer *priv =3D pci_get_drvdata(pdev); + + iounmap(priv->base); + kfree(priv); + pci_release_mem_regions(pdev); + pci_disable_device(pdev); +} + +static void netc_timer_get_source_clk(struct netc_timer *priv) +{ + struct device *dev =3D &priv->pdev->dev; + struct device_node *np =3D dev->of_node; + const char *clk_name =3D NULL; + u64 ns =3D NSEC_PER_SEC; + + if (!np) + goto select_system_clk; + + of_property_read_string(np, "clock-names", &clk_name); + if (clk_name) { + priv->src_clk =3D devm_clk_get_optional(dev, clk_name); + if (IS_ERR_OR_NULL(priv->src_clk)) { + dev_warn(dev, "Failed to get source clock\n"); + priv->src_clk =3D NULL; + goto select_system_clk; + } + + priv->clk_freq =3D clk_get_rate(priv->src_clk); + if (!strcmp(clk_name, "system")) { + /* There is a 1/2 divider */ + priv->clk_freq /=3D 2; + priv->clk_select =3D NETC_TMR_SYSTEM_CLK; + } else if (!strcmp(clk_name, "ccm_timer")) { + priv->clk_select =3D NETC_TMR_CCM_TIMER1; + } else if (!strcmp(clk_name, "ext_1588")) { + priv->clk_select =3D NETC_TMR_EXT_OSC; + } else { + dev_warn(dev, "Unknown clock source\n"); + priv->src_clk =3D NULL; + goto select_system_clk; + } + + goto cal_clk_period; + } + +select_system_clk: + priv->clk_select =3D NETC_TMR_SYSTEM_CLK; + priv->clk_freq =3D NETC_TMR_SYSCLK_333M; + +cal_clk_period: + priv->period =3D div_u64(ns << 32, priv->clk_freq); +} + +static void netc_timer_parse_dt(struct netc_timer *priv) +{ + netc_timer_get_source_clk(priv); +} + +static irqreturn_t netc_timer_isr(int irq, void *data) +{ + struct netc_timer *priv =3D data; + u32 tmr_event, tmr_emask; + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + + tmr_event =3D netc_timer_rd(priv, NETC_TMR_TEVENT); + tmr_emask =3D netc_timer_rd(priv, NETC_TMR_TEMASK); + + tmr_event &=3D tmr_emask; + if (tmr_event & TMR_TEVENT_ALM1EN) + netc_timer_alarm_write(priv, NETC_TMR_DEFAULT_ALARM, 0); + + if (tmr_event & TMR_TEVENT_ALM2EN) + netc_timer_alarm_write(priv, NETC_TMR_DEFAULT_ALARM, 1); + + /* Clear interrupts status */ + netc_timer_wr(priv, NETC_TMR_TEVENT, tmr_event); + + spin_unlock_irqrestore(&priv->lock, flags); + + return IRQ_HANDLED; +} + +static int netc_timer_init_msix_irq(struct netc_timer *priv) +{ + struct pci_dev *pdev =3D priv->pdev; + char irq_name[64]; + int err, n; + + n =3D pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX); + if (n !=3D 1) { + err =3D (n < 0) ? n : -EPERM; + dev_err(&pdev->dev, "pci_alloc_irq_vectors() failed\n"); + return err; + } + + priv->irq =3D pci_irq_vector(pdev, 0); + snprintf(irq_name, sizeof(irq_name), "ptp-netc %s", pci_name(pdev)); + err =3D request_irq(priv->irq, netc_timer_isr, 0, irq_name, priv); + if (err) { + dev_err(&pdev->dev, "request_irq() failed\n"); + pci_free_irq_vectors(pdev); + return err; + } + + return 0; +} + +static void netc_timer_free_msix_irq(struct netc_timer *priv) +{ + struct pci_dev *pdev =3D priv->pdev; + + disable_irq(priv->irq); + free_irq(priv->irq, priv); + pci_free_irq_vectors(pdev); +} + +static int netc_timer_probe(struct pci_dev *pdev, + const struct pci_device_id *id) +{ + struct device *dev =3D &pdev->dev; + struct netc_timer *priv; + int err; + + err =3D netc_timer_pci_probe(pdev); + if (err) + return err; + + priv =3D pci_get_drvdata(pdev); + netc_timer_parse_dt(priv); + + priv->caps =3D netc_timer_ptp_caps; + priv->oclk_prsc =3D NETC_TMR_DEFAULT_PRSC; + priv->phc_index =3D -1; /* initialize it as an invalid index */ + spin_lock_init(&priv->lock); + + err =3D clk_prepare_enable(priv->src_clk); + if (err) { + dev_err(dev, "Failed to enable timer source clock\n"); + goto timer_pci_remove; + } + + err =3D netc_timer_init_msix_irq(priv); + if (err) + goto disable_clk; + + netc_timer_init(priv); + priv->clock =3D ptp_clock_register(&priv->caps, dev); + if (IS_ERR(priv->clock)) { + err =3D PTR_ERR(priv->clock); + goto free_msix_irq; + } + + priv->phc_index =3D ptp_clock_index(priv->clock); + + return 0; + +free_msix_irq: + netc_timer_free_msix_irq(priv); +disable_clk: + clk_disable_unprepare(priv->src_clk); +timer_pci_remove: + netc_timer_pci_remove(pdev); + + return err; +} + +static void netc_timer_remove(struct pci_dev *pdev) +{ + struct netc_timer *priv =3D pci_get_drvdata(pdev); + + ptp_clock_unregister(priv->clock); + netc_timer_free_msix_irq(priv); + clk_disable_unprepare(priv->src_clk); + netc_timer_pci_remove(pdev); +} + +static const struct pci_device_id netc_timer_id_table[] =3D { + { PCI_DEVICE(NETC_TMR_PCI_VENDOR, NETC_TMR_PCI_DEVID) }, + { 0, } /* End of table. */ +}; +MODULE_DEVICE_TABLE(pci, netc_timer_id_table); + +static struct pci_driver netc_timer_driver =3D { + .name =3D KBUILD_MODNAME, + .id_table =3D netc_timer_id_table, + .probe =3D netc_timer_probe, + .remove =3D netc_timer_remove, +}; +module_pci_driver(netc_timer_driver); + +MODULE_DESCRIPTION("NXP NETC Timer PTP Driver"); +MODULE_LICENSE("Dual BSD/GPL"); diff --git a/include/linux/fsl/netc_global.h b/include/linux/fsl/netc_globa= l.h index fdecca8c90f0..59c835e67ada 100644 --- a/include/linux/fsl/netc_global.h +++ b/include/linux/fsl/netc_global.h @@ -1,10 +1,11 @@ /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ -/* Copyright 2024 NXP +/* Copyright 2024-2025 NXP */ #ifndef __NETC_GLOBAL_H #define __NETC_GLOBAL_H =20 #include +#include =20 static inline u32 netc_read(void __iomem *reg) { @@ -16,4 +17,13 @@ static inline void netc_write(void __iomem *reg, u32 val) iowrite32(val, reg); } =20 +#if IS_ENABLED(CONFIG_PTP_1588_CLOCK_NETC) +int netc_timer_get_phc_index(struct pci_dev *timer_pdev); +#else +static inline int netc_timer_get_phc_index(struct pci_dev *timer_pdev) +{ + return -ENODEV; +} +#endif + #endif --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013039.outbound.protection.outlook.com [40.107.159.39]) (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 9A8F11F152D; Fri, 11 Jul 2025 07:17:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218257; cv=fail; b=tqONd3XX3ZjWnv2Nn0KZB7NyoSYuX3gil3x9HaW89B7i+F2T5fIilm1pR7V1RAUDET6Kdd+7XbRX+40xYVmxp0KxrBbfdzjsh9E3Dkmec2+HjEJsgsy87gokUxaXgaDPDNpgWaw4ek9O4hIvkI4VvuGbcizfeYRCTelwacIk+7E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218257; c=relaxed/simple; bh=WNUQvHavS+yMpElX9rlZubHXjvZyDjKwfd0mdBwVK9s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Nejv6jOdnG8V9mAnxFSPAxctqFpdjXz0R9uML2UEXdhkJQa97iX7i4Hbida4dfy15JQyZaIEb65LaEfYEx9EVuX3ONGO2S7r1wpaZTNr6rYGqzgXWxnsJx72ObTdzWnu/aLDOfu4gWBld23fRAL/xRoeml4MJorEE3iV6KP78m8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=ZIFqIkpv; arc=fail smtp.client-ip=40.107.159.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="ZIFqIkpv" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aFZLlQFYI9g23tgUh5ommdX6dgSLt0N9gP0tOIt/iNHdWUW2SBvWo6E6J795jvuqWdQs9J+o3e0gHwI1qIKO9RxnuH77CRABlxW2cnNwL7BMwTJOTrhrM9SXP1rGWIflmAuLRl93zHNPrXBlgSmpPY2gEzypJsjcq9cMnbASRYefbhTEuvvwYGKmGIy2qGKciIkSBbAcMB3Mo5YB/T99N9U0z6xNIpuNq2cZvXMt/TYiymqepCW610PG2+eEuRlCqQkyW4zSSa5/DCa99jY6VY0kGrew3MwHzI3YGZrcwut80OYpur1OPPnlVIwFd98iiEwoNesopmH3KD4Q9Jxb1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DDIz5tidgQ5DUPGD8fM9VOfzpYktiiduVCTs//iUrLE=; b=JICOG0A282PIfag4sCZl77d8sQsQrWeacr4qJ9PknR5deQf3Voj71DC39Yvchcn8YXTYGtj/9ftr6x0E3MSnK950qFGUWPhHhtNKtz9iAI3F02zcQUfsLcQpm+zLOcmSLsdGnuzyedn2dl6aWbqZB2Sbxm78qm+o2UKCDu3Hwg4kTuQ3xBiC0sXMAetQjdv8GKMMcJfBaNBIqZOnIwYDnCntwnLtkWlvg4svn4QuQEeqtrahsXmeSvlqsRCrrCF7Fe/0A6SiwdvNV5L9Io48hKyoAZCPgHZ270YW5/ldoEDroGBL88nX+3MVreO/g214geza9aDMfWQLHI6uxkIhiQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DDIz5tidgQ5DUPGD8fM9VOfzpYktiiduVCTs//iUrLE=; b=ZIFqIkpv8st2yG1/LZGdZUHm40f9jOB5APXSVAOjThVWAYREMeN9gZ7LYaUnyd7lkY0sjZN4J3vmLvvzOLjhwwhbdx1rBMKb0J3LDpn4J2HZQqrwZxwjuER2bdpH8B8sWiFLAUlE6FZ1lcvNWWpiZMBdy912gHt8V+2QIXchkdhGvXLoGX81A2CPH3lQRVwlEhL7Ab2aXFL28x/tkpTI2eUiXNJGIJWKP+x7WKGXkhJD6KXIccnrNEXkIqqKoTy1X6YkkMfyjFzZmqcByMoMPwA6IZCN25mQ//b4ZQoWT3BRMpORta1YxcflH5TRx1+/7h4I6cOK/1Rzr29fux7s/g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by PA4PR04MB7741.eurprd04.prod.outlook.com (2603:10a6:102:c6::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.28; Fri, 11 Jul 2025 07:17:30 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:30 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 03/12] ptp: netc: add PPS support Date: Fri, 11 Jul 2025 14:57:39 +0800 Message-Id: <20250711065748.250159-4-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|PA4PR04MB7741:EE_ X-MS-Office365-Filtering-Correlation-Id: 4fa51419-a367-43e1-bba1-08ddc04aff75 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|19092799006|7416014|52116014|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sVWyB1GWgcdYj3iUYwiu97t6WJC9QRHywkgt5AxrXM6MJ6kc4SMu4EfwzIsH?= =?us-ascii?Q?1Arfv38HUpPgliXCcr+oJklb0admTpd84+YAkLh/x6TZkY2+60hheIH+Fmt5?= =?us-ascii?Q?oEXcjFiJ6ssNg/qMdHJt1h0TmX3LYinnCfShMMWLIE0wDKRBVEPqK7mhpNQA?= =?us-ascii?Q?HGu0V1QqqBWsQuXeAuctHITAFWMfvLmO7cocRvAnjhDRpcObc5OUxksqHPKG?= =?us-ascii?Q?dDrommTCdGLALNN+dPIGXKOYT1XVZgrXal5GOf7VVoidgB1kQdhw5CC22Abm?= =?us-ascii?Q?sDVt02tfcMikcEwDXwgvt17QU/KcV14P80uCSrSE1tbb6FRn+2y0XbfsNqQF?= =?us-ascii?Q?F0j0sHtX8uV03by0kztWIPDi5D9LukeDCtmSVpXS6ar2LlBYm2wBOhzGEnfE?= =?us-ascii?Q?aV00Xnqov8QoBjhlkqT+6qRSbEKTw3TWp5eTuYYTcPycqYLed+6t3qbYCKyw?= =?us-ascii?Q?U0jqHgPNJ8hKakwapw+0OsF/XoUE/8aaL0+Aq92mnOxbehafF96CjoWGT9u4?= =?us-ascii?Q?5bngzj6/hQN7l1B1mAprw/qpt611xhcpVwTRT8w9gSt62fHJJ245++B5z9Ov?= =?us-ascii?Q?6FDHj36Z3dMpWIW1DckPciuRR3uQxYcLsLc9fyqGLPLf2i0yfT2KKEYcZDne?= =?us-ascii?Q?0L6j60zawnaSZXtevBaAjXQwEivf55dxW4Vt5vNKFffVTCfmwOgXDuBnZKRq?= =?us-ascii?Q?KCo2f7wlXzfWM6MS8YE0CZ+M+XXMMSwYQwKvn3bsPDzeuT793DnXsYHwbdKR?= =?us-ascii?Q?IRJvrjxeTddQyf+genF8BLSjXE80Mc/pJ6aSvco2hKzvjnhI1noB1w7cZH8I?= =?us-ascii?Q?wJVRThInbpMSSzA4AMgjeP2xJrAdM0ls2SMu9nDMJr+SRkProcEVRl1cOYuv?= =?us-ascii?Q?Rs3mMZoP365OnsZSdrfwoYR98Uejx3xu+pn1ego2y/RUswHvbIeJOl4mIstL?= =?us-ascii?Q?TA/xdY4XDqa/cRxvzvwx8XcxCaOYnVWi4raBNgtGNp8Jjh73v+JIyUWYnrdE?= =?us-ascii?Q?AkK1SKDTkOjWEPWbZt9hdyYdfIyPip8jpsk3xMta2m5vFNf7fPvexOUVNa0N?= =?us-ascii?Q?bZj6Yxx95yjg4xDmLd2GCIulA3uH1NQh2bRJTUUu9DfW7sGMBXNw5T74c+BW?= =?us-ascii?Q?kX9rl1k2gnRXeVX5x/iJeTfxPQ1YLfUWk9UUs7arEnGSD1JDTyI+7S8r8gZO?= =?us-ascii?Q?bJbxYw8cfYx5XT9+fiFPyc3Y4iGCNozLZWSLYS4a0hPe50OgzcmCZHgPA49g?= =?us-ascii?Q?VvSjAI0e9b1vEWTDmDeKBJDxX+tkFthhW6AZDqdD6C44iyMOWrM+KnWBSN3I?= =?us-ascii?Q?Gvs0bK6S2nP7SV3ecpd+j1rubey1NLFlvWV/PHZ2QKTb3HqdrfftJEiQc9pr?= =?us-ascii?Q?YBMlTifiL+1cxgb/fHHJsIO/PD+4Tzt5zlgzwROHXC40casOzi168ioZ2CmX?= =?us-ascii?Q?83791P7JuD0i1vWc7Z4WuoatLmuS7TpmM47jx/x9T6CMxVY8LjQ4O0uvZVWN?= =?us-ascii?Q?irRdPhrBzXi59DI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(19092799006)(7416014)(52116014)(366016)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lUVypgcWM38pc6mIM4tiU/ew+27JffZhLhZXLGFWPhtlGsUh5Ka2VUB40ysa?= =?us-ascii?Q?+n+oANPWRggTzR2xmAcQyui/kDSrYcGye5P2Pk0D2aiLfwJIVBl3zwwtVoyu?= =?us-ascii?Q?aHZWK5/1VBdSFA6Ac0NNcxLit90FwUZAYHj9XKWWl4tDJPZcRkm/9hSpBLWn?= =?us-ascii?Q?wPYl+ZLK+7Fu1r4Icg07qkYLwEVaizPALISGlFst9ZD3mh4SpzKkAyr/56iT?= =?us-ascii?Q?GuJ+BNCdVmCceVvNeWx64wyrpDvMdDxn0kGYPqybB2l9z+fqwKp8sZAUF0/m?= =?us-ascii?Q?+PdfHOuMYgGDIvVVRSYC/3dOhOWh1yiGt/UNY+9qTl3r/n82TXP53xSSrpm2?= =?us-ascii?Q?/eEmOOegXUDiccGqa8XtteUY+gb4A+1BVvlJPaMFr0m0GBCUZOv9KXYMVcg3?= =?us-ascii?Q?evwN76vPhCfPxTD/c/C3g3ma2lkv2Iq8wRCfBei+EswwGET6fuanCT2R2b5s?= =?us-ascii?Q?/g0J+CwQ4K+BByhYkk6lf/E2o9C7tQ2EZAm2lQYHsjvX0jIhi3bQ7GAvY+xn?= =?us-ascii?Q?2+3jc3odpcn9tV+UhjorHFsSrCR0Xjf9m+dMrgnb1tywyT37TltPQG/On+wY?= =?us-ascii?Q?NIRyEgDkBAGLo9WF4YY4uYd6bVneWHDJkvYeB/4NP9rlRwvqxhbPcrP7coki?= =?us-ascii?Q?NtpSaHH9Kh2ujRGVYUiUpkyxJAM4hihtB5/VBYwiKeO3O0HqA0L8YyhWrgtc?= =?us-ascii?Q?1SZOd8IeAXZorajMV2aY76G4cxeczCDrz61sYLZKgEbQi71tvts3sgPVGlB3?= =?us-ascii?Q?+v5O6Yt2lVrqr15i3SxOez7dmhVqtwEG3TLNqVh0IKUr8+xOOpWUrX7O3XFN?= =?us-ascii?Q?w1HC5WJ0tysmeQSkClKM0pbXYj/nS1x1n9vr2+z0K713vRZnuwrnPKJVTL+1?= =?us-ascii?Q?dO5D4ZPfZA87vP5aFSGX6omIoQl+qE3uB2OrsipU6uU0hKvQ/7FnU2jvnd09?= =?us-ascii?Q?HWe/2zLp4BGu4EIS1dXgjQ9HKcAt0GbWLcAtDRNbcVExqEmqxv7yUFFAfIMf?= =?us-ascii?Q?qbAVYLEP1syywrfHxljKRBJqGB0pXDJh5mc6IzagvXrzq72+mwl9Lf5v3gjR?= =?us-ascii?Q?sX3AR7Ve85hbTJoS/D12GkpkYYEpeGGiD86vVhjWs97VpLw4RgAOSlCMzqTS?= =?us-ascii?Q?yaVSSYqPGQyOQhIVq4PtkPYKIFB9x1jwT3byBBGgZCb8yXCxb02ce4wV/my3?= =?us-ascii?Q?HGyHhysvmJX2AyiS215h6mf3XedU7PwPXesL8AC4919xZus49m342bMd+nP4?= =?us-ascii?Q?wKidUfSwiDB/O8H6oSVcv058uE4XawNHMFo3vKqoTP3LVgA1PL9/Ynx9k6Uy?= =?us-ascii?Q?EZVcEsG4zJGMoKO0Pk6Ykow/N4JOiY2/Fml0wncmCCocX17oZMXvxPD8CnP5?= =?us-ascii?Q?bYfcBQWFyGTBHw0Zagh0vpWqQTtozgNOr0S88tWZJ0pLqdpoQRhny6fRvBpV?= =?us-ascii?Q?IQLO2ebqRZAiPeBTMAjF5xDF+9ALEeZk5ZMBVDQg9ZjRW2r+J6LGqB7jHj7+?= =?us-ascii?Q?M6AyOQn+Qk8LcUSdLm9X4DwHAEIfKp8zicanwBJ4TFBQNajmfHm+DmvPhNR2?= =?us-ascii?Q?jaxUKCWVY7AVe/Cimv7yUXu32tATFmQw4h4Vl0GV?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4fa51419-a367-43e1-bba1-08ddc04aff75 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:30.4878 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4y7exu4aFydNEGjYY7/4CZ9jfUIeO4UPhHHXkemS9RCI54a9N0SLAeaCCM2Us2xPRglUBdRLqm1kdOMmruKF9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7741 Content-Type: text/plain; charset="utf-8" The NETC Timer has three channels, any one of which can generate the PPS signal, since the kernel does not provide a parameter for setting the PPS signal channel. And this is also related to the board design. Different boards may choose different channels to output PPS signals. Therefore, the "nxp,pps-channel" property is used to indicate which channel the current board uses to output the PPS signal. In addition, if there is a time drift when PPS is enabled, the PPS signal won't be generated at an integral second of PHC. Based on the suggestion from design team, it is better to disable FIPER before adjusting the hardware time and then rearm ALARM after the time adjustment to make the next PPS signal be generated at an integral second of PHC. Finally, re-enable FIPER. Signed-off-by: Wei Fang --- drivers/ptp/ptp_netc.c | 194 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 191 insertions(+), 3 deletions(-) diff --git a/drivers/ptp/ptp_netc.c b/drivers/ptp/ptp_netc.c index 87d456fcadfd..abd637dab83b 100644 --- a/drivers/ptp/ptp_netc.c +++ b/drivers/ptp/ptp_netc.c @@ -23,6 +23,8 @@ #define TMR_ALARM1P BIT(31) =20 #define NETC_TMR_TEVENT 0x0084 +#define TMR_TEVNET_PPEN(i) BIT(7 - (i)) +#define TMR_TEVENT_PPEN_ALL GENMASK(7, 5) #define TMR_TEVENT_ALM1EN BIT(16) #define TMR_TEVENT_ALM2EN BIT(17) =20 @@ -38,9 +40,15 @@ #define NETC_TMR_ALARM_L(i) (0x00b8 + (i) * 8) #define NETC_TMR_ALARM_H(i) (0x00bc + (i) * 8) =20 +/* i =3D 0, 1, 2. i indicates the index of TMR_FIPER. */ +#define NETC_TMR_FIPER(i) (0x00d0 + (i) * 4) + #define NETC_TMR_FIPER_CTRL 0x00dc #define FIPER_CTRL_DIS(i) (BIT(7) << (i) * 8) #define FIPER_CTRL_PG(i) (BIT(6) << (i) * 8) +#define FIPER_CTRL_FS_ALARM(i) (BIT(5) << (i) * 8) +#define FIPER_CTRL_PW(i) (GENMASK(4, 0) << (i) * 8) +#define FIPER_CTRL_SET_PW(i, v) (((v) & GENMASK(4, 0)) << 8 * (i)) =20 #define NETC_TMR_CUR_TIME_L 0x00f0 #define NETC_TMR_CUR_TIME_H 0x00f4 @@ -50,6 +58,9 @@ #define NETC_TMR_FIPER_NUM 3 #define NETC_TMR_DEFAULT_PRSC 2 #define NETC_TMR_DEFAULT_ALARM GENMASK_ULL(63, 0) +#define NETC_TMR_DEFAULT_PPS_CHANNEL 0 +#define NETC_TMR_DEFAULT_FIPER GENMASK(31, 0) +#define NETC_TMR_FIPER_MAX_PW GENMASK(4, 0) =20 /* 1588 timer reference clock source select */ #define NETC_TMR_CCM_TIMER1 0 /* enet_timer1_clk_root, from CCM */ @@ -74,6 +85,8 @@ struct netc_timer { u64 period; =20 int irq; + u8 pps_channel; + bool pps_enabled; }; =20 #define netc_timer_rd(p, o) netc_read((p)->base + (o)) @@ -148,6 +161,142 @@ static void netc_timer_alarm_write(struct netc_timer = *priv, netc_timer_wr(priv, NETC_TMR_ALARM_H(index), alarm_h); } =20 +static u32 netc_timer_get_integral_period(struct netc_timer *priv) +{ + u32 tmr_ctrl, integral_period; + + tmr_ctrl =3D netc_timer_rd(priv, NETC_TMR_CTRL); + integral_period =3D FIELD_GET(TMR_CTRL_TCLK_PERIOD, tmr_ctrl); + + return integral_period; +} + +static u32 netc_timer_calculate_fiper_pw(struct netc_timer *priv, + u32 fiper) +{ + u64 divisor, pulse_width; + + /* Set the FIPER pulse width to half FIPER interval by default. + * pulse_width =3D (fiper / 2) / TMR_GCLK_period, + * TMR_GCLK_period =3D NSEC_PER_SEC / TMR_GCLK_freq, + * TMR_GCLK_freq =3D (clk_freq / oclk_prsc) Hz, + * so pulse_width =3D fiper * clk_freq / (2 * NSEC_PER_SEC * oclk_prsc). + */ + divisor =3D mul_u32_u32(2000000000U, priv->oclk_prsc); + pulse_width =3D div64_u64(mul_u32_u32(fiper, priv->clk_freq), divisor); + + /* The FIPER_PW field only has 5 bits, need to update oclk_prsc */ + if (pulse_width > NETC_TMR_FIPER_MAX_PW) + pulse_width =3D NETC_TMR_FIPER_MAX_PW; + + return pulse_width; +} + +static void netc_timer_set_pps_alarm(struct netc_timer *priv, int channel, + u32 integral_period) +{ + u64 alarm; + + /* Get the alarm value */ + alarm =3D netc_timer_cur_time_read(priv) + NSEC_PER_MSEC; + alarm =3D roundup_u64(alarm, NSEC_PER_SEC); + alarm =3D roundup_u64(alarm, integral_period); + + netc_timer_alarm_write(priv, alarm, 0); +} + +static int netc_timer_enable_pps(struct netc_timer *priv, + struct ptp_clock_request *rq, int on) +{ + u32 tmr_emask, fiper, fiper_ctrl; + u8 channel =3D priv->pps_channel; + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + + tmr_emask =3D netc_timer_rd(priv, NETC_TMR_TEMASK); + fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); + + if (on) { + u32 integral_period, fiper_pw; + + if (priv->pps_enabled) + goto unlock_spinlock; + + integral_period =3D netc_timer_get_integral_period(priv); + fiper =3D NSEC_PER_SEC - integral_period; + fiper_pw =3D netc_timer_calculate_fiper_pw(priv, fiper); + fiper_ctrl &=3D ~(FIPER_CTRL_DIS(channel) | FIPER_CTRL_PW(channel) | + FIPER_CTRL_FS_ALARM(channel)); + fiper_ctrl |=3D FIPER_CTRL_SET_PW(channel, fiper_pw); + tmr_emask |=3D TMR_TEVNET_PPEN(channel); + priv->pps_enabled =3D true; + netc_timer_set_pps_alarm(priv, channel, integral_period); + } else { + if (!priv->pps_enabled) + goto unlock_spinlock; + + fiper =3D NETC_TMR_DEFAULT_FIPER; + tmr_emask &=3D ~TMR_TEVNET_PPEN(channel); + fiper_ctrl |=3D FIPER_CTRL_DIS(channel); + priv->pps_enabled =3D false; + } + + netc_timer_wr(priv, NETC_TMR_TEMASK, tmr_emask); + netc_timer_wr(priv, NETC_TMR_FIPER(channel), fiper); + netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); + +unlock_spinlock: + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + +static void netc_timer_disable_pps_fiper(struct netc_timer *priv) +{ + u32 fiper =3D NETC_TMR_DEFAULT_FIPER; + u8 channel =3D priv->pps_channel; + u32 fiper_ctrl; + + if (!priv->pps_enabled) + return; + + fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); + fiper_ctrl |=3D FIPER_CTRL_DIS(channel); + netc_timer_wr(priv, NETC_TMR_FIPER(channel), fiper); + netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); +} + +static void netc_timer_enable_pps_fiper(struct netc_timer *priv) +{ + u32 fiper_ctrl, integral_period, fiper; + u8 channel =3D priv->pps_channel; + + if (!priv->pps_enabled) + return; + + integral_period =3D netc_timer_get_integral_period(priv); + fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); + fiper_ctrl &=3D ~FIPER_CTRL_DIS(channel); + fiper =3D NSEC_PER_SEC - integral_period; + netc_timer_set_pps_alarm(priv, channel, integral_period); + netc_timer_wr(priv, NETC_TMR_FIPER(channel), fiper); + netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); +} + +static int netc_timer_enable(struct ptp_clock_info *ptp, + struct ptp_clock_request *rq, int on) +{ + struct netc_timer *priv =3D ptp_to_netc_timer(ptp); + + switch (rq->type) { + case PTP_CLK_REQ_PPS: + return netc_timer_enable_pps(priv, rq, on); + default: + return -EOPNOTSUPP; + } +} + static void netc_timer_adjust_period(struct netc_timer *priv, u64 period) { u32 fractional_period =3D lower_32_bits(period); @@ -160,8 +309,11 @@ static void netc_timer_adjust_period(struct netc_timer= *priv, u64 period) old_tmr_ctrl =3D netc_timer_rd(priv, NETC_TMR_CTRL); tmr_ctrl =3D u32_replace_bits(old_tmr_ctrl, integral_period, TMR_CTRL_TCLK_PERIOD); - if (tmr_ctrl !=3D old_tmr_ctrl) + if (tmr_ctrl !=3D old_tmr_ctrl) { + netc_timer_disable_pps_fiper(priv); netc_timer_wr(priv, NETC_TMR_CTRL, tmr_ctrl); + netc_timer_enable_pps_fiper(priv); + } =20 netc_timer_wr(priv, NETC_TMR_ADD, fractional_period); =20 @@ -190,6 +342,8 @@ static int netc_timer_adjtime(struct ptp_clock_info *pt= p, s64 delta) =20 spin_lock_irqsave(&priv->lock, flags); =20 + netc_timer_disable_pps_fiper(priv); + tmr_off =3D netc_timer_offset_read(priv); if (delta < 0 && tmr_off < abs(delta)) { delta +=3D tmr_off; @@ -204,6 +358,8 @@ static int netc_timer_adjtime(struct ptp_clock_info *pt= p, s64 delta) netc_timer_offset_write(priv, tmr_off); } =20 + netc_timer_enable_pps_fiper(priv); + spin_unlock_irqrestore(&priv->lock, flags); =20 return 0; @@ -238,8 +394,12 @@ static int netc_timer_settime64(struct ptp_clock_info = *ptp, unsigned long flags; =20 spin_lock_irqsave(&priv->lock, flags); + + netc_timer_disable_pps_fiper(priv); netc_timer_offset_write(priv, 0); netc_timer_cnt_write(priv, ns); + netc_timer_enable_pps_fiper(priv); + spin_unlock_irqrestore(&priv->lock, flags); =20 return 0; @@ -266,10 +426,12 @@ static const struct ptp_clock_info netc_timer_ptp_cap= s =3D { .max_adj =3D 500000000, .n_alarm =3D 2, .n_pins =3D 0, + .pps =3D 1, .adjfine =3D netc_timer_adjfine, .adjtime =3D netc_timer_adjtime, .gettimex64 =3D netc_timer_gettimex64, .settime64 =3D netc_timer_settime64, + .enable =3D netc_timer_enable, }; =20 static void netc_timer_init(struct netc_timer *priv) @@ -422,14 +584,31 @@ static void netc_timer_get_source_clk(struct netc_tim= er *priv) priv->period =3D div_u64(ns << 32, priv->clk_freq); } =20 -static void netc_timer_parse_dt(struct netc_timer *priv) +static int netc_timer_parse_dt(struct netc_timer *priv) { + struct device *dev =3D &priv->pdev->dev; + struct device_node *np =3D dev->of_node; + + if (!np || of_property_read_u8(np, "nxp,pps-channel", + &priv->pps_channel)) + priv->pps_channel =3D NETC_TMR_DEFAULT_PPS_CHANNEL; + + if (priv->pps_channel >=3D NETC_TMR_FIPER_NUM) { + dev_err(dev, "pps_channel is %u, greater than %d\n", + priv->pps_channel, NETC_TMR_FIPER_NUM); + + return -EINVAL; + } + netc_timer_get_source_clk(priv); + + return 0; } =20 static irqreturn_t netc_timer_isr(int irq, void *data) { struct netc_timer *priv =3D data; + struct ptp_clock_event event; u32 tmr_event, tmr_emask; unsigned long flags; =20 @@ -445,6 +624,11 @@ static irqreturn_t netc_timer_isr(int irq, void *data) if (tmr_event & TMR_TEVENT_ALM2EN) netc_timer_alarm_write(priv, NETC_TMR_DEFAULT_ALARM, 1); =20 + if (tmr_event & TMR_TEVENT_PPEN_ALL) { + event.type =3D PTP_CLOCK_PPS; + ptp_clock_event(priv->clock, &event); + } + /* Clear interrupts status */ netc_timer_wr(priv, NETC_TMR_TEVENT, tmr_event); =20 @@ -499,7 +683,11 @@ static int netc_timer_probe(struct pci_dev *pdev, return err; =20 priv =3D pci_get_drvdata(pdev); - netc_timer_parse_dt(priv); + err =3D netc_timer_parse_dt(priv); + if (err) { + dev_err(dev, "Failed to parse DT node\n"); + goto timer_pci_remove; + } =20 priv->caps =3D netc_timer_ptp_caps; priv->oclk_prsc =3D NETC_TMR_DEFAULT_PRSC; --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010010.outbound.protection.outlook.com [52.101.84.10]) (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 1E1721F4177; Fri, 11 Jul 2025 07:17:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.10 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218262; cv=fail; b=n9zJQRw/QyJe1o+PV28mkgia7nKuHHwE5r2ztPcrftEQICqHc8vnzQwMz/U8gQiQ1xHjMaOBOtodS8Wbn3MXieehGzk5qbLZjPyzYtdVth3OH0u0gV/VLf9AkjUXlAmRruIlZKvozUN3AxvtICPQ7ltLe1jTsYyUOWOQ2TtMIgw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218262; c=relaxed/simple; bh=+MszVhBph0akiEOThQGwwOG00p7YqLuiBdI31QVeUU0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dytVgOGDqchhdoJTY71XxeRvqTgdKk4b3TGV6ba4YIBovUAbK0BGAUFTvsSo/+Ht/aDzdz5j1n0XqEq0DoYJq8iCp+FeId4bt9tuqTO8UnrlZgfiAjneLMHwDVxgeszT1rUOT3IVI+PDdX1nL7da1+SMQ8JvoTN/KZWmRK9YTZQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=bjE6sL23; arc=fail smtp.client-ip=52.101.84.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="bjE6sL23" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YB8vE4IBXWp/w/9lkqW3vO61JURskHrvxf9UY1kklzOXpMyiUf5pHsr0jJ14GwHjjbJXkwphokqis1SyoGqKHVWCzod2bA2Rf7b0lOBiQEUt/HUhgnbaV1B/xENJkCLqPHuVoofYBh/9opiOQqCM3uDVA+V7tom6Ry8vekCd/8o00qHZBJvfQ5iwRHzfj+Qxx0eFwvNn2biPniMejxPVk0JC9HDdug8k4I54Rm2nGLuT1VYrsqkmrZ4YdOLoKPqd1tu3v+jwoJCITVLlEqjqE4Pw/57DfCIgyd/XQZfwLDFfgEpDsjaIyBZ0L5X2SJEHqRW+7iY8XHS7m+ILHN4FbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mcuroD5TqVQUd8Sg4dZxeXYcnxjWf4Zdeqdi48xGIDY=; b=M2hu+kMYB92lzj/kj7VYt0E0m4LwyGAwaSP1vqa7MRHZg9xXSFEDLSTCIDwr8fCi7GSJCOEzBgkKIIFfkYJFVlvXKo1LRvPrernZE3jPSrRuaey4xm6D5kblhrcbzQ4x/a3loDb8UUEkNlF/vwPljzc4HRjmC4orl6Npr+Q71OERJILDswsrGZJx5JWDATIZr700e0RKES0quqCHAgBvYLxFNJ3rReVgREfttNlb235Xf8doYHj6EXlCaXkagh5vcIX/9GPkrC3zkgEM916MrQVpMiwOfL3rF7fUQWMQp2yc76FGLPklxS96+MSoL6la5PD+9pdAtIsuSFT0300q5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mcuroD5TqVQUd8Sg4dZxeXYcnxjWf4Zdeqdi48xGIDY=; b=bjE6sL23c5JizXN5VtqirpCSqJk4zlkXeVKOwXXjYuQmNRJZFhsxY57siq1wpr1F8gJcFDQc1LTXwL+ZMebFTDUKgAq2m+QkYVb1eUlXvwvHeu3lDIH6HNLK0uL6fD7wVlo1WhRAsVbRmE5jspWzYWztwl2fE44CmPNTCKW45+nV9DGMWclr2Smgsqmlqx2EHWWN/gnIFgohgaaJIdKJyWavu9Yuents7/jIrzC0v714JBw878DaVNjUvwYy/GHmI4obWBTC9eZzY1bLJkPtoSHrst2z5BmzokDII6oXBuiwIZ7NrifHEr7QKhURu8QxEHosAFE63wPhoNj6RjV+RQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:17:36 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:36 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 04/12] ptp: netc: add periodic pulse output support Date: Fri, 11 Jul 2025 14:57:40 +0800 Message-Id: <20250711065748.250159-5-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: af40c618-bba6-498d-aa03-08ddc04b02d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?mRUXFtTZUqG8nA4TuCP9PIYD8WXHASedA9RbSx4fbUV70r68f/Bdb0uy6TC6?= =?us-ascii?Q?X1SAP5nTvUc2npL5yxFuRHC7sXHj/H+gdh+z1pnPA9VEiNoq1RfFhvkclhfe?= =?us-ascii?Q?yl9L/nFnogohLQSZ9yuoejlrWj2xqhdcTWStz43MHolB1KehKhGM3KHqYkZr?= =?us-ascii?Q?+PTgRUUTIkOwWpbEvy0/xTUgJQBhUVagNshJinkPFbdOQm4ieZr2qD75FFpE?= =?us-ascii?Q?L6zwrvHEn7/PvzTnTsOmuWGT7fuzdkos7fatjKNw7GWrFvbOmHldV9MSdE7R?= =?us-ascii?Q?DnUvVzhfRjVCG2mQvFAmAmhhFiMgCQStnZNw7yFoOy/nm4L88eDX1wso8ZrA?= =?us-ascii?Q?qg3iU7bN910eLYUMciwid1oPMaxnX7Wc9AELufz4CIYSHRoNSgGtLv3PRGn7?= =?us-ascii?Q?rK56sMhkAOgV/CcY/d1TIDCEZwiFR65RpEbXQl27PaMUlTVA1xTevjj6s/XP?= =?us-ascii?Q?hGM2uc1Ahdw1jfrpx9LrSfkSfEsnX4jm2vuAYa4Sq1/QrLHqHXTs2iGI1lWm?= =?us-ascii?Q?LOZPy59Wyt42C0445/rmTlaN+yBcpixg9Ticc0S7zJk3jR1bRNyVGYBYm6oY?= =?us-ascii?Q?dN/BbEa3M0TZnj2UdyJ47q8GCVM587/Ble1zFm6bJVs1lMx4AlAmhgpfEC0H?= =?us-ascii?Q?aFlocrFn69eac7wmEN6I5sxfEDSYrPDzFhSK4D9ibC8oox2+eoPkV7AS59s6?= =?us-ascii?Q?un3/IH/8LoaqXRVcgkvwfuY3Ew/numCzysPab0dXuTD/l9A09sONOsJ8pBGN?= =?us-ascii?Q?sKbq0hYhCz7ihv4xUpUnVaEJJL1L7c+adSQDWb2ZpZN3XcMm1DTYCXoOqX0J?= =?us-ascii?Q?twfiCbjKOePip15sYF8HlkjQEY6unrg7GjPUgcQrGxpPj1FPUQWhTkVJv9WX?= =?us-ascii?Q?9ayCR0wK3FNvcrKNPj7I5dLRun1c3RUNZqrl8fKfjvFU5Nl6Sci9xDLxmKhV?= =?us-ascii?Q?aO5ZDfVQ1kWjSV3O3x3ErKhCBcQPRf2E9m3EiO94cG32ahWF+QXlC+TCo3UB?= =?us-ascii?Q?68FV0NEpocv9Hw0tCCHHYBtHDzuBHOF9FR/gjPCV2mqT6r+pbMzoUoEYVRUQ?= =?us-ascii?Q?6LatOd0fSUso2v9BhlC7/bVU6elN6kFEf9ftdD8dZ4RJKrXhkaC1ao2w+eWI?= =?us-ascii?Q?jXrVAf9jETN3i5RXDEhYoKYVFZ+5Q+hwgwYC/wjF/OlOAdazFy2FqPCXC5iN?= =?us-ascii?Q?YBO713PUI6zYBqLOJbPbH0+Wxe9p2oPXIza8Ae4PuGDthUNmzNQO/f1khLwd?= =?us-ascii?Q?6nNhAUNx+OvnxhbMkRwFlDIVPG/dRNKUs81utkDw7dS4WbacocDUXZYCKEGH?= =?us-ascii?Q?qzn8XtTKQVkM34a4z6qznAKddYKVvt0ejolEqegAeSFmcT+cCWQV4JpCtpYV?= =?us-ascii?Q?+cjY//xmQ+yVbkCsaeriJufIWg7Yw+3c8+slXdqSkpTpgS9fTg2PUsxIkdd+?= =?us-ascii?Q?Dz9SiO4J7tmrIfkGs5VPUw+umCqBW8xfS+Xd8pEXjccjAO+ZV4IeP9utAfQB?= =?us-ascii?Q?qbkeOk5pT+8ZteY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QJCXSYf7GFfofproaSZMA3ZZTmCFQ/6+NFF15cH5hFe/L6yx4h+ho7468V9F?= =?us-ascii?Q?T2gpahQ7XG2JH2iVPQEmQtnyW5cydotyAAT9RyDXTuqbqonEpk7R5tlDhw4e?= =?us-ascii?Q?p2w4aw395JAT3YPLt/rE2ECou6kwviig9GVkxFUQzIjGyCWn0oEVcyAzEo9P?= =?us-ascii?Q?c9vNDSaLwt3THMU/IL4QNMuw3FbbYNrJdQO4z5dYrkbTQG8Mc+hvG+9xZK0F?= =?us-ascii?Q?NIVzJ/znpI/XcaKrGV/C3yz4JYwqDYMgwYkmX89azXxph5hz1QJsO/pEnMiI?= =?us-ascii?Q?e6MkQzWtaUqlGEBijIEmyBrNq9vbwxvYYpmLf+BKSfkeUczUPqUfhwX72oUH?= =?us-ascii?Q?uWlXi21FrDPnvVE1iCfE9b0ugVSn103ON0KJLhkDxJZlyrnaI7OkElv6lv0F?= =?us-ascii?Q?nQc87rLVLwp3zxJxHSORjC4X+ca/ftqT53Kju9P0WmA8msgqXx6Hukch1bBK?= =?us-ascii?Q?bYTBekOLJAWKc0+PtdWiSqgDHs9SXnujTzKMho9DLXHJzNPJViqeRN7+DZNJ?= =?us-ascii?Q?jbg2BlKDYu0n7jSB+AqWVxUfrxLN5bnvpxTwLWw9Iyg5g2BFxoLDWf4IAMJT?= =?us-ascii?Q?Jd0oCFI7rfJKfY1BxfOXvlMAbeLv2KqMLk7oUH04SdaCJ6tGCiE8upSLNyb4?= =?us-ascii?Q?FFmfkv0uQ/n7nimGPF/xoVz1xqZI2Vg/EYzGxfDPXOOkvWqcikbGIx16iqzC?= =?us-ascii?Q?QT+Q+863DQAo5G836d3yaxAPcRClc0Hj/aMR03smtV/kdmxRvP5PZqbFnIz0?= =?us-ascii?Q?UZhg9EF3ZVxNfHVbF2YmCbF3izDzGfdFAYMti/3Pd4NuaG01YdtRtd8jrf5a?= =?us-ascii?Q?cd8YNgGpj4S54lazzWAQwtG71rOH5jmTnkDTnVqTsTQH2hkImCpBZjYX9QXk?= =?us-ascii?Q?1O5XX+gBJoCEkLy6NCRxeF1+AnnlaXJXgJoOPvptoqQTiOvSntedYZbeQRVW?= =?us-ascii?Q?as1aATNYwJKL+jkv+rrpTLEpNREFFHxJhG3Y45h1tOLDOQXRiZQ5FO+/7Da1?= =?us-ascii?Q?t7ch/P7dLNSAhzgdS3c36tWmP6J6VlJ0Mq5Clp57Fa7htDlGTQXOWeJzAazn?= =?us-ascii?Q?OTbNNMMY3pcuwbXVWI+ojI6m7bnI64wbz0qZOrvJeh+C5vkooDgfQa5SLRM7?= =?us-ascii?Q?LUYIyqeRicwxzO1QfTxpzRbi3GsXuTOEPDOnMDiFPeJ/0BB+nUF0SBb84DOn?= =?us-ascii?Q?NkiwaqAjIHKXAK8k7vK3MPmSycxf6SlFxNdldkPXt/hDhDNktRq3UGL39bHG?= =?us-ascii?Q?Otj7f0q1ANUdIxx7RggLhaFijNZH7j72nxqeXE2LtUoKift6vbQj0WjJgjHs?= =?us-ascii?Q?6+wIgkTUajqbni6fXSYIYaZZkY7UE9P09W12q+H/RS3htVJd5WERF6KqfKIb?= =?us-ascii?Q?leQ1UpuUZPvpvM4lf3l5q/ydhBWiPbrBKNQvWROpFj43YaoLCcK1Bjz8o3yM?= =?us-ascii?Q?O9nSHnlu/KyKjZYMUw9XE7n1K4eOGU9vP2I2/VhD7IJe3bbApDeGKbhC7fTb?= =?us-ascii?Q?Is8/nKFGXFiojsTj/WFEAoRYASDpXjxtDa68TEC2Hkfh5jBv5j6UHiP7NSGK?= =?us-ascii?Q?23u/TQKMP8sdwoCIYhYOHqxD6M9Ok1LrUvJyf3JR?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: af40c618-bba6-498d-aa03-08ddc04b02d9 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:36.3419 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XZswbI/Mp7ve+1zO0x3R4fHqwPueVPst/SRbVI7n03z2tcugz7Y7E9l9+gB1JuoYr4aqYxcFUEvTyujwUTqN9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" NETC Timer has three pulse channels, all of which support periodic pulse output. Bind the channel to a ALARM register and then sets a future time into the ALARM register. When the current time is greater than the ALARM value, the FIPER register will be triggered to count down, and when the count reaches 0, the pulse will be triggered. The PPS signal is also implemented in this way. However, for i.MX95, only ALARM1 can be used for periodic pulse output, and for i.MX943, ALARM1 and ALARM2 can be used for periodic pulse output, but NETC Timer has three channels, so for i.MX95, only one channel can work at the same time, and for i.MX943, at most two channel can work at the same time. Otherwise, if multiple channels share the same ALARM register, some channel pulses will not meet expectations. Therefore, the current implementation does not allow multiple channels to share the same ALARM register at the same time. Signed-off-by: Wei Fang --- drivers/ptp/ptp_netc.c | 281 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 250 insertions(+), 31 deletions(-) diff --git a/drivers/ptp/ptp_netc.c b/drivers/ptp/ptp_netc.c index abd637dab83b..5ea59bb20371 100644 --- a/drivers/ptp/ptp_netc.c +++ b/drivers/ptp/ptp_netc.c @@ -54,6 +54,10 @@ #define NETC_TMR_CUR_TIME_H 0x00f4 =20 #define NETC_TMR_REGS_BAR 0 +#define NETC_GLOBAL_OFFSET 0x10000 +#define NETC_GLOBAL_IPBRR0 0xbf8 +#define IPBRR0_IP_REV GENMASK(15, 0) +#define NETC_REV_4_1 0x0401 =20 #define NETC_TMR_FIPER_NUM 3 #define NETC_TMR_DEFAULT_PRSC 2 @@ -61,6 +65,7 @@ #define NETC_TMR_DEFAULT_PPS_CHANNEL 0 #define NETC_TMR_DEFAULT_FIPER GENMASK(31, 0) #define NETC_TMR_FIPER_MAX_PW GENMASK(4, 0) +#define NETC_TMR_ALARM_NUM 2 =20 /* 1588 timer reference clock source select */ #define NETC_TMR_CCM_TIMER1 0 /* enet_timer1_clk_root, from CCM */ @@ -69,6 +74,19 @@ =20 #define NETC_TMR_SYSCLK_333M 333333333U =20 +enum netc_pp_type { + NETC_PP_PPS =3D 1, + NETC_PP_PEROUT, +}; + +struct netc_pp { + enum netc_pp_type type; + bool enabled; + int alarm_id; + u32 period; /* pulse period, ns */ + u64 stime; /* start time, ns */ +}; + struct netc_timer { void __iomem *base; struct pci_dev *pdev; @@ -86,7 +104,9 @@ struct netc_timer { =20 int irq; u8 pps_channel; - bool pps_enabled; + u8 fs_alarm_num; + u8 fs_alarm_bitmap; + struct netc_pp pp[NETC_TMR_FIPER_NUM]; /* periodic pulse */ }; =20 #define netc_timer_rd(p, o) netc_read((p)->base + (o)) @@ -195,6 +215,7 @@ static u32 netc_timer_calculate_fiper_pw(struct netc_ti= mer *priv, static void netc_timer_set_pps_alarm(struct netc_timer *priv, int channel, u32 integral_period) { + struct netc_pp *pp =3D &priv->pp[channel]; u64 alarm; =20 /* Get the alarm value */ @@ -202,26 +223,93 @@ static void netc_timer_set_pps_alarm(struct netc_time= r *priv, int channel, alarm =3D roundup_u64(alarm, NSEC_PER_SEC); alarm =3D roundup_u64(alarm, integral_period); =20 - netc_timer_alarm_write(priv, alarm, 0); + netc_timer_alarm_write(priv, alarm, pp->alarm_id); +} + +static void netc_timer_set_perout_alarm(struct netc_timer *priv, int chann= el, + u32 integral_period) +{ + u64 cur_time =3D netc_timer_cur_time_read(priv); + struct netc_pp *pp =3D &priv->pp[channel]; + u64 alarm, delta, min_time; + u32 period =3D pp->period; + u64 stime =3D pp->stime; + + min_time =3D cur_time + NSEC_PER_MSEC + period; + if (stime < min_time) { + delta =3D min_time - stime; + stime +=3D roundup_u64(delta, period); + } + + alarm =3D roundup_u64(stime - period, integral_period); + netc_timer_alarm_write(priv, alarm, pp->alarm_id); +} + +static int netc_timer_get_alarm_id(struct netc_timer *priv) +{ + int i; + + for (i =3D 0; i < priv->fs_alarm_num; i++) { + if (!(priv->fs_alarm_bitmap & BIT(i))) { + priv->fs_alarm_bitmap |=3D BIT(i); + break; + } + } + + return i; +} + +static u64 netc_timer_get_gclk_period(struct netc_timer *priv) +{ + /* TMR_GCLK_freq =3D (clk_freq / oclk_prsc) Hz. + * TMR_GCLK_period =3D NSEC_PER_SEC / TMR_GCLK_freq. + * TMR_GCLK_period =3D (NSEC_PER_SEC * oclk_prsc) / clk_freq + */ + + return div_u64(mul_u32_u32(NSEC_PER_SEC, priv->oclk_prsc), + priv->clk_freq); } =20 static int netc_timer_enable_pps(struct netc_timer *priv, struct ptp_clock_request *rq, int on) { + struct device *dev =3D &priv->pdev->dev; u32 tmr_emask, fiper, fiper_ctrl; u8 channel =3D priv->pps_channel; unsigned long flags; + struct netc_pp *pp; + int alarm_id; + int err =3D 0; =20 spin_lock_irqsave(&priv->lock, flags); =20 + pp =3D &priv->pp[channel]; + if (pp->type =3D=3D NETC_PP_PEROUT) { + dev_err(dev, "FIPER%u is being used for PEROUT\n", channel); + err =3D -EBUSY; + goto unlock_spinlock; + } + tmr_emask =3D netc_timer_rd(priv, NETC_TMR_TEMASK); fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); =20 if (on) { u32 integral_period, fiper_pw; =20 - if (priv->pps_enabled) + if (pp->enabled) + goto unlock_spinlock; + + alarm_id =3D netc_timer_get_alarm_id(priv); + if (alarm_id =3D=3D priv->fs_alarm_num) { + dev_err(dev, "No available ALARMs\n"); + err =3D -EBUSY; goto unlock_spinlock; + } + + pp->enabled =3D true; + pp->type =3D NETC_PP_PPS; + pp->alarm_id =3D alarm_id; + pp->period =3D NSEC_PER_SEC; =20 integral_period =3D netc_timer_get_integral_period(priv); fiper =3D NSEC_PER_SEC - integral_period; @@ -229,17 +317,19 @@ static int netc_timer_enable_pps(struct netc_timer *p= riv, fiper_ctrl &=3D ~(FIPER_CTRL_DIS(channel) | FIPER_CTRL_PW(channel) | FIPER_CTRL_FS_ALARM(channel)); fiper_ctrl |=3D FIPER_CTRL_SET_PW(channel, fiper_pw); + fiper_ctrl |=3D alarm_id ? FIPER_CTRL_FS_ALARM(channel) : 0; tmr_emask |=3D TMR_TEVNET_PPEN(channel); - priv->pps_enabled =3D true; netc_timer_set_pps_alarm(priv, channel, integral_period); } else { - if (!priv->pps_enabled) + if (!pp->enabled) goto unlock_spinlock; =20 + priv->fs_alarm_bitmap &=3D ~BIT(pp->alarm_id); + memset(pp, 0, sizeof(*pp)); + fiper =3D NETC_TMR_DEFAULT_FIPER; tmr_emask &=3D ~TMR_TEVNET_PPEN(channel); fiper_ctrl |=3D FIPER_CTRL_DIS(channel); - priv->pps_enabled =3D false; } =20 netc_timer_wr(priv, NETC_TMR_TEMASK, tmr_emask); @@ -249,38 +339,150 @@ static int netc_timer_enable_pps(struct netc_timer *= priv, unlock_spinlock: spin_unlock_irqrestore(&priv->lock, flags); =20 - return 0; + return err; } =20 -static void netc_timer_disable_pps_fiper(struct netc_timer *priv) +static int net_timer_enable_perout(struct netc_timer *priv, + struct ptp_clock_request *rq, int on) { - u32 fiper =3D NETC_TMR_DEFAULT_FIPER; - u8 channel =3D priv->pps_channel; - u32 fiper_ctrl; + struct device *dev =3D &priv->pdev->dev; + u32 tmr_emask, fiper, fiper_ctrl; + u32 channel =3D rq->perout.index; + unsigned long flags; + struct netc_pp *pp; + int alarm_id; + int err =3D 0; =20 - if (!priv->pps_enabled) - return; + spin_lock_irqsave(&priv->lock, flags); + + pp =3D &priv->pp[channel]; + if (pp->type =3D=3D NETC_PP_PPS) { + dev_err(dev, "FIPER%u is being used for PPS\n", channel); + err =3D -EBUSY; + goto unlock_spinlock; + } =20 + tmr_emask =3D netc_timer_rd(priv, NETC_TMR_TEMASK); fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); - fiper_ctrl |=3D FIPER_CTRL_DIS(channel); + if (on) { + u64 period_ns, gclk_period, max_period, min_period; + struct timespec64 period, stime; + u32 integral_period, fiper_pw; + + period.tv_sec =3D rq->perout.period.sec; + period.tv_nsec =3D rq->perout.period.nsec; + period_ns =3D timespec64_to_ns(&period); + + integral_period =3D netc_timer_get_integral_period(priv); + max_period =3D (u64)NETC_TMR_DEFAULT_FIPER + integral_period; + gclk_period =3D netc_timer_get_gclk_period(priv); + min_period =3D gclk_period * 4 + integral_period; + if (period_ns > max_period || period_ns < min_period) { + dev_err(dev, "The period range is %llu ~ %llu\n", + min_period, max_period); + err =3D -EINVAL; + goto unlock_spinlock; + } + + stime.tv_sec =3D rq->perout.start.sec; + stime.tv_nsec =3D rq->perout.start.nsec; + + tmr_emask |=3D TMR_TEVNET_PPEN(channel); + + /* Set to desired FIPER interval in ns - TCLK_PERIOD */ + fiper =3D period_ns - integral_period; + fiper_pw =3D netc_timer_calculate_fiper_pw(priv, fiper); + + if (pp->enabled) { + alarm_id =3D pp->alarm_id; + } else { + alarm_id =3D netc_timer_get_alarm_id(priv); + if (alarm_id =3D=3D priv->fs_alarm_num) { + dev_err(dev, "No available ALARMs\n"); + err =3D -EBUSY; + goto unlock_spinlock; + } + + pp->type =3D NETC_PP_PEROUT; + pp->enabled =3D true; + pp->alarm_id =3D alarm_id; + } + + pp->stime =3D timespec64_to_ns(&stime); + pp->period =3D period_ns; + + fiper_ctrl &=3D ~(FIPER_CTRL_DIS(channel) | FIPER_CTRL_PW(channel) | + FIPER_CTRL_FS_ALARM(channel)); + fiper_ctrl |=3D FIPER_CTRL_SET_PW(channel, fiper_pw); + fiper_ctrl |=3D alarm_id ? FIPER_CTRL_FS_ALARM(channel) : 0; + + netc_timer_set_perout_alarm(priv, channel, integral_period); + } else { + if (!pp->enabled) + goto unlock_spinlock; + + tmr_emask &=3D ~TMR_TEVNET_PPEN(channel); + fiper =3D NETC_TMR_DEFAULT_FIPER; + fiper_ctrl |=3D FIPER_CTRL_DIS(channel); + + alarm_id =3D pp->alarm_id; + netc_timer_alarm_write(priv, NETC_TMR_DEFAULT_ALARM, alarm_id); + priv->fs_alarm_bitmap &=3D ~BIT(alarm_id); + memset(pp, 0, sizeof(*pp)); + } + + netc_timer_wr(priv, NETC_TMR_TEMASK, tmr_emask); netc_timer_wr(priv, NETC_TMR_FIPER(channel), fiper); netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); + +unlock_spinlock: + spin_unlock_irqrestore(&priv->lock, flags); + + return err; } =20 -static void netc_timer_enable_pps_fiper(struct netc_timer *priv) +static void netc_timer_disable_fiper(struct netc_timer *priv) { - u32 fiper_ctrl, integral_period, fiper; - u8 channel =3D priv->pps_channel; + u32 fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); + int i; =20 - if (!priv->pps_enabled) - return; + for (i =3D 0; i < NETC_TMR_FIPER_NUM; i++) { + struct netc_pp *pp =3D &priv->pp[i]; + + if (!pp->enabled) + continue; + + fiper_ctrl |=3D FIPER_CTRL_DIS(i); + netc_timer_wr(priv, NETC_TMR_FIPER(i), NETC_TMR_DEFAULT_FIPER); + } + + netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); +} + +static void netc_timer_enable_fiper(struct netc_timer *priv) +{ + u32 integral_period =3D netc_timer_get_integral_period(priv); + u32 fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); + int i; + + for (i =3D 0; i < NETC_TMR_FIPER_NUM; i++) { + struct netc_pp *pp =3D &priv->pp[i]; + u32 fiper; + + if (!pp->enabled) + continue; + + fiper_ctrl &=3D ~FIPER_CTRL_DIS(i); + + if (pp->type =3D=3D NETC_PP_PPS) + netc_timer_set_pps_alarm(priv, i, integral_period); + else if (pp->type =3D=3D NETC_PP_PEROUT) + netc_timer_set_perout_alarm(priv, i, integral_period); + + fiper =3D pp->period - integral_period; + netc_timer_wr(priv, NETC_TMR_FIPER(i), fiper); + } =20 - integral_period =3D netc_timer_get_integral_period(priv); - fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); - fiper_ctrl &=3D ~FIPER_CTRL_DIS(channel); - fiper =3D NSEC_PER_SEC - integral_period; - netc_timer_set_pps_alarm(priv, channel, integral_period); - netc_timer_wr(priv, NETC_TMR_FIPER(channel), fiper); netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); } =20 @@ -292,6 +494,8 @@ static int netc_timer_enable(struct ptp_clock_info *ptp, switch (rq->type) { case PTP_CLK_REQ_PPS: return netc_timer_enable_pps(priv, rq, on); + case PTP_CLK_REQ_PEROUT: + return net_timer_enable_perout(priv, rq, on); default: return -EOPNOTSUPP; } @@ -310,9 +514,9 @@ static void netc_timer_adjust_period(struct netc_timer = *priv, u64 period) tmr_ctrl =3D u32_replace_bits(old_tmr_ctrl, integral_period, TMR_CTRL_TCLK_PERIOD); if (tmr_ctrl !=3D old_tmr_ctrl) { - netc_timer_disable_pps_fiper(priv); + netc_timer_disable_fiper(priv); netc_timer_wr(priv, NETC_TMR_CTRL, tmr_ctrl); - netc_timer_enable_pps_fiper(priv); + netc_timer_enable_fiper(priv); } =20 netc_timer_wr(priv, NETC_TMR_ADD, fractional_period); @@ -342,7 +546,7 @@ static int netc_timer_adjtime(struct ptp_clock_info *pt= p, s64 delta) =20 spin_lock_irqsave(&priv->lock, flags); =20 - netc_timer_disable_pps_fiper(priv); + netc_timer_disable_fiper(priv); =20 tmr_off =3D netc_timer_offset_read(priv); if (delta < 0 && tmr_off < abs(delta)) { @@ -358,7 +562,7 @@ static int netc_timer_adjtime(struct ptp_clock_info *pt= p, s64 delta) netc_timer_offset_write(priv, tmr_off); } =20 - netc_timer_enable_pps_fiper(priv); + netc_timer_enable_fiper(priv); =20 spin_unlock_irqrestore(&priv->lock, flags); =20 @@ -395,10 +599,10 @@ static int netc_timer_settime64(struct ptp_clock_info= *ptp, =20 spin_lock_irqsave(&priv->lock, flags); =20 - netc_timer_disable_pps_fiper(priv); + netc_timer_disable_fiper(priv); netc_timer_offset_write(priv, 0); netc_timer_cnt_write(priv, ns); - netc_timer_enable_pps_fiper(priv); + netc_timer_enable_fiper(priv); =20 spin_unlock_irqrestore(&priv->lock, flags); =20 @@ -427,6 +631,7 @@ static const struct ptp_clock_info netc_timer_ptp_caps = =3D { .n_alarm =3D 2, .n_pins =3D 0, .pps =3D 1, + .n_per_out =3D 3, .adjfine =3D netc_timer_adjfine, .adjtime =3D netc_timer_adjtime, .gettimex64 =3D netc_timer_gettimex64, @@ -671,6 +876,15 @@ static void netc_timer_free_msix_irq(struct netc_timer= *priv) pci_free_irq_vectors(pdev); } =20 +static int netc_timer_get_global_ip_rev(struct netc_timer *priv) +{ + u32 val; + + val =3D netc_timer_rd(priv, NETC_GLOBAL_OFFSET + NETC_GLOBAL_IPBRR0); + + return val & IPBRR0_IP_REV; +} + static int netc_timer_probe(struct pci_dev *pdev, const struct pci_device_id *id) { @@ -700,6 +914,11 @@ static int netc_timer_probe(struct pci_dev *pdev, goto timer_pci_remove; } =20 + if (netc_timer_get_global_ip_rev(priv) =3D=3D NETC_REV_4_1) + priv->fs_alarm_num =3D 1; + else + priv->fs_alarm_num =3D NETC_TMR_ALARM_NUM; + err =3D netc_timer_init_msix_irq(priv); if (err) goto disable_clk; --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010010.outbound.protection.outlook.com [52.101.84.10]) (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 F285B1F4613; Fri, 11 Jul 2025 07:17:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.10 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218265; cv=fail; b=fA0vZTTGe0BX2wcsFdWJPVhB7kqACUDD1t1QfLWN8FcrHdm2+JUpyCkjyMl6UuSwkBAyX5yoU7t8rE+UM9kLsvDpLCf5J1qOZ3uCjPziqqZTx43CmA22I82IsH3ql5YnICsHNHTouU01I1IJEv/ZaAYT7IlyX0P7AOwHVDYWl6A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218265; c=relaxed/simple; bh=33vH1PkvKGkAiGFcmGy+jKe0gmF9U7wG09qn5yIlCxk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=mKEiJNYWpyB+qJQJI2diKiJ3NRZsMWthhldG5EVZeVQohWg9Lv5HW/ggUy1PCxS0IYAaoYaOO+eoYGKdBx6/BS3vdpo7QduiwEdhK/wWjXBino15cHktmtmIaqQELM4JrORn5xjtsIX9IMRVXjf3s33BaSnAVmwuVO4LdZPJw3s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=SfkVdooN; arc=fail smtp.client-ip=52.101.84.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="SfkVdooN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QRIjZ+u0y57bAgCuQ9mJuaZj57rCqR2swhJvH2brOS9hksXp0OD4jqZk/xOXYdixb0RD5INtzJEvhoPyzmYtFoEp3xPd4L9kE/osVOhGQS+1snMnTJEs9r4fCVLpSJuLrPUuOXnkCv4WRZ1XdWHqgopnZcMfrwj7o8HqSeho0H0o5/2sK6dVIbINSyaUinAEqwAHtMFDi8J7E09RCRUMqTVDOqftAtcGYe+VTRpzImYPJbhXCWQW7dyfXLSrj/lzEyZiDeTNHa8bAPMRPYYo6fIe0YxQXZZN+2qCvxvfMRkhfhYFpF/6ZkDw4dMFNgevLn0XPXIxdOWyKl2xVt2VEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gjL+1KMZDnR1AQm1Z4wpDBpvywaFN7bTD+im2lRAYUI=; b=jK5zu4gXKCifqWONOaweZNawsMpTQhuRwOLLL4mpYAXEL6j3IRzTw7UfBAf/GPE0DU3sZ5lmDDZBowc6QS8OK14NS4gsqEfdE3gkdXQNKeEcSEbc83y6edNV8DrQerapWf9fp7Fz4uU6FkqtPQoR4FzkBfhgq462tF5ZL/iZNPBO+IcCZDAvhBdifwA9LjSrSPHdbsAIeiY8Vn7JxZIXzXHV4fvucucdg2atMUNQTL7pNITln3h03cYQyGyKJ4wkUaoVOqdLYxds3mp73f+jCie7rVVljSIIjaLfWKEpI52XbztrgreK9Jf2VgRy8zRF9QHTnSz+ZQvm60fCUhoO9g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gjL+1KMZDnR1AQm1Z4wpDBpvywaFN7bTD+im2lRAYUI=; b=SfkVdooNVaiSMghs2tKPXpj0MTjrqLLyy7zCNco4DU9iUzqq1lwEcRDT72KUYLY4ohiJf1U8cgTPw5oXYKWUiNSTjuIRIUW3KBsRxk4TApaP2Gz+kaZWK1wO523Tqumebfa4FOoKCelK4gjVqG1CCX8xc8AbjC+dIHdDYR9PQYmd8dkVzfkfcunywU7kCZ7rqWk7Z+dwLtR7uz3BFLqOHVXWuM0JXxSKfTcuElm5sir1MHSfVAC7AZbrrbHt4LDyOa0oqmJG5ShNx/BYMwynr3EyzyntjKRp+3AQ6uEgEEEYMVaQ6vsMz3GEGZ5+wEjBkR5PnkJNl0eU9cu2yWytcA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:17:41 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:41 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 05/12] ptp: netc: add external trigger stamp support Date: Fri, 11 Jul 2025 14:57:41 +0800 Message-Id: <20250711065748.250159-6-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: 4fdf9e75-be46-4c01-8d07-08ddc04b0602 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sUAPYKTTB+CAl9Gkwwfmqu40H0ajmpuYvIK2fZSzDZpnkbl8cJ6A6gTGrU4Y?= =?us-ascii?Q?mwo2p6YItYTeJiw/Gm4cJ3fksFXCYF4eS3rOhmvnDzkE6quTrWgrm0XnNM2b?= =?us-ascii?Q?s0kvMZ93dQScsaB86aRzI15HlX+N99qoW0kgi8iSiqpA98gKtMaovRu8eWk3?= =?us-ascii?Q?y7pM/l273waGBz/swZSqHQ2Ml0oXO4AljN/moiE6uRxUi/n/g37G8CL7zfCR?= =?us-ascii?Q?2j+a1SgunRk3yL9IdN8Ae0MSTGoNIxHHoxAXks6xkG8KRboCFU7/dXtszRHg?= =?us-ascii?Q?Il/Mc2lmxNQSzwxUT8Q722IHUbgmB41/XbYjx2xq+qwjKrmmHusWspeVObPm?= =?us-ascii?Q?I7ogK7e1NGj8bbMJu3RlFidRCAtsZJUNrb09dIWBCtElOiSb7pwqgxEahyCH?= =?us-ascii?Q?2xpJIjwL36WC9nh3BxuoU4SHzcV6qFP1FSXtXWlMtxXg+nx/3cFPawWZki98?= =?us-ascii?Q?G2611ZYc2ug59VZ4/L95pSg9FgHSptBMHycqX6xO7gDxY7Ys9Mxg7JXo6W64?= =?us-ascii?Q?ANPcbAlMREEFFOY47E4HiHhpf9liwuoSX+j+2brLkg4T6TY5RSlJMik/1fQe?= =?us-ascii?Q?NIlQtQLIlDQ70wSIFuLfGKdqjlk3GyeKnf69JlXbGNxobBsmBuozTBhFWCgf?= =?us-ascii?Q?wyTwZLBc715cuxiKKTQidvMvx8rgt2HtHj/BSbssSx1DpBshEJUlZb9FqwhF?= =?us-ascii?Q?O8bJSxyIZs2Cg+hzGbsCnHkYUE3OGZDgf3mCEdDR8ZoYnabAGotfVhZv2jpj?= =?us-ascii?Q?qOd5Z+Ei0WTNC0qw5dseqM5YmeyromSrySPtiKpUuRxIxRHyUX/bUFLTrhfV?= =?us-ascii?Q?Hw2QRZvyjctQEVyoAhn7aYEI6fH4m11cUkZ+ywQHjfrlIcqu4Ndupo8if3sc?= =?us-ascii?Q?o+Zq8pL85TayBut+YfHIOweVblI6WhFqBFwOKcy2hZ1PBkluqrmICdEOgxJa?= =?us-ascii?Q?eQqrbw7v2ptXHFLAyvsI4yIanv4oYbqNPV64uLtzFmmwMbcvNv1ZjRPI10oj?= =?us-ascii?Q?8/iDX7BqRdL8JOEe55+ALIEi1mE7SvJSExSYbv0zSQqnSpcaCfF/RllAkYTJ?= =?us-ascii?Q?IXRL8e0R/twavTca8IeoLJdnbTDW7afPL4qrBQGdvwRFYLJac1sEf0bLEvJa?= =?us-ascii?Q?iKnE09ErpWYadilxH/2MVnAZzZoHi7sTwPlOf/31uZBzLe1Bws8D1Sct0+DC?= =?us-ascii?Q?3+kLHrgv7/5Zp4Y01ufxF3lfeZxhlnmdL269fHQsTLY15kWrPP7TtTUF1ja+?= =?us-ascii?Q?xi87urHKzFmMnlphVEuzT89OzpQIBKriNXR8uJaABVfCtHn6pIoaW9iXuYsB?= =?us-ascii?Q?Kl40C+jCKf5+gRDerGhWQKuAFG4fJFpWdMZdYiwXZfpwDESNwN/LOcM11+tg?= =?us-ascii?Q?fUzYR9TMpEmkYyTDD8t750qUWeEEMAM0/wjr21soZjI7C3bj4ALVo7xmtVNL?= =?us-ascii?Q?VzJvqtuC1zlaRMwZZE4NTOcZU9NoemcusXtRmGjhHoc3nIv+7JdNC9jaHIjL?= =?us-ascii?Q?UZfgdUc60BN86A8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kakie3Hj44doorMJeGcYfe7dEinooK32T/rxPXjR3wtU1RPHxf1y8gKuydtz?= =?us-ascii?Q?yNjeM+8xBDbpLKrDRj/MhZu3pO4VYdI/t0uHf0xDogEOzZAGTAK2piw3EKTE?= =?us-ascii?Q?xoFq9EY80zZA2W2T6mQJCtZuAVHNqHWQu3/SBDI6rDI4WhY9adw7Lc4Asql1?= =?us-ascii?Q?zWhL4SSqJxEnhXTzHSy+c/8QV10cRSSUaXDolrrtQosvqZOx+FcrY/1fa1US?= =?us-ascii?Q?QZOCbJAx5ADTJBpI/wbEGJ0zGzA6P9Y/3KayK8RZ2RuIenE7pcj8Wo+PgRhF?= =?us-ascii?Q?ZiqH9U0kIzhbCB7F3NRkatlpdP9pyOfcaqO0SYpzlgtfJXvCOMWE/pL3Cca6?= =?us-ascii?Q?I5G7sWom7qQ21XW/TlZfoZ1oZXIUtfgR4BOd4xhEfrBTMU/aR50b9OKUsVpj?= =?us-ascii?Q?vV/G6GyMmqnxIikMTTDtw9cIuxg3MH1KDp0FFdHToJHVDSBESjAvDQTvSFdA?= =?us-ascii?Q?Azq8ls6aS68+CPXt4T2Nht5mHnN8F1+9gAggzjJZrlJduPQtGjGONHD9+L8P?= =?us-ascii?Q?xxwTIt2/4HopKy2pXxm7q0Pju/5ROB8EnKqn4wXnYoko4CjC3CX8H+OYcdR6?= =?us-ascii?Q?LTaNsHHIPZeIpaXy8Ww/OO5h+7fuVaCqZ3qLumpEzr/toWrFPf7UZFrFCtlc?= =?us-ascii?Q?ia+9JwUSS0WryZSM2iw8AKe6tuyfGPELCDF5MOaE7GCdbRHwPBbhNNeYo+6c?= =?us-ascii?Q?2rB6uyjDqf9snUAWTKIkBN8fLFHOZcrFwk1ET1VzebS+CsMQvNGJMwVztr+m?= =?us-ascii?Q?8FD9lxsY0fzKaQ4meNq7BTncZvcYGELcSVp1HCAM2bqhtNdnHwy1kCLKy1rR?= =?us-ascii?Q?qZ4NSBBjbjTtx+9D34zACDPpuJROBZEQMEl6WAeJFE7VYjflkB55mgHwEzVf?= =?us-ascii?Q?EL1OPOmtgVesSwvHs8FkqjLLeTzfNFffJ/ixbFpc2Mm7dinRdk0gXXb4mAv9?= =?us-ascii?Q?xKPET9A7pKCx9FXi2iHgUBbDOQMQfjcWsp9oqmza5qwSOUtV1odoH6u4C0Fg?= =?us-ascii?Q?R760MlwBIdPuhPDD7M9QB/3B/QfNOhrhe2MbbQgEoLdneLE0gqsdffY22zUf?= =?us-ascii?Q?yTBJeR/iJUtB7dGaHHyT3FBbKb009PlquhPWMGmIHX6yjaV1nJ4FXgb+dC+b?= =?us-ascii?Q?ND0rs6gX4bBjjlOaULAvTd46Tl4me4N5Wgyro1efPpJOYseSTPRPcO5Cg7so?= =?us-ascii?Q?NrFZfCRyNIDDMtx85ugdmtd9B+TFWR15Kkbi+8gqAGyJbZrtavG55TbNQx49?= =?us-ascii?Q?dXRF2vnj2hRfaUiNnvzHEd6R4FRU1RfjDNpC0KDCeB/XzgqAipyIoByU+XMY?= =?us-ascii?Q?bOn/V/7+XmulSBlZ1CO75tE4ajkQn3flS02P+de9NRcLq6KJInAfPgAd4jkU?= =?us-ascii?Q?4QVhveAModCnF2c7ESrXRFT23jI2EDDNWf4YryrGpcTV43dZkznUEIt/nmv+?= =?us-ascii?Q?eqSiwA3F7pSm31TNfSo0Uk6vLQ54wWlsK4yCShxfxVj/Zy4gYzdlcX7kYMBr?= =?us-ascii?Q?TuxmVYqWpB1dZxKX3FcuqxZ0J9Mki8EqsRb3eyRZprxRqVZX724Su7SEhEnd?= =?us-ascii?Q?nE4yS9Ycx6DE5dl1ig1eUGd3uhW3Z3HfJQH+5Cpq?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4fdf9e75-be46-4c01-8d07-08ddc04b0602 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:41.7190 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mxJHwhLPcSj/grXHl4LeFM8v0XRDUWBgIqdIuytTUVoSoJryMt0CfFKYZT7MMwkrNXK2vOlc/XvFrWj3HfCbPg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" From: "F.S. Peng" The NETC Timer is capable of recording the timestamp on receipt of an external pulse on a GPIO pin. It supports two such external triggers. The recorded value is saved in a 16 entry FIFO accessed by TMR_ETTSa_H/L. An interrupt can be generated when the trigger occurs, when the FIFO reaches a threshold, and if the FIFO overflows. Signed-off-by: F.S. Peng Signed-off-by: Wei Fang --- drivers/ptp/ptp_netc.c | 118 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/drivers/ptp/ptp_netc.c b/drivers/ptp/ptp_netc.c index 5ea59bb20371..b4c2f206752e 100644 --- a/drivers/ptp/ptp_netc.c +++ b/drivers/ptp/ptp_netc.c @@ -17,6 +17,8 @@ #define NETC_TMR_CTRL 0x0080 #define TMR_CTRL_CK_SEL GENMASK(1, 0) #define TMR_CTRL_TE BIT(2) +#define TMR_ETEP1 BIT(8) +#define TMR_ETEP2 BIT(9) #define TMR_COMP_MODE BIT(15) #define TMR_CTRL_TCLK_PERIOD GENMASK(25, 16) #define TMR_CTRL_FS BIT(28) @@ -27,12 +29,26 @@ #define TMR_TEVENT_PPEN_ALL GENMASK(7, 5) #define TMR_TEVENT_ALM1EN BIT(16) #define TMR_TEVENT_ALM2EN BIT(17) +#define TMR_TEVENT_ETS1_THREN BIT(20) +#define TMR_TEVENT_ETS2_THREN BIT(21) +#define TMR_TEVENT_ETS1EN BIT(24) +#define TMR_TEVENT_ETS2EN BIT(25) +#define TMR_TEVENT_ETS1_OVEN BIT(28) +#define TMR_TEVENT_ETS2_OVEN BIT(29) +#define TMR_TEVENT_ETS1 (TMR_TEVENT_ETS1_THREN | \ + TMR_TEVENT_ETS1EN | TMR_TEVENT_ETS1_OVEN) +#define TMR_TEVENT_ETS2 (TMR_TEVENT_ETS2_THREN | \ + TMR_TEVENT_ETS2EN | TMR_TEVENT_ETS2_OVEN) =20 #define NETC_TMR_TEMASK 0x0088 +#define NETC_TMR_STAT 0x0094 +#define TMR_STAT_ETS1_VLD BIT(24) +#define TMR_STAT_ETS2_VLD BIT(25) #define NETC_TMR_CNT_L 0x0098 #define NETC_TMR_CNT_H 0x009c #define NETC_TMR_ADD 0x00a0 #define NETC_TMR_PRSC 0x00a8 +#define NETC_TMR_ECTRL 0x00ac #define NETC_TMR_OFF_L 0x00b0 #define NETC_TMR_OFF_H 0x00b4 =20 @@ -50,6 +66,10 @@ #define FIPER_CTRL_PW(i) (GENMASK(4, 0) << (i) * 8) #define FIPER_CTRL_SET_PW(i, v) (((v) & GENMASK(4, 0)) << 8 * (i)) =20 +#define NETC_TMR_ETTS1_L 0x00e0 +#define NETC_TMR_ETTS1_H 0x00e4 +#define NETC_TMR_ETTS2_L 0x00e8 +#define NETC_TMR_ETTS2_H 0x00ec #define NETC_TMR_CUR_TIME_L 0x00f0 #define NETC_TMR_CUR_TIME_H 0x00f4 =20 @@ -66,6 +86,7 @@ #define NETC_TMR_DEFAULT_FIPER GENMASK(31, 0) #define NETC_TMR_FIPER_MAX_PW GENMASK(4, 0) #define NETC_TMR_ALARM_NUM 2 +#define NETC_TMR_DEFAULT_ETTF_THR 7 =20 /* 1588 timer reference clock source select */ #define NETC_TMR_CCM_TIMER1 0 /* enet_timer1_clk_root, from CCM */ @@ -441,6 +462,91 @@ static int net_timer_enable_perout(struct netc_timer *= priv, return err; } =20 +static void netc_timer_handle_etts_event(struct netc_timer *priv, int inde= x, + bool update_event) +{ + u32 regoff_l, regoff_h, etts_l, etts_h, ets_vld; + struct ptp_clock_event event; + + switch (index) { + case 0: + ets_vld =3D TMR_STAT_ETS1_VLD; + regoff_l =3D NETC_TMR_ETTS1_L; + regoff_h =3D NETC_TMR_ETTS1_H; + break; + case 1: + ets_vld =3D TMR_STAT_ETS2_VLD; + regoff_l =3D NETC_TMR_ETTS2_L; + regoff_h =3D NETC_TMR_ETTS2_H; + break; + default: + return; + } + + if (!(netc_timer_rd(priv, NETC_TMR_STAT) & ets_vld)) + return; + + do { + etts_l =3D netc_timer_rd(priv, regoff_l); + etts_h =3D netc_timer_rd(priv, regoff_h); + } while (netc_timer_rd(priv, NETC_TMR_STAT) & ets_vld); + + if (update_event) { + event.type =3D PTP_CLOCK_EXTTS; + event.index =3D index; + event.timestamp =3D (u64)etts_h << 32; + event.timestamp |=3D etts_l; + ptp_clock_event(priv->clock, &event); + } +} + +static int netc_timer_enable_extts(struct netc_timer *priv, + struct ptp_clock_request *rq, int on) +{ + u32 ets_emask, tmr_emask, tmr_ctrl, ettp_bit; + unsigned long flags; + + /* Reject requests to enable time stamping on both edges */ + if ((rq->extts.flags & PTP_EXTTS_EDGES) =3D=3D PTP_EXTTS_EDGES) + return -EOPNOTSUPP; + + switch (rq->extts.index) { + case 0: + ettp_bit =3D TMR_ETEP1; + ets_emask =3D TMR_TEVENT_ETS1; + break; + case 1: + ettp_bit =3D TMR_ETEP2; + ets_emask =3D TMR_TEVENT_ETS2; + break; + default: + return -EINVAL; + } + + spin_lock_irqsave(&priv->lock, flags); + + netc_timer_handle_etts_event(priv, rq->extts.index, false); + tmr_emask =3D netc_timer_rd(priv, NETC_TMR_TEMASK); + if (on) { + tmr_ctrl =3D netc_timer_rd(priv, NETC_TMR_CTRL); + if (rq->extts.flags & PTP_FALLING_EDGE) + tmr_ctrl |=3D ettp_bit; + else + tmr_ctrl &=3D ~ettp_bit; + + netc_timer_wr(priv, NETC_TMR_CTRL, tmr_ctrl); + tmr_emask |=3D ets_emask; + } else { + tmr_emask &=3D ~ets_emask; + } + + netc_timer_wr(priv, NETC_TMR_TEMASK, tmr_emask); + + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + static void netc_timer_disable_fiper(struct netc_timer *priv) { u32 fiper_ctrl =3D netc_timer_rd(priv, NETC_TMR_FIPER_CTRL); @@ -496,6 +602,8 @@ static int netc_timer_enable(struct ptp_clock_info *ptp, return netc_timer_enable_pps(priv, rq, on); case PTP_CLK_REQ_PEROUT: return net_timer_enable_perout(priv, rq, on); + case PTP_CLK_REQ_EXTTS: + return netc_timer_enable_extts(priv, rq, on); default: return -EOPNOTSUPP; } @@ -632,6 +740,9 @@ static const struct ptp_clock_info netc_timer_ptp_caps = =3D { .n_pins =3D 0, .pps =3D 1, .n_per_out =3D 3, + .n_ext_ts =3D 2, + .supported_extts_flags =3D PTP_RISING_EDGE | PTP_FALLING_EDGE | + PTP_STRICT_FLAGS, .adjfine =3D netc_timer_adjfine, .adjtime =3D netc_timer_adjtime, .gettimex64 =3D netc_timer_gettimex64, @@ -664,6 +775,7 @@ static void netc_timer_init(struct netc_timer *priv) fiper_ctrl &=3D ~FIPER_CTRL_PG(i); } netc_timer_wr(priv, NETC_TMR_FIPER_CTRL, fiper_ctrl); + netc_timer_wr(priv, NETC_TMR_ECTRL, NETC_TMR_DEFAULT_ETTF_THR); =20 ktime_get_real_ts64(&now); ns =3D timespec64_to_ns(&now); @@ -834,6 +946,12 @@ static irqreturn_t netc_timer_isr(int irq, void *data) ptp_clock_event(priv->clock, &event); } =20 + if (tmr_event & TMR_TEVENT_ETS1) + netc_timer_handle_etts_event(priv, 0, true); + + if (tmr_event & TMR_TEVENT_ETS2) + netc_timer_handle_etts_event(priv, 1, true); + /* Clear interrupts status */ netc_timer_wr(priv, NETC_TMR_TEVENT, tmr_event); =20 --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010027.outbound.protection.outlook.com [52.101.84.27]) (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 2B0641FBC92; Fri, 11 Jul 2025 07:17:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.27 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218271; cv=fail; b=KZm2bBdVwWd4du3fsxRGCpn5S/4XKsRHjHzkbxNh3NcIR/lnUJjF8iXrabNmTC/6Gwesdku0wycTc27CTUXchu4O+3iaU0wwxQlN7yMwxvHo2+0AoidJKca3vXViovM1NTR3cDCbiEVYQigTbTTRcFT960F+/29xClB7UemDo/o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218271; c=relaxed/simple; bh=tDXPeJTHBw7PJcUxZtcm8vE832lweK7KRjoNsvxmX4Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pvWq3UHDX95mtHCSJ4oekWFWON6ZA4iEerOV3Nr55kXbMJsT1pRI7vr8j8Ecij75T+Dy1aIiND0BJBppMwkXT45qJgxx/nhTumGaZkEpzAhJF06AkZR68J4GTKaCBl40dzU0kem/Ad4xqnSxIuRDKlO0hEgFq2X+09zQjwnZbhM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Wzv+FXHq; arc=fail smtp.client-ip=52.101.84.27 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Wzv+FXHq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L54nSwGHd7abmUu9wG9ET/QyTugoNqXAPeoEg6jYKHPyeYXFLe9y9ZOJwC+TZ26KXctIrm2SfzbHFcnG+RyQlSEsp2Ku5XC2sktKgbGXe84k+OK9H/pXg1tUOH8xTW1o4WYZUiDryFEBtyFpAfiiCYwcsceuzFvaGmHxb1n/pOiTYuJ6DLkyL1VzoEYUW0Iyhts/0xKF9wWRuIOVCnSfEz1bU1kpS6EgIj/lHSr/DhwkKN8cy+v8wF01naYKgU6L5FNUZvszZhppoNtXRfROjFx7YhYGWqRRMEcMOZhUQ0KD+xuI3sa3l14Pz9DKqjL43SMXAMBr3OCWe3Kvx8abuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1ULgX5rTBg5zwLPPk8KnuFLcvkOa9Vc4w4vmuVQT+DU=; b=oEJifz7lhqVU7AlF/C5/LMHeYY4S+IWKp9vpraPLcNZ/sL9UeL3Xj43ncW/TgvRB/oTTzBOgWwRfqH9BvsDld/f7cgUj9nH4VxhuDGrMt2vxxcJK4Q0wtMsPEUGbLmwNU2rd4dO2gbjbLuqP5QId4GUcmK99oy/Aqk12y6aJaJuloF3/oCvuR7GBi6Aiqh/MXoGYbTr1XUMkInElm8DF3GPxjTWF4MZ0ODIKsLviXP70jq+/ZIlhNIGzj6BPOBV84LGIBTB/Citydpuy47B1zVs2PGuia6zYN8p4S9inXMTtzUqcwQtRdIMxSrF5zch7+6vF7ZWcIbppUZyU45L/qQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1ULgX5rTBg5zwLPPk8KnuFLcvkOa9Vc4w4vmuVQT+DU=; b=Wzv+FXHqAYFdB5VgQYItStmaPhpy6dbWrCugTrwOJevFezR4sWgIJXn2qEDI6ZbvAQlaLsq33gUU+Adk7uh1fnx5olOzBtIH6gN2hmeev59MgyS8lJrhzTi9kFhiIEXuJg2ixNutRA2O11YYtUL55KpK8KhEip5QMa0NlbIA2IklwTd/XwLKlPaJH3BRwihLxPjOmRFap8/QqIycCbiyj2SaGheZta5XgwM4oqdvakCaUb5lyYakWCz0gdAMCA4bzHh2FSgQinq1LvMjPFKZOxH5wQImpkykO9lpChcfME8zVY5YjwhlTFDg8nr6Ray2j079SzUL1piHvDq6QlWo/A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:17:46 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:46 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 06/12] ptp: netc: add debugfs support to loop back pulse signal Date: Fri, 11 Jul 2025 14:57:42 +0800 Message-Id: <20250711065748.250159-7-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b226d39-c99e-4a8c-6912-08ddc04b0935 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?iu9rxIBoEq2ciPWie3U0g770lrs84vVnOV4W0/uPV5HeXpcaz7tzBY8h8/TZ?= =?us-ascii?Q?5PEE3fUPDUfnti2gM9jS9AOBvwBIF9pCzoU6xYWXQnALfzwG9Kzu06Pdf9IU?= =?us-ascii?Q?NMOQFkjcOj0seNfkeGmkEGU/Gg3e0tR31DiTYcllGav0bRxujkvCdRiDudeE?= =?us-ascii?Q?zBu6BuNZD4sBL9peCL7Ithq/x+SfQ3hUFivaBbTSUE29o0QxKG6cK7tsqW6M?= =?us-ascii?Q?bj+7aUs8iN1r/6XEr5lfxve6Y3+0euozyBu2MhJBRNfmLmA2FtrlXqPGGvFX?= =?us-ascii?Q?AlzdinglWZoKWHujdcXW1KUEyixE02JwDBgIxkmkDqI8bq9FqrrPVKyi6stc?= =?us-ascii?Q?zn7UBJW3XlrDcdwHoD3aPOIjmAf7TPZ4yau3F6MaIMv1wEsiRPunjWPbEcXM?= =?us-ascii?Q?rUa6WnOiOpK+0KvVdeGBOszCVwoEgezno0tsxHkqVpsCJA9N+zxFZTc5aJYr?= =?us-ascii?Q?sSxGY52rEofzzOPGc++c83sCDIU4Gj2SpLUlRgCaj+Cp/5e28QD7DWcktZTG?= =?us-ascii?Q?XrznR6FZqtgzbK/4X7Lntrj2gaSeLcOcnRlQsQXHrYKJC6V5Rne0ZLxOrN/7?= =?us-ascii?Q?S6g3bCqUel/ZmSqNC65t6xUttyMWL9MBbwe2oq5KDWIo2IRWZyAiGITZ6E1c?= =?us-ascii?Q?SqOF2HRRiIeaDuD5kjE5qBSRtsOXAJEG3Puxcpaahs6WHULpTpMi5UDKqCVZ?= =?us-ascii?Q?GaWRSbYrimVufdTU9RkgpXyjNpFgngvYIO2VswabNvYfQtjophGVkZdWRDC6?= =?us-ascii?Q?PQR0JaHevmZTReTEpB1sZfEBs/DQ/wI/5OvmtQJpnkKE1bqYOAHQvbI1t0Gg?= =?us-ascii?Q?wjmZ5ZbgH5EBpUUr9eviUXBC022JnFQgOpe1qcFmjzOaJ4t6eD+B99SUUvyc?= =?us-ascii?Q?ipPTMDOH4IQqTlNT4IPxfUjIZl4K9qCGocR2CXg/f0hh13vN1jxzgML3PogU?= =?us-ascii?Q?9VHcBIvU7/h0LddT10S5nr6dnrFV8a6KGWYEofKgamgTTRfF5Zye8Fyk35Ff?= =?us-ascii?Q?+D7/t0YxxxPlwZ1/ddX1+INPw1y9HGEZI4LcZJXSFJkEoncm4BWVkOmPh3cF?= =?us-ascii?Q?CoQFWj6FUubuL5PeK/s6S0KkgreMZFz1JEeq5CVttRUcCmppjemaHuJQ6jED?= =?us-ascii?Q?qaC8XEJ5+lSiX1440ZKV0AU4WZjMAzz5WHBJmc3KhSvUH2TradYuqf05v1jF?= =?us-ascii?Q?ir/GU5rOvKqqAsofUgpKkpFbFFycCQaFuAEkPa4RJSyqRk8SCm6qPfNx91Aa?= =?us-ascii?Q?NHSDyzxPyGWdLLyj18wLirZIOMxdzoaY4nAql08jpDQMUxHY5TVEM9aTFH1x?= =?us-ascii?Q?wMPlstb/GPI6645RewO/v1zp1M/cqXb2jU8zG028OJ5Rbh+wXwBsF6r8VZlD?= =?us-ascii?Q?le+HrQuSFLQx58TJ5mUDqZiwzF4+RS38RMmHIcKU2wLs4wkqZG1vW9oW0EZy?= =?us-ascii?Q?o3WvQmZJPKPSOJA83wP018fGnbZPktJXCr5zv3sl1JcAoI6WHX4ZOk01Mncr?= =?us-ascii?Q?470QXn2+bOeWqnY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2sZarCA3m1NHBJpQ1R1BK8sPMRFPTt8RHDdUwK8hRT7qzK2laXiPrHHvpCHM?= =?us-ascii?Q?4KHUEKEpyU935meGEQ1xJmgZIYhTkhPCZPI3uHibbAvTHgWcYGJquKriBali?= =?us-ascii?Q?kHE9PvoG14aqZY0pk1pkRvP0FZ5lErcx8nfO98r/fQ9396zHVaW4EbQh9huL?= =?us-ascii?Q?p5jBOW8eFi7LWNDCKDFlX+oykHoCJex422ZVI0H8KZwTlvNOg8CC6Ia5kq+8?= =?us-ascii?Q?OGYgc46OYbt1vsf+wq+KrfXyDnxVxgomoI3UVI98kLAKi1+adNXM2uHLtAR6?= =?us-ascii?Q?dC/MWeGMro5kpJBOCQEUIz+K5cki7GAIFY4myApdnGwu4ibbgb4KltY1x50m?= =?us-ascii?Q?3EyHU24OghlobbqH7LexrYRjTMwdJrwIzRbsSji3xeQctT8a4dzX1VbJGSkg?= =?us-ascii?Q?Lk64TsJYbIht4u5L6z2+eqYzidrTCLOHUv6qgLhFBxOqT42p6A6C6Q6Q6CW4?= =?us-ascii?Q?AAIJxTdV43h+oxpSBx3DzZRnnIuL/qm/6pRiLW6jllzPLTT8mro3YUIohgqE?= =?us-ascii?Q?4xAZbxa+DMQRtxl912Bh6PW2LcmQvlcL4IrvnUWiJCCCA1SCC/omWo+E1ZdJ?= =?us-ascii?Q?CaaTCp7N7APySPnObhtCsEriPhToM3MWn3Ycp8c6pq8isXyqrB/OmiDfhWrL?= =?us-ascii?Q?/11V96AplN2KFMypyhv8P0/pm1ban1HN8rWTr+q2L7mWLbHHU1Up9rqZYi0a?= =?us-ascii?Q?YzSY3Z8UsrS0mc2zYLgifnR/1zk7bNM1cTUcY1KAQdD5pVCJ2FbeDwKBQRV5?= =?us-ascii?Q?eXdxaMAYL6BCiaLWs8/2E5beTpy8vOHMkdDhfN/iqpSz79IEspWC8acwYhpQ?= =?us-ascii?Q?rhB7XMUozAoGEZLFA1T7o8axCyAka2cSwvR82ZaqgY4+z8bW1ZyJWB5/z5be?= =?us-ascii?Q?vLb+qrMR/lTUB+t3OzpBCTjFggK/JOWLDzpPVlWbUnzRa3jgvoKUFt6M9qK6?= =?us-ascii?Q?/nRUIguyL9/2G+wj7L7Zma6mdoxr3X2xcDf6SrkFe8R9iXbOUwBaEPFWLN1g?= =?us-ascii?Q?ogxiGP1FslrgOkiv6nPY7Ap6+L/+0sGlQ+zf0pucFOxdt95clv0DnuBlA1sB?= =?us-ascii?Q?lstvYIpi6WQdR3shD0HT1d/04p63O59aI/GE8LOU7X7uYm2ykSozua3JMEvl?= =?us-ascii?Q?W23Rai0zzkPv/85tibTgnALaHJvIZJYFDyxGPX5uLsmdPQ4HKEglSfG/bqpp?= =?us-ascii?Q?QN8sHgcPD7VU9zAKu0qMZTo2oOJxeEHLWlrd1zX8xXxPj9u3Or76Xry+xqFY?= =?us-ascii?Q?zW1sQycPlVAZLpFRhFX7Bp/VZ9o0Gg+TWOBn4qzHV/0hQ25pKNXd96xgxQjF?= =?us-ascii?Q?kCWILRwfagCcFlJFFSgs5Y29tlbPSXp3aRk5+/T7z/ftysoAX5YYW8TEpGcc?= =?us-ascii?Q?h/kBsUMP7iIij2IYMTNQi2PSV7iZheP5YSNsNUrivJsVtpLpSHq8x2kvNhS9?= =?us-ascii?Q?C3WvCJQfRKH2QYCDaGA4jQSENvdDhWHB96Of3tyKM/jG6vCticwHjJjats5i?= =?us-ascii?Q?gqLl7ghitt1/rPrt72EmKmqrc297x7f+uthG1w1kHg/QECXSP0hJei0cLpYq?= =?us-ascii?Q?0+Y/1YyegfAW7uTe0Kr1aNqoAlXEFL3J7Kv7uBQm?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b226d39-c99e-4a8c-6912-08ddc04b0935 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:46.8342 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CXanNaP2GtDra5dDsput336B6ORxm2PgbzRf5ra9WW1/thwJTt4SvZCqSxB1DlbDadCEpoCEI/C4AJIPHUOCXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" The NETC Timer supports to loop back the output pulse signal of Fiper-n into Trigger-n input, so that we can leverage this feature to validate some other features without external hardware support. For example, we can use it to test external trigger stamp (EXTTS). And we can combine EXTTS with loopback mode to check whether the generation time of PPS is aligned with an integral second of PHC, or the periodic output signal (PTP_CLK_REQ_PEROUT) whether is generated at the specified time. So add the debugfs interfaces to enable the loopback mode of Fiper1 and Fiper2. An example to test the generation time of PPS. $ echo 1 > /sys/kernel/debug/netc_timer0/fiper1-loopback $ echo 1 > /sys/class/ptp/ptp0/pps_enable $ testptp -d /dev/ptp0 -e 3 external time stamp request okay event index 0 at 108.000000018 event index 0 at 109.000000018 event index 0 at 110.000000018 An example to test the generation time of the periodic output signal. $ echo 1 > /sys/kernel/debug/netc_timer0/fiper1-loopback $ echo 0 260 0 1 500000000 > /sys/class/ptp/ptp0/period $ testptp -d /dev/ptp0 -e 3 external time stamp request okay event index 0 at 260.000000016 event index 0 at 261.500000015 event index 0 at 263.000000016 Signed-off-by: Wei Fang --- drivers/ptp/ptp_netc.c | 119 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/drivers/ptp/ptp_netc.c b/drivers/ptp/ptp_netc.c index b4c2f206752e..7f3e401f51c5 100644 --- a/drivers/ptp/ptp_netc.c +++ b/drivers/ptp/ptp_netc.c @@ -5,6 +5,7 @@ */ =20 #include +#include #include #include #include @@ -21,6 +22,8 @@ #define TMR_ETEP2 BIT(9) #define TMR_COMP_MODE BIT(15) #define TMR_CTRL_TCLK_PERIOD GENMASK(25, 16) +#define TMR_CTRL_PP2L BIT(26) +#define TMR_CTRL_PP1L BIT(27) #define TMR_CTRL_FS BIT(28) #define TMR_ALARM1P BIT(31) =20 @@ -128,6 +131,7 @@ struct netc_timer { u8 fs_alarm_num; u8 fs_alarm_bitmap; struct netc_pp pp[NETC_TMR_FIPER_NUM]; /* periodic pulse */ + struct dentry *debugfs_root; }; =20 #define netc_timer_rd(p, o) netc_read((p)->base + (o)) @@ -1003,6 +1007,119 @@ static int netc_timer_get_global_ip_rev(struct netc= _timer *priv) return val & IPBRR0_IP_REV; } =20 +static int netc_timer_get_fiper_loopback(struct netc_timer *priv, + int fiper, u64 *val) +{ + unsigned long flags; + u32 tmr_ctrl; + + spin_lock_irqsave(&priv->lock, flags); + tmr_ctrl =3D netc_timer_rd(priv, NETC_TMR_CTRL); + spin_unlock_irqrestore(&priv->lock, flags); + + switch (fiper) { + case 0: + *val =3D tmr_ctrl & TMR_CTRL_PP1L ? 1 : 0; + break; + case 1: + *val =3D tmr_ctrl & TMR_CTRL_PP2L ? 1 : 0; + break; + default: + return -EINVAL; + } + + return 0; +} + +static int netc_timer_set_fiper_loopback(struct netc_timer *priv, + int fiper, u64 val) +{ + unsigned long flags; + u32 tmr_ctrl; + int err =3D 0; + + spin_lock_irqsave(&priv->lock, flags); + + tmr_ctrl =3D netc_timer_rd(priv, NETC_TMR_CTRL); + switch (fiper) { + case 0: + tmr_ctrl =3D u32_replace_bits(tmr_ctrl, val ? 1 : 0, + TMR_CTRL_PP1L); + break; + case 1: + tmr_ctrl =3D u32_replace_bits(tmr_ctrl, val ? 1 : 0, + TMR_CTRL_PP2L); + break; + default: + err =3D -EINVAL; + } + + if (!err) + netc_timer_wr(priv, NETC_TMR_CTRL, tmr_ctrl); + + spin_unlock_irqrestore(&priv->lock, flags); + + return err; +} + +static int netc_timer_get_fiper1_loopback(void *data, u64 *val) +{ + struct netc_timer *priv =3D data; + + return netc_timer_get_fiper_loopback(priv, 0, val); +} + +static int netc_timer_set_fiper1_loopback(void *data, u64 val) +{ + struct netc_timer *priv =3D data; + + return netc_timer_set_fiper_loopback(priv, 0, val); +} + +DEFINE_DEBUGFS_ATTRIBUTE(netc_timer_fiper1_fops, netc_timer_get_fiper1_loo= pback, + netc_timer_set_fiper1_loopback, "%llu\n"); + +static int netc_timer_get_fiper2_loopback(void *data, u64 *val) +{ + struct netc_timer *priv =3D data; + + return netc_timer_get_fiper_loopback(priv, 1, val); +} + +static int netc_timer_set_fiper2_loopback(void *data, u64 val) +{ + struct netc_timer *priv =3D data; + + return netc_timer_set_fiper_loopback(priv, 1, val); +} + +DEFINE_DEBUGFS_ATTRIBUTE(netc_timer_fiper2_fops, netc_timer_get_fiper2_loo= pback, + netc_timer_set_fiper2_loopback, "%llu\n"); + +static void netc_timer_create_debugfs(struct netc_timer *priv) +{ + char debugfs_name[24]; + struct dentry *root; + + snprintf(debugfs_name, sizeof(debugfs_name), "netc_timer%d", + priv->phc_index); + root =3D debugfs_create_dir(debugfs_name, NULL); + if (IS_ERR(root)) + return; + + priv->debugfs_root =3D root; + debugfs_create_file("fiper1-loopback", 0600, root, priv, + &netc_timer_fiper1_fops); + debugfs_create_file("fiper2-loopback", 0600, root, priv, + &netc_timer_fiper2_fops); +} + +static void netc_timer_remove_debugfs(struct netc_timer *priv) +{ + debugfs_remove(priv->debugfs_root); + priv->debugfs_root =3D NULL; +} + static int netc_timer_probe(struct pci_dev *pdev, const struct pci_device_id *id) { @@ -1049,6 +1166,7 @@ static int netc_timer_probe(struct pci_dev *pdev, } =20 priv->phc_index =3D ptp_clock_index(priv->clock); + netc_timer_create_debugfs(priv); =20 return 0; =20 @@ -1066,6 +1184,7 @@ static void netc_timer_remove(struct pci_dev *pdev) { struct netc_timer *priv =3D pci_get_drvdata(pdev); =20 + netc_timer_remove_debugfs(priv); ptp_clock_unregister(priv->clock); netc_timer_free_msix_irq(priv); clk_disable_unprepare(priv->src_clk); --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011053.outbound.protection.outlook.com [52.101.65.53]) (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 63A961EF36C; Fri, 11 Jul 2025 07:17:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218277; cv=fail; b=dRk6JHmUP8w9fToxNHnefTf13cIiLWW5/Ep4cBr3cv6FtgamaRO3FU2+pesL2+5+1MjqPxEnc6/CptTJrVnyGGFIyrsG9GXgzAn1ap1u1Vpp9fdYNMkAaXvAEAjImjD4Tm/nnW4OD5fjLHJ1uQjeQKfqYIQlYuX8GrI0xbrMJuY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218277; c=relaxed/simple; bh=wQ09XO+5HT54vDAV1KulzGo9SFkIJ8RqyxgMYV0TaQg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=DG4VpVTOqyAfrCut54aHfgLCyILSkJTWhrLPCi/AbGd+LVMAYFJO9HF3a5pnr9cFsiTkH8ulgzCbS96IVhGU2VgPWgbJtCEDogTyu+rVUrpHDCkF1s7/7UW2NJOTzvMIiRZqsdqCUrfjCB2x0IQyJve+8fp70vwpewDyNG2nqMY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=R53yDDlj; arc=fail smtp.client-ip=52.101.65.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="R53yDDlj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k1qonIoHSps5A5uF8rdP7xjLcqxzY84JIdQSwOP3DVnbiwctCjqmw1MQmI+Hjy7N17uX7WhP6RtNSTxFvcxe2Xf9LSu+jaABTnWVPRyQ4/0c5y9ycBfzuDXp0rN1nVTuMUFS4anvnB9IWU4UpjzyYbKi58r0a0S6KpwpNU6Tlaz4RXWFC4EcRbeBcvwMmI80Q9gBdsA7n24916h9w28NYE0Ru+1dPJ5kIPF1awIShySbdkSxmkO1mHDBJ/E2TOSl3VOVtQJqVV/h4msQEGNbb+gze5LzuWVoEXkWjz0c7I5dgWqFlaj5hmgCx7+1ABMygPxfzJO7mZ80fF0qStJrGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LUFc8ayVBkQRLS5BB2rtikJU+Tle5Ovzrw3xvB3asnw=; b=HuFcEXRFfgrx1MlN3OiI6SJERnlnjMYjOOIUJZ5QHpcM5NiKYMAIYALQK3oFHAplUQBU7z+Mf0ElEsVCzyBtvB3FF3aQG5CS9XizF7lgyNfkc+xtrQRC9NxXA0KftgGiZTSSCunNuKmmuOW3MBhvpLsyY/3S9/ScVHWAiYjRXQcepA+8Qz2oVJEiqh0HgcAnMzMZhb9sZo8bBy8wiMueRgqqHrJDi96iFiKptOg/UZeGLAqaQh0HP2qGxO1whoO7DrJsVpXnnTxOsKdJ3UWCxiYagDDAcNl0+hRmgQIRl6yreHw66346PascXD5mbaAra1ucpwTcI+Wck6gknqYVWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LUFc8ayVBkQRLS5BB2rtikJU+Tle5Ovzrw3xvB3asnw=; b=R53yDDljrR3qTMCqC/8+D17yw5jUhofCYgoTPFHJVHGuAF5s0vpabTzMfchpTSokFtg2vQ/bdgNURkeAWAJcKVMbW5ltu0O4PRc9OfJ5eGOpNOKt4H7CcwKcXrKQV1eAkhDdVESiedTwt89IBIam6ttt0UrvkX4pXnzmkv8JFaaEyLGOBPbBAGSCjeV6klKuvnB+giwlaClr9B7OhcRNyjIiuZ5l+jXqxxnq6Rv76gdleVuk5Ve/3L+ZD9x/zN2nX+ZXQ+JuC9iFOetkKNP73rnPXR8HezHREgl3T60DVXB0K9jz8p5HqbzgU1li+9xqj3WJNeWhZRVtN7u00edM6w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:17:52 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:52 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 07/12] MAINTAINERS: add NETC Timer PTP clock driver section Date: Fri, 11 Jul 2025 14:57:43 +0800 Message-Id: <20250711065748.250159-8-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: 1be6c64f-87c7-4678-34e1-08ddc04b0c45 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?9oiA6HxbZ5l3Xtpnj4xw+MfHK9IPVknojKjpgCWBMr1GioGx8x8zHnXSeIvq?= =?us-ascii?Q?+ucPrTEaNlI22/gzEO6NKyNoyRK6SSPhLJY8+NEXseyQNltNq/cwskErZUwi?= =?us-ascii?Q?An5q9eNi3+R52d731rZGyOuSPGSYHkHBgp4wfrZfoBrFtn5Rcp2Uz6ZgB1/a?= =?us-ascii?Q?m3a2A/tyK+8RNEz2j3DzgSBuWg2ioSnpwKbtolbxifZuxr/qAOhNw3Of4DK3?= =?us-ascii?Q?kNJ3HRvCNzykGoV8TB29DpQgnCddE36C+CkLLOFdf8a94wSNmGc9QDKdCPEa?= =?us-ascii?Q?nfd1QG2oy4TSOmN/muvNeKQw/8JTHV1ATv85tT7JY+h23gwQs66q3iID5+I7?= =?us-ascii?Q?N08EqJ4QeR1OtDihTpx0CtNG85qSaBAdAD/8sFskUwL7/FefANc2zCHj6oB1?= =?us-ascii?Q?8v9wlT4jVZg7Ru/vFWmOvGxz0QZFdnBcSprS96RKAEc71N1iUT9h7ZX2oLiB?= =?us-ascii?Q?n6YLqk8ICqej+pktsA+SkrT/37+FwIR8nbVH3exqEB7tvnqAAQUFFEVWSfat?= =?us-ascii?Q?sg12B749kfL/ksp6ngvP96vNah0TRxIXqg3gmZCvJVlQ9XukefxUaAhad0q4?= =?us-ascii?Q?UYPkxxA2jF47d4t6YE/YLwDYwOEXs9hdLcrwbk6yJpv5e6DEX4jilTxW6NIP?= =?us-ascii?Q?RYlaDaToA4WHHEBNuZ75P0E3yxq3qscz2vkO0ZS96iUy/mG/keI+ek2H2xsR?= =?us-ascii?Q?y6H8ca2mCTwQI2JY+xTrMmSHS4WOJnyw2JC3uzK4zw3IrnOK1Kkh2GStIe3n?= =?us-ascii?Q?OyoEsRKNceMW0gfeGckvw/RoWoVv7XfbZp3L09hhQaMjN0NDHM+SGOIPmMQW?= =?us-ascii?Q?Rm3yLXzZC4rAgn5qOuon0c7OM527fmVNq+BsNqqsVcWI/Um2g4uTwy7+YhcP?= =?us-ascii?Q?To3Ttu3OkzF6Iefib3c/NZ/hb56gfipwaReH0hcptADE+YIa5q9Ddf2LDXsW?= =?us-ascii?Q?nCeEB7cx0DJT1qvJk9bG1fv3UOvHLmDUVBP/ynZW9q1ehezntSGdYSENZtJe?= =?us-ascii?Q?SLNjE/dgzwu6E1rcYge2T1NZnpoNIET9w0YBwWu28qbLundLWzM5dtzn0phT?= =?us-ascii?Q?4i4TWxi0PQXnuatoJU70KL2Ll5ck/IAsWSEEkrAwQm2p3KaHuTsEZnXgDZeI?= =?us-ascii?Q?xz2d++9tat+ifOhbEapf0rfoPwvKvrbCjiXDCG5TpJaGkN2oP1WYIaZlnMK9?= =?us-ascii?Q?4QoFHTnGoyaZfhVLLE0x5zQVTyteqC0/piX4KcEDgmMAVQjfQoOhdLUymDpu?= =?us-ascii?Q?7bWoR4cNezxMZadlJBEEoVn2PptivolFFTZP+1KtBd9iQwMKNOrCNVprSixZ?= =?us-ascii?Q?3gLo/KN2xChQn4/6WP6BEWVa5n/RefG8ulRO840inuObAKgO8OxhwtnuidJX?= =?us-ascii?Q?7ltkHv9h10MTojh+w6ncVOS7AX0qF6Ri9llW/8akL9DKd6yFO66xR2TwHN2O?= =?us-ascii?Q?WzcqIjaAl2OPJSl7BjU26erBkR7gvII03TSbGkrHyDIxQHqj0xlI7lIz0jOa?= =?us-ascii?Q?nvpDN0fbyJEb5/w=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0UhIL38DTGzoSUNJZaESO+33AOHdNOZNQmSfs0kXGaTUlwAPw+PlXaX+NIfk?= =?us-ascii?Q?UyWq9ZyYp3bHN2MQTTohj0MYnlxUHp2BIIj0DFqk1jHbJs0Z/+apMTW4m/Lx?= =?us-ascii?Q?KHRcsJ1rPx4ngLKwvEeeBBPI7QDXYBf/dfl06F51zG+CMRHj8CE2r5ciQ6zI?= =?us-ascii?Q?sxHrF5pM9ZT2drNMRBZ/imluznPgIWNO7Uy2GfZTUeCC6g9rQMC16g6/l08M?= =?us-ascii?Q?vqiRc6XsIXyyUHpBP9HSqxKaCEGlrOAdlOkhB75jIAv5VNZnbIXGR5Z7B0fX?= =?us-ascii?Q?HQvLkjl+G6s5DZwhBMkiQ2ADxkOluxLJV+3L3FrkVLnhJERxOA0kuFzd5wiq?= =?us-ascii?Q?X27TmGdLcIIWGhEhe1NP++kr0EywDSUIzGw9UAKGrLDx88xH34HWUNMVsnhC?= =?us-ascii?Q?SwFTnHVyGgQFD+bTOg1QVB8vz8fqOB82tLg/2X2z+9CU/AZwhQ9zdbqEHrUQ?= =?us-ascii?Q?rgEgjrq6a9Gb7O952fjlrdTKRZtVB0rQxVDZAivtw+S6WWXI6MLoaLOP9kdt?= =?us-ascii?Q?LEWUKjpfU/8kUZ4MjYLv6GCQOEnl8xoUKqfr/M1bM+kpTdQiHXaXR2RHJ8Oh?= =?us-ascii?Q?lOwJhteR91lgKc9tKwcUoTDyOxvUFg2fCkxVBrjhZ8Obfk1QoC2wvZM8FDBZ?= =?us-ascii?Q?1vz63T5iupTSV6fsghUMtB4A4s1wpeCsUUemVWZOxeKIMiRlGw/FCvtx4Ce+?= =?us-ascii?Q?xp5QxFaCM3R0/4vhwORUHZI5Th1uwkIo5ISF3GoDJ94YQm9RMw/R+s1QhUi3?= =?us-ascii?Q?O8aATjMK54VuC2+TK+484YxP3negdYvly2vTYeVbVin6pp9JRehJVEH7tIrl?= =?us-ascii?Q?MvfgOY5Ayjf2m33PtWuDbBrKkhokyzQvukLvfq4w/h9HdywzAN1WVfRXxBJB?= =?us-ascii?Q?C8HlVaCV7JhiRan48iS1xvFXGUYPSG4IGvHAsdIKr1mxjRS2L9nTDMLJXg2b?= =?us-ascii?Q?9b/vj8p7trBDu8SjuvWes8eE9oHprZII9MEHxHGAg7ra7K/uvA3GwM7Jz0/b?= =?us-ascii?Q?6P7L7VSQOTf66NYLTsxrDe1hf2HiffACBDGXx22XF4Dv/lqTkjk6itZV/qTs?= =?us-ascii?Q?ZlINgS9yDj0CSZpgKoeUa/ZdrgIiXH9gntgfunkunWg/1yahLLukxow55eQd?= =?us-ascii?Q?LV3H5EbQZ8hxmyk8lWxTP8uhVLRwIDypO4oM2qsw5JCE9TJmfmO6IXIE3HUF?= =?us-ascii?Q?o05lEB3v/aK+C24jq1RRwAp5+Y/yLDcjvIQK2CO5IDWMuZXkq3EpXqTNWSiD?= =?us-ascii?Q?jFzT/BRqIs8jnYFUB9BnA/aV/JQ4IDJ8wxTDjALx9keMzmqYNfQ5VvqLHTaB?= =?us-ascii?Q?afBZTfAiYXe/aXlRoVjRkKijut3Jaql3sxD0p0Yiq0YgIYrIRKN1KykeOVdd?= =?us-ascii?Q?nPBbAf7r/02WW/ierXAJJUAGtnrXP6kmedTwTr7DpfDio6Di1mT+wI/9A81i?= =?us-ascii?Q?1mTRRTAsfgaFpRtULhz0yhs2nyDbxP1O19Xcdagk7bsYalebCFBxJwfwMKTk?= =?us-ascii?Q?+c4z0qs2exikWfK2VGxzV7QVNomQkbZlWDLKv6Rtv6O2OFfoPL/t8OKMkl41?= =?us-ascii?Q?kvYmZFrB5Qvf8aiHNmW+wd1SB7MlIiBFNRvpAan7?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1be6c64f-87c7-4678-34e1-08ddc04b0c45 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:52.0731 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: t5qrx36Lp6mqegPJUdrpgFHLEMfQtkV28xrKci5PnbVHJRAl0vI3laI03xjxUZboHTqa1zANKBNS2FTCQSnhUw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" Add a section entry for NXP NETC Timer PTP clock driver. Signed-off-by: Wei Fang --- MAINTAINERS | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index d1554f33d0ac..dacc5824dca6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -18005,6 +18005,15 @@ F: Documentation/devicetree/bindings/clock/imx* F: drivers/clk/imx/ F: include/dt-bindings/clock/imx* =20 +NXP NETC TIMER PTP CLOCK DRIVER +M: Wei Fang +M: Clark Wang +L: imx@lists.linux.dev +L: netdev@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/ptp/nxp,ptp-netc.yaml +F: drivers/ptp/ptp_netc.c + NXP PF8100/PF8121A/PF8200 PMIC REGULATOR DEVICE DRIVER M: Jagan Teki S: Maintained --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012003.outbound.protection.outlook.com [52.101.66.3]) (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 D9BE519D07A; Fri, 11 Jul 2025 07:17:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218282; cv=fail; b=oJg9UdnYVkvAaeJZ0jJC7K8JnZGX7qWgOsfgXI2LncwjX4OYO9ha52wkEl/xwIc48dyHtI4sUN39lbmujM+fW16MGF0BiwQFoceFqq2woi8jt0wOq+pcgm4QTrIGsXyAeerwlvNQPBTgYm3DUo4mf6WIaYrLUIBMwMaBNTwxeMQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218282; c=relaxed/simple; bh=yYR3vymx4Y2kSier9cDMB5ktTxDJtZ9FcKbJ7TUbLc4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=OXcwx2Z2nlPy+7H9zYJ/hAa/vfBBqZeUNJhsAEkU90RcvV6Vb98Z6d/tNft8EGaRD/JNhQzvEO57GrKb1QTZutXTqKMr8CiH/Gz0TMysKs0ggueJvRusdhXy7FpqahybBoej9Yc8RFCcrSDAnF+XiOWzH93w3EyHZp9NWm9Ut/A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=TfH1yeKG; arc=fail smtp.client-ip=52.101.66.3 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="TfH1yeKG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dctGXQOSkikJOaTAS8fCniIpKvC9sjmDnTGX4cAB8XQ3x4ZEGl30nEY79bHrVlhTVaeUCTjhIA+ZHalxxcbjhsBhk6DSQb1ep6Ty4uCrHUCVngovbtidIIJULIVh7kEz2EyWOV0ntY5tkDtQfJ3mevCWx+8z3wZ3tNAjyGjsV5agFFwR23288G13Q+8tFi2+HMgoJExwNgRZt4Kl4/uBbINuV09tvjgDrQQXkMfOuWeM4Z59yCWq4Nx2hnd1ZrNN+7GDeXgpmyeJiObqhVLLS1V2E1PTwVsj5k4F8/91OnxZfkRSLBVSosomFC1T7pcsnu923SPIEYSd2MXAMrrMCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OBsUqQOHrqEPqdk7fcW4L7lk7L9rUjph5k1e6As/aS8=; b=Vkcx//XI8rZHwrXCt5hHd2JEGo+3tbuy28Izpv52lySCooEsyGuTO/Xqv+2riPN+zsRy9xtUspHcHtPKNKr2lxdn1sM0X96hgN/ChQ5xdOlUStz3LnjGL+HpvVDpfgO+0qU2faO3V3c8qxa85E+HHWrYJeFy/XIMIu7ahXlUAlo5xfShAUooBYu6IxVCQO+XrMdtOw2/2ihiCI7UdmqMQflGEjgsr0wOBP6HxAyAznjHzWHtniRzMa0fJP5S2Fb5WWJwTLc72uvYNmzk9HTEF4ghIWGb9tgRYbHoqRsK9ECTWdQ5gCjFr/HhYS+3at9onBdprG+INaBEmS1yJvKbpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OBsUqQOHrqEPqdk7fcW4L7lk7L9rUjph5k1e6As/aS8=; b=TfH1yeKG/0jzUmQEbY9wPqIpdNIl4MVlUJwoAkawMIkHfxIeKiU772K8nkHaxtA04SirrJGfkllXlKnAREq2/2591SvsQKWrU23jsFNkYMiHcFf25JqF/uPyYqhYJheIKfrS5BIXVBJEgdSrO1DrLk1/Nq8LLQO6sQmPBmbDwB1MQ/QzhXZWikych6t5tqTpip9e4ob1BEwUZj9kORiZhWdllwnFkFf4oyO9FltabGcvLjZubBdMeExve3p9Nygd4PiRExBrZmuoY6dK/fv5Rz7TRYnI8zVfV6v7zzU4lqmQ58CMoqqjT3nazG+SxXgr9vP5O6grh1f57bJoGeU0ng== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:17:57 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:17:57 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 08/12] net: enetc: save the parsed information of PTP packet to skb->cb Date: Fri, 11 Jul 2025 14:57:44 +0800 Message-Id: <20250711065748.250159-9-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: 54311c00-37d1-4bf0-8183-08ddc04b0f6f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?uZQK12ZcF7j4tGwcAAs5/QuceFje622oIEANbVUWe671yFLIfGAJO8oIwWIW?= =?us-ascii?Q?osT8XsvRknjtUtI1zwLmMOuxny5JWczWhtNre7FAjUMV0gD1etSWNjscPo3O?= =?us-ascii?Q?PIldxdxU42ePO6J/hzR/6P5WQcBenO/F75L5bqJMYiPts8ESq8SxtpxTs3c7?= =?us-ascii?Q?fKy1WeMYlV43Q5hklw6R7IYTaHrxMNcsx7Xx/BV6uh8Cl4r4CKfQljLDfQ+r?= =?us-ascii?Q?WixuMHUFvC9t8Qn1qUuoAasJoIwJOGEe/KBeqZPNwa7asbG4uO+4q2bumsfY?= =?us-ascii?Q?5ic2SHgvIxt/8uNNLtDizsW3OHyGfy3rnn3S5UrPJNerj/oJ+tz1gYCQQa7b?= =?us-ascii?Q?GLsvYbVjVGjDyCNPWHqI+exMaB0/DpMW/IbDC/3VyryTPWDDEONGjtGyD8hR?= =?us-ascii?Q?+nAev0h3rqe2bOYgR6I1xB+FSAZpp66A1Un1ExODW4xOrRsP+B5qRLmw9orj?= =?us-ascii?Q?HiBWf/MvOykFKivjoZyM5KUwYQOvxuQGiP6rxctTvmhbD2ehbjLPMFCKxkZC?= =?us-ascii?Q?sawMmX7tuy6vLsznnh6i6/shgfZTP2A9WoA5i3VdY2DVcFG7waZcTQBSusW5?= =?us-ascii?Q?UEuA85WDWdQsrFb8bhj96gYHAwxBV64SiQ3MvG74IjbfAU3nWcPWZJ3O+clu?= =?us-ascii?Q?iexWCE4U4bIiikvwnx+UVWCBxF3St3GzDqDa3vUMCgfjv0ZLj15jKaAPIlmV?= =?us-ascii?Q?taBAAxdFlxOeetbqimv5zE1OpqLLdWFyIxWWLSEbsYai+uqjxnmYuXjB3yrp?= =?us-ascii?Q?ifW9hnoA1VZWU4CzXqh/XIVPY9hEdHrWMGRhWyllORrOm4YWoOtdDzQwozEE?= =?us-ascii?Q?AqtdJXk1rxyUFsyAOa05v2/MqaguwxZ8Tx+rFlT3prrJOsym8Ld4yH8Br5mR?= =?us-ascii?Q?pTjAGSZllTbuW0XbQIf29tXs7P8UVmtb5bts8k19p7TgMJBL+6NjkZ5N2OKE?= =?us-ascii?Q?+mCSObFFPtjnYulMHDT12iD7nTilsODdokLF1rYX4hRMxRvftdT5F/GKC/QH?= =?us-ascii?Q?iDdy9ISqQ0u0QwiiiZzvMoz+inCTFsxSI/XbdUunlrGfIlGwCKmmf5QQrCJC?= =?us-ascii?Q?TTRv/YV6L5l1ULf1trHdrYVy6so9qli6lA5CRASiSQOtq7/9a5d8UDMKP5Bx?= =?us-ascii?Q?5mPsoX1UWiDVeB1eA3bMjCgWov3PeCe4e2oDwyMhvMbD8sRphxrud8K4zRc3?= =?us-ascii?Q?31nopdo/JAeKrA7F0i5Ia/KS51V4+o82Fm+WUp8mZE5lnNdmf2XGRbNIhdKZ?= =?us-ascii?Q?m7cwbVG2fbTPoldbJxXeqEzBNfQ0DypCD9uLxkl4ZZcwZ6nYKwbhq2gpo0qK?= =?us-ascii?Q?3i4rUWWVUSWJQDVMWtxY6F4SChhkbogi/gSH1RiL0C+ez4OJ0f1ALXGpLEdR?= =?us-ascii?Q?aDkwWhezxJ2hfiDjtCfB64ROcMLH+85PksO6dfMo+dXCv1nKyxIxwQGUgi1g?= =?us-ascii?Q?Vytvzq7hIpNwBF3V0K/9y+aGuRSn93MnvWFoJCODnr8+5eIrf0wl6Gr+OCxn?= =?us-ascii?Q?Fp78v1fwsk8QNRQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3MjjQPHUr25RWIzXoEhEE8uQ2WN6nXprHm+W+OR8gL4GgAV0v31BARvS9huI?= =?us-ascii?Q?AGVg4Zwnfc1dDY0a49sm3X16G6pErb4yvIOz0FPGnfz5mHlYLYLWYAPwPVTa?= =?us-ascii?Q?xS1b/pNFdCsnYx9VG2WOl3Qi3NsEOBTZEVGnDdt7pYNaZ1nqfcZZBKpTIwjW?= =?us-ascii?Q?Bfp9I+MvSqpy5uUxCJ3pP5LI5W5wAGtBZk/0dLlgoXdNy45kGwpPSUNkEIr/?= =?us-ascii?Q?78fv8/RQt241PGxNMQFUz2DQ9Ma/GF+3bv9hR/bSpmwMBz1BHGr1obnJopQV?= =?us-ascii?Q?YZy8GpCMzYWClfsI+7/ZSroM6g5PZfhLCua11BuAvqVluJ3/ZY+tPLXj2tHA?= =?us-ascii?Q?JSTTd6Z0uXqKGje+8eLuzm/w11rh7WIJ7OCF77dz42qNQXg/HBWoCbRQ2sPw?= =?us-ascii?Q?3um1uQdqg5ficl1toGOdP0nmkMgEXKPGZBvcKkth1Ng3IOtiKTfOJaipPtyZ?= =?us-ascii?Q?lIW1Di9UZxI61pca562wVZCIKz90eAfJY91+2t9VYrKW0rrdw3eT9QLzeCI2?= =?us-ascii?Q?R1KSdVTvdm/Xe+qlfzO9FsAySuvZKpPGPJjinbMCRQMkKrXjfX8Dy3kd4Trw?= =?us-ascii?Q?+x7/fL9fa5IpNxb6zURK3c0FpZX3c/a224CDbHnrf0UHy0I+rIs1JmwPWHrZ?= =?us-ascii?Q?nOyhaz/jsnjp8lt1xJadVj+I4Md5zZOBZwBLg6NZLNgS0fFy5P4ozwL1dF/T?= =?us-ascii?Q?c5IXPb28h42JYm3IK7Zk7DWp1DWGiJ0NFbJlBUFwOW1UiZ8x5NbRowsbRA2o?= =?us-ascii?Q?SBj3nyQaTco2I+vwkXaZEtZhlt2kpk+NfEhzegjF4yRa7MZbsfoR1+VTmZJ8?= =?us-ascii?Q?1tSaF7+oBDG+GCkOscxgvqZSkOHJMYJpqEIHl1kLcok99L7yXMYhDTFkjzp9?= =?us-ascii?Q?bAqcTliSB2IOC+RcKMkQOMqCqB8M+kRCfKDl/qfMdh7g6A1IOFhkjvTwNKl5?= =?us-ascii?Q?+yK29VLHOp8Ez9G0I7L7LE5KqFO/W6Fh8jdgLi71bL8qBYQzvxRa9X6hYweL?= =?us-ascii?Q?4dKbhCAixgWnKnOzD/SpPJTt7sOWqH3osUW0r4IJiPtvMvaxoEyXKoB2XfMU?= =?us-ascii?Q?gp8c5UqxC+6R0LLu10xLIIAlH/Y1R+0JEpSjxeOfmb1eOYxv9V2WRTUei1dG?= =?us-ascii?Q?+WmQ4MkOrDqfeXtuhOmlyIhKa4ipqMZZEsZS8oln6/U70N9VNkakAAQa/JxW?= =?us-ascii?Q?LOPuunhsc7Hodx6qXZ9736irln6z+sYefTJLZGZcaGAMDKJyFfwkFBpZKKe7?= =?us-ascii?Q?h9tQHIc5SDUYXyRrh5Ne7jpCNKb6D5nSCDe2wshiD4MtHwXpRxSEV+oFnmwg?= =?us-ascii?Q?eZ3UsUwO7GB7TzXNMC2JnMslhsobx4um5koz5j2+feyBkBcradBMm0kvsdJ6?= =?us-ascii?Q?a1+2qCIzKk6c9qHCAgqNx4XKWAlBoGQ98twVw06x2YQVP3fVOY2saNkGHZ7E?= =?us-ascii?Q?jF5a79qCblW8di1FWJBlpw9EEZcEewFoQDXk05+7w3fbbC0D/by3puWz/u8x?= =?us-ascii?Q?klLadZdJRaH9Dq3tKhJyYg/Bgg1ou9DgsV5EpokYBH5AQRXZgXUvN+EkV69H?= =?us-ascii?Q?D2HNygNGe4bvbIpKkrvzAF7mE0khPISkK54IA+DG?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54311c00-37d1-4bf0-8183-08ddc04b0f6f X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:17:57.5512 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YxqE+fzYQ86oMjQyCBSWGPcARPO0DLCebYVM187yxWw53zCBagqB6zYmF3wthGUST2Pi7r7Ml3JiaBnPAGjG1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" Currently, the Tx PTP packets are parsed twice in the enetc driver, once in enetc_xmit() and once in enetc_map_tx_buffs(). The latter is duplicate and is unnecessary, since the parsed information can be saved to skb->cb so that enetc_map_tx_buffs() can get the previously parsed data from skb->cb. Therefore, we add struct enetc_skb_cb as the format of the data in the skb->cb buffer to save the parsed information of PTP packet. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 65 ++++++++++---------- drivers/net/ethernet/freescale/enetc/enetc.h | 9 +++ 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index e4287725832e..c1373163a096 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -225,13 +225,12 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ri= ng, struct sk_buff *skb) { bool do_vlan, do_onestep_tstamp =3D false, do_twostep_tstamp =3D false; struct enetc_ndev_priv *priv =3D netdev_priv(tx_ring->ndev); + struct enetc_skb_cb *enetc_cb =3D ENETC_SKB_CB(skb); struct enetc_hw *hw =3D &priv->si->hw; struct enetc_tx_swbd *tx_swbd; int len =3D skb_headlen(skb); union enetc_tx_bd temp_bd; - u8 msgtype, twostep, udp; union enetc_tx_bd *txbd; - u16 offset1, offset2; int i, count =3D 0; skb_frag_t *frag; unsigned int f; @@ -280,16 +279,10 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ri= ng, struct sk_buff *skb) count++; =20 do_vlan =3D skb_vlan_tag_present(skb); - if (skb->cb[0] & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) { - if (enetc_ptp_parse(skb, &udp, &msgtype, &twostep, &offset1, - &offset2) || - msgtype !=3D PTP_MSGTYPE_SYNC || twostep) - WARN_ONCE(1, "Bad packet for one-step timestamping\n"); - else - do_onestep_tstamp =3D true; - } else if (skb->cb[0] & ENETC_F_TX_TSTAMP) { + if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) + do_onestep_tstamp =3D true; + else if (enetc_cb->flag & ENETC_F_TX_TSTAMP) do_twostep_tstamp =3D true; - } =20 tx_swbd->do_twostep_tstamp =3D do_twostep_tstamp; tx_swbd->qbv_en =3D !!(priv->active_offloads & ENETC_F_QBV); @@ -333,6 +326,8 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring= , struct sk_buff *skb) } =20 if (do_onestep_tstamp) { + u16 tstamp_off =3D enetc_cb->origin_tstamp_off; + u16 corr_off =3D enetc_cb->correction_off; __be32 new_sec_l, new_nsec; u32 lo, hi, nsec, val; __be16 new_sec_h; @@ -362,32 +357,32 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ri= ng, struct sk_buff *skb) new_sec_h =3D htons((sec >> 32) & 0xffff); new_sec_l =3D htonl(sec & 0xffffffff); new_nsec =3D htonl(nsec); - if (udp) { + if (enetc_cb->udp) { struct udphdr *uh =3D udp_hdr(skb); __be32 old_sec_l, old_nsec; __be16 old_sec_h; =20 - old_sec_h =3D *(__be16 *)(data + offset2); + old_sec_h =3D *(__be16 *)(data + tstamp_off); inet_proto_csum_replace2(&uh->check, skb, old_sec_h, new_sec_h, false); =20 - old_sec_l =3D *(__be32 *)(data + offset2 + 2); + old_sec_l =3D *(__be32 *)(data + tstamp_off + 2); inet_proto_csum_replace4(&uh->check, skb, old_sec_l, new_sec_l, false); =20 - old_nsec =3D *(__be32 *)(data + offset2 + 6); + old_nsec =3D *(__be32 *)(data + tstamp_off + 6); inet_proto_csum_replace4(&uh->check, skb, old_nsec, new_nsec, false); } =20 - *(__be16 *)(data + offset2) =3D new_sec_h; - *(__be32 *)(data + offset2 + 2) =3D new_sec_l; - *(__be32 *)(data + offset2 + 6) =3D new_nsec; + *(__be16 *)(data + tstamp_off) =3D new_sec_h; ++ *(__be32 *)(data + tstamp_off + 2) =3D new_sec_l; ++ *(__be32 *)(data + tstamp_off + 6) =3D new_nsec; =20 /* Configure single-step register */ val =3D ENETC_PM0_SINGLE_STEP_EN; - val |=3D ENETC_SET_SINGLE_STEP_OFFSET(offset1); - if (udp) + val |=3D ENETC_SET_SINGLE_STEP_OFFSET(corr_off); + if (enetc_cb->udp) val |=3D ENETC_PM0_SINGLE_STEP_CH; =20 enetc_port_mac_wr(priv->si, ENETC_PM0_SINGLE_STEP, @@ -938,12 +933,13 @@ static int enetc_map_tx_tso_buffs(struct enetc_bdr *t= x_ring, struct sk_buff *skb static netdev_tx_t enetc_start_xmit(struct sk_buff *skb, struct net_device *ndev) { + struct enetc_skb_cb *enetc_cb =3D ENETC_SKB_CB(skb); struct enetc_ndev_priv *priv =3D netdev_priv(ndev); struct enetc_bdr *tx_ring; int count; =20 /* Queue one-step Sync packet if already locked */ - if (skb->cb[0] & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) { + if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) { if (test_and_set_bit_lock(ENETC_TX_ONESTEP_TSTAMP_IN_PROGRESS, &priv->flags)) { skb_queue_tail(&priv->tx_skbs, skb); @@ -1005,24 +1001,29 @@ static netdev_tx_t enetc_start_xmit(struct sk_buff = *skb, =20 netdev_tx_t enetc_xmit(struct sk_buff *skb, struct net_device *ndev) { + struct enetc_skb_cb *enetc_cb =3D ENETC_SKB_CB(skb); struct enetc_ndev_priv *priv =3D netdev_priv(ndev); u8 udp, msgtype, twostep; u16 offset1, offset2; =20 - /* Mark tx timestamp type on skb->cb[0] if requires */ + /* Mark tx timestamp type on enetc_cb->flag if requires */ if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && - (priv->active_offloads & ENETC_F_TX_TSTAMP_MASK)) { - skb->cb[0] =3D priv->active_offloads & ENETC_F_TX_TSTAMP_MASK; - } else { - skb->cb[0] =3D 0; - } + (priv->active_offloads & ENETC_F_TX_TSTAMP_MASK)) + enetc_cb->flag =3D priv->active_offloads & ENETC_F_TX_TSTAMP_MASK; + else + enetc_cb->flag =3D 0; =20 /* Fall back to two-step timestamp if not one-step Sync packet */ - if (skb->cb[0] & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) { + if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) { if (enetc_ptp_parse(skb, &udp, &msgtype, &twostep, &offset1, &offset2) || - msgtype !=3D PTP_MSGTYPE_SYNC || twostep !=3D 0) - skb->cb[0] =3D ENETC_F_TX_TSTAMP; + msgtype !=3D PTP_MSGTYPE_SYNC || twostep !=3D 0) { + enetc_cb->flag =3D ENETC_F_TX_TSTAMP; + } else { + enetc_cb->udp =3D !!udp; + enetc_cb->correction_off =3D offset1; + enetc_cb->origin_tstamp_off =3D offset2; + } } =20 return enetc_start_xmit(skb, ndev); @@ -1214,7 +1215,9 @@ static bool enetc_clean_tx_ring(struct enetc_bdr *tx_= ring, int napi_budget) if (xdp_frame) { xdp_return_frame(xdp_frame); } else if (skb) { - if (unlikely(skb->cb[0] & ENETC_F_TX_ONESTEP_SYNC_TSTAMP)) { + struct enetc_skb_cb *enetc_cb =3D ENETC_SKB_CB(skb); + + if (unlikely(enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP)) { /* Start work to release lock for next one-step * timestamping packet. And send one skb in * tx_skbs queue if has. diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index 62e8ee4d2f04..ce3fed95091b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -54,6 +54,15 @@ struct enetc_tx_swbd { u8 qbv_en:1; }; =20 +struct enetc_skb_cb { + u8 flag; + bool udp; + u16 correction_off; + u16 origin_tstamp_off; +}; + +#define ENETC_SKB_CB(skb) ((struct enetc_skb_cb *)((skb)->cb)) + struct enetc_lso_t { bool ipv6; bool tcp; --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013002.outbound.protection.outlook.com [40.107.159.2]) (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 9489C1E5B6D; Fri, 11 Jul 2025 07:18:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218288; cv=fail; b=RvaqinUhYhG9C1DjuAqcakb3Ig3u98WV3S17HMS/BIBRxWcvDVWJlMiqHOImq32ApzK9+LZxnY0BGo/mGALZpIrZHaoxe433xplZTwwOF8z7H9wBwgmA9NKxoR+HqTvrXSPy9gRgop1bcXbk7DMS33QgCQinx+mVbiSIwfxJvvA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218288; c=relaxed/simple; bh=cLcl0njecwBydV3q417qP+A9KOA0UW4qnICxcdXYz+o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=kj0zCS/sx6iC5j9oa+dtLnZyUGtFhsE9sNwQuMNPGBq35kEzr5jV1DZIrsqA0McSVqoKC00swGJEeaLgGm5jC4zuqaTQsO4luKfRY6QMxBfTJ4R7cXfYXPStSfMySAvKpInzUYWIW5trxkJdjM7Pzi3k+LUSI9wkaMaAmC9qoUA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=iBVBGKhc; arc=fail smtp.client-ip=40.107.159.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="iBVBGKhc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dMRGoipLpc23zZ9jNJ2j3OLXaWEE4rbD4OmpuxrrUCNBWvYUHLWF2Lhku7lDwUsLupovzAORynli0eT10KRmf2fBWq7SB7CZ89Q4eJIMcmXweCw8ND/ehPTCa+0XILTUZQsxrEfQT2IN/Llbhk9Q1pOUzFvyifopnNSmLZGfWbpr6oYn2ABaORZd769S9G81PXmN+VKmfHYOO/qCSEVissBBrVkgo00Smep2m1M+FTXN/uur3XHnB/bCNIKakIr0foIHzPHaAwaQ98nnDWHXU9EmO8yjP8YZWCwtnepeJFakUjEFSDLtHsZyUSDGGluen7WP7KheWLwiylqsStkJjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xJ1d0o/8FbjGHJD5TksFMyHrmGobsCcF2PQdMx0A5dU=; b=QtN60BEKcB7r4KFLxiGdRtidVjwLBCkhKpX8jBPFeYxSbYVZ0T/bxvUalsh3vtafOFyPSfLgYjBve+HfMONvWfRXWJVL0YgdXwkd556Qes1bEuIIZFRvZgBgfrwBb8p8oGYhQVffx2JQV9Socbk50frOtq8hzK019YsT+tnXHzKmRlDLvP40JDvc3FLoAGVGUyJuRECBGMCoftpwRwnanLpV+yHbGGho3AyUDFzj0HXO7pVb9t2InS+drU2Glo/eiFhuHQIcK14T5DiXF2utMM1ekljLY4YVjywK0agnz+B7nTuHZsGTylR+Vz0KuzLkDXYvMuxxJ7yHSX/ISnm8YQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xJ1d0o/8FbjGHJD5TksFMyHrmGobsCcF2PQdMx0A5dU=; b=iBVBGKhcenRSPevlOEr9Fn4BSYZ4FWNmwTHOnmzrtDlDcOCqFhSn1Y1auUhOP5MI60+CDd5+sRhwByt5NSK7NF/oeZJl0iiRqiHaBB1DE4rk86GrA2bkGogSImqOOeDsd7pweLexih+8O4wbHCTM0Jj9UKCdy0DxezByOxhwTn4mO/D7lb95o8cuW6wD8W91ZDlXEyfpn7Oj4bubvBKNTTiBvH8Cuu44Riv42PPLtdzGohmrFBTIlYVRtqYmq/B0j+dG9P5l2aShB58IISgvhsNphntcePh1ude7/GHU//SbgEtb/b5IA/vLJ4vBczMERWdWSVZKrKkadS6p+DlOGg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:18:03 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:18:03 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 09/12] net: enetc: Add enetc_update_ptp_sync_msg() to process PTP sync packet Date: Fri, 11 Jul 2025 14:57:45 +0800 Message-Id: <20250711065748.250159-10-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: be3c834f-eb3b-4ec2-bcac-08ddc04b12f4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?/2S4CriVJ1ho/XQIVp9X5Dgzfn6/+j0D9VTRb0sxJXLLTIBmLSwYGhiFa3rc?= =?us-ascii?Q?5S6BtYEdxWypfqGgVMRVhJdaE9ULRNKZ48qv0de4SZt30EvLJ0Ujt8mzcjfr?= =?us-ascii?Q?ncHcTvkz3oTf8ZROT2FKBo8xwO6VLVMVbD2UZwLq8UAct7yUGcBqbYeKSSVL?= =?us-ascii?Q?rwhTDaQYGGYmuv/iV8c4P5O7t57jvTq9bGxd3QirmrExMPyo8606VXtk9CsB?= =?us-ascii?Q?KXoldirdlfj8zjX4AmqbNwh0JjjNS2Xkmf+v95hJq1b+a/9/GKNoCzV2l/oP?= =?us-ascii?Q?0rXV9LtuYpfSq/GRzZjMCYt/cPUNfdJaFyFN0no1BcY9nwH54dnMLjuKwiK4?= =?us-ascii?Q?WfEmQOzAOK1mWOWJJQ9lkp9jnfZJKl0yukrMFj+pf5akZ//PcmMPLPL8NsP9?= =?us-ascii?Q?MGadAizGrPfYa8vzL/uT4+dBNYXQ9nnkG54uDoDrmWKgvHhvGSUI3fkTekTY?= =?us-ascii?Q?MKY4d8At5jr+99yxk3SDajY58zP2j3kIgbp3M65+bw/HFO5hS0w7OLRDsIfD?= =?us-ascii?Q?LvBxLRRW/ahqeTfFoLeB+aI5iUGqnIMJ07M3giRWbaXVMZWJi120Si39fD81?= =?us-ascii?Q?47OdEw42yVmvrf1bVXWo8Qjscx34GpOIW5mDA2yTY7Cz1gum+tUjr0VYTN4j?= =?us-ascii?Q?wBV8j5vQRFjjQsIk7XhkQv/gTxYLDR69GKt6cytn5l8pD3SEtC6zjb6uYe7u?= =?us-ascii?Q?BghCgeiH5dADO4lxzy6VvWHcnCPfhE/PYJk2N5K6E20lLSanrgw2DKHNSSxz?= =?us-ascii?Q?Qij+5J2LMd8+coLyYSBNEz9npZ7bdHS2AcpKXS3DSRLCgtHs/g5VW00vHKg+?= =?us-ascii?Q?DEdvH0CEOghLBQHuB62roIHB/23Gd8gcfy+bWw0uyTquMwNJW+INnpItjjhJ?= =?us-ascii?Q?4f/RThNJIkIJZF4Tfszfdzdyjeujb00knPzghA8GTwz2KfVwKcC2m1OeyZ8I?= =?us-ascii?Q?z/o1VCfS1cGXpRSDbpN866eB5g+v7npOBBsE1j8yoCfhOD1/tfIlH3GIh3Kz?= =?us-ascii?Q?0ivw843joxcVZG3d59d3acbarJW68BJL36ddMS/rCWr7PoQ3PI6/BlwFx++8?= =?us-ascii?Q?jU3yevDbSs68gcxfiBT/Qud+ejuuRDJ7dxmzpvLVSXpLYeS+QU4OsBLe52IS?= =?us-ascii?Q?19Lv1F1+m6BXNZc62I18gmVNDOxM7msnm3Zd8q0xPb4iXRgpq2QAHKjsgzin?= =?us-ascii?Q?fvrm+so7/TdX0/uXnltTfA3FuYhK8c4KNZX2z0K/8SLVy7P6S/pyCPZAIx7W?= =?us-ascii?Q?q7yobZBu4A7xldsg8M04GfCUuktGlL9BAfFBr6Nk78qMc9ymcj+DS1ff9H6F?= =?us-ascii?Q?UIxOQHoVIHCP5REhgneuOHaNYU25zhT41/476aatK+sH2MNR+52tlxrqqkau?= =?us-ascii?Q?y3sW5SfeBzIidhIfuoLMmqnLAEC3ABc6ePg2L1AwOF+juxAbIYbUC7LX9bJL?= =?us-ascii?Q?/CRLGpvJRElAdXcAE0bEOfSLXwrhsaMV5rsThP2MMl+Ei7blkQ+AM0/2vbCX?= =?us-ascii?Q?lQtB9Q5OtGUma90=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vFx7lv8no4lZ6rbwWjytmcBVyKPtUg2lTrxBXTiQZyRK5a+XcSyVfVH7m0DD?= =?us-ascii?Q?JUau3qAfGUG6OKPc5uMrlWlH28tqPICpqCLKxAjplkPQ2ZVOFNLPlRGoYsVm?= =?us-ascii?Q?2/9DuQ2EhPJK7zGeAMPUkhvZ1vm1ENEncyuKXhZXDdpNN8Q/5zkqH9ybZnqR?= =?us-ascii?Q?gblaIFjLIDodZO2dV1Lg/n26nD3cprY40sVFKITapm5ojVpKD/mtY4fd0lls?= =?us-ascii?Q?9BiWg/SP+aYupT+qK3TB7vSu7xwNQU8BiKyodSxpXZjO8DQt7V8Lx5X8QOo/?= =?us-ascii?Q?OI8fyYCGL/UEIQyS99YE5SkB1Bx5p4xNY+2DGyMVifi8ZSJh4l0U2uvd9okQ?= =?us-ascii?Q?pR9rxfdDDohepHQrrRhSCBd5kFocqOkeJ4zS+MPOor+ZbBgZxmVh+EM0+yAG?= =?us-ascii?Q?TvA5dp5GB5aIou6/MzTtYS72Bo4DFBJmQSE1HnVy2MZ28CN/yPYs22HRm6ND?= =?us-ascii?Q?/VyTGxEGjFuJX3ugNoiSxtcErhezsre9q0jP1DHXsws12O0iLR71yfGFcK25?= =?us-ascii?Q?jjiZ4X5IQ7himdYjJEtqbMKTJt4EBDx8TCHbZC2fC+INMKvf1wD4rO4cctyc?= =?us-ascii?Q?F9GHIkP+zFtkEG2svz9bUZ+io8BKxrU3Erc5Da2pb9b3UXHbCOFiwz1ndu8q?= =?us-ascii?Q?DzoyYIIxWjiab63r7JZc3X9osd/LmKi/kHN510vuhUEUJo3EnGzCSCc5IRoH?= =?us-ascii?Q?LP9fIgBJ3re38P4vwogoF2mF/EcIGb6MnmbX+d4wxTiUE94rSPj7W61x/qFM?= =?us-ascii?Q?8YZYmRxMTIA6vyh3/e8rs5U5Jg7WCqYK5KdKwPckrm7bkxweIrCv07j+Fb+u?= =?us-ascii?Q?gO3/4zgZfZk85hUvJP5JrtAvK0uED0ARbfg66nKW2gWz19wCYjcmWiFgOo4Z?= =?us-ascii?Q?gLhRFMvN5xFKYh26UWYLyLV7x0c+9FXd3qg6k51EA0VEI6WsujFhM664WoJ8?= =?us-ascii?Q?MabsRrJdFbvNYfSxST0qNUmMS2FpzogmKuUD5S/kGzkOxnRit6p+Pm8Jm8BU?= =?us-ascii?Q?jK++oRFSuf31NhZ56/jydrv/TEJsj95vKRCovzX2sEj+xqKXsmE6KqQNQdoh?= =?us-ascii?Q?9u5FmLhbp0W13lwgS2JR2jAaY4l25/QxdNVt/N9O5Zf860Mu7+QLksdK+k0T?= =?us-ascii?Q?AsljszD6/cGK9a78LHAGDx1DwEXRDlafYo5ztDZTUprh3HteZLQn2ICwO10l?= =?us-ascii?Q?ZA03Y9gfz4TblN83QLIz/sAgb2in6RzO+3AYMo9x/N1RLCup3IMX51hqolG5?= =?us-ascii?Q?fHSZDHn1NwK+/hwmMYkKA3ySK6iN2zPhDU2masEQ6SPVpV/Ee5zpO1YRY0o9?= =?us-ascii?Q?hJYdZ8uOfg6k7WtFdKZSYM8u7XZiUSHCjs1WcZorXPmqN1b4i2UVOg3I3E7V?= =?us-ascii?Q?ciyMDVczPn2NSub4ijQyt4PE3kc5cIGQ5AnmDMoqdyBZNKLM5yuHbXJqu4Vn?= =?us-ascii?Q?Ey/nYxED1DCo5flDN048RO9BjFJ65NzTFuKaxfRcd9dUcMVtlz8QS3dXil/9?= =?us-ascii?Q?D3HXxhTU/ZPtYOdY9WGRqYB9N11bS9Ei0mGIw5/i83iFH1beNx3wnF60A0Lh?= =?us-ascii?Q?luqvxOU4NN8hYeKrW9aj4+yg92TFNlX76zrWoe2j?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: be3c834f-eb3b-4ec2-bcac-08ddc04b12f4 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:18:03.7714 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oAq+sOnTmwBaTQBQPDoQczJIK94m4qAq6Ou3tOs2zkTHmkYhfvhtRe1/fnPB1UPvD/v4gf63gJ477lzPVAkkDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" Currently, the PTP Sync packets are processed in enetc_map_tx_buffs(), which makes the function too long and not concise enough. Secondly, for the upcoming ENETC v4 one-step support, some appropriate changes are also needed. Therefore, enetc_update_ptp_sync_msg() is extracted from enetc_map_tx_buffs() as a helper function to process the PTP Sync packets. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 129 ++++++++++-------- .../net/ethernet/freescale/enetc/enetc_hw.h | 1 + 2 files changed, 71 insertions(+), 59 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index c1373163a096..ef002ed2fdb9 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -221,12 +221,79 @@ static void enetc_unwind_tx_frame(struct enetc_bdr *t= x_ring, int count, int i) } } =20 +static u32 enetc_update_ptp_sync_msg(struct enetc_ndev_priv *priv, + struct sk_buff *skb) +{ + struct enetc_skb_cb *enetc_cb =3D ENETC_SKB_CB(skb); + u16 tstamp_off =3D enetc_cb->origin_tstamp_off; + u16 corr_off =3D enetc_cb->correction_off; + struct enetc_si *si =3D priv->si; + struct enetc_hw *hw =3D &si->hw; + __be32 new_sec_l, new_nsec; + __be16 new_sec_h; + u32 lo, hi, nsec; + u8 *data; + u64 sec; + u32 val; + + lo =3D enetc_rd_hot(hw, ENETC_SICTR0); + hi =3D enetc_rd_hot(hw, ENETC_SICTR1); + sec =3D (u64)hi << 32 | lo; + nsec =3D do_div(sec, 1000000000); + + /* Update originTimestamp field of Sync packet + * - 48 bits seconds field + * - 32 bits nanseconds field + * + * In addition, the UDP checksum needs to be updated + * by software after updating originTimestamp field, + * otherwise the hardware will calculate the wrong + * checksum when updating the correction field and + * update it to the packet. + */ + + data =3D skb_mac_header(skb); + new_sec_h =3D htons((sec >> 32) & 0xffff); + new_sec_l =3D htonl(sec & 0xffffffff); + new_nsec =3D htonl(nsec); + if (enetc_cb->udp) { + struct udphdr *uh =3D udp_hdr(skb); + __be32 old_sec_l, old_nsec; + __be16 old_sec_h; + + old_sec_h =3D *(__be16 *)(data + tstamp_off); + inet_proto_csum_replace2(&uh->check, skb, old_sec_h, + new_sec_h, false); + + old_sec_l =3D *(__be32 *)(data + tstamp_off + 2); + inet_proto_csum_replace4(&uh->check, skb, old_sec_l, + new_sec_l, false); + + old_nsec =3D *(__be32 *)(data + tstamp_off + 6); + inet_proto_csum_replace4(&uh->check, skb, old_nsec, + new_nsec, false); + } + + *(__be16 *)(data + tstamp_off) =3D new_sec_h; + *(__be32 *)(data + tstamp_off + 2) =3D new_sec_l; + *(__be32 *)(data + tstamp_off + 6) =3D new_nsec; + + /* Configure single-step register */ + val =3D ENETC_PM0_SINGLE_STEP_EN; + val |=3D ENETC_SET_SINGLE_STEP_OFFSET(corr_off); + if (enetc_cb->udp) + val |=3D ENETC_PM0_SINGLE_STEP_CH; + + enetc_port_mac_wr(priv->si, ENETC_PM0_SINGLE_STEP, val); + + return lo & ENETC_TXBD_TSTAMP; +} + static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring, struct sk_buff *s= kb) { bool do_vlan, do_onestep_tstamp =3D false, do_twostep_tstamp =3D false; struct enetc_ndev_priv *priv =3D netdev_priv(tx_ring->ndev); struct enetc_skb_cb *enetc_cb =3D ENETC_SKB_CB(skb); - struct enetc_hw *hw =3D &priv->si->hw; struct enetc_tx_swbd *tx_swbd; int len =3D skb_headlen(skb); union enetc_tx_bd temp_bd; @@ -326,67 +393,11 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ri= ng, struct sk_buff *skb) } =20 if (do_onestep_tstamp) { - u16 tstamp_off =3D enetc_cb->origin_tstamp_off; - u16 corr_off =3D enetc_cb->correction_off; - __be32 new_sec_l, new_nsec; - u32 lo, hi, nsec, val; - __be16 new_sec_h; - u8 *data; - u64 sec; - - lo =3D enetc_rd_hot(hw, ENETC_SICTR0); - hi =3D enetc_rd_hot(hw, ENETC_SICTR1); - sec =3D (u64)hi << 32 | lo; - nsec =3D do_div(sec, 1000000000); + u32 tstamp =3D enetc_update_ptp_sync_msg(priv, skb); =20 /* Configure extension BD */ - temp_bd.ext.tstamp =3D cpu_to_le32(lo & 0x3fffffff); + temp_bd.ext.tstamp =3D cpu_to_le32(tstamp); e_flags |=3D ENETC_TXBD_E_FLAGS_ONE_STEP_PTP; - - /* Update originTimestamp field of Sync packet - * - 48 bits seconds field - * - 32 bits nanseconds field - * - * In addition, the UDP checksum needs to be updated - * by software after updating originTimestamp field, - * otherwise the hardware will calculate the wrong - * checksum when updating the correction field and - * update it to the packet. - */ - data =3D skb_mac_header(skb); - new_sec_h =3D htons((sec >> 32) & 0xffff); - new_sec_l =3D htonl(sec & 0xffffffff); - new_nsec =3D htonl(nsec); - if (enetc_cb->udp) { - struct udphdr *uh =3D udp_hdr(skb); - __be32 old_sec_l, old_nsec; - __be16 old_sec_h; - - old_sec_h =3D *(__be16 *)(data + tstamp_off); - inet_proto_csum_replace2(&uh->check, skb, old_sec_h, - new_sec_h, false); - - old_sec_l =3D *(__be32 *)(data + tstamp_off + 2); - inet_proto_csum_replace4(&uh->check, skb, old_sec_l, - new_sec_l, false); - - old_nsec =3D *(__be32 *)(data + tstamp_off + 6); - inet_proto_csum_replace4(&uh->check, skb, old_nsec, - new_nsec, false); - } - - *(__be16 *)(data + tstamp_off) =3D new_sec_h; -+ *(__be32 *)(data + tstamp_off + 2) =3D new_sec_l; -+ *(__be32 *)(data + tstamp_off + 6) =3D new_nsec; - - /* Configure single-step register */ - val =3D ENETC_PM0_SINGLE_STEP_EN; - val |=3D ENETC_SET_SINGLE_STEP_OFFSET(corr_off); - if (enetc_cb->udp) - val |=3D ENETC_PM0_SINGLE_STEP_CH; - - enetc_port_mac_wr(priv->si, ENETC_PM0_SINGLE_STEP, - val); } else if (do_twostep_tstamp) { skb_shinfo(skb)->tx_flags |=3D SKBTX_IN_PROGRESS; e_flags |=3D ENETC_TXBD_E_FLAGS_TWO_STEP_PTP; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/= ethernet/freescale/enetc/enetc_hw.h index 73763e8f4879..377c96325814 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h @@ -614,6 +614,7 @@ enum enetc_txbd_flags { #define ENETC_TXBD_STATS_WIN BIT(7) #define ENETC_TXBD_TXSTART_MASK GENMASK(24, 0) #define ENETC_TXBD_FLAGS_OFFSET 24 +#define ENETC_TXBD_TSTAMP GENMASK(29, 0) =20 static inline __le32 enetc_txbd_set_tx_start(u64 tx_start, u8 flags) { --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013043.outbound.protection.outlook.com [40.107.162.43]) (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 733A121770C; Fri, 11 Jul 2025 07:18:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218293; cv=fail; b=bDkPkXTg6EoE33PieRiMEk37JX7y73YwllecoVs+mTFk3dEiv8/uad2kwps+U+4n1PkCN7DGruIu/gyf/tXJh2qMePJX5cKw7ugzXorvvPWUXIUY5Kwf+iPiAqYKaHcoeY0wgOLZQoYlHwRdbHw26Tycn3gjJEhuZDfNVbVntGk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218293; c=relaxed/simple; bh=znNl1XY52TQYXeyi/1T2MgZUROcqjASY2yNUVz5r4qo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=CxBxWh0PperfU31udQEo7Kw1gJjabjM5fsjmR9bf2SKfKK+oTHdo9A8hIXeGPiisCDqIhCK04LLAQmHlDTNcAeVp0Gvf+A/xzb6p3F54XdpbhmFwo4N2A3P2NrYBtyViL0+polSL2ksJS/2j0fi2X3mFHhB7EzMEaaD8t/RIMm0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=KoV0Nvba; arc=fail smtp.client-ip=40.107.162.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="KoV0Nvba" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tX3maVap55gFm3f1ZSOAQ2GCXqCBAawR8PqGDePqrX3hlkARHKl4dE2b4RB7J7RRKishZVY37knbFbiNFvzBlEzDPKRKrnV/RA0GSmHvbOKycWLvKlSfjS19S4zlNo63E7iRLZco1honoMMqbkPRk6y3lL2MCJiKC2b4JZ7HHTe67MKqCFhznCyZIv35EdMdGMJ+DAA6muxhZw8QYE0JorEREnNX6dsreIzG6oGbayUzGLuH7/Pa+mlpIJTZ2VDlsCbVZM/BPvJPaO3dyytPnurFsKdmPA10ux8GLPGq9CjyMxPZluHfgJUhIcRAltjoJogtTr237gsIBwypzoBU6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WSYUsd4x/QyCHTuSZ5/l9CySLkFgkJCewfuKRqxgd8s=; b=mRSn09tqiaz0+DBA6cgkzWlBqKA5n6WI8N+WTho8rlT31QgFgD32nslbtiVe3bggckfIrOlSqqoeOr4GDcV9RExeBpHP3yJib+C5jEJrv2ZBGOD1vdXz9SyqAngx31dRC5/K1dzR/J3GmHlwezv36+7lrG1HxjBPZ43Jkjg09hzNNbqUt6+taXDGZwhe9NkXESqnrAKdPlHu6M9P6mFYwjLRMFimoFZP5o5Z8cRMZPy4obOyxJV+Cmanf/shXkpCQx/C6t6gFoTttIFjliLuNKBUTm1faA+KH3GhiEW2fsndm9oPuJlLhzR3sPTg2ZvhlFv4IDPeyDEWMns0do3D9Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WSYUsd4x/QyCHTuSZ5/l9CySLkFgkJCewfuKRqxgd8s=; b=KoV0NvbaYE9lIDK6Nl/eJO7NuO3ugFlzJ1VCU02d4Pem43CR5aiw9BLmcMPJJWawnJYbr5xXjsqlO0r/HmB2aDG13HeLhT5Y4dYDloikyqal8XmsIewUN/qWC00rO+lktzAbAlz5sgeFq95M/g37GJCDLrICC2/H9yw4ShtSkgfElCwpvSDyPb1orzjHCYQAW/tRP6han7pUfaddADime7NgeN+Vb15JcYwGCaEw4P2hImofuBII+1wHhJISioYHX53gKxX/EintZKCKf5NqdSlc7bEP4jgd4hdRKQrPIAS19o/QAumxEvd+cVmkyAZlVT3tmq8W23Ont9CghGwaiQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:18:09 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:18:09 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 10/12] net: enetc: remove unnecessary CONFIG_FSL_ENETC_PTP_CLOCK check Date: Fri, 11 Jul 2025 14:57:46 +0800 Message-Id: <20250711065748.250159-11-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: a263a394-fbd1-4c0c-a46b-08ddc04b166a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Hz269/uRsaGWE9Fbd2CzAz68/NF0Ifzu9m2B9kfCo0zgc3XBK4SwhUbewLvh?= =?us-ascii?Q?VnwsBWe0N/KRGsnLWmRN/prBYhK3yJDhmhrP55nJ/o2ljvL4n2MvezL8AToM?= =?us-ascii?Q?RLT4AU21s1CapwtIA2oB9Lga89k/AK0leUkBhggzVdjAzAYsbL0WTIB/g8ll?= =?us-ascii?Q?yCmis9A/Knv+599xCa65xOpllJUSPrs5/Kw4CHD2ck8jK5GGGPBxHRtr7NoB?= =?us-ascii?Q?Y7JymmjV/SrhBTj2nziGd78N7DUe+mk5vzpb+NwsHLO4O/pQ3I2E851jXGkE?= =?us-ascii?Q?PEVpkuA16BB7T16TI+ivxOp8Oi8OpFjbLiZI8zbu2oNvB60PxXNdeT1/tQrc?= =?us-ascii?Q?KT9XoPtpR2KG/8BIj0JewLi3iM8HcEm/cMQTi1aYVHhVnanEqRodLIJ59Idb?= =?us-ascii?Q?lfoWi+jFgNHavRO3lGH1JvlnZDfmAx+XRcNuTWRTistoYlfg4ko6wLAxs4SZ?= =?us-ascii?Q?qJbRFFPhHOnAmV2HUDtJaIJvAcs1ZzKW9zRawrmmdn4wN7c20ID/yHihmv5B?= =?us-ascii?Q?rBndwQFzQ27Gvt0OV6sGG/eUtgNCNvUoC4C9+i4AESX9efr+BEm0RaD8AnNC?= =?us-ascii?Q?ZPpPdfV7ME3i4n4MT+Qf35TCJtbmJOC1ym0r2gVZ/Ly4BDZH5LayRusOS8l6?= =?us-ascii?Q?0lM9gsXjmWKJal/PhsBACu6t/JOkNie9eOo35Kh9vwjOnHAxKtWeuqBWMeR5?= =?us-ascii?Q?uJpwGGSq+aFZttxhOpRr0h9SyAKShyjILZ01bqAQJmYK2rLOiiQptQfM/cCj?= =?us-ascii?Q?CRfZi4HRmmzRQcn+mca765yLmychTu9cxdNk3rNkG4pPtY3bIFjHMARePiWi?= =?us-ascii?Q?uJ7fvyvekPsmi+PgDb3T278VqCdZNLc14/9Qnjwdg9frWMAj4r0nTwdlSWwj?= =?us-ascii?Q?kf2FOROitXbdl+S89nkUuecBLixsTL8JQNfmVNyu5N6NdgzvFulDKGJrHdft?= =?us-ascii?Q?Rwp6i3MohVVvzzI8zo9bpdFibh0Qmhu4px4WCmk0uU9iZeVZcuG2G7RHtAbM?= =?us-ascii?Q?qNELCQKk5Lt/t2dnWvrfrGXZ7Sxb/CnqoGHG45EY3Eo12lkeOKxyQJNHxhGK?= =?us-ascii?Q?OXX6F7TiHR1nacnOIRlIgHtN8f7M8WQu3LtaG6du2WTb/ZyB0XDnrZko7R6G?= =?us-ascii?Q?ImI9TUYjyW16JdMuxIOtkCHgto/M5HATV+qddWEmCdcKphgUlHx7mc866UOZ?= =?us-ascii?Q?8SlYAONXYqsm5uyXXFTPRAcOPpVo44u5OcHcISAtn0nqPx3JvzlnEiyTpKMy?= =?us-ascii?Q?zXCYmmrk6NTJGYxxYVfft2Qr5zvXp5MvNgIzCuU8+X/Kpi9QZGzKV5nsVN34?= =?us-ascii?Q?+P3ElqtZIewKP1FAaamiCyurpBvzbyuGYb3N7BDaJxFjQAkEDfzyrOjXdR+L?= =?us-ascii?Q?bqnlCIQ1N4ZAlnDw8EA4lTC0bMwoA+n9nQFzKUoc2y4uBMb3TFoWnLGCHZb6?= =?us-ascii?Q?+fPX0Id3zNgYJyM1T8cAMyQSZ7NkQ4IL+KXX34/WF0R61Xjrt4+Qp2Cf7bfm?= =?us-ascii?Q?JHQtR+h5DLco+O8=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VAY7KlcFilCvjuQLr06x2nZGi9tOxdYFrJNDHH/hC7aTdjuXNG3P34ZJz2rU?= =?us-ascii?Q?kccPRcuBKo4TwzAu9yo8VrsbC5kMrNsMrPdnaSDqeCmJCRvw340ULCJgt7ZY?= =?us-ascii?Q?EaHgIFcupv6lWtX9U816nyMZYHwRMgcRm2RNxl8cTy4Qmy1JaeAdYf6Th/7F?= =?us-ascii?Q?p1qhm+Ia7INyTUR2GmjLgMDbvj27pwsEhYwS9CMQyGHNJOoBmEZzAOR7b3Oj?= =?us-ascii?Q?mReEk7O+awJVoPY/juNl0liqrh9HT21S33/xvbIhqhKYDVIvJwFXeD7EIzfm?= =?us-ascii?Q?c5x9qEQB7jTIWtmAKiQ50taATaEQs8Tk3mWfABmhFEDsvkewrzTD7f01Ayyt?= =?us-ascii?Q?+kpeshRe9pcJlYv//yGtruoJFYpjXzpP1UjE/0fXtxA+tTXQBUu7OcD6CMFI?= =?us-ascii?Q?j8zmZYfhL/0/7wu9Au6EQOFs+htqW+iMPvEDNYJ7NV92PKwbn49k/jb5Z/6/?= =?us-ascii?Q?SyX9+ALPeeszEtycpq2TLuzGHy+ZFyNYZKI3biRQbLnIzYi88q6rvCjl6Kk1?= =?us-ascii?Q?xyXyk+uhwKY+A65iAhabPmDVoJqHsIE7RW+ciFnSFEewAkWe/CSLyZUFjqpl?= =?us-ascii?Q?c9DpRxO5LjPufcoOBW7c3G545wchXhGszWmfSK405xDvuMdbKP/PMuG+umw6?= =?us-ascii?Q?BKPIxx+KGV1TPFxFtY5Ziz/kd8sYEf0GAYXNntdHyVsYJz31aXOvoE/N7b0x?= =?us-ascii?Q?u2o2RaUiE34aMsIDxmjaZxZ2fiK+/KL9S+ZfaqTsddFc0+puBpyxBKnf4GhT?= =?us-ascii?Q?gSLHYsViSrFWaGCJDf4O/Q+71KRaZv9hgc1gw1/XWTFg6zMk1iGDR4WA6rES?= =?us-ascii?Q?H4FKgTYkenSBfywkzYA4eZ7guoCJpXLx7Xz9zGoK1XoMArZ0VCNx6jTGDTLT?= =?us-ascii?Q?cj3ubztUSw+UxeFePqMmG1zbTPIV0YOIrt8litcL0EScwOChbbQG3pyI8AKx?= =?us-ascii?Q?XEu9TMfQCsz7hcioI/BHVLJqkcsha0TdpSkEDx53augaEQ/+Xkj96AxzqdFl?= =?us-ascii?Q?056MH3ivJqDrXHLpxvsOgeta16jdcwVHv7ENZAnf+KlFbUEVsD/5ORUTL2Jn?= =?us-ascii?Q?tdAFSpEoEYXE07D0WVpy0PM63JmZcEPY1L4WHXhO4gsLOETtNS74ZgV4gQ19?= =?us-ascii?Q?JI4HPH0E6+8dqjoYzxLVtUahK438t6Hp8ZkZ3aXnwhxhtMGJQGQEXii0hNWi?= =?us-ascii?Q?c55WS5anFIzLH8wk5xI2lkosh73la5ULfSQlpqvWLhfGw7vp9osM5aC4JBJa?= =?us-ascii?Q?HPKcKYLMzz4U+nH8tWOjytR7emCOdSShZi3R5QtcirWiv7nUQAEvUAQwc7Qb?= =?us-ascii?Q?2vPJkQH3idC1hwKYHnsNu104kQP/hNgm6kyPEyT5jyH9rHMI/25pb/5nWGCS?= =?us-ascii?Q?Yirq2NQz0vtdCQHuYCBUVOqsxj8p/Rm4czWfc6zXx9oRwFFTNUYAiyJOeq0+?= =?us-ascii?Q?zDM8D6o3koXyzENV1wAyBnDNSinTjLrMnisrVNpK4SvHnDPjgysa5Dym4Wgo?= =?us-ascii?Q?JCM1U3J5qfwQRdRhlsr5RW6/b8TpYVYcMgqLwbQx7OTzcF8SXcpcaNEHlDZ7?= =?us-ascii?Q?5j8xdK4FLBbJk3wH4k4s23JuKb0zgx8sVVvT7MJH?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a263a394-fbd1-4c0c-a46b-08ddc04b166a X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:18:09.1908 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XysaaP93jvxnvmjqBMHXOGsQyKG0Jkj5S1D7CBEFw9lnFZdtcB8od3d5H1oC56YzovisEEpLPwmKdJ17Xe7pSA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" The ENETC_F_RX_TSTAMP flag of priv->active_offloads can only be set when CONFIG_FSL_ENETC_PTP_CLOCK is enabled. Similarly, rx_ring->ext_en can only be set when CONFIG_FSL_ENETC_PTP_CLOCK is enabled as well. So it is safe to remove unnecessary CONFIG_FSL_ENETC_PTP_CLOCK check. Signed-off-by: Wei Fang Reviewed-by: Vadim Fedorenko --- drivers/net/ethernet/freescale/enetc/enetc.c | 3 +-- drivers/net/ethernet/freescale/enetc/enetc.h | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index ef002ed2fdb9..4325eb3d9481 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -1411,8 +1411,7 @@ static void enetc_get_offloads(struct enetc_bdr *rx_r= ing, __vlan_hwaccel_put_tag(skb, tpid, le16_to_cpu(rxbd->r.vlan_opt)); } =20 - if (IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK) && - (priv->active_offloads & ENETC_F_RX_TSTAMP)) + if (priv->active_offloads & ENETC_F_RX_TSTAMP) enetc_get_rx_tstamp(rx_ring->ndev, rxbd, skb); } =20 diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index ce3fed95091b..c65aa7b88122 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -226,7 +226,7 @@ static inline union enetc_rx_bd *enetc_rxbd(struct enet= c_bdr *rx_ring, int i) { int hw_idx =3D i; =20 - if (IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK) && rx_ring->ext_en) + if (rx_ring->ext_en) hw_idx =3D 2 * i; =20 return &(((union enetc_rx_bd *)rx_ring->bd_base)[hw_idx]); @@ -240,7 +240,7 @@ static inline void enetc_rxbd_next(struct enetc_bdr *rx= _ring, =20 new_rxbd++; =20 - if (IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK) && rx_ring->ext_en) + if (rx_ring->ext_en) new_rxbd++; =20 if (unlikely(++new_index =3D=3D rx_ring->bd_count)) { --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012064.outbound.protection.outlook.com [52.101.66.64]) (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 981901F181F; Fri, 11 Jul 2025 07:18:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218301; cv=fail; b=siMOQmP4ktbx6ASyZywUAZJcNvu3mpto3PrxaSkkB39M64BG0llDUegpWERbDoJOw0AwT/G9AAZuOIRKUoTELN2K2VVKYg0Kq/06Dw7RI+7QBJdt5EUKP80SwQF89iiLJHl5vWBfI1Ic5ILeufeIHk1C369HI4begRqNRiYLc+w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218301; c=relaxed/simple; bh=gLZNU46evqvMp517cEw+eetTKpVE5myQX4T/LFOUgl8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=X4AjVWLSRN854a5B3xs4DIFdHWrzr9gmhbQwaiIGf1kX/Une0Ku1Jh1q2KIzW2luQMyJ8w+N1dK15ko8mNKR+R+ro9GUQ252gHB27FyonOkbtWnUHbkl9mLnd2JYUH323rGM3tP7Uzxxt+Cb1Yp89c3DJBFqOODutCCnDDYy39I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=AoPjM0zW; arc=fail smtp.client-ip=52.101.66.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="AoPjM0zW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g6d22zeFruwMPIonna4VYu1AHeSG/INbtUOiZ0Z3oXkY89dskOX0FiKs4kmIiRKFYYnQhti1gbSHVZpbld/CS/Dk0CDYYkWuOdAUBny803j3BcuXtt3wbWQs/yDT4DS3dRreg0Kbsks/g1HsRCC3/qHhOY/dxid9NrB83I1bsrtoECF4R3g+mQrDBq3W/9B75FLSUiiEeNfTYkKPMjqMCFWjvVxPDlFKTHma7nDzqGSdsuswupeSMtYuhxQxjl8NHZD5Mi2o4+zygu07AALTHG7dEmbwlrXTj8PTtWg84WhGmrsCb9ApZWZrlu8zPXO6Uy1RBmAuR/98G6S1HST7pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OJG+XTepwikV52ijdIow0dRWYIZTDy/LZopOC0tC71k=; b=xi1G4LnbKcBaEDJ+2oP1feFtrmhR07PPFsMDzg/hryZ3/6TrwVly37ZB6/aguvfnrEOfy25gtNMc+doDFDh7W61nOdc4kSbU5OIphXi5qefNigptznmOph1hPE4g8FnxgHaayh9gFqs9Ji8YEn6wJdIx/XZC/ZKOhEoOAzq85zFVEHI7SC6c1JxqcAX6TxSXgGdaX1OKcLCBY7xuTQVRhUw6ZEfYxKNUWMue+LBssWPiY5OAGXTBkbUW8Xxejkcl6ofwKSbdAtcDV1sU1Hmhaiws3y5yXmRfFSwo/hhzS/xYdd1T6uG97XgwNpxMeNb6zdevUyXRPtbZVigv+ef5DQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OJG+XTepwikV52ijdIow0dRWYIZTDy/LZopOC0tC71k=; b=AoPjM0zWKqidbJ4CAKyZge4+yL2I9WiWgmMkfmYqX2iRnCDgVP/92Epo1vniMGuFs1mSgUmqFep8D83zO1B/IjdURB05MvJG+8nTlVGykdYVLzX0Yr4+7gFCWgGKhbehvAkEsvGX4Opv9EqZKktwrmc4SZDfQM3xQYoCX0F7p1vXPcW74vNRDxf/ePgyl68DSunGN/DtPq38wS5PHCQFnPZlrHpuLcr4Ycd+sFKNKoBDfoIi4/Ro0zaZBaohZtcpfc+kVEIdzabKeClqRfTeP/Vqz4V04yvkrpG052jJlpgAqpe+5rfGwH1E8LM6XrJpwJmaorNu9FYTR7pTc1Vz8g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:18:15 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:18:15 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 11/12] net: enetc: add PTP synchronization support for ENETC v4 Date: Fri, 11 Jul 2025 14:57:47 +0800 Message-Id: <20250711065748.250159-12-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: e02b827c-4aaa-451f-ae5e-08ddc04b1a18 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Je+k4cnW8WoxfQ6yeO5LbgXcYFviOstJ3+0dhL5y6U+u+z0jmtSO31Y5VTY8?= =?us-ascii?Q?7P1csOjjSnECS3+EPaDG9Tvw+DuEKdWsWJ/btX2aEhqWVz2r0nzxS11ITkV2?= =?us-ascii?Q?l4IoxJlJvC8tDU1e5TgcH5YVqmGaj88+lAMp9VF1028Wb367ySyRNyjcXRNN?= =?us-ascii?Q?xQ4FRVFAOcFImviKU2FyNGSM+wfdBVQ7cPWYe2IidK9a0pSDCfvsTs2LBS0/?= =?us-ascii?Q?T/WlURaADvWhd0HT6vX+JUnsjOzeSq735KitdDvZzxY3hJaaL6cNoT9QQNsN?= =?us-ascii?Q?66TGRo60F1Xys2nNLui5KEwTNKD15ptql0ydF1BRAPS77WRd+yQUn4j/V8qN?= =?us-ascii?Q?RDMq3ukMDaZtenZP5JvU8OukO08ec1oalVdzVAks95QOcoGU3weSDFn/+TYo?= =?us-ascii?Q?pghtqWS24J/mRclFF8EmGaQ7Z6i8LdWMYHXuf4+A9sZbeC2jMJ+v1GMn3G0E?= =?us-ascii?Q?Ck5LrgdVe/xuLXKjwFZea9p6V5mZK3frpIxzU2W1zcrBALeeCkzcOCabmUTK?= =?us-ascii?Q?jIFt/GRdT+Z33Mz00D0VS1Es24ymHQPO6O8tX8Dq0I6BbE05WfPxI/M+rWtB?= =?us-ascii?Q?V0ct1QBQp2Q13Via29baEFyR0ZZbQZam8k5EpbjqzuwIjNWAPOuDYBCReMG1?= =?us-ascii?Q?77TncoMOHTj7QQCVcp+NgPfSFUmLP39Q0yyTOhNQUmPLsiN5oB6rn//MyhBr?= =?us-ascii?Q?xgg1W9TuthAkQvArEtWs/PeoAsAP/ZCRxXmKkjtfejiBsShpVf74T21/l6g3?= =?us-ascii?Q?0klFFAX+x8VrsxzaC7E1RfIqEShe2NzITZLgoZjYtUmlR7APFB7qlFRU0TXe?= =?us-ascii?Q?S+l/bXeLBm8VNlUGwf81WVQy7vr3Vli1w6qHUG+tUwQYYp6N/B5iDnb23wpb?= =?us-ascii?Q?Ye2RioYVaaAWEhzsiXlsH9gYlqIbkWRMYJtDJwuKfdcXoq4EQOBUT58DMyEC?= =?us-ascii?Q?DwQPRfiZh8wXcGUjg3GcnXGgaWrSVXPgLFv40LJi6UH6qxW7b/ncJs9idH5d?= =?us-ascii?Q?cGc/G2nzT6iMKg1fr5Vq38tS+bTGCYtaOA1AsAZdUMwPHdHnB1F0v1hRepHh?= =?us-ascii?Q?CxRoLFsuNClNqrIIXv2J0DvYgWMVxeYjj7ShtFp1jGFF969A+WKd02uhUMoU?= =?us-ascii?Q?fp3nlRUqqqBS3AOpp6Ubiv4inOeRaIeJNl6EHk16UXWUYrjo/tlA/PlhGOYQ?= =?us-ascii?Q?zFxb08H2MqkAXaylpxqzc6fFS0uOEDU4vD3zBK+05P5M+fgCakUxZMbVXNK1?= =?us-ascii?Q?EL9rRS3j5bAzzSuSopXs3xllsIDiY3ForNK6Z0LZl6U3AZm7eD2bPWZTa/Y/?= =?us-ascii?Q?5UVwAhZn3P7jmIv237kuM3BJ+Mjcb0tqifaCcCzAAm+2Kdw0oCY7HVxXedUN?= =?us-ascii?Q?QVYuWR+bT/RxNv+Hz/KBHrL5tI4k6cQRHl4BmMNv8g2Zqi0KzfoaKkBTBG0U?= =?us-ascii?Q?vpZ1frh4egORRzVd+wGt5wy6Is8Y1vdI4SHE4BaJ3SdS3oSXo3QmyjhGOK8c?= =?us-ascii?Q?GNQOvZaHJ9TrwxM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mCPsmBzPWfbfRi9IAYYSEZdKrP06WZUm6arcEiYKZ1v7DttwgO43uHic+gEV?= =?us-ascii?Q?toM7R0lodCYBBmV1gwu+eiot32JNOE+iZn61N5TSqIJpbRAB1+awl+H8nHo2?= =?us-ascii?Q?XU+cloDwRd2Rs9cyFrhKq0OV+9kwfXC5zCsi12gJ7TUnj4qGMwdl56OSj6Rk?= =?us-ascii?Q?Bi5fWRM8h+RwfzfCcE2er+ylTWaIX9oFKwNSTof2qjQIQY06Oljl/6rN20f4?= =?us-ascii?Q?+zOgW2YIZRkekGkpG54s7gu18buZyHlGaywiqZ04Xatn3jlqs1CCKwDycjHN?= =?us-ascii?Q?cFvuw2SMKl5Fd8fMy5veM8vLWSz0ea8C+dAsvdxdRQ3fbOVPp5AVPz2P8BOi?= =?us-ascii?Q?824NM5WqKpkdp8oeAuSiPzTEPPv2sJKsfov/SCxyA75RA1m66Kh7ljsX9j8w?= =?us-ascii?Q?UAjT+CSxJrp4p2LkXY5lEaBjKNFJJDxa3zzVohPLFAucAOokfBIHPkkmuQU4?= =?us-ascii?Q?WD0x+YMcH1mYMc5i/hhNeFv/u42T1P/3fJF350xjOGXppDdu0dSAjxd1hdsM?= =?us-ascii?Q?zUbRiD+eb1VQlkmrjtSZaQm93kK/HXKPaVLHEq3PXrH+kB9d5F6aARji9ueV?= =?us-ascii?Q?Y94SHwzTpuFCPVoWuBlPjMnMDOhtIk2SF9+elNdDB5a9kRVXE87mcnFUn/4X?= =?us-ascii?Q?Ku8w1dACQvhrIr+8xTTdVuL3i3gK72NED9y96sJ4P33o7235U236JLrqpeRN?= =?us-ascii?Q?9G7SFtQraXbuRz4p2XRd4RcaXz0D/pI9djWOzJ0fEqdM/wb9CN5y2/TpXyrL?= =?us-ascii?Q?fyMWe829Sf1Uoi/Vk9diLAlQqfmFYQap1pRFt4DYuA81GWR2cnrj+yyRlHCk?= =?us-ascii?Q?Q4jkKO7C+dnX0Pr8aQ5QjkfEmFLjwZ+sEDFFzpjAmOLhMnp79IslrMaC81fX?= =?us-ascii?Q?Vu/Hj+G4VTmPcIQIPOLwTrsA+QIUN30JojmNUaAHFU/d+uVv47gFRaAqkQoc?= =?us-ascii?Q?157OkpOLLyESy42a5fTDBwn87kcdtN+0VQgCXckGFVsi/VR8YwqvvKEM8tjW?= =?us-ascii?Q?SoU+vOnAdo77Rf0z4uRvlkF4eXnUPrQP5HfRFXlOUcq/h2dHu14Aq7jyWzuX?= =?us-ascii?Q?qqOXaodHGjRS1HWfrppkd2u/VLllz5UdpByIbMZqN8zRzqD3InUklh9GRkdv?= =?us-ascii?Q?h7xAFP85zimVEyWQ856WKlwlB4IrcFu4Mzbwg0jczhUaN+CrWVhQh8mZNbpD?= =?us-ascii?Q?9yHgsG5Hw5Zhttt3YPRp1jqp/+1+kHNvbPGiLI67kDFPG66AWaq73acZybZZ?= =?us-ascii?Q?zBx88YL6CEHm5qBc+O1v+KCZ8h6RdzXIxPreF7sesOREvFMXl/ZLj3gpmHyP?= =?us-ascii?Q?tsa7WtH7/ciufs3lh66mcSjJS31pqO3PEisDZVTirpZFCWTj1Fdx3XIUxecP?= =?us-ascii?Q?ENN0ayhfpPG7QBpmLjg9K2mkWLUioKIkXHlog5olE+wnmSFYKgzhtuyd/xz1?= =?us-ascii?Q?OHAKKild64ziIkk5/hHuj65OXTLXZ7Vpx7OwjGb2yqhxFgYZ9CaCBdrNs68Q?= =?us-ascii?Q?alpds9VHWB5S157RDemDWI1nNTTMl0hdSxLlakY4LlpdqdIgU1BbUNcDO1YZ?= =?us-ascii?Q?j9+MvphKr3amo71fMlhCx4MA4JjIwqTVpnn9hoyW?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e02b827c-4aaa-451f-ae5e-08ddc04b1a18 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:18:15.5416 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BsskHTfiY/FejQ31vqtIH11ZxhslNvlUuj8PJxosof1g2lUfdzBOpF8z4T9dLAeeYk1vS4esrKTrVJXkrtFFPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" Regarding PTP, ENETC v4 has some changes compared to ENETC v1 (LS1028A), mainly as follows. 1. ENETC v4 uses a different PTP driver, so the way to get phc_index is different from LS1028A. Therefore, enetc_get_ts_info() has been modified appropriately to be compatible with ENETC v1 and v4. 2. The hardware of ENETC v4 does not support "dma-coherent", therefore, to support PTP one-step, the PTP sync packets must be modified before calling dma_map_single() to map the DMA cache of the packets. Otherwise, the modification is invalid, the originTimestamp and correction fields of the sent packets will still be the values before the modification. 3. The PMa_SINGLE_STEP register has changed in ENETC v4, not only the register offset, but also some register fields. Therefore, two helper functions are added, enetc_set_one_step_ts() for ENETC v1 and enetc4_set_one_step_ts() for ENETC v4. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 55 ++++++++++----- drivers/net/ethernet/freescale/enetc/enetc.h | 8 +++ .../net/ethernet/freescale/enetc/enetc4_hw.h | 6 ++ .../net/ethernet/freescale/enetc/enetc4_pf.c | 3 + .../ethernet/freescale/enetc/enetc_ethtool.c | 69 +++++++++++++++---- 5 files changed, 112 insertions(+), 29 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index 4325eb3d9481..6e04dd825a95 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -221,6 +221,31 @@ static void enetc_unwind_tx_frame(struct enetc_bdr *tx= _ring, int count, int i) } } =20 +static void enetc_set_one_step_ts(struct enetc_si *si, bool udp, int offse= t) +{ + u32 val =3D ENETC_PM0_SINGLE_STEP_EN; + + val |=3D ENETC_SET_SINGLE_STEP_OFFSET(offset); + if (udp) + val |=3D ENETC_PM0_SINGLE_STEP_CH; + + /* the "Correction" field of a packet is updated based on the + * current time and the timestamp provided + */ + enetc_port_mac_wr(si, ENETC_PM0_SINGLE_STEP, val); +} + +static void enetc4_set_one_step_ts(struct enetc_si *si, bool udp, int offs= et) +{ + u32 val =3D PM_SINGLE_STEP_EN; + + val |=3D PM_SINGLE_STEP_OFFSET_SET(offset); + if (udp) + val |=3D PM_SINGLE_STEP_CH; + + enetc_port_mac_wr(si, ENETC4_PM_SINGLE_STEP(0), val); +} + static u32 enetc_update_ptp_sync_msg(struct enetc_ndev_priv *priv, struct sk_buff *skb) { @@ -234,7 +259,6 @@ static u32 enetc_update_ptp_sync_msg(struct enetc_ndev_= priv *priv, u32 lo, hi, nsec; u8 *data; u64 sec; - u32 val; =20 lo =3D enetc_rd_hot(hw, ENETC_SICTR0); hi =3D enetc_rd_hot(hw, ENETC_SICTR1); @@ -279,12 +303,10 @@ static u32 enetc_update_ptp_sync_msg(struct enetc_nde= v_priv *priv, *(__be32 *)(data + tstamp_off + 6) =3D new_nsec; =20 /* Configure single-step register */ - val =3D ENETC_PM0_SINGLE_STEP_EN; - val |=3D ENETC_SET_SINGLE_STEP_OFFSET(corr_off); - if (enetc_cb->udp) - val |=3D ENETC_PM0_SINGLE_STEP_CH; - - enetc_port_mac_wr(priv->si, ENETC_PM0_SINGLE_STEP, val); + if (is_enetc_rev1(si)) + enetc_set_one_step_ts(si, enetc_cb->udp, corr_off); + else + enetc4_set_one_step_ts(si, enetc_cb->udp, corr_off); =20 return lo & ENETC_TXBD_TSTAMP; } @@ -303,6 +325,7 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring= , struct sk_buff *skb) unsigned int f; dma_addr_t dma; u8 flags =3D 0; + u32 tstamp; =20 enetc_clear_tx_bd(&temp_bd); if (skb->ip_summed =3D=3D CHECKSUM_PARTIAL) { @@ -327,6 +350,13 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_rin= g, struct sk_buff *skb) } } =20 + if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) { + do_onestep_tstamp =3D true; + tstamp =3D enetc_update_ptp_sync_msg(priv, skb); + } else if (enetc_cb->flag & ENETC_F_TX_TSTAMP) { + do_twostep_tstamp =3D true; + } + i =3D tx_ring->next_to_use; txbd =3D ENETC_TXBD(*tx_ring, i); prefetchw(txbd); @@ -346,11 +376,6 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_rin= g, struct sk_buff *skb) count++; =20 do_vlan =3D skb_vlan_tag_present(skb); - if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) - do_onestep_tstamp =3D true; - else if (enetc_cb->flag & ENETC_F_TX_TSTAMP) - do_twostep_tstamp =3D true; - tx_swbd->do_twostep_tstamp =3D do_twostep_tstamp; tx_swbd->qbv_en =3D !!(priv->active_offloads & ENETC_F_QBV); tx_swbd->check_wb =3D tx_swbd->do_twostep_tstamp || tx_swbd->qbv_en; @@ -393,8 +418,6 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring= , struct sk_buff *skb) } =20 if (do_onestep_tstamp) { - u32 tstamp =3D enetc_update_ptp_sync_msg(priv, skb); - /* Configure extension BD */ temp_bd.ext.tstamp =3D cpu_to_le32(tstamp); e_flags |=3D ENETC_TXBD_E_FLAGS_ONE_STEP_PTP; @@ -3314,7 +3337,7 @@ int enetc_hwtstamp_set(struct net_device *ndev, struct enetc_ndev_priv *priv =3D netdev_priv(ndev); int err, new_offloads =3D priv->active_offloads; =20 - if (!IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK)) + if (!enetc_ptp_clock_is_enabled(priv->si)) return -EOPNOTSUPP; =20 switch (config->tx_type) { @@ -3364,7 +3387,7 @@ int enetc_hwtstamp_get(struct net_device *ndev, { struct enetc_ndev_priv *priv =3D netdev_priv(ndev); =20 - if (!IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK)) + if (!enetc_ptp_clock_is_enabled(priv->si)) return -EOPNOTSUPP; =20 if (priv->active_offloads & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index c65aa7b88122..879bc6466e8b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -611,6 +611,14 @@ int enetc_psfp_init(struct enetc_ndev_priv *priv); int enetc_psfp_clean(struct enetc_ndev_priv *priv); int enetc_set_psfp(struct net_device *ndev, bool en); =20 +static inline bool enetc_ptp_clock_is_enabled(struct enetc_si *si) +{ + if (is_enetc_rev1(si)) + return IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK); + + return IS_ENABLED(CONFIG_PTP_1588_CLOCK_NETC); +} + static inline void enetc_get_max_cap(struct enetc_ndev_priv *priv) { struct enetc_hw *hw =3D &priv->si->hw; diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h b/drivers/net= /ethernet/freescale/enetc/enetc4_hw.h index aa25b445d301..a8113c9057eb 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc4_hw.h @@ -171,6 +171,12 @@ /* Port MAC 0/1 Pause Quanta Threshold Register */ #define ENETC4_PM_PAUSE_THRESH(mac) (0x5064 + (mac) * 0x400) =20 +#define ENETC4_PM_SINGLE_STEP(mac) (0x50c0 + (mac) * 0x400) +#define PM_SINGLE_STEP_CH BIT(6) +#define PM_SINGLE_STEP_OFFSET GENMASK(15, 7) +#define PM_SINGLE_STEP_OFFSET_SET(o) FIELD_PREP(PM_SINGLE_STEP_OFFSET, = o) +#define PM_SINGLE_STEP_EN BIT(31) + /* Port MAC 0 Interface Mode Control Register */ #define ENETC4_PM_IF_MODE(mac) (0x5300 + (mac) * 0x400) #define PM_IF_MODE_IFMODE GENMASK(2, 0) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index b3dc1afeefd1..107f59169e67 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -569,6 +569,9 @@ static const struct net_device_ops enetc4_ndev_ops =3D { .ndo_set_features =3D enetc4_pf_set_features, .ndo_vlan_rx_add_vid =3D enetc_vlan_rx_add_vid, .ndo_vlan_rx_kill_vid =3D enetc_vlan_rx_del_vid, + .ndo_eth_ioctl =3D enetc_ioctl, + .ndo_hwtstamp_get =3D enetc_hwtstamp_get, + .ndo_hwtstamp_set =3D enetc_hwtstamp_set, }; =20 static struct phylink_pcs * diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c b/drivers= /net/ethernet/freescale/enetc/enetc_ethtool.c index 961e76cd8489..cf33b405e76c 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c @@ -2,6 +2,7 @@ /* Copyright 2017-2019 NXP */ =20 #include +#include #include #include #include "enetc.h" @@ -877,23 +878,28 @@ static int enetc_set_coalesce(struct net_device *ndev, return 0; } =20 -static int enetc_get_ts_info(struct net_device *ndev, - struct kernel_ethtool_ts_info *info) +static struct pci_dev *enetc4_get_timer_pdev(struct enetc_si *si) { - struct enetc_ndev_priv *priv =3D netdev_priv(ndev); - int *phc_idx; - - phc_idx =3D symbol_get(enetc_phc_index); - if (phc_idx) { - info->phc_index =3D *phc_idx; - symbol_put(enetc_phc_index); + struct pci_bus *bus =3D si->pdev->bus; + int domain =3D pci_domain_nr(bus); + int bus_num =3D bus->number; + int devfn; + + switch (si->revision) { + case ENETC_REV_4_1: + devfn =3D PCI_DEVFN(24, 0); + break; + default: + return NULL; } =20 - if (!IS_ENABLED(CONFIG_FSL_ENETC_PTP_CLOCK)) { - info->so_timestamping =3D SOF_TIMESTAMPING_TX_SOFTWARE; + return pci_dev_get(pci_get_domain_bus_and_slot(domain, bus_num, devfn)); +} =20 - return 0; - } +static void enetc_get_ts_generic_info(struct net_device *ndev, + struct kernel_ethtool_ts_info *info) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(ndev); =20 info->so_timestamping =3D SOF_TIMESTAMPING_TX_HARDWARE | SOF_TIMESTAMPING_RX_HARDWARE | @@ -908,6 +914,42 @@ static int enetc_get_ts_info(struct net_device *ndev, =20 info->rx_filters =3D (1 << HWTSTAMP_FILTER_NONE) | (1 << HWTSTAMP_FILTER_ALL); +} + +static int enetc_get_ts_info(struct net_device *ndev, + struct kernel_ethtool_ts_info *info) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + struct enetc_si *si =3D priv->si; + struct pci_dev *timer_pdev; + int *phc_idx; + + if (!enetc_ptp_clock_is_enabled(si)) + goto timestamp_tx_sw; + + if (is_enetc_rev1(si)) { + phc_idx =3D symbol_get(enetc_phc_index); + if (phc_idx) { + info->phc_index =3D *phc_idx; + symbol_put(enetc_phc_index); + } + } else { + timer_pdev =3D enetc4_get_timer_pdev(si); + if (!timer_pdev) + goto timestamp_tx_sw; + + info->phc_index =3D netc_timer_get_phc_index(timer_pdev); + pci_dev_put(timer_pdev); + if (info->phc_index < 0) + goto timestamp_tx_sw; + } + + enetc_get_ts_generic_info(ndev, info); + + return 0; + +timestamp_tx_sw: + info->so_timestamping =3D SOF_TIMESTAMPING_TX_SOFTWARE; =20 return 0; } @@ -1296,6 +1338,7 @@ const struct ethtool_ops enetc4_pf_ethtool_ops =3D { .get_rxfh =3D enetc_get_rxfh, .set_rxfh =3D enetc_set_rxfh, .get_rxfh_fields =3D enetc_get_rxfh_fields, + .get_ts_info =3D enetc_get_ts_info, }; =20 void enetc_set_ethtool_ops(struct net_device *ndev) --=20 2.34.1 From nobody Tue Oct 7 09:02:42 2025 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012064.outbound.protection.outlook.com [52.101.66.64]) (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 0F94A21ABD0; Fri, 11 Jul 2025 07:18:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218303; cv=fail; b=jPPDnD3vs8l5FfUoArX/1OVwNAsLPj41R6jo3YwtYN9iksDaAPqGea7ou0oAY08guloXM1iOl4s5rSVLyuLXAA4mP2pkXRBaTM93fCVQrOhMwXqAriFJXF8uHx0XJ0ucPsKjSI5GuGthZMkXbW1fe7lPfvckyDfM9fGFyc+u64M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752218303; c=relaxed/simple; bh=HSnrVp0ozWn5I3ggTDQ2pLI3mgf8wiqH4j7dBm9QE3s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=QUWqgWQdMiG+LC+SS5CscypTU1m8n6BX4A7oHpharr/e88E9el6TMwJjcE9rDUePhzpQOsosyClEF7FIDFwR+Hp4cH4roe0stUu1DBMBDnA1Je8Rc476A7g/MRCVzeuteyffouge+nkLwgphGzhTKqO0FfWDYiZXLKPObHkhP2E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=VCSBbsIs; arc=fail smtp.client-ip=52.101.66.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="VCSBbsIs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VzBHA5oi4EGaGxSvovYctiqygqEmPnJLEQTBFVQNZMwz2lLIVMHGDY2+1rK2QN6HDWrSSft7gmo/yJ7YSwIogbdbworebt4rlGU35m+uQGsUvt9Nacf+ez77kX7NyxwOPRBHD7+QKV0PFliOkCs5jpZLgSoeVmR1V6Jp0Ae1lk2UvgOpeDgHGtnf1Lj2yf+FUfNc+VXufwVPEJ904Zkl+l2T5I7adbJBJ7pCKZ7qXgVBr3PmQf8QlJeIUKGMGr9mBqRxM6vJegLHOhBt4Zl0a/R1nmSt3VHhG3soiuqFo9ZtyLcjRoQYVQElIz0/ulus29lV7UptsFduc91jxK4uzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iD4Dhs5cNDhmUTJEBH/01v9XDnV2TK+P5rhG1VqJapI=; b=J+e7HV3vHTVW5xp/mr4Z8EVsUZHJiIxGS8ulFNCyUqH6VS1ZQB1bZntUkWLWO+gLRwB4XjT7PCs3RZDn2MW+Ygtxvv3DHMAqylpTeJvlwfeASt/gvWv1yeaK9sE/CyLAeFMPaRdrhT2kLmYVaNHGNedlXO3BwyIJFN6Tuii/MU/szCqwTbOHevbMXC3v7VMlrMbPrzFM9TIO7j9NHAOWaj7JKyjcrEXvKsXQ1bJZTofFq7dBngeEJQL9uw1OxkASW7uG+5WP59junIn92wyREHWNTY3B96Oezzvu8mUuxPa7JVwkiw7NiqFDh2btdVFwt5WzZyLKUMcWnuw0TWS1cw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iD4Dhs5cNDhmUTJEBH/01v9XDnV2TK+P5rhG1VqJapI=; b=VCSBbsIsrbP6Kvvybm7fjKPJ/utyNTT3y+bwwNDeBRrJCJzE25CXT3wcQx1e683znHnd+4KHHBEPp1RGl7bPJCNpLH1gP5tF7xi2Di/gQC/4+drvBl7ZcqjmZggo1eo946suToil+moQzSR09Lg4ZDqlXIyaw6iODryQWK7GbIU3e6Pg8MRJoVNWH3iTDiVtKTvrtjZu7HK4J25lEJIHqhWRonmloSUDujsQhlMznsXaIpPBwBnOeMETwsRZHqlXskUZkRgypm41fVqDVmIdrUS5UJzGBMV5vK4MH3rgZbhuscbo9kJLOdoz+gzZeGPnu+QPwiUyp/NPKSUP/MIN8g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by DU4PR04MB11361.eurprd04.prod.outlook.com (2603:10a6:10:5cd::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8922.25; Fri, 11 Jul 2025 07:18:21 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8901.024; Fri, 11 Jul 2025 07:18:20 +0000 From: Wei Fang To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, richardcochran@gmail.com, claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: fushi.peng@nxp.com, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: [PATCH net-next 12/12] net: enetc: don't update sync packet checksum if checksum offload is used Date: Fri, 11 Jul 2025 14:57:48 +0800 Message-Id: <20250711065748.250159-13-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250711065748.250159-1-wei.fang@nxp.com> References: <20250711065748.250159-1-wei.fang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MAXP287CA0004.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::14) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|DU4PR04MB11361:EE_ X-MS-Office365-Filtering-Correlation-Id: 8310eb10-889f-4940-4862-08ddc04b1d6b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|19092799006|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?SaxXLoTsWQjeXS3NaPaPC3IdvklhSovWkkENxMx7Tj9UG1BXW0Ooe633eoH9?= =?us-ascii?Q?Av8CYbihzSrOkJiFkLnXPFtl9AUyVelHUYyJwdWCIqewFZQ8fAqRnnuYSeUy?= =?us-ascii?Q?PTNXMFn4/KszLjKfaVfcpwCIZ+HlGVWttRdLLkNpjJ2jvNl+rWUAMnXs3OEA?= =?us-ascii?Q?prfz8IXzyur5SBEablKwuttKh8yiukxqYQWy3rKwP9YBMCssNzJrJ72P2bDL?= =?us-ascii?Q?rzQXGu9uWoife2imn+KBRWrFrJmb6DOIsVK2Y3YxXBgTCeZKGZRgXDq4OYR7?= =?us-ascii?Q?7HBbH0+F9nMjWHV6PJZyV2Biazartb62PfV01cg5H3gJT85HWI7uESlnW6oi?= =?us-ascii?Q?2O2/keaizRgKckILtoVEe0Noau+tAJseZCSlgdL8mrU3D4NMvujLcrRxX6y9?= =?us-ascii?Q?pZZm0AwxccDZx7x3s9fuicZI9Cu0bDqj8b+kSBVahtmbT1EY+Yp37f9/mcxQ?= =?us-ascii?Q?gqMkjxVnAejR9ZWVMX8DBriDJCtrvwmIiNtj4p9DS3ODx8xI4OFbFy6TSRuO?= =?us-ascii?Q?HelbgcQV5xemDWis0sXloYt4pxr6DqzX8RONb6cVczBJ9rJAaYMXlhR30AVQ?= =?us-ascii?Q?jv0AmjCJlwCcmFuQMRbcTJ5xP/odg4stuVpEv7J9V7sQy9xNKq5Zyzcq7a0R?= =?us-ascii?Q?QWDLmttVFj2KVHK7I1Ldmqr53P/VNcaatKZpGBjA1B71Ig9JHkILWZFFZ1iU?= =?us-ascii?Q?fR3Pb6Gq0Uxr8q9zQfvc2+qOv+c7lToSEdQUtqsgqvfBtc2IJVLdBVCEuwXh?= =?us-ascii?Q?uEJAcg8u0PYsDBLSAZVQpQ/4nX48ho8i3Vd3DRYx/+x9NAxbJR42PAEjiNzr?= =?us-ascii?Q?jLquUvGkPBUxZtf9aansWnVHr+zrFUn8t0fhoZ75zI77k9o/9Zfs6+cGDSmN?= =?us-ascii?Q?riGNcvu5bgUE+VwsHHeTj7BbdCjd2VNWHCJlmCqWQZ16SGtaW28ER82wpjf+?= =?us-ascii?Q?a0ASfEME1g37ltzo8yhNayjszozSo/BR6QmVTMtf2bG8FyRy1Op9I2wRH6Rw?= =?us-ascii?Q?8qkuZKnNS7jDeCHRCIEml1FXF9HGrLKFFx2VuyI9yQm5ttIlQLwCrLLM4os1?= =?us-ascii?Q?v+RppHiYS/571yy1CI3S8OVq/K4rOasNIe9g4B84KSj8WXDEd24j1cdbmRtz?= =?us-ascii?Q?hSBVvBUMcDzQxlElqY6GL3C0EDOQHlCCmcvi/I6Qu0L7Pcz0Qff1loyA5w6u?= =?us-ascii?Q?bCCjg2Q7+/e8h0YCVJlmv/GMVEn6J8dSQoQia58Md3EjY8+y6/YjWxy7MN1D?= =?us-ascii?Q?sdo77UKRuXoFrpUysV7rEkjuLKxtQpd0UODyjR3UM9mbqocXJOeqi731PeUv?= =?us-ascii?Q?0kexC/P8HhlcKyB9iFT37b5zivX/7VwlphsABQKrxY9mYUisnZQck1ovV4eh?= =?us-ascii?Q?tVctlXSA2/iu9VTRELqg9PRivHCakSeYQNYYIoIy35+1s9BBkqV+hngOpy4z?= =?us-ascii?Q?0PX8QS864ocduHtem7b9Z1TS6I1VPa41jKeqcx/621+3OCzJk015IPH1N9iP?= =?us-ascii?Q?jDcEH8t7M10c+9A=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(19092799006)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kN2pmrBwHtXZlpWcEVWtKTP7LQ9dqtU6Z+hrRdrI6G3tO/A1DExmHlpmMGKD?= =?us-ascii?Q?KbroVljNvj7d1qwRMUa+wzRna9MfXeydxdKkGmbs7rwOHH4+YEViq1IHi/ht?= =?us-ascii?Q?nFAqaUE8kKPQZ+9M7/JPa5GSvGs2EBGX4YVKwNJ75Uh1lqrucUEWkukzkxKK?= =?us-ascii?Q?OIm/3cbkfLupnrTpOQiexG2R1AtlsORq/KInv7v4dynnh7WKRrcVkxYZjOS7?= =?us-ascii?Q?yQoUT+53fmh2dnkTWSK2NaoRNdHvGOROGxfzz4QRC9fZW+4F6DaQCFMesijw?= =?us-ascii?Q?7jPfWRZ3ipSuq7IiUFy2RZe19D2O/3T3pJ6KI1k2jDKrAMydcQNGGZKss8+d?= =?us-ascii?Q?Dq0xEt7ZSLjlv9vr83nWlDzJyL9x/auI4JEOYT+WOeLGlFTadqJKIvjFqCqJ?= =?us-ascii?Q?aIRmWqYYMNhI6AYO+pwtoztAooVeu5a0FPPs9MQzB6BE6r9pVg8Bw4uotah7?= =?us-ascii?Q?74wwVZZcQPi6RKJSuauQWDnJB8wolyhEvS8ojKAqw7RHQ4SGArAo8wSR4fnm?= =?us-ascii?Q?hcENG6ox6IIo+I0qSA2Qiih38QA2Xx2U1vWNU5u3rZiPP/lxWH6y5OtBn9Q1?= =?us-ascii?Q?XKgfW2fb6MLNPExy5ZLb4REHiM+LeZXh3LtOYK3Oufr5cATEmXtcHwQ8if1a?= =?us-ascii?Q?YsOkJqirlbQvnWIcjACKfKzCA0FShS4STDxGVlqbptIAm56LZvLS85oDfGSU?= =?us-ascii?Q?oTrfzwEXWBMLDtn1T9xaLA3WHkZUzlvAk6opeLRqOZqZsqNJx9qw/w3p7Oow?= =?us-ascii?Q?Dv1VhBVk/8xLPgJeZ+Gzzyhq1/sgDhJUIxj5kV3SOzWz0N7Zo6T68ZBQrW4A?= =?us-ascii?Q?Ctdd64j5+nSr3KWPvO2AQvZS7Eu+lX24dvHO9BNkEiBFYmCIloeUe4UC+iJX?= =?us-ascii?Q?AfuTvuIkbr13VtVjZYm1NQfotFDmAqHlQH+3A0bqdqj35Na0JfKKTsb9Niqi?= =?us-ascii?Q?bE7+vPwm5dyV3NwukEy94UdWLaViOkm/hlokSgyJlDNjPvV5oMe69+hh1AZh?= =?us-ascii?Q?sVhKm7+9WIblSYXifBVdYE3032UIPPg/IkH2kgzIn0g9nLogEVCNE5SXtI4V?= =?us-ascii?Q?W7RLjBb6AKrWt8uJKmW4JQSYaaKoW5PEjj0LHgbChqKCpdFM7mUKk2MOZAAK?= =?us-ascii?Q?aTWgWx1V8sU46HqkXNhFO2ZiSNpFasqgwftxTufYgBNDSVfGxzeIRq8hwFDw?= =?us-ascii?Q?KRjNt31efNzMM84QBr3SkGsrOnJD6GazbctX7EJIIcibt4wZCbkGqYXjRP7c?= =?us-ascii?Q?jmSZussKrsN6Wj1HlOSkY32PCyawUgHDWEUqreG7Ov9YEV1qRMJ3+isyT+xg?= =?us-ascii?Q?vj0RZs2uLEqfaS+5SWnv6xn3r1ucNnId8sC1T+MUcYBxclqT3ysxtsa9arjD?= =?us-ascii?Q?0R/MSchtEayyP30NWNzHemmzuQSR7TRZGajuTPWNh7Pf8mtzOMGZYtWbB9xR?= =?us-ascii?Q?kTzfyXDqnMp3pw4wSJYquptiEryCU+ALffiMVvNqGWVqwJENyiwYvPFeeps4?= =?us-ascii?Q?LGlC+V0AUIjTCw0FSUbs4Ee1X/qzvjpLU/pn1gUnQCXNUeChfNikQm9C9Bfb?= =?us-ascii?Q?ghUVcn6USn7v8HiEqRCAWlSKcvxgIktLvr4ZxgVF?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8310eb10-889f-4940-4862-08ddc04b1d6b X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jul 2025 07:18:20.8887 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xWa/yv/fPhcdLR3TjM2BaMzCP5vgGUmrpn4uNIthvFatcVWahgCCmXGizBTfzBiS9NjYW4WfjYFbN7mnmH6pXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR04MB11361 Content-Type: text/plain; charset="utf-8" For ENETC v4, the hardware has the capability to support Tx checksum offload. so the enetc driver does not need to update the UDP checksum of PTP sync packets if Tx checksum offload is enabled. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index 6e04dd825a95..cf72d50246a9 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -247,7 +247,7 @@ static void enetc4_set_one_step_ts(struct enetc_si *si,= bool udp, int offset) } =20 static u32 enetc_update_ptp_sync_msg(struct enetc_ndev_priv *priv, - struct sk_buff *skb) + struct sk_buff *skb, bool csum_offload) { struct enetc_skb_cb *enetc_cb =3D ENETC_SKB_CB(skb); u16 tstamp_off =3D enetc_cb->origin_tstamp_off; @@ -269,18 +269,17 @@ static u32 enetc_update_ptp_sync_msg(struct enetc_nde= v_priv *priv, * - 48 bits seconds field * - 32 bits nanseconds field * - * In addition, the UDP checksum needs to be updated - * by software after updating originTimestamp field, - * otherwise the hardware will calculate the wrong - * checksum when updating the correction field and - * update it to the packet. + * In addition, if csum_offload is false, the UDP checksum needs + * to be updated by software after updating originTimestamp field, + * otherwise the hardware will calculate the wrong checksum when + * updating the correction field and update it to the packet. */ =20 data =3D skb_mac_header(skb); new_sec_h =3D htons((sec >> 32) & 0xffff); new_sec_l =3D htonl(sec & 0xffffffff); new_nsec =3D htonl(nsec); - if (enetc_cb->udp) { + if (enetc_cb->udp && !csum_offload) { struct udphdr *uh =3D udp_hdr(skb); __be32 old_sec_l, old_nsec; __be16 old_sec_h; @@ -319,6 +318,7 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring= , struct sk_buff *skb) struct enetc_tx_swbd *tx_swbd; int len =3D skb_headlen(skb); union enetc_tx_bd temp_bd; + bool csum_offload =3D false; union enetc_tx_bd *txbd; int i, count =3D 0; skb_frag_t *frag; @@ -345,6 +345,7 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring= , struct sk_buff *skb) temp_bd.l4_aux =3D FIELD_PREP(ENETC_TX_BD_L4T, ENETC_TXBD_L4T_UDP); flags |=3D ENETC_TXBD_FLAGS_CSUM_LSO | ENETC_TXBD_FLAGS_L4CS; + csum_offload =3D true; } else if (skb_checksum_help(skb)) { return 0; } @@ -352,7 +353,7 @@ static int enetc_map_tx_buffs(struct enetc_bdr *tx_ring= , struct sk_buff *skb) =20 if (enetc_cb->flag & ENETC_F_TX_ONESTEP_SYNC_TSTAMP) { do_onestep_tstamp =3D true; - tstamp =3D enetc_update_ptp_sync_msg(priv, skb); + tstamp =3D enetc_update_ptp_sync_msg(priv, skb, csum_offload); } else if (enetc_cb->flag & ENETC_F_TX_TSTAMP) { do_twostep_tstamp =3D true; } --=20 2.34.1