Tech Notes

Tech Note #20160001

Several popular RAID controller and HBA lines have now been consolidated under the Avago name. In some cases these hardware devices have been discontinued while in other cases they are still being sold. However, many of the best controllers and HBAs (e.g. 3Ware) are still readily available either new or gently used from the online auction sites. These controllers and HBAs, in our opinion, are still the best, especially if one flashes their firmware with the latest release from Avago.

It is the purpose of this Tech Note to document the steps that we take to successfully flash these devices. Having flashed a great many of them, on different types of hardware, we feel that following these steps are a good guarantee of success.

Producing a Bootable Flash Disk

The first step towards successfully flashing your RAID controller or HBA is to create a bootable medium that can carry the new firmware image and the requisite program to write it to the hardware device. It is important to use a bootable, standalone environment to run the flash program because this will allow it to be used anywhere and the flash program can be run without the "benefit" of your favorite operating system's interference. In short, this gives us a well-known, stable, run-anywhere environment.

In the old days, one would use a bootable floppy disk or CD for this job but now days a bootable USB stick is de rigueur. Practically every hardware platform that you will face has a USB port, whereas floppies are so '90s and CD drives are fast becoming a memory too.

We use BootFlashDOS to create a DOS bootable USB stick. If you look on the Internet, you can find any number of places to download this small Windows program. As far as we know, it requires either Windows XP or 2003 to run, primarily because it uses a DLL supplied with these versions of Windows to extract the DOS boot image.

If you don't have access to an old Windows XP or 2003 system, there are numerous other options available for creating a bootable USB stick. But, if you do have access to one of these systems, as we still do, we like to use BootFlashDOS because it is about the easiest way to create a bootable DOS USB stick.

You will need either a 2GB or 4GB USB stick. Only these sizes will work, due to FAT filesystem limitations. Make the USB stick bootable and install it in the hardware platform of your choice and verify that it boots to a DOS prompt.

If you are going to be updating your RAID controller or HBA's firmware on a system with a UEFI BIOS, there are some extra steps that you may need to take. You can do them now or you can wait until you run into the problem and the DOS installer fails to work.

Motherboards with the Phoenix SecureCore Tiano UEFI firmware are reputed to have an embedded UEFI Shell which can be launched using either the F6, F11 or F12 key. If you don't have one of these systems, you will need to get a copy of the appropriate UEFI shell for your system (probably the x64 shell).

You can find the latest x64 shell here:
  https://svn.code.sf.net/p/edk2/code/trunk/edk2/ShellBinPkg/\
   UefiShell/X64/Shell.efi

Various other versions of the x64 shell can be found at:
  1.0 - https://svn.code.sf.net/p/edk2/code/trunk/edk2/EdkShellBinPkg/\
   FullShell/X64/Shell_Full.efi
  2.0 - https://svn.code.sf.net/p/edk2/code/branches/UDK2010.SR1/ShellBinPkg/\
   UefiShell/X64/Shell.efi
  2.1 - https://svn.code.sf.net/p/edk2/code/branches/UDK2014.SP1/ShellBinPkg/\
   UefiShell/X64/Shell.efi
 
  1.1 - https://github.com/tianocore/edk2-archive/tree/master/EdkShellBinPkg/\
   FullShell/X64/Shell_Full.efi
  2.x - https://github.com/tianocore/edk2/tree/master/ShellBinPkg/\
   UefiShell/X64/Shell.efi

The latest (2.x) shell doesn't seem to work with the Avago flash program. Earlier versions of the 1.0 shell don't seem to work with all of the newer motherboards. The one that does seem to work is the 1.0 version (above) from svn.code.sf.net. Apparently, this really the 1.1 shell but the one from github.com doesn't work.

Copy the downloaded Shell_Full.efi/Shell.efi of your choice onto the USB stick as:

/boot/efi/shellx64.efi

Just in case you have a particularly pinheaded version of the BIOS, you may also want to copy the downloaded Shell.efi onto the USB stick's root directory as:

/SHELLX64.EFI