Flashing a Dell PERC H310 with IT mode firmware

Introduction

In this part I decided found enough excuses to get myself a Netapp DS2246. However I got the Netapp SAS drives working by configuring the internal SAS controller of the HP DL380p into HBA mode. Which involves booting from the DS2246. Since I need occasionally to reformat the Netapp SAS drives from 520Bytes block size  to 512Bytes. And I don’t want to reboot my server for that, mess around with the Smart Array controller. So I bought a Dell Perc H310 raid controller. The plan is to install this raid controller into a pc I have lying around. Next is to get the card working in IT mode.

However, let’s start with a disclaimer:

Before diving into the process of flashing a word of warning: Flashing the raid controller card with IT mode firmware may brick your card. So, if you follow the steps below you that at your own risk!

Also note that at the end of the whole flashing adventure, the card doesn’t have a BIOS anymore.  It might be possible to flash the BIOS back, but since I’m not interrested in that I didn’t investigate on how to that.

How to flash the Dell PERC H310 with IT mode firmware

Since the motherboard inside the PC is a ASUS Sabertooth FX990 it uses UEFI BIOS. And to flash the raid card one part of the process needs to be done from the UEFI Shell.

So before starting to flash the firmware, let’s create a USB drive which can boot into DOS and into the UEFI shell.

Booting into DOS isn’t much of a problem. Under Windows use Rufus to create a FreeDOS bootable USB drive.

Getting the UEFI shell working is a bit more tricky.  There process itself isn’t that difficult. You need to the get EFI shell and put it onto the usb drive in a directory: /efi/boot.

However as it turns out, there are multiple versions. In my case I needed the version 1. With the wrong version I got the error: “Application not started from shell” I downloaded the correct version here

After creating the DOS bootable USB drive with Rufus, copy the efi shell file to the usb drive in the directory /efi/boot and rename the file to BOOTX64.efi

Next I downloaded this file And I extracted the files in a directory firmware. However, the name of this directory is not important.

Once you booted into DOS or UEFI shell, just change to this directory with the command cd and execute the commands below.

Before flashing, test if the usb drive can boot into DOS and into the UEFI Shell. In DOS it’s easy to test with the command:

 MegaRec -adpList

If it works (this will also tell you if the card is being recognized.

After verifying that the DOS part works, boot into the UEFI shell. How this is done, depends on the BIOS I ques. In my case I simple press F8 at boot time, and in the boot menu I choose the USB UEFI Drive to boot from.

Once booted, change to the correct drive with:

fsX:

Where X is the drive number, in my case it’s 0 (zero):

fs0:

After switching to the drive the command ‘ls’ can be used to get list with file names.

Once in th UEFI shell I changed to the directory where I extracted all the files (with the cd command) and issued the command:

sas2flash_p19.efi -o -list

If this command doesn’t trow the error mentioned above, but instead list the details of the card, everything is good to go. If not, you may need another version of the efi shell.

Flashing the Dell Perc H310 card

If every thing up to this point is working, flashing of the card can begin. The flash process consist of a few steps. And again: be aware that this process may brick your card! So following these steps is at your own risk!

Boot into DOS and erase the SBR

The first step is to erase the SBR. The SBR stands for Serial Boot Record. This piece of software makes the card bootable. So let’s erase it by writing all zero’s. If maybe wise to make a backup of your SBR. Do this by using the command:

MegaRec -readsbr 0 backup.sbr

Next we need to record the SAS address, since at the end we need to rewrite it:

MegaCli -AdpAllInfo -a0 | find "SAS Address" > sas_address_bck.txt

Now that we have this, you may wont to store this on another drive, or system, just to be sure.

Next step is to erase the SBR:

MegaRec -writesbr 0 sbrempty.bin

After that the flash can be erased:

MegaRec -cleanflash 0

Once this is completed, the scary part: You need to reboot the system. This can be a cold start, by just powering off and powering on the system. Or do the three finger salute, and reboot the system by pressing <CTRL> + <ALT> <DEL>

Now notice you won’t see the card’s BIOS during boot. In fact you won’t even notice there is a card in your system. This is because the SBR is erased.

Now if your system has a UEFI BIOS, then boot into the UEFI shell. If your system is using Legacy BIOS, boot into DOS again. Since I have to use the UEFI shell I booted into the UEFI Shell and changed to the USB drive as mentioned above.

Next issue the command:

sas2flash -o -f 6GBSAS.FW

If you execute this from DOS and got the error : “ERROR: Failed to initialize PAL. Exiting program.” You need to boot in UEFI Shell.

Once the command is completed reset the card (you can also reboot, and boot back into the UEFI shell.

To reset the card:

sas2flash_p19.efi -o -reset

Next the firmware can be flashed. This is the LSI P7 IT firmware:

sas2flash -o -f 2118P7.BIN

You might be greeted with the error (of warning, depending on how you look at it):

NVDATA Product ID and Vendor ID do not match. Would you like to flash anyway [y/n]?

Press Y and wait until the command finish.

Reboot again, or reset the card:


Next upgrade the firmware to LSI P19 IT firmware with:

sas2flash_p19.efi -o -f 2118IT.BIN

Now reboot or reset the card again with:

sas2flash_p19.efi -o -reset

Check if everything works:

sas2flash_p19.efi -o -list

The SAS address is obviously missing, so get the address from the file and reprogram the SAS address:

sas2flash_p19.efi -o -sasadd <your 16-digit SAS address>

And this point the card is running with IT firmware. The card doesn’t have any BIOS. Which is prefect, since it saves time during boot.

Next I hooked the drive which I needed to reformat to the controller, and reformatted it, which works perfectly.

And for a comprehensive list of firmware files take a look here