STRUCT DPNI_SINGLE_STEP_CFG(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct dpni_single_step_cfg(9) β€” the Kernel API Manual, bestie edition πŸ•°οΈβœ¨

Okay so this is a page from the Kernel API Manual (section 9, the kernel-API girlies know 😌), and it's all about struct dpni_single_step_cfg β€” literally the struct you use to configure single step PTP, which is IEEE 1588. Clock girlies, this one's for you πŸŽ€


✨ SYNOPSIS ✨

Here's the whole struct, exactly as it lives, no cap:

struct dpni_single_step_cfg {
    u8 en;
    u8 ch_update;
    u16 offset;
    u32 peer_delay;
    u32 ptp_onestep_reg_base;
 };

πŸ¦‹ Members πŸ¦‹

Let's meet the cast, one field at a time β€” every single one of them matters, so no skipping πŸ™

  • en β€” turns single step PTP on. But listen: when it's enabled, the PTPv1 functionality will not work, so that's a whole trade-off bestie πŸ’€. And if this field is zero? Then offset and ch_update just get ignored, like they weren't even invited to the party πŸ™ˆ
  • ch_update β€” when this is set, the UDP checksum gets updated inside the packet. That's it, that's the vibe ✨
  • offset β€” the start offset from the beginning of the frame where the timestamp field is found. It's giving "where's the timestamp" scavenger hunt πŸ”. The offset must respect all MAC headers, VLAN tags and other protocol headers β€” like, all of them, don't skip any or it gets mad 😀
  • peer_delay β€” for peer-to-peer transparent clocks, you add this value to the correction field in addition to the transient time update. And the value expresses nanoseconds ⏱️ (nano girlies, precision icons πŸ’…)
  • ptp_onestep_reg_base β€” the 1588 SINGLE_STEP register base address πŸ‘‘. This address is used to update directly the register contents, and here's the important bit: the user has to create an address mapping for it πŸ”₯. You don't get it for free, you gotta set it up yourself fr fr.

🌈 SEE ALSO 🌈

Kernel file: ./drivers/net/ethernet/freescale/dpaa2/dpni.h πŸ“

And the whole friend group, in order, all of them, because we don't leave anyone out 🫢:

DPNI_MAX_TC(9), DPNI_MAX_DPBP(9), DPNI_ALL_TCS(9), DPNI_ALL_TC_FLOWS(9), DPNI_NEW_FLOW_ID(9), DPNI_OPT_TX_FRM_RELEASE(9), DPNI_OPT_NO_MAC_FILTER(9), DPNI_OPT_HAS_POLICING(9), DPNI_OPT_SHARED_CONGESTION(9), DPNI_OPT_HAS_KEY_MASKING(9), DPNI_OPT_NO_FS(9), DPNI_OPT_SHARED_FS(9), struct dpni_pools_cfg(9), struct dpni_attr(9), DPNI_ERROR_EOFHE(9), DPNI_ERROR_FLE(9), DPNI_ERROR_FPE(9), DPNI_ERROR_PHE(9), DPNI_ERROR_L3CE(9), DPNI_ERROR_L4CE(9), enum dpni_error_action(9), struct dpni_error_cfg(9), DPNI_BUF_LAYOUT_OPT_TIMESTAMP(9), DPNI_BUF_LAYOUT_OPT_PARSER_RESULT(9), DPNI_BUF_LAYOUT_OPT_FRAME_STATUS(9), DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE(9), DPNI_BUF_LAYOUT_OPT_DATA_ALIGN(9), DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM(9), DPNI_BUF_LAYOUT_OPT_DATA_TAIL_ROOM(9), struct dpni_buffer_layout(9), enum dpni_queue_type(9), enum dpni_offload(9), union dpni_statistics(9), struct dpni_link_cfg(9), struct dpni_link_state(9), enum dpni_dist_mode(9), enum dpni_fs_miss_action(9), struct dpni_fs_tbl_cfg(9), struct dpni_rx_tc_dist_cfg(9), DPNI_FS_MISS_DROP(9), struct dpni_rx_dist_cfg(9), struct dpni_qos_tbl_cfg(9), enum dpni_dest(9), struct dpni_queue(9), struct dpni_queue_id(9), enum dpni_congestion_unit(9), enum dpni_congestion_point(9), struct dpni_dest_cfg(9), DPNI_CONG_OPT_FLOW_CONTROL(9), struct dpni_congestion_notification_cfg(9), struct dpni_taildrop(9), struct dpni_rule_cfg(9), DPNI_FS_OPT_DISCARD(9), DPNI_FS_OPT_SET_FLC(9), DPNI_FS_OPT_SET_STASH_CONTROL(9), struct dpni_fs_action_cfg(9), struct dpni_tx_shaping_cfg(9)


πŸ’– oh and a lil heads up: that SEE ALSO list is long long, but every single one of those pages is real and you should not skip them, iykyk

Okay bye besties!! πŸ‘‹ This page comes from ./drivers/net/ethernet/freesca... and it's dated October 2026, and the footer is literally just struct dpni_single_step_cfg(9) again β€” so consider this your cute sign-off, drink some water, and go configure your single step PTP πŸ’œπŸ§šπŸŒΈ

πŸ“¦ where this page comes from