DPLL(8)

๐Ÿ“ฆ
version 7.3.0 ยท 4 versions
, in arch rolling, nixpkgs unstable, ubuntu stonking

โœจ DPLL(8) โ€” dpll ๐Ÿ’–

okay bestie, welcome to the DPLL(8) manual page, and no cap, this one is a whole vibe. The star? It's dpll, the Digital Phase Locked Loop subsystem management tool. Let's get into it.


๐ŸŒธ NAME ๐ŸŒธ

dpll โ€” Digital Phase Locked Loop (DPLL) subsystem management. That's the name line, iconic, periodt.


๐Ÿฆ‹ SYNOPSIS ๐Ÿฆ‹

dpll [ OPTIONS ] device { COMMAND | help }

dpll [ OPTIONS ] pin { COMMAND | help }

dpll [ OPTIONS ] monitor

OPTIONS := { -V | --Version | -j | --json | -p | --pretty | -t |
        --timestamp | --tshort }

๐Ÿ’… DESCRIPTION ๐Ÿ’…

The dpll utility is used to configure and monitor Digital Phase Locked Loop (DPLL) devices and pins. DPLLs are used for clock synchronization in various hardware, particularly in telecommunications and networking equipment.

A DPLL device can lock to one or more input pins and provide synchronized output. Pins can be physical external signals (like GNSS 1PPS, SyncE), or internal oscillators.


โœจ OPTIONS โœจ

  • -V, --Version โ€” Print the version of the dpll utility and exit. Slay, short and sweet.
  • -j, --json โ€” Output results in JavaScript Object Notation (JSON).
  • -p, --pretty โ€” When combined with -j, generates a pretty JSON output with indentation and newlines for better human readability.
  • -t, --timestamp โ€” When used with the monitor object, print a Timestamp: line before each received notification, in the same format used by ip monitor.
  • --tshort โ€” Like -t, but emits a more compact, ISO 8601 inline prefix [YYYY-MM-DDTHH:MM:SS.uuuuuu] in front of each notification instead of a separate Timestamp: line.

๐Ÿ‘‘ DEVICE COMMANDS ๐Ÿ‘‘

๐ŸŽ€ dpll device show ๐ŸŽ€

dpll device show [ id ID ] [ module-name NAME ] [ clock-id ID ] [ type TYPE ] [ mode MODE ] [ lock-status STATUS ]

Display information about DPLL devices. If no arguments are specified, shows all devices in the system.

  • id ID โ€” Show only the device with the specified numeric identifier.
  • module-name NAME โ€” Show only devices provided by the specified kernel module.
  • clock-id ID โ€” Show only devices with the specified 64-bit clock identifier.
  • type TYPE โ€” Show only devices of the specified type: pps or eec.
  • mode MODE โ€” Show only devices in the specified operating mode: manual or automatic.
  • lock-status STATUS โ€” Show only devices with the specified lock status: unlocked, locked, locked-ho-acq, holdover.

Output includes:

  • Device ID
  • Module name providing the device
  • Clock ID (unique identifier)
  • Operating mode (manual, automatic)
  • Lock status (unlocked, locked, locked-ho-acq, holdover)
  • Lock status error (if present)
  • Clock quality level (if supported)
  • Temperature (if supported)
  • Type (PPS or EEC)
  • Supported modes
  • Phase offset monitor status (enable/disable)
  • Phase offset averaging factor
  • Frequency monitor status (enable/disable)

๐Ÿงš dpll device set ๐Ÿงš

dpll device set id ID [ PARAMETER VALUE ] ...

Configure DPLL device parameters.

  • id ID โ€” Specifies which device to configure (required).
  • mode { automatic | manual } โ€” Set the operating mode of the DPLL device. In automatic mode, the DPLL autonomously selects the best available input source based on priority and quality. In manual mode, the input source must be explicitly configured and the DPLL will not automatically switch sources.
  • phase-offset-monitor { enable | disable } โ€” Enable or disable phase offset monitoring between the device and its pins. When enabled, the kernel continuously measures and reports phase differences.
  • phase-offset-avg-factor FACTOR โ€” Set the averaging factor (1-255) applied to phase offset calculations. Higher values provide smoother but slower-responding measurements.
  • frequency-monitor { enable | disable } โ€” Enable or disable frequency monitoring on the device. When enabled, the kernel continuously measures and reports actual pin frequencies, which can be read via the measured-frequency field in pin show output.

๐ŸŒˆ dpll device id-get ๐ŸŒˆ

dpll device id-get [ module-name NAME ] [ clock-id ID ] [ type TYPE ]

Retrieve the device ID based on identifying attributes. Useful for scripting when you need to find a device's numeric ID. At least one attribute should be specified to identify the device.

  • module-name NAME โ€” Kernel module name.
  • clock-id ID โ€” 64-bit clock identifier in decimal or hex (0x prefix).
  • type TYPE โ€” Device type: pps or eec.

๐Ÿฆ‹ PIN COMMANDS ๐Ÿฆ‹

๐Ÿ’– dpll pin show ๐Ÿ’–

dpll pin show [ id ID ] [ parent-device DEVICE_ID ] [ parent-pin PIN_ID ] [ module-name NAME ] [ clock-id ID ] [ board-label LABEL ] [ panel-label LABEL ] [ package-label LABEL ] [ type TYPE ] [ direction DIR ] [ state STATE ] [ operstate OPERSTATE ]

Display information about DPLL pins. If no arguments are specified, shows all pins in the system.

  • id ID โ€” Show only the pin with the specified numeric identifier.
  • parent-device DEVICE_ID โ€” Show only pins that have the specified DPLL device as a parent.
  • parent-pin PIN_ID โ€” Show only pins that have the specified pin as a parent (mux pins).
  • module-name NAME โ€” Show only pins provided by the specified kernel module.
  • clock-id ID โ€” Show only pins with the specified 64-bit clock identifier.
  • board-label LABEL โ€” Show only pins with the specified board label.
  • panel-label LABEL โ€” Show only pins with the specified panel label.
  • package-label LABEL โ€” Show only pins with the specified package label.
  • type TYPE โ€” Show only pins of the specified type: mux, ext, synce-eth-port, int-oscillator, gnss.
  • direction DIR โ€” Show only pins that have a parent-device relationship with the specified direction: input, output. When combined with parent-device, only the specified parent-device relationship is checked.
  • state STATE โ€” Show only pins that have a parent-device relationship with the specified state: connected, disconnected, selectable. When combined with parent-device, only the specified parent-device relationship is checked.
  • operstate OPERSTATE โ€” Show only pins that have a parent-device relationship with the specified operational state: active, standby, no-signal, qual-failed. When combined with parent-device, only the specified parent-device relationship is checked.

Output includes:

  • Pin ID
  • Module name
  • Clock ID
  • Board label (hardware label from device tree or ACPI)
  • Panel label
  • Package label
  • Pin type (mux, ext, synce-eth-port, int-oscillator, gnss)
  • Configured frequency and supported frequency ranges
  • Measured frequency in Hz (when frequency monitoring is enabled)
  • Capabilities (state-can-change, priority-can-change, direction-can-change)
  • Phase adjustment range, granularity, and current value
  • Fractional frequency offset
  • Parent device relationships (direction, priority, state, phase offset)
  • Parent pin relationships
  • Reference sync information
  • Esync frequency and pulse support (if applicable)

๐Ÿ“ dpll pin set ๐Ÿ“

dpll pin set id ID [ PARAMETER VALUE ] ...

Configure DPLL pin parameters. Multiple parameters can be specified in a single command.

  • id ID โ€” Specifies which pin to configure (required).
  • frequency FREQ โ€” Set pin frequency in Hz. The pin must support the specified frequency (check frequency-supported ranges in pin show output).
  • phase-adjust ADJUSTMENT โ€” Set phase adjustment in picoseconds. This value fine-tunes the phase of the output signal. Negative values shift the phase backwards, positive values shift it forwards. The value must be within the phase-adjust-min and phase-adjust-max range.
  • esync-frequency FREQUENCY โ€” Set enhanced SyncE (Synchronous Ethernet) frequency in Hz for capable pins.
  • parent-device DEVICE_ID [ direction DIR ] [ prio PRIO ] [ state STATE ] โ€” Configure the relationship between this pin and a parent DPLL device.
    • direction { input | output } โ€” Set the pin's direction relative to the parent device.
    • prio PRIORITY โ€” Set priority (0-255) for this pin on the parent device.
    • state { connected | disconnected | selectable } โ€” Set the pin's state on the parent device.
  • parent-pin PIN_ID [ state STATE ] โ€” Configure the relationship to a parent pin.
  • reference-sync PIN_ID [ state STATE ] โ€” Configure reference sync relationship with another pin.

๐Ÿฆ„ dpll pin id-get ๐Ÿฆ„

dpll pin id-get [ SELECTOR ] ...

Retrieve a pin ID based on identifying attributes.

  • module-name NAME โ€” Filter by kernel module name.
  • clock-id ID โ€” Filter by 64-bit clock identifier.
  • board-label LABEL โ€” Filter by board label (hardware identifier).
  • panel-label LABEL โ€” Filter by panel label.
  • package-label LABEL โ€” Filter by package label.
  • type TYPE โ€” Filter by pin type: mux, ext, synce-eth-port, int-oscillator, gnss.

๐Ÿ’œ MONITOR COMMAND ๐Ÿ’œ

๐Ÿ”ฅ dpll monitor ๐Ÿ”ฅ

dpll monitor

Monitor DPLL subsystem events in real-time. Displays notifications about:

  • Device creation, deletion, and configuration changes
  • Pin creation, deletion, and configuration changes
  • Lock status changes
  • Phase offset updates
  • Frequency changes

Events are prefixed with their type: [DEVICE_CREATE], [DEVICE_CHANGE], [DEVICE_DELETE], [PIN_CREATE], [PIN_CHANGE], [PIN_DELETE].

Press Ctrl+C to stop monitoring.

โœจ EXAMPLES โœจ

Okay bestie this is the part where it all clicks, like the tutorial level but make it fashion ๐Ÿ’… every single one of these is copy-paste ready, go wild.

๐ŸŒธ Show all DPLL devices

dpll device show

๐ŸŒธ Show specific device in JSON format

dpll -j device show id 0

๐ŸŒธ Set device 0 to manual mode

dpll device set id 0 mode manual

๐ŸŒธ Enable phase offset monitoring on device 0

dpll device set id 0 phase-offset-monitor enable

๐ŸŒธ Enable frequency monitoring on device 0

dpll device set id 0 frequency-monitor enable

๐ŸŒธ Show all EEC devices

dpll device show type eec

๐ŸŒธ Show devices from specific module in JSON

dpll -jp device show module-name ice

๐ŸŒธ Show all pins

dpll pin show

๐ŸŒธ Show all GNSS pins

dpll pin show type gnss

๐ŸŒธ Show GNSS pins from specific module

dpll pin show type gnss module-name ice

๐ŸŒธ Show pin with pretty JSON output

dpll -jp pin show id 5

๐ŸŒธ Show connected input pins on device 0

dpll pin show parent-device 0 direction input state connected

๐ŸŒธ Set pin frequency to 10 MHz

dpll pin set id 0 frequency 10000000

๐ŸŒธ Configure pin relationship to parent device

dpll pin set id 1 parent-device 0 prio 10 direction input state connected

๐ŸŒธ Adjust phase by -1000 picoseconds

dpll pin set id 2 phase-adjust -1000

๐ŸŒธ Set multiple pin parameters at once

dpll pin set id 3 frequency 10000000 phase-adjust -1000

๐ŸŒธ Monitor DPLL events

dpll monitor

๐ŸŒธ Monitor events in JSON format

dpll -jp monitor

๐ŸŒธ Get device ID by module name

dpll device id-get module-name ice

๐ŸŒธ Get pin ID by board label

dpll pin id-get board-label GNSS-1PPS

๐Ÿฆ‹ PHASE ADJUSTMENT ๐Ÿฆ‹

So phase adjustment is specified in picoseconds (1e-12 seconds), and it lets you do that fine-tuning of signal phase. This is crucial for precise time synchronization applications like 5G networks and high-frequency trading โ€” like, the stakes are genuinely giving "one nanosecond off and everything is chaos" ๐Ÿ˜ญ

Important considerations, bestie, do NOT skip these:

  • Check phase-adjust-min and phase-adjust-max before setting values โญ
  • Some hardware requires values to be multiples of phase-adjust-gran ๐Ÿ‘€
  • Negative values shift phase backwards (earlier in time)
  • Positive values shift phase forwards (later in time)
  • The kernel validates all phase adjustment requests โ€” so it's not just vibes, it's enforced ๐Ÿ’…

๐Ÿ’œ CAPABILITIES ๐Ÿ’œ

Pins may have various capabilities that determine which operations are allowed. Think of it like a vibe check before you try anything:

state-can-change

The pin's state (connected/disconnected/selectable) can be modified. ๐ŸŽ€

priority-can-change

The pin's priority can be modified. This may apply to top-level priority or priority within parent-device relationships.

direction-can-change

The pin's direction (input/output) can be modified. ๐Ÿ”ฅ

Use dpll pin show to check which capabilities a pin supports before attempting configuration changes. Fr fr, check first, then flex. โœจ


๐ŸŒˆ EXIT STATUS ๐ŸŒˆ

  • 0 โ€” Success ๐Ÿซถ
  • 1 โ€” Failure ๐Ÿ’€

โญ NOTES โญ

  • The DPLL subsystem requires kernel support (CONFIG_DPLL=y or m)
  • Hardware support varies by device and driver
  • Some operations require specific hardware capabilities
  • Phase offset values are measured by hardware and cannot be set directly
  • Changes to device/pin configuration may affect system clock synchronization
That last one is lowkey the important one, bestie. You're not just poking a file here โ€” you're touching things that keep the whole system's clock in line. Be gentle. ๐Ÿ™ˆ

๐Ÿ‘‘ SEE ALSO ๐Ÿ‘‘

  • ip(8), devlink(8), ethtool(8)
  • Linux kernel documentation: Documentation/driver-api/dpll.rst
  • Netlink specification: Documentation/netlink/specs/dpll.yaml

๐Ÿ’– AUTHOR ๐Ÿ’–

dpll was written by Arkadiusz Kubalewski, Vadim Fedorenko, and others.

This manual page was written by Petr Oros.


๐ŸŽ€ REPORTING BUGS ๐ŸŽ€

Report bugs to <netdev@vger.kernel.org>


And that's the whole page, bestie, you ate it ๐Ÿ“ This one's from iproute2, dated 23 October 2025 โ€” go forth and synchronize your clocks, main character ๐Ÿ’…โœจ๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from