This library contains a clean-room reimplementation of the BCM5719 firmware based on the Ortega specification.
The firmware has been tested on the Talos II and Blackbird made by Raptor Computer Systems.
Note: This firmware is currently in development. Flashing the firmware to a network card can result in a bricked device when either an external programmer is required, or the external flash must be temporarily disabled during boot-up.
This repository depends on a number of external tools
- Customized LLVM/Clang compiler for MIPS firmware
- CMake 3.5.1+
- Linux (utilities)
- IPXact generator (optional)
Due to limitations in the MIPS CPU, this firmware requires a custom compiler to function properly. The custom compiler can be built using the following steps:
git clone https://github.com/meklort/llvm-project.git -b meklort-10.0.1
cd llvm-project
mkdir build
cd build
cmake ../llvm -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=~/llvm-bcm5719 -DLLVM_ENABLE_PROJECTS="lld;clang"
ninja
ninja install
The current version of the code is functional and is able to handle network traffic over NC-SI
- Libraries:
- MII Library: Done
- NVRAM Library: Done
- Stage1/Stage2
- Implementation: Functional
- Testing: Minimal, WIP
- VPD: Started, not functional
- WOL: Not started
- APE
- NC-SI Handler: Functional
- Get Version ID: Not Implemented
- OEM Command: Not Implemented
- BMC <-> Network Communication: Working
- NC-SI Handler: Functional
- Utilities
- Firmware tool: Functional
- Register tool: Functional
- Tests: To be written
To compile the firmware, the following command sequence can be used:
mkdir build
cd build
cmake .. -G Ninja
cmake --build .
Before proceeding, the Linux driver must be unloaded. On the Talos II, this can be done as root with the following:
echo 0004:01:00.0 > /sys/bus/pci/devices/0004:01:00.0/driver/unbind
echo 0004:01:00.1 > /sys/bus/pci/devices/0004:01:00.1/driver/unbind
Before proceeding, the original firmware should be backed up.
cd build
sudo ./utils/bcmflash/bcmflash -t hardware -b binary
This will result in a firmware image, firmware.fw, being stored in the current directory.
After compilation, the MIPS firmware is ready to be uploaded to the NIC.
cd build
sudo ./utils/bcmflash/bcmflash -t hardware -1 stage1/stage1.bin
The APE firmware can be tested by loading it into ram using the following sequence (Note: this may fail unless if stage1 has been loaded):
cd build
sudo ./utils/bcmregtool/bcmregtool --apeboot=ape/ape-port0.bin
Once tested, the APE firmware can be loaded into the device using the following command:
cd build
sudo ./utils/bcmflash/bcmflash -t hardware -a ape/ape-port0.bin
cd build
sudo ./utils/bcmregtool/bcmregtool --apeboot=ape/ape-port2.bin
Once tested, the APE firmware can be loaded into the device using the following command:
cd build
sudo ./utils/bcmflash/bcmflash -t hardware -a ape/ape-port2.bin
The APE and Stage1 firmware are able to print status messages to a log. This can be accessed in one of two ways:
- The ./utils/apeconsole/apeconsole utility can be used if no driver is loaded by the host.
- The EM100Pro console can be used if wired to the SPI bus on the BCM5719. This allows for printouts even when the host is off.