Skip to content

meklort/bcm5719-fw

Folders and files

NameName
Last commit message
Last commit date
Mar 2, 2020
Aug 5, 2020
Aug 2, 2020
Aug 5, 2020
Aug 5, 2020
Aug 5, 2020
Aug 5, 2020
Mar 21, 2020
Apr 12, 2020
Aug 5, 2020
Mar 21, 2020
Apr 6, 2020
Apr 14, 2020
Aug 2, 2020
Mar 2, 2020
May 7, 2018
Aug 2, 2020
Aug 2, 2020

Repository files navigation

BCM5719 Firmware Reimplementation

Introduction

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.

Requirements

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)

Required Compiler

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

Status

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
  • Utilities
    • Firmware tool: Functional
    • Register tool: Functional
  • Tests: To be written

Compiling

To compile the firmware, the following command sequence can be used:

mkdir build
cd build
cmake .. -G Ninja
cmake --build .

Usage

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

Backup Firmware

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.

Stage 1 - MIPS Firmware

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

APE Firmware (BMC/NC-SI communication)

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):

Testing on the Talos II with port 0 for BMC traffic

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

Testing on the Blackbird with port 2 for BMC traffic

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

Firmware Log

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.