t4_load_phy_fw(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– t4_load_phy_fw(9) β€” Kernel API Manual πŸ’–

okay so bestie, welcome to t4_load_phy_fw from the Kernel API Manual (yes, section 9, we're in kernel-land now 🧚). this is the port PHY firmware downloader, and she is literally the main character of getting your PHY firmware onto the adapter. buckle up πŸŽ€


✨ NAME ✨

t4_load_phy_fw β€” download port PHY firmware πŸ¦‹


✨ SYNOPSIS ✨

int t4_load_phy_fw (struct adapter *adap , int win , int
(*phy_fw_version)(const u8 *, size_t) , const u8 *phy_fw_data , size_t
phy_fw_size );

✨ ARGUMENTS ✨

  • adap β€” the adapter πŸ’œ like, the whole entire card you're talking to.
  • win β€” the PCI-E Memory Window index to use for t4_memory_rw. that's the window, girl. pick one.
  • phy_fw_version β€” function to check PHY firmware versions. a lil callback that does the "is this actually newer tho" check for you 🌸
  • phy_fw_data β€” the PHY firmware image to write. this is the actual firmware blob, the payload, the moment πŸ’…
  • phy_fw_size β€” image size. how many bytes of firmware we're serving, no cap.

✨ DESCRIPTION ✨

Transfer the specified PHY firmware to the adapter. that's the whole job bestie, we ship the firmware over and we ship it good ✨

If a non-NULL phy_fw_version is supplied, then it will be used to determine if it's necessary to perform the transfer by comparing the version of any existing adapter PHY firmware with that of the passed in PHY firmware image. so like β€” if you hand over the version-checker, she'll peek at what the adapter already has and be like "okay do we even need this". no pointless flashing in this house πŸ™ˆ

A negative error number will be returned if an error occurs. If version number support is available and there's no need to upgrade the firmware, 0 will be returned. If firmware is successfully transferred to the adapter, 1 will be returned. so basically β€” 😭 negative = bad, 0 = already slayed, no notes, 1 = we actually sent it and it ate πŸ’…


⚠️ NOTE ⚠️

some adapters only have local RAM to store the PHY firmware. As a result, a RESET of the adapter would cause that RAM to lose its contents. so like… the RAM forgets everything. gone. girl, bye. Thus, loading PHY firmware on such adapters must happen after any FW_RESET_CMDs ... πŸ‘‘

fr fr order matters here β€” load the PHY firmware after the FW_RESET_CMDs, or your carefully delivered firmware just evaporates into the void πŸ’€

🫢 SEE ALSO 🫢

Kernel file ./drivers/net/ethernet/chelsio/cxgb4/t4_hw.c

and the entire extended friend group (all of them, no one left out πŸ’–):

t4_wait_op_done_val(9), t4_set_reg_field(9), t4_read_indirect(9), t4_write_indirect(9), t4_record_mbox(9), t4_wr_mbox_meat_timeout(9), t4_memory_rw_init(9), t4_memory_update_win(9), t4_memory_rw_residual(9), t4_memory_rw(9), t4_get_regs_len(9), t4_get_regs(9), t4_eeprom_ptov(9), t4_seeprom_wp(9), t4_get_raw_vpd_params(9), t4_get_vpd_params(9), t4_get_pfres(9), sf1_read(9), sf1_write(9), flash_wait_op(9), t4_read_flash(9), t4_write_flash(9), t4_get_fw_version(9), t4_get_bs_version(9), t4_get_tp_version(9), t4_get_exprom_version(9), t4_get_vpd_version(9), t4_get_scfg_version(9), t4_get_version_info(9), t4_dump_version_info(9), t4_check_fw_version(9), t4_flash_erase_sectors(9), t4_flash_cfg_addr(9), t4_load_fw(9), t4_phy_fw_ver(9), t4_fwcache(9), fwcaps16_to_caps32(9), fwcaps32_to_caps16(9), t4_link_acaps(9), t4_link_l1cfg_core(9), t4_restart_aneg(9), t4_handle_intr_status(9), t4_slow_intr_handler(9), t4_intr_enable(9), t4_intr_disable(9), t4_config_rss_range(9), t4_config_glbl_rss(9), t4_config_vi_rss(9), t4_read_rss(9), t4_tp_fw_ldst_rw(9), t4_tp_indirect_rw(9), t4_tp_pio_read(9), t4_tp_pio_write(9), t4_tp_tm_pio_read(9), t4_tp_mib_read(9), t4_read_rss_key(9), t4_write_rss_key(9), t4_read_rss_pf_config(9), t4_read_rss_vf_config(9), t4_read_rss_pf_map(9), t4_read_rss_pf_mask(9), t4_tp_get_tcp_stats(9), t4_tp_get_err_stats(9), t4_tp_get_cpl_stats(9), t4_tp_get_rdma_stats(9), t4_get_fcoe_stats(9), t4_get_usm_stats(9), t4_read_mtu_tbl(9), t4_read_cong_tbl(9), t4_tp_wr_bits_indirect(9), init_cong_ctrl(9), t4_load_mtus(9), t4_get_chan_txrate(9), t4_set_trace_filter(9), t4_get_trace_filter(9), t4_pmtx_get_stats(9), t4_pmrx_get_stats(9), compute_mps_bg_map(9), t4_get_mps_bg_map(9), t4_get_tp_e2c_map(9), t4_get_tp_ch_map(9), t4_get_port_type_description(9), t4_get_port_stats_offset(9), t4_get_port_stats(9), t4_get_lb_stats(9), t4_mdio_rd(9), t4_mdio_wr(9), t4_sge_decode_idma_state(9), t4_sge_ctxt_flush(9), t4_read_sge_dbqtimers(9), t4_fw_hello(9), t4_fw_bye(9), t4_early_init(9), t4_fw_reset(9), t4_fw_halt(9), t4_fw_restart(9), t4_fw_upgrade(9), t4_fl_pkt_align(9), t4_fixup_host_params(9), t4_fw_initialize(9), t4_query_params_rw(9), t4_set_params_timeout(9), t4_set_params(9), t4_cfg_pfvf(9), t4_alloc_vi(9), t4_free_vi(9), t4_set_rxmode(9), t4_free_encap_mac_filt(9), t4_free_raw_mac_filt(9), t4_alloc_encap_mac_filt(9), t4_alloc_raw_mac_filt(9), t4_alloc_mac_filt(9), t4_free_mac_filt(9), t4_change_mac(9), t4_set_addr_hash(9), t4_enable_vi_params(9), t4_enable_vi(9), t4_enable_pi_params(9), t4_identify_port(9), t4_iq_stop(9), t4_iq_free(9), t4_eth_eq_free(9), t4_ctrl_eq_free(9), t4_ofld_eq_free(9), t4_link_down_rc_str(9), fwcap_to_fwspeed(9), lstatus_to_fwcap(9), t4_handle_get_port_info(9), t4_update_port_info(9), t4_get_link_params(9), t4_handle_fw_rpl(9), init_link_config(9), t4_prep_adapter(9), t4_shutdown_adapter(9), t4_bar2_sge_qregs(9), t4_init_devlog_params(9), t4_init_sge_params(9), t4_init_tp_params(9), t4_filter_field_shift(9), t4_init_portinfo(9), t4_read_cimq_cfg(9), t4_read_cim_ibq(9), t4_read_cim_obq(9), t4_cim_read(9), t4_cim_write(9), t4_cim_read_la(9), t4_tp_read_la(9), t4_idma_monitor_init(9), t4_idma_monitor(9), t4_load_cfg(9), t4_set_vf_mac_acl(9), t4_read_pace_tbl(9), t4_get_tx_sched(9), t4_sge_ctxt_rd_bd(9), t4_i2c_rd(9), t4_set_vlan_acl(9), modify_device_id(9), t4_load_boot(9), t4_flash_bootcfg_addr(9)


and that's the page, bestie πŸŽ€ this one lives at ./drivers/net/ethernet/chelsio... (that's the source/version line, and yes it's exactly that truncated-looking, iykyk) and it's dated October 2026. lil t4_load_phy_fw(9) stamp of approval at the bottom, periodt. πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from