TDPLL

T-DPLL configuration and management

TDPLL

Configure the T-DPLL (time and frequency digital PLL) firmware: DPLL instances, input and output clocks, reference monitoring and selection, switching, holdover and SyncE ESMC. T-DPLL runs as firmware on an embedded core, on top of the PTP stack (see PTP).

On SONiC Trident 3 switches that firmware is not running. Every form that reads DPLL or clock state fails with <function>() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable, followed by the SAI shell’s Failed to execute the diagnostic command. Error: Operation failed.; table forms print their header line first. Only tdpll monitor get and tdpll select get answer, from the shell’s own copy of the settings: all thresholds 0 and Best : 0 (GPIO0). These values do not mean a reference is in use.

The first word selects the area: INSTance, INputclk, OUTputclk, MONitor, SELect, NOTIfication, SWitch, ESMC or HOLDover (each can be abbreviated to its capital letters). Every area accepts HELP to print its part of the usage. An unknown word prints the usage.

The built-in help does not list NOTIfication, which takes ConTRoL CallBackENable=<y/n>. It shows TDPLL HOLDover RESET <output>; the shell actually takes TDPLL HOLDover RESET INDeX=<output>.

Safety: show and Get forms are read-only. Set, ConTRoL, Register and RESET change the synchronisation firmware and can disturb SyncE or PTP time distribution if it is in use.

Hardware-validated

drivshell> tdpll instance show
#  GP0  GP1  GP2  GP3  GP4  GP5  SE1  SE2  1588  BS0  BS1 S-PLL M-PLL  BW  PBO
bcm_common_tdpll_dpll_reference_get() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable

Failed to execute the diagnostic command. Error: Operation failed.
TDPLL INSTance [show [<index>] | Get <index> | Set <index> [INputMaSK=<hex>] [OUTputMaSK=<hex>] [PHaseMODE=<mode>] [PHaseOFFSET=<n>] [DPLLBandWidth=<bw>]]

Show or configure DPLL instances. Values of PHaseMODE and DPLLBandWidth are names (see the built-in help).

Hardware-validated

drivshell> tdpll instance get 0
bcm_common_tdpll_dpll_bindings_get() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable

Failed to execute the diagnostic command. Error: Operation failed.
TDPLL INputclk [show [<index>] | Get <index> | Set <index> [L1MUX=<n>] [L1PORT=<port>] [MAC=<mac>] [ENable=<y/n>] [FREQuency=<n>] [TSFREQuency=<n>] [QL=<QL>] [PRIOrity=<n>] [LOCKout=<y/n>]]

Show or configure an input clock (GPIO0–GPIO5, SyncE1, SyncE2, 1588-Freq, 1588-Phase).

Hardware-validated

drivshell> tdpll inputclk show
ID     En?   Offset   Valid    QL     Prio   LkO Mux   DPLLS
GPIO0  bcm_common_tdpll_input_clock_enable_get() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable

Failed to execute the diagnostic command. Error: Operation failed.
TDPLL OUTputclk <Get <index> | Set <index> [ENable=<y/n>] [FREQuency=<n>] [TSFREQuency=<n>] [DerivFREQuency=<n>]>

Show or configure an output clock (BroadSync0/1, SerDesLCPLL, MasterLCPLL, 1588-Hybrid, GPIO0–GPIO5).

Hardware-validated

drivshell> tdpll outputclk get BroadSync0
bcm_common_tdpll_output_clock_enable_get() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable

Failed to execute the diagnostic command. Error: Operation failed.
TDPLL MONitor <ConTRoL CallBackENable=<y/n> | Get | Set [INTERVAL=<s>] [SoFTWaRN=<ppb>] [HaRDACCept=<ppb>] [HaRDREJect=<ppb>]>

Reference monitoring: callback control, thresholds.

Hardware-validated

drivshell> tdpll monitor get

T-DPLL Input Clock Monitoring Parameters and Thresholds.
Unit: 0   Stack: 0
--------------------------------------------------------------------------------
Interval   : 0 sec
Soft-Warn  : 0 ppb
Hard-Accept: 0 ppb
Hard-Reject: 0 ppb
TDPLL SELect <ConTRoL CallBackENable=<y/n> | Get <dpll_index> | Set <dpll_index> QLENabled=<y/n>>

Reference selection.

Hardware-validated

drivshell> tdpll select get 0

T-DPLL Reference Selection Configuration and State Data.
Unit: 0   Stack: 0
--------------------------------------------------------------------------------
DPLL  : 0
Modes : QL-Enabled [ ]
Best  : 0 (GPIO0)
TDPLL NOTIfication ConTRoL CallBackENable=<y/n>

Enable or disable the notification callback. Not in the built-in help.

Unvalidated

drivshell> tdpll notification control callbackenable=y
TDPLL SWitch <ConTRoL ENable=<y/n> | Get <dpll_index> | Set <dpll_index> REVertive=<y/n>>

Reference switching.

Hardware-validated

drivshell> tdpll switch get 0
bcm_common_tdpll_dpll_reference_get() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable

Failed to execute the diagnostic command. Error: Operation failed.
TDPLL ESMC <Get <dpll_index> | Set <dpll_index> … | Register <dpll_index> G8273PhaseTransientEnable=<y/n>>

SyncE ESMC (G.8264) configuration. Set keys: MAC, QL, HoldoverQL, G781, RXENable, TXENable, RXPortBitMaP, TXPortBitMaP (port bitmaps, see Ports and port bitmaps), G8264ESSMCode.

Hardware-validated

drivshell> tdpll esmc get 0
bcm_common_tdpll_esmc_mac_get() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable

Failed to execute the diagnostic command. Error: Operation failed.
TDPLL HOLDover <Get <output> | Set <output> [FREQuency=<ppt>] [Mode=<mode>] | RESET INDeX=<output>>

Holdover configuration.

Hardware-validated

drivshell> tdpll holdover get BroadSync0
bcm_common_tdpll_output_clock_holdover_data_get() FAILED: bcm_common_ptp_clock_port_identity_get() returned -16 : Feature unavailable

Failed to execute the diagnostic command. Error: Operation failed.

Built-in help

Usages:
  TDPLL INSTance <subcommand> [...]
     TDPLL INSTance [show] [<index>]
        I/i: Enabled/Disabled Input
        O/o: Enabled/disabled output
          *: Selected
     TDPLL INSTance Get <index>
     TDPLL INSTance Set <index> INputMaSK=<hex> OUTputMaSK=<hex>
                        PHaseMODE=<|NONE|PBO|PHaseSLEW|> PHaseOFFSET=<value>
                        DPLLBandWidth=<bandwidth>
                    where <bandwidth> = | 0.01Hz | 0.05Hz | 0.1Hz | 0.5Hz |
                                        | 1Hz    | 5Hz    | 10Hz  |

  TDPLL INputclk <subcommand> [...]
     TDPLL INputclk [show] [<index>]
     TDPLL INputclk Get <index>
                    where <index> = | GPIO0  | GPIO1  | GPIO2  | GPIO3  |
                                    | GPIO4  | GPIO5  | SyncE1 | SyncE2 |
                                    | 1588-Freq | 1588-Phase |
     TDPLL INputclk Set <index> L1MUX=<mux> L1PORT=<port> MAC=<mac>
                        FREQuency=<value> TSFREQuency=<value> ENable=<y/n>
                        QL=<QL> PRIOrity=<value> LOCKout=<y/n>
                    where <QL> = | QL-PRC  | QL-SSU-A | QL-SSU-B | (Option I)
                                 | QL-SEC  | QL-DNU   |            (Option I)
                                 | QL-STU  | QL-PRS   | QL-TNC   | (Option II)
                                 | QL-ST2  | QL-ST3   | QL-SMC   | (Option II)
                                 | QL-ST3E | QL-PROV  | QL-DUS   | (Option II)
                                 | QL-UNK  | QL-SEC   |            (Option III)

  TDPLL OUTputclk <subcommand> [...]
     TDPLL OUTputclk Get <index>
                     where <index> = | BroadSync0    | BroadSync1    |
                                     | SerDesLCPLL   | MasterLCPLL   |
                                     | 1588-Hybrid   | GPIO0 | GPIO1 |
                                     | GPIO2 | GPIO3 | GPIO4 | GPIO5 |
     TDPLL OUTputclk Set <index> ENable=<y/n>
                         FREQuency=<value> TSFREQuency= <value>
                         DerivFREQuency=<value>

  TDPLL MONitor <subcommand> [...]
     TDPLL MONitor ConTRoL CallBackENable=<y/n>
     TDPLL MONitor Get
     TDPLL MONitor Set INTERVAL=<value-sec>
                       SoFTWaRN=<value-ppb>
                       HaRDACCept=<value-ppb> HaRDREJect=<value-ppb>

  TDPLL SELect <subcommand> [...]
     TDPLL SELect ConTRoL CallBackENable=<y/n>
     TDPLL SELect Get <dpll_index>
     TDPLL SELect Set <dpll_index> QLENabled=<y/n>

  TDPLL SWitch <subcommand> [...]
     TDPLL SWitch ConTRoL ENable=<y/n>
     TDPLL SWitch Get <dpll_index>
     TDPLL SWitch Set <dpll_index> REVertive=<y/n>

  TDPLL HOLDover <subcommand> [...]
     TDPLL HOLDover Get <output>
                    where <output> = | BroadSync0  | BroadSync1  |
                                     | SerDesLCPLL | MasterLCPLL |
                                     | 1588-Hybrid |
     TDPLL HOLDover Set <ouput> [FREQuency=<freqppt>] [Mode=<mode>]
                    where <mode> = | INSTantaneous | ONEsecond   | MANual |
                                   | FASTaverage   | SLOWaverage |
     TDPLL HOLDover RESET <output>

  TDPLL ESMC <subcommand> [...]
     TDPLL ESMC Get <dpll_index>
     TDPLL ESMC Set <dpll_index> MAC=<mac> QL=<QL>
                    HoldoverQL=<QL> G781=<OPTionI|OPTionII|OPTionIII>
                    RXENable=<y/n> TXENable=<y/n>
                    RXPortBitMaP=<port bitmap> TXPortBitMaP=<port bitmap>
                    G8264ESSMCode=<essm_code>
     TDPLL ESMC Register <dpll_index> G8273PhaseTransientEnable=<y/n>
                where <QL> = | QL-PRC  | QL-SSU-A | QL-SSU-B | (Option I)
                             | QL-SEC  | QL-DNU   |            (Option I)
                             | QL-STU  | QL-PRS   | QL-TNC   | (Option II)
                             | QL-ST2  | QL-ST3   | QL-SMC   | (Option II)
                             | QL-ST3E | QL-PROV  | QL-DUS   | (Option II)
                             | QL-UNK  | QL-SEC   |            (Option III)
                NOTE: G781 and  RXENable are global attributes, which apply
                      to all T-DPLL instances.
                where <essm_code> =
                     <0 - bcmEsmcEssmCodeNone> | <0xff - bcmEsmcEssmCodeEEC>

Further reading

SDK-6.5.20 HSDK Getting Started Guide (GS-SDK6520-R), plus SDK-6.5.20/21/22 Release Notes (RN-SDK65xx-R).