Cross-flashing an LSI/Broadcom SAS 9300-16i HBA from IR to IT mode
ZFS (and NAS software built on it) wants direct, unmediated access to each disk. HBAs that ship in
IR mode (Integrated RAID) sit a RAID layer between the OS and the disks, which hides SMART
data, breaks TRIM, and can silently reorder/remap drives. This guide cross-flashes a
Broadcom/LSI SAS 9300-16i from IR to IT mode (Initiator-Target, i.e. plain HBA passthrough)
using the official sas3flash utility.
Background: why the 9300-16i needs two flashes
The 9300-16i is not a single 16-port chip — it’s two independent SAS3008 controllers on one
PCB (each handling 8 ports), bridged behind a PCIe switch. lspci shows two separate SAS3008
devices:
04:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS3008 ... (rev 02)
06:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS3008 ... (rev 02)
Because firmware lives per-chip, each controller must be flashed separately — there is no single “16i” firmware image; Broadcom’s official 9300-8i IT firmware is exactly the right image for each chip (a 9300-16i is, from the firmware’s point of view, two 9300-8i controllers).
Broadcom has removed SAS3008/9300-series firmware from its current support portal — the download search only lists the newer 24Gb Tri-Mode (9400+) family. The firmware itself is publicly redistributable under Broadcom’s own license, and is mirrored by the community, e.g. vanities/lsi-9300-8i-firmware (includes both the firmware
.binand a Linuxsas3flashbinary).
Prerequisites
- A Linux box with the card installed (a bench/test machine is fine — the card doesn’t need to be in its final server yet).
- Root/sudo access.
- The
sas3flashutility (Linux x64 static binary) and an IT-mode firmware image for the SAS3008 chip.
Steps
1. Identify the controllers
lspci -nnk | grep -A3 -i 'sas'Confirm you see two SAS3008 entries with Kernel driver in use: mpt3sas. Check dmesg for the
currently loaded firmware:
dmesg | grep -i mpt3sas | grep -iE 'FWVersion|Protocol'IR firmware and IT firmware both report Protocol=(Initiator,Target) in this line — that’s just
the chip’s SCSI target capability, not proof RAID is active. Don’t use it to tell IR and IT
apart (see the verification step below).
2. Get the tool and firmware onto the box
curl -sL -o sas3flash "https://raw.githubusercontent.com/vanities/lsi-9300-8i-firmware/main/flasher/sas3flash"
curl -sL -o SAS9300_8i_IT.bin "https://raw.githubusercontent.com/vanities/lsi-9300-8i-firmware/main/firmware/SAS9300_8i_IT_16.00.12.00.bin"
chmod +x sas3flashVersion
16.00.12.00also fixes a known SATA reset/timeout bug present in older SAS3008 firmware — worth having regardless of IR/IT mode.
3. List controllers
./sas3flash -listallNum Ctlr FW Ver NVDATA x86-BIOS PCI Addr
----------------------------------------------------------------------------
0 SAS3008(C0) 07.00.01.00 07.01.00.03 08.15.00.00 00:04:00:00
1 SAS3008(C0) 07.00.01.00 07.01.00.03 08.15.00.00 00:06:00:00
Two controllers, indexed 0 and 1 — both need flashing.
4. Flash each controller
./sas3flash -o -c 0 -f SAS9300_8i_IT.bin
./sas3flash -o -c 1 -f SAS9300_8i_IT.bin-ooverrides the personality mismatch check (needed when crossing IR → IT).-c <n>targets a specific controller index from the-listalloutput.- No BIOS/UEFI option ROM is flashed here on purpose — skip it if you don’t need this card to be
bootable. It’s one less thing to flash, and the card skips its option-ROM scan at POST, speeding
up boot slightly. If you do need to boot from drives behind this card, flash the matching
BIOS/UEFI
.romfiles as a separate step.
Each successful run ends with:
Firmware Flash Successful.
Resetting Adapter...
Adapter Successfully Reset.
Finished Processing Commands Successfully.
Verify
./sas3flash -listallBoth controllers should now show the new firmware version (e.g. 16.00.12.00).
Reboot, then confirm no RAID/IR subsystem came up — this is the real IT-vs-IR signal, not the
Protocol= capability line:
dmesg | grep -iE 'non-optimal|IR volume|raid'No output means no IR volume manager is running, i.e. clean IT mode. If drives are attached, they should show up immediately as plain disks:
lsblk -o NAME,SIZE,MODEL,TRAN,ROTA,SERIALTroubleshooting
- Flash refuses to proceed / reports a personality mismatch: make sure
-ois passed — it’s required specifically when crossing IR → IT, not just for a same-mode firmware update. dmesgstill showsProtocol=(Initiator,Target)after flashing and you’re unsure if it worked: that line reports chip capability on both IR and IT firmware — check for the absence of RAID/IR volume messages after reboot instead (see Verify above).- Can’t find firmware on Broadcom’s own site: the SAS3008/9300 family has been removed from the current support portal in favor of newer Tri-Mode cards; use a community mirror of the original (publicly redistributable) firmware instead.
Related
Sources
- Legacy wiki.js: LSI SAS 9300-16i IT-mode flash — private source