Problem Details
An application requiring IEEE 1588 Precision Time Protocol synchronization on a Jetson Orin NX module fails at the first check: ethtool -T eth0 reports no hardware timestamping support on the on-board Ethernet interface. The platform under test is JetPack 5.1.1, L4T 35.3.1. A second engineer independently confirmed the same behavior on the same class of developer board after selecting the module specifically for its expected PTP capability.
The vendor response to the report was a single sentence: "Software PTP is not supported on Orin." That statement is ambiguous and must not be read as a complete answer. Two mutually exclusive readings exist:
| Reading | Implication | How to disprove |
|---|---|---|
| Only software (kernel/driver) timestamping is unsupported; hardware timestamping exists but is not exposed by the driver build in use | A driver/device-tree or firmware change could expose SOF_TIMESTAMPING_TX_HARDWARE / RX_HARDWARE and a PHC device |
Look for a /dev/ptp* node and a non--1 PTP Hardware Clock index in ethtool -T after driver reload |
| PTP as a whole is not a supported feature on this module/carrier combination | No amount of userspace configuration will produce hardware timestamps; an external time source is required | Confirm in writing with the module vendor for the exact module P/N, carrier, and L4T release |
Root Cause Analysis
On Linux, IEEE 1588 hardware timestamping is only usable when every layer below reports capability. Missing any one of them produces exactly the symptom seen here — ethtool -T listing only software modes.
- MAC timestamping unit present and enabled. The Ethernet MAC must contain a 1588 timestamp block and the block must be clocked and released from reset.
- Device tree describes the timestamp clock. The MAC node must supply the PTP reference clock and any timestamp-related properties the driver expects. If the node omits them, most Linux MAC drivers silently register the interface without a PTP hardware clock (PHC).
-
Driver registers a PHC. The driver must call into the kernel PTP clock subsystem, creating
/dev/ptpNand returning a valid clock index from theETHTOOL_GET_TS_INFOioctl. -
Kernel config includes the PTP subsystem.
CONFIG_PTP_1588_CLOCKmust be built in or as a module; a defconfig without it removes the ioctl path entirely. - PHY path does not break timestamps. A PHY-side timestamper, if used, must be bound; RGMII delay and MDIO issues will not remove timestamping but will corrupt accuracy.
In this case the reported failure is at layer 3 or above: the interface is up and passing traffic, but the timestamping information block is empty. That is consistent with either a driver that never registers a PHC or a kernel without the PTP subsystem — and consistent with the vendor's position that the feature is not offered on this platform.
Diagnostic Procedure
Run these in order on the target. Record the exact output; it is the evidence you will need if you escalate to the module vendor.
-
Query timestamping capabilities.
A PTP-capable interface reportsethtool -T eth0hardware-transmit,hardware-receive,hardware-raw-clock, aPTP Hardware Clock:index >= 0, and non-emptyHardware Transmit Timestamp Modes/Hardware Receive Filter Modes. A non-capable interface reports onlysoftware-transmit,software-receive,software-system-clockandPTP Hardware Clock: none. -
Check for a PHC character device.
No node means no registered hardware clock, regardless of what any documentation claims.ls -l /dev/ptp* -
Confirm the kernel PTP subsystem exists.
Ifzcat /proc/config.gz 2>/dev/null | grep -E 'PTP_1588|NETWORK_PHY_TIMESTAMPING' grep -r ptp /proc/modules/proc/config.gzis absent, check the config file shipped with your kernel source tree instead. -
Read driver messages at bring-up.
Drivers that support 1588 normally log PHC registration. Absence of any PTP line, or an explicit "PTP not supported" message, closes the question at the driver level.dmesg | grep -iE 'eth0|ptp|1588|timestamp' -
Identify the exact driver and interface.
Capture driver name, driver version, firmware version, and bus info. Vendor support cannot act on a report without these.ethtool -i eth0 -
Test with linuxptp directly.
ptp4l -i eth0 -m -H-Hforces hardware timestamping. If the capability is missing, ptp4l exits immediately with an ioctl/timestamping error rather than degrading silently. That failure message is a clean, quotable artifact for a support ticket.
Solution Paths
Choose based on what step 1-6 returned and on your accuracy budget.
| Situation | Action | Expected sync quality |
|---|---|---|
/dev/ptp0 exists but ethtool -T shows no HW modes |
Mismatch between PHC registration and the ethtool ioctl. Reload the driver, then re-run ethtool -T. Escalate with both outputs. |
Hardware-class once resolved |
No PHC, kernel lacks CONFIG_PTP_1588_CLOCK
|
Rebuild the kernel with the PTP subsystem enabled, reflash, retest. Only worth doing if the MAC driver actually contains 1588 support. | Depends on driver |
| No PHC, driver has no 1588 code path, vendor confirms unsupported | Stop pursuing on-SoC hardware timestamping. Move to an external timestamping path (below). | N/A |
| Sub-millisecond, not sub-microsecond, is acceptable | Run ptp4l -i eth0 -m -S (software timestamping) or NTP/chrony against a local grandmaster. |
Typically hundreds of microseconds to low milliseconds, load-dependent |
External timestamping options when the SoC MAC cannot do it
-
Add a PTP-capable NIC on PCIe or USB 3.x. A discrete NIC with its own 1588 timestamp unit registers its own PHC, independent of the SoC MAC. Verify with the same
ethtool -Tcheck on the new interface before committing. Confirm the NIC's Linux driver is present in your L4T kernel or buildable against it. - Use a hardware PPS discipline. Terminate PTP on a separate device (industrial switch with boundary-clock function, or a dedicated PTP-to-PPS converter) and feed 1PPS plus a serial or GPIO time-of-day message into the Jetson. Discipline the system clock with a PPS-aware daemon. This decouples the accuracy of your time base from the SoC MAC entirely.
- Timestamp in the peripheral, not the CPU. If the requirement is correlating sensor data rather than disciplining the OS clock, move the timestamp into the camera/sensor trigger domain and use the Jetson only for logging. This is usually the lowest-risk redesign.
ethtool -T output from the exact configuration you will ship.Verification
After applying a fix or a fallback, verify quantitatively — do not accept "ptp4l started without error" as proof.
-
Confirm capability, not just process start.
ethtool -T <iface>must showhardware-transmit,hardware-receive, and a valid PHC index. -
Watch ptp4l convergence. With
-m, ptp4l prints periodic lines containingmaster offset,freq, andpath delay. A healthy hardware-timestamped slave settles to a small, stable offset with a slowly varying frequency correction. Large or oscillating offsets indicate asymmetric delay, a non-transparent switch in the path, or software timestamping in disguise. -
Check state transitions. The port must reach
SLAVE(orMASTER) and stay there. RepeatedUNCALIBRATEDtoSLAVEcycling points to announce timeouts or packet loss, not timestamping. -
Discipline the system clock and verify it. Run
phc2systo slewCLOCK_REALTIMEfrom the PHC, and confirm the reported offset stays bounded across a long soak, not just at startup. - Measure against an independent reference. The only conclusive test is a physical one: output a periodic pulse from the target and from the grandmaster domain, and compare the edges on a scope or a time-interval counter. Log the peak-to-peak deviation over the full operating temperature and network-load profile.
- Soak under load. Software timestamping degrades sharply with CPU and interrupt load. Repeat the measurement with the application's real workload running; a result taken on an idle board is not representative.
Escalation Package
If you take this back to the module vendor, submit all of the following in one message so the question cannot be deflected:
- Exact module part number, carrier board, and revision
- BSP identification — in this case JetPack 5.1.1 / L4T 35.3.1 — plus
uname -a - Full
ethtool -iandethtool -Toutput for the interface -
ls -l /dev/ptp*result - Filtered
dmesgfor the interface and PTP subsystem - The exact
ptp4l -Hfailure message - One direct question: "Does this module part number expose IEEE 1588 hardware timestamping on this interface in any released BSP, yes or no, and if yes, in which release?"
A yes/no answer against a specific part number is the deliverable. Anything less leaves the schedule risk open.
FAQ
How do I check if my Linux interface supports PTP hardware timestamping?
Run ethtool -T eth0. Hardware support requires hardware-transmit, hardware-receive, hardware-raw-clock, and a PTP Hardware Clock index of 0 or higher. If it reports none and lists only software modes, the driver has not registered a PTP hardware clock.
Why does ptp4l fail immediately on my Jetson Orin NX?
Starting ptp4l with -H forces hardware timestamping, and the ioctl fails when the interface exposes no PTP hardware clock. Capture that exact error message — it is the cleanest evidence for a support ticket.
Can I use PTP without hardware timestamping?
Yes. Run ptp4l -i eth0 -m -S for software timestamping. Accuracy drops from the sub-microsecond class to roughly hundreds of microseconds or worse and degrades further under CPU and interrupt load, so validate it against your actual application workload.
What is the alternative if the SoC Ethernet MAC cannot do 1588?
Add a discrete PTP-capable NIC on PCIe or USB 3.x and verify it with ethtool -T on the new interface, or terminate PTP externally and discipline the board from a 1PPS signal plus a time-of-day message.
Does a forum statement that a SoC supports PTP guarantee it on my board?
No. Hardware timestamping requires the MAC, PHY, carrier board design, device tree, and kernel driver to all support it in your specific BSP release. Require written confirmation tied to your exact part number and BSP version, ideally with real ethtool -T output from that configuration.