usb4_port_sw_margin(9)
π usb4_port_sw_margin(9) β the Kernel API Manual glow-up π
okay bestie, so this is a page straight out of the Kernel API Manual and it's literally about running software lane margining on a USB4 port. yes it's as niche as it sounds and yes it's iconic β¨
π NAME π
usb4_port_sw_margin β run software lane margining on a port, no cap π¦
πΈ SYNOPSIS πΈ
int usb4_port_sw_margin (struct tb_port *port , enum usb4_sb_target
target , u8 index , const struct usb4_port_margining_params *params ,
u32 *results );
like... look at that signature. she's giving main character energy π
π«Ά ARGUMENTS π«Ά
portβ the USB4 port we're doing all this on πtargetβ which sideband target we're aiming atindexβ the retimer index, but only iftargetisUSB4_SB_TARGET_RETIMER(iykyk)paramsβ the parameters for USB4 software margining, i.e. the whole vibe of the operation β¨resultsβ a data word where the operation completion data lands π
β DESCRIPTION β
So basically this runs software lane margining on a USB4 port. that's the whole thing. slay.
and then β this part matters, don't skip it β you read back the error counters by calling usb4_port_sw_margin_errors. fr fr, that's the follow-up move, not optional garnish π
π₯ RETURN π₯
0 on success, and a negative errno otherwise π (we love a clean contract)
π SEE ALSO π
the kernel file lives at ./drivers/thunderbolt/usb4.c and here is the entire squad, every single one of them, no skips ππ
usb4_switch_check_wakes(9),usb4_switch_setup(9),usb4_switch_configuration_valid(9),usb4_switch_read_uid(9),usb4_switch_drom_read(9)usb4_switch_lane_bonding_possible(9),usb4_switch_set_wake(9),usb4_switch_set_sleep(9),usb4_switch_nvm_sector_size(9)usb4_switch_nvm_read(9),usb4_switch_nvm_set_offset(9),usb4_switch_nvm_write(9),usb4_switch_nvm_authenticate(9)usb4_switch_nvm_authenticate_status(9),usb4_switch_credits_init(9),usb4_switch_query_dp_resource(9)usb4_switch_alloc_dp_resource(9),usb4_switch_dealloc_dp_resource(9),usb4_port_index(9)usb4_switch_map_pcie_down(9),usb4_switch_map_usb3_down(9),usb4_switch_add_ports(9),usb4_switch_remove_ports(9)usb4_port_unlock(9),usb4_port_hotplug_enable(9),usb4_port_reset(9),usb4_port_configure(9),usb4_port_unconfigure(9)usb4_port_configure_xdomain(9),usb4_port_unconfigure_xdomain(9),usb4_port_sb_read(9),usb4_port_sb_write(9)usb4_port_router_offline(9),usb4_port_router_online(9),usb4_port_enumerate_retimers(9)usb4_port_clx_supported(9),usb4_port_asym_supported(9),usb4_port_asym_set_link_width(9),usb4_port_asym_start(9)usb4_port_margining_caps(9),usb4_port_hw_margin(9),usb4_port_sw_margin_errors(9)usb4_port_retimer_set_inbound_sbtx(9),usb4_port_retimer_unset_inbound_sbtx(9),usb4_port_retimer_is_last(9),usb4_port_retimer_is_cable(9)usb4_port_retimer_nvm_sector_size(9),usb4_port_retimer_nvm_set_offset(9),usb4_port_retimer_nvm_write(9)usb4_port_retimer_nvm_authenticate(9),usb4_port_retimer_nvm_authenticate_status(9),usb4_port_retimer_nvm_read(9)usb4_usb3_port_max_link_rate(9),usb4_usb3_port_allocated_bandwidth(9),usb4_usb3_port_allocate_bandwidth(9),usb4_usb3_port_release_bandwidth(9)usb4_dp_port_set_cm_id(9),usb4_dp_port_bandwidth_mode_supported(9),usb4_dp_port_bandwidth_mode_enabled(9),usb4_dp_port_set_cm_bandwidth_mode_supported(9)usb4_dp_port_group_id(9),usb4_dp_port_set_group_id(9),usb4_dp_port_nrd(9),usb4_dp_port_set_nrd(9)usb4_dp_port_granularity(9),usb4_dp_port_set_granularity(9),usb4_dp_port_set_estimated_bandwidth(9)usb4_dp_port_allocated_bandwidth(9),usb4_dp_port_allocate_bandwidth(9),usb4_dp_port_requested_bandwidth(9)usb4_pci_port_set_ext_encapsulation(9),usb4_pci_port_ltssm_state(9)
ngl that's a whole group chat worth of cross-references and every one of them made the list π
and that's the page babes π β sourced from ./drivers/thunderbolt, dated October 2026, and honestly usb4_port_sw_margin(9) ate and left no crumbs. periodt. πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms