After spending several hours fruitlessly fighting to cross-flash an LSI 9210-8i SAS HBA (with the SAS2008(B2) controller) from a very old copy of the IR firmware to the latest release of the IT firmware, I wanted to document some of the things that I discovered while following the dozen-plus guides I found on various blogs and forums all over the Internet so that others can access this knowledge.
The first and most important thing I discovered is that the sas2flash EFI program, version P20, available for download from the Broadcom download portal,
REQUIRES a version 2 UEFI shell in order to run. If you try to launch the sas2flash EFI program from a UEFI version 1 shell
like this one from tianocore, you will get a very cryptic error message similar to the following:
Code:
InitShellApp: Application not started from Shell
Both of the 2015-era UEFI BIOS implementations that I had access to don’t support the UEFI version 2 shell. This means that they will not detect UEFI version 2 shell programs in an ESP as bootable entries in their BIOS Boot Override screens. This also means that stand-alone EFI environments like rEFInd will not detect a version 2 shell program copied to an EFI-bootable USB flash drive and display it as a bootable entry in their boot screens.
A UEFI version 1 shell will be detected and displayed on these systems in the usual fashion but it is missing some service, feature or API needed by the sas2flash EFI program. I attempted to run sas2flash on two different motherboards with 2015-era UEFI BIOS implementations; one motherboard was an AMD 990FX-based Asus and one motherboard was an Intel-based Lenovo, and neither of them would work with the UEFI version 2 shell, nor would they launch sas2flash when it was executed from a UEFI version 1 shell.
The second thing I discovered is that the two UEFI version 1 systems I tried to run the DOS version of sas2flash on do not support the BIOS32 services needed for the DOS sas2flash utility to run correctly. When you try to run the DOS sas2flash utility you will get this error message:
Code:
ERROR: Failed to initialize PAL. Exiting program.
Because of this limitation in these systems’ UEFI BIOS implementations, I was not able to use either the EFI or the DOS versions of the sas2flash tool. In addition, I was not able to use the Linux version of the sas2flash tool on the AMD system to erase the flash on the HBA and prep it for the IT firmware installation. I was eventually forced to plug my HBA into my modern desktop, which uses an AMD X570-based Asus motherboard and supports the UEFI version 2 shell, and boot said shell in order to finally run sas2flash successfully.
The third thing that I learned is that the UEFI shell’s pathname handling is not intuitive. I eventually figured out that the default mapping of attached FAT32 filesystems includes the root directory of that file system, and that the shell will be able to find and run an EFI program in the root directory of each attached filesystem. This means that you can just type “sas2flash” into the EFI shell prompt after mapping the FAT32 filesystem where the program resides, and the shell will find the file named sas2flash.efi and run it.
I hope this info is useful to someone!