+++
title = 'Updating LSI HBA on TrueNAS Scale'
description = 'Navigating Broadcom and LSI HBA updates on TrueNAS Scale'
date = 2025-05-29T07:11:45-05:00
draft = false
categories = ['references']
tags = ['LSI', 'TrueNAS Scale', 'Broadcom', 'Update', 'SAS3Flash', 'HBA']
+++

{{< lead >}}
Navigating Broadcom and LSI HBA updates on TrueNAS Scale.
{{< /lead >}}

All of the references I was able to find for updating LSI firmware was outdated, and since this took me longer than I would like, I thought I would share my experience as a guide to others.

# Find your hardware information:
```bash
lspci -vvv | grep -A 20 -B 5 "LSI\|Broadcom"
```

```
65:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS3224 PCI-Express Fusion-MPT SAS-3 (rev 01)
        Subsystem: Broadcom / LSI SAS9305-16i
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 32 bytes
        Interrupt: pin A routed to IRQ 73
        NUMA node: 0
        IOMMU group: 4
        Region 0: I/O ports at b000 [size=256]
        Region 1: Memory at e0e00000 (64-bit, non-prefetchable) [size=64K]
        Expansion ROM at e0d00000 [disabled] [size=1M]
        Capabilities: [50] Power Management version 3
                Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [68] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 4096 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
                        ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 0W
                DevCtl: CorrErr- NonFatalErr- FatalErr+ UnsupReq-
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-
                        MaxPayload 256 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr+ NonFatalErr- FatalErr- UnsupReq+ AuxPwr- TransPend-
                LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM not supported
```

If we look under Subsystem, we can see the model number of the HBA, in my case: `LSI SAS9305-16i`. If you have multiple HBAs, they should all be listed in similar entries.

Now we can find out what firmware version we are currently running by using the `sas3flash` command.
```bash
sas3flash -listall
```
Avago Technologies SAS3 Flash Utility
Version 16.00.00.00 (2017.05.02) 
Copyright 2008-2017 Avago Technologies. All rights reserved.

        Adapter Selected is a Avago SAS: SAS3224(A1)

Num   Ctlr            FW Ver        NVDATA        x86-BIOS         PCI Addr
----------------------------------------------------------------------------

0  SAS3224(A1)  16.00.01.00    10.00.00.05    08.27.00.00     00:17:00:00
1  SAS3224(A1)  16.00.01.00    10.00.00.05    08.27.00.00     00:65:00:00

        Finished Processing Commands Successfully.
        Exiting SAS3Flash.
```

# Download the firmware:
Navigate to the [Broadcom website](https://www.broadcom.com/support/download-search?pg=&pf=Host+Bus+Adapters&pn=&pa=Firmware&po=&dk=&pl=&l=false) and search for your HBA model number. Broadcom does not make it easy to get direct links to the downloads, so hit F12 in your browser, and go to the `Network` tab. When you click on the download link you will see a GET request, copy the URL. In my case, the URL is: https://docs.broadcom.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_12g_p16.12_cutlass_point_release/9305_16i_Pkg_P16.12_IT_FW_BIOS_for_MSDOS_Windows.zip

Now in our TrueNAS Scale shell, we can download the firmware using wget.
```bash
wget https://docs.broadcom.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_12g_p16.12_cutlass_point_release/9305_16i_Pkg_P16.12_IT_FW_BIOS_for_MSDOS_Windows.zip

unzip 9305_16i_Pkg_P16.12_IT_FW_BIOS_for_MSDOS_Windows.zip

cd 9305_16i_Pkg_P16.12_IT_FW_BIOS_for_MSDOS_Windows
cd Firmware
cd SAS9305_16i_IT_P
```

# Backup the current firmware:
For each HBA, we should backup our current firmware in case something goes wrong.

```bash
sas3flash -c 0 -ufirmware backup_card0_fw.bin
sas3flash -c 1 -ufirmware backup_card1_fw.bin
```

# Update the firmware:
{{< alert >}}
**Warning!** I was able to update my firmware on a live system with no restart or issues, but this may not be the case for you. It is a good idea to make sure that your arrays are not in use, and that you have good backups before proceeding.
{{< /alert >}}

Lets flash the firmware!

```bash
sas3flash -c 0 -f SAS9305_16i_IT_P.bin
sas3flash -c 1 -f SAS9305_16i_IT_P.bin
```

# Clean up

We are all done!

Once you have verified that things are working the way you want them to, you can remove the firmware download and the backup files.