t4_fw_restart(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– t4_fw_restart β€” the Kernel API Manual's own little reset button πŸ’–

okay bestie, this is t4_fw_restart from the Kernel API Manual (section 9, obviously), and it's literally the glow-up your halted firmware has been waiting for. ✨

🌸 NAME 🌸

t4_fw_restart β€” restart the firmware by taking the uP out of RESET. No cap, that's the whole vibe.

✨ SYNOPSIS ✨

int t4_fw_restart (struct adapter *adap , unsigned int mbox , int reset );

πŸŽ€ ARGUMENTS πŸŽ€

  • adap β€” the adapter. The main-character hardware energy.
  • mbox β€” mailbox to use for the FW command. Think of it as the group chat where the firmware gets its messages. πŸ’Œ
  • reset β€” if we want to do a RESET to restart things. Yes, it's a yes/no vibe.

πŸ’… DESCRIPTION πŸ’…

okay so picture this: your firmware was previously halted by t4_fw_halt, and now you need to bring it back to life. This function restarts it. On successful return, the previous PF Master remains as the new PF Master β€” and there is no need to issue a new HELLO command, etc. (iykyk, the handshake is already handled. 🫢)

We do this in two ways:

  1. If we're dealing with newer firmware, we'll simply want to take the chip's microprocessor out of RESET. This will cause the firmware to start up from its start vector. And then we'll loop until the firmware indicates it's started again (PCIE_FW.HALT reset to 0) or we timeout. ⭐
  2. If we're dealing with older firmware, then we'll need to RESET the chip since older firmware won't recognize the PCIE_FW.HALT flag and automatically RESET itself on startup. πŸ’€ Older firmware is giving "wait, what flag?" energy, so we reset the whole chip. Periodt.

πŸ¦‹ SEE ALSO πŸ¦‹

First up, the kernel file: ./drivers/net/ethernet/chelsio/cxgb4/t4_hw.c

Then the whole friend group of related functions β€” literally every single one, copied exactly so nobody gets 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_load_phy_fw(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_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)

That's the whole page, bestie. Source/version: ./drivers/net/ethernet/chelsio..., dated October 2026, straight from the Kernel API Manual. Stay slay, and may your PCIE_FW.HALT always reset to 0. πŸ’œβœ¨

πŸ“¦ where this page comes from