Preface
I am by no means an expert at this. I just happened to be able to get mine working by following guides available and with the help of folks on the discord (Thanks @Xodus [US] and @Arex [US]). Post a reply if you see any issues with my guide or if you have any additional information that could help people that come across this problem in the future.
Introduction
Earlier this month (September 2020), a batch of Sun Oracle F80 cards were purchased on ebay and when installed, displayed the individual drives as 2.6TB instead of 200GB. These drives could not be formatted through traditional methods. While troubleshooting, we came across this guide by Kenneth Kasilag for flashing the card into IR mode: https://www.kasilag.me/warpdrive/. This process involves changing device IDs in the SBR, extracting LSI controller firmware from the Seagate Nytro firmware, and then flashing both pieces of the firmware.
By following this guide we were able to get our cards into IR mode, but some of us were now showing a single drive of 1.6TB instead of 800GB. We were able to resolve this by formatting in ddcli with over provisioning. Sometimes it took a few attempts at formatting (with different over provisioning settings) to get the drive to show as 800GB.
We were then able to get the cards back into (working) IT mode by following the exact same process, but this time splitting the IT mode firmware (ELP-4x200-4d-n_13.05.11.01.bin). We didn’t need to modify the device IDs this time, since we already had a backup of the original SBR with correct device IDs.
This guide will outline the entire process in Unraid, however it should be pretty much the same in any OS (you just might need different versions of the tools).
Prep
-
Install Python3 with the Nerd Tools plugin in Unraid
-
I have packaged all the needed tools/firmware into a single zip for convenience, but if you prefer to download from official sources, I have provided links to those as well.
-
Single zip:
-
Individual links:
- Nytro Utility Management (contains ddcli)
- lsirec & sbrtool.py
- lsiutil
- NWD-BLP4-800_13.00.08.00.bin
- ELP-4x200-4d-n_13.05.11.01.bin (I don’t have an official link for this. It was posted in the discord, but I’m not sure where it came from.)
-
Download and extract files to a directory on your Unraid server
Backup
- SSH to your Unraid server and navigate to the directory you extracted the files to
- Run
chmod +x ddcli lsirec lsiutil
- Run
lsiutil -e
- Select your device if you have multiple LSI devices installed. It should say “LSI Logic SSS6200”.
- Select
46. Upload Flash Section.
- Then
5. Complete (all sections).
- Choose a filename for your backup.
- Then
- Exit lsiutil
- Use
lspci -Dvvnn
to get the full PCI device ID of your card. It should have “LSI Logic” somewhere in the device name. It should look something like 0000:XX:00.0 - Run
lsirec 0000:XX:00.0 readsbr sbr_backup.bin
where 0000:XX:00.0 is your PCI device ID.
Modifying device IDs
- Run
python3 ./sbrtool.py parse sbr_backup.bin sbr.cfg
- Edit
sbr.cfg
with a text editor - Set:
- PCIVID = 0x1000
- PCIPID = 0x007e
- SubsysVID = 0x1000
- SubsysPID = 0x0504
For reference, these IDs were obtained from this page: https://pci-ids.ucw.cz/pci.ids
- Save and close
sbr.cfg
- Run
python3 sbrtool.py build sbr.cfg sbr_new.bin
Flashing to IR mode
- Run
lsiutil -e
- Select your device if you have multiple LSI devices installed. It should say “LSI Logic SSS6200”.
- Select
33. Erase non-volatile adapter storage
- Then
3. FLASH
- Then
1. NVRAM
- Then
8. Persistent manufacturing config pages
(When it asks for board identity filename, just hit enter)
- Then
- Go back to the main menu of lsiutil
- Select
2. Download firmware (update the FLASH)
- Enter
NWD.split.bin
- Exit lsiutil
- Run
lsirec 0000:XX:00.0 writesbr sbr_new.bin
where 0000:XX:00.0 is your PCI device ID. - Stop your array and reboot Unraid
- Once rebooted, start your array, SSH to your server, and navigate to that same directory
- Get the card number of your device by running
ddcli -listall
- Run
ddcli -c N -updatepkg NWD-BLP4-800_13.00.08.00.bin
where N is the number of your card
Formatting with ddcli
- Run
ddcli
- Select your drive number
- Select `5. Format WarpDrive’
-
Perform-overprovisioning?
Yes - Select
2. Nominal over provisioning
-
Enable Flash Media Erase?
Yes - Confirm and let the drive format
At this point Unraid should be showing a single 800GB drive that can be formatted and mounted in unraid (if this is what you wanted, you are done).
If your drive is showing something other than 800GB, perform the ddcli formatting step again, but this time choose 1. Performance over provisioning
. And then do it one more time selecting 2. Nominal over provisioning
.
Flashing to IT mode
- If you by chance mounted your drive in unraid, unmount it
- SSH to your server and navigate to the directory with the files
- Run
lsiutil -e
- Select your device if you have multiple LSI devices installed. It should say “LSI Logic SSS6200”.
- Select
33. Erase non-volatile adapter storage
- Then
3. FLASH
- Then
1. NVRAM
- Then
8. Persistent manufacturing config pages
(When it asks for board identity filename, just hit enter)
- Then
- Go back to the main menu of lsiutil
- Select
2. Download firmware (update the FLASH)
- Enter
ELP.split.bin
- Exit lsiutil
- Run
lsirec 0000:XX:00.0 writesbr sbr_backup.bin
where 0000:XX:00.0 is your PCI device ID. - Stop your array and reboot Unraid
- Once rebooted, start your array, SSH to your server, and navigate to that same directory
- Get the card number of your device by running
ddcli -listall
- Run
ddcli -c N -updatepkg ELP-4x200-4d-n_13.05.11.01.bin
where N is the number of your card
At this point, Unraid should be showing 4 200GB drives that can be formatted and mounted in Unraid. If your drives are showing something other than 200GB, you can try formatting in ddcli, but we’ve found that that usually needs to be done in IR mode to be successful.