Alright, I was finally able to get the card fully recovered. Haven't tested with any drives yet, but I'm at least back to normal behavior otherwise. The crux of the issue is that, I'm an idiot that can't read

.
Here's a loose guide for anyone coming along down the line.
Setup fohdeesha's live boot.
- Follow the instructions under "Preparation" here: Introduction - Fohdeesha Docs.
- In the ZIP file that you'll download from there is a Linux ISO. Use rufusto write the image to a USB drive.
- You may be prompted by rufus to download additional packages.
- Boot the Linux distro up.
Grab files:
I stored all the files I needed on a second USB drive so I could easily move back and forth from a working PC in case I missed anything.
- The SBR linked above (make sure you have the proper SBR for your card if you aren't reading this specifically for a 9206-16e).
- The P20 firmware for the 9206-16e from Broadcom(direct download link).
- If you do a general search, there are two releases of P20 for this card. You want the one that is "9206-16e" and NOT the one with "9206_16e". Even though "9206_16e" shows a later release date, it is 20.00.06.00 (can confirm in the release notes of the downloaded file) and "9206-16e" is 20.00.07.00.

- Copy the files over. You should have '9206.SBR' (from LSI 9206-16e) and '9206-16e.bin' from the Broadcom download.
Mount the USB:
In the Linux live environment:
- Elevate to root access
- Find the drive ID for the secondary USB:
- Find the partition for the secondary USB.
- Create a mount point:
- Mount the drive:
Code:
mount /dev/sdxy /media/usb
- Set 'xy' to the one shown for the partition using
blkid
- Verify you can see the files:
- Making sure you can see '9206.SBR' and '9206-16e.bin'
Recovery:
Follow
the lsirec guide.
Notable notes:
- Work on one controller at a time. This board has two controllers. In my case, they were both soft-bricked so neither showed up in sas2flash nor lsiutil. My advice, to help keep things simple and prevent mistakes, is to work on one controller at a time and take the other offline. You can a controller offline using the 'unbind' and 'halt' commands from the guide and mentioned below.
- Start with sas2flash to find the controller that is broken:
- I had variations of the controller not showing at all or the controller showing up but with "firmware failed" error messages. If they show up, you can get the PCI address from here. If not, use 'lspci' in the next step.
- Run
lspci | grep Broadcom
to get your PCI address. You'll need to pad the address with leading zeros.
- e.g. - the controller address from lspci is '0b:00.0' then the address for the lsirec commands is '0000:0b:00.0'
- If the controllers don't show up here, throw the card in the trash, buy a new one, and move on with your life.
- When you get to option 46 is lsiutil make a new file. This is not to upload the correct firmware, but to backup the firmware current on the card. Someone in my house (me) didn't realize this when doing it 12 times and kept overwriting my good firmware file without realizing it.
- My order of operations using the example PCI address from above:
Code:
# Move to the lsirec directory
cd /root/lsirec
echo 16 > /proc/sys/vm/nr_hugepages
# These two commands essentially stop the system from talking to the card in the background
./lsirec 0000:0b:00.0 unbind
./lsirec 0000:0b:00.0 halt
# Backup the current SBR; just in case
./lsirec 0000:0b:00.0 readsbr /media/usb/sbr_backup.bin
# Write the known-good SBR
./lsirec 0000:0b:00.0 writesbr /media/usb/9206.SBR
# Boot the card up using the firmware. This does not flash anything to the card.
./lsirec 0000:0b:00.0 hostboot /media/usb/9206-16e.bin
# PCI rescan to get the system to pick the card back up.
# Give it about 15 seconds to pick the card back up before running the lsiutil command.
./lsirec 0000:0b:00.0 rescan
# Move to the lsiutil directory
cd /root/lsiutil
./lsiutil -e
# Pick your controller. If you followed my advice to disable the other one, you'll only have one listed.
1
# Selection option 46 for "Upload FLASH section
46
# Select option 5 for "Complete (all sections)"
# This command will pull the current firmware off the card and write it to a file.
# This is not to upload the correct firmware. Give the file a new name
5
/media/usb/firmware_backup.bin
# Back out to the main menu by hitting enter (should have options 1-99)
# Pick the erase NV storage option
33
# Erase flash
3
# Erase manufacturing data
8
# Back out to the main menu by hitting enter (should have options 1-99)
# Pick the download firmware option. This is to copy the good firmware to the card
2
# Will ask for the filename; provide the path to the good firmware.
/media/usb/9206-16e.bin
# My card did not have a boot rom installed, so I skipped that step.
# Follow the prompts to quit out of lsiutil completely
# Once back to the standard command prompt, reset the controller.
/root/lsirec/lsirec 0000:0b:00.0 reset
# Wait about 30 seconds for the controller to restart, then rescan to get the OS to pick it up
/root/lsirec/lsirec 0000:0b:00.0 rescan
# Verify everything looks good.
# This calls a script that is running '/root/sas2flash -c 0 -list'
info
- Assuming everything looks good after running
info
, then I'd suggest a system shut down and then powering back on before moving on. Make sure everything for the controller you were just working on looks good before moving on. For extra credit, make sure all the SAS ports are enabled:
Code:
/root/lsiutil/lsiutil -e
# Select a controller
# Check the port states
68
- Make sure all the ports are set to enabled (Link Enabled = Yes). If they are not, refer to AoS's YouTube video.
Really want to think
@fohdeesha for their comprehensive toolset, marcan for the lsirec tool which was crucial in all this, and
@Dave Corder who's
post here got me on the right track to get all this done.