Updating Malibu Firmware / Software
This page is all about updating / flashing firmware / software onto a Malibu SBC.
The various components of the 'firmware' on a Malibu board which you may want to update from time to time are (lowest level components listed first):
- GSC firmware
- SPL
- Linux device-tree
- U-Boot bootloader
- Linux kernel
- root filesystem
Some components above you can update individually in Linux using dd
or in U-Boot using mmc write
taking care to place them at the right offset.
Pre-Built Firmware
JTAG binary images:
- Flash with Gateworks JTAG dongle on a Linux host with instructions
- firmware-malibu-gw8901-jtag.bin
- JTAG image of boot firmware containing: ATF, U-Boot, and U-Boot env. Flash with JTAG if recovering a board from an unknown state.
- gsc_8901_v62.txt - Latest GSC firmware release for GW891
Disk Images (Update via Bootloader gzwrite or via Linux):
Firmware Versioning
You can determine the firmware version of various portions of the firmware by looking for banners on the serial console. For example:
Gateworks Malibu SPL v2.4(release):v2.4-5-g9f5a66e417b6 Built : 13:50:03, Apr 6 2023 DDR4-2133 4x16GiB: 8GiB mv_ddr: devel-ged350176570c (Apr 06 2023 - 13:50:01) SSCG_EN Synopsys DDR43 PHY Firmware version: A-2017.11 ... U-Boot 2022.10-00019-gcbfa8885831d (Apr 06 2023 - 13:49:47 -0700) ... GSCv3 : v62 0x4a26 RST:VIN Thermal protection:enabled at 96C ... [ 0.000000] Linux version 6.1.0-00021-g4225c178a023 (jenkins@buildbot) (aarch64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, GNU ld (GNU Binutils for Ubuntu ) 2.34) #5 SMP Thu Apr 6 08:55:30 PDT 2023 ... Ubuntu 22.04.1 LTS jammy-malibu ttyS0 Gateworks-Ubuntu-gateworks-g67953fe Thu Aug 18 17:49:36 UTC 2022 ...
The above output shows you:
- Secondary Program Loader (SPL) GIT revision and build date
- Marvell DDR version
- U-Boot GIT revision and build date
- GSC firmware version
- Linux kernel version, GIT revision, build date and build source
- Ubuntu root filesystem version and GIT revision of the Gateworks ubuntu-rootfs.sh that created it (use
dpkg -l | grep "^ii"
to see what packages and versions are installed
Updating Firmware
This section provides instructions for updating both GSC firmware as well as boot device firmware.
There are two methods for updating firmware:
- on a live board using Serial Console and Ethernet
- using a GW16099 JTAG dongle (see below)
The various items that can be easily updated:
- GSC Firmware - Can be updated via JTAG or at runtime - see below)
- Boot Firmware (Everything up to and including the Bootloader)
- Root Filesystem (Operating System)
JTAG Programming
Note: JTAG Programming for Malibu is not yet supported
The Gateworks JTAG adapter (GW16099) is available in the Malibu Dev Kit as well as on the Gateworks web store here
All Malibu boards have a 10-pin JTAG header which provides:
- JTAG Programming for embedded emmc flash - see here for instructions
- Serial Console access via UART1 (/dev/ttyS0)
Please Note:
- Only program *jtag.bin files via the JTAG programmer and jtag_usbv4
- Linux software is supported for programming Malibu (jtag_usbv4 required). Windows is not supported. (Serial console through Windows does work).
- JTAG Programming of eMMC is supported by jtag_usbv4 - see here. Due to this being a slow process for large eMMC devices it is recommended to program boot firmware via JTAG if you brick your board and use the bootloader to install firmware when possible for speed (see #serial-ethernet below).
- JTAG Programming of the GSC firmware is supported by jtag_usbv4 - see below
To flash the Malibu boot firmware (no operating system), use the following command:
sudo ./jtag_usbv4 –p firmware-malibu-gw8901-jtag.bin
Update Firmware via Serial Console and Ethernet from Bootloader
The quickest and easiest way to update your firmware is via Serial Console and Ethernet. You can do this either in the U-Boot bootloader (recommended) or within a Linux OS.
If updating firmware via Bootloader/Serial/Ethernet (recommended for speed) you need to setup a TFTP server to host the files for transfer. Alternatively you could load firmware files from removable storage (microSD, or USB Mass Storage for example) however you will need to deviate from the examples below. For details on setting up a TFTP server see here.
The following instructions assume your board target IP address is 192.168.1.1 and you have a TFTP server at 192.168.1.146. Adjust environment according to your network via 'setenv ipaddr <ipaddr>' and 'setenv serverip <serverip>'.
The methods you use to update the firmware depends on what specifically you are trying to update.
Update OS
Updating the OS can be done via a Compressed Disk Image. This image includes the partition table and root filesystem which includes the kernel, device-tree and bootscript. Note for Malibu the boot firmware is contained on the emmc boot0 hardware partition keeping it separate from the OS on the emmc user parition.
Complete Compressed Disk Images are available for download here: http://dev.gateworks.com/malibu/images/
Procedure:
- Via U-Boot:
#First, setup the IP and server IP as described above (example IPs below) setenv ipaddr 192.168.1.1 setenv serverip 192.168.1.2 # setup network environment (use bootp or static by setting ipaddr/serverip and optional netmask/gatewayip) setenv autoload 0; bootp # use dhcp for network config but do not fetch a file # choose the device to update setenv dev 0 # sets MMC device to be flashed - see mmc list # set your image setenv image jammy-malibu.img.gz # update run update_all
- This is what the update_all script does if your curious:
update_all=tftpboot ${loadaddr} ${image} && gzwrite mmc ${dev} ${loadaddr} ${filesize}
- This is what the update_all script does if your curious:
- Via Linux (assuming the device you are updating is not mounted):
# fetch your file cd /tmp wget http://dev.gateworks.com/malibu/images/jammy-malibu.img.gz # uncompress and write to the emmc device zcat jammy-malibu.img.gz | dd of=/dev/mmcblk0 bs=4M
Updating just the boot firmware
Updating the Boot firmware via this method updates the ATF and U-Boot bootloader. Note for Malibu the boot firmware is contained on the emmc boot0 hardware partition keeping it separate from the OS on the emmc user parition.
The latest pre-built boot firmware images for Malibu are available for download here: http://dev.gateworks.com/malibu/boot_firmware/
Procedure:
- Via U-Boot:
# setup network environment (use bootp or static by setting ipaddr/serverip and optional netmask/gatewayip) bootp # optional: use dhcp for network config # update run update_firmware
- This is what the update_firmware script does if your curious:
tftpboot $loadaddr ${dir}/firmware-malibu-${board}.bin && setexpr blkcnt $filesize + 0x1ff && setexpr blkcnt $blkcnt / 0x200 && mmc dev 0 1 && mmc write $loadaddr 0 $blkcnt && mmc dev 0 2 && mmc write $loadaddr 0 $blkcnt
- This is what the update_firmware script does if your curious:
- Via Linux:
- Updating via Linux requires you to download the 'firmware-malibu-${board}.bin' file (pre-built images can be found here
# fetch your file cd /tmp wget http://dev.gateworks.com/malibu/boot_firmware/firmware-malibu-${board}.bin dd if=firmware-malibu-${board}.bin of=/dev/mmcblk2 bs=1K seek=0
- Updating via Linux requires you to download the 'firmware-malibu-${board}.bin' file (pre-built images can be found here
Note that if you want to update the boot firmware including the default U-Boot environment (overwriting any environment you already have) use the 'firmware-malibu-${board}.img' file.
TFTP Error Troubleshooting
There are many reasons why TFTP may fail including:
- firewall issue keeping your TFTP server for being accessible (make sure you can ping it!)
- invalid network configuration (netmask, gatewayip, ipaddr, serverip) - again make sure you can ping it!
- 'TFTP error: trying to overwrite reserved memory...' - indicates you are trying to transfer a file that is larger than system memory. You will need to split the file into chunks and flash them individually at the right offsets
Updating GSC firmware
The GSC firmware is updated via the gsc_update
application running under Linux as described at on the gsc wiki. While it takes only a few seconds to update there is no recovery for a failed update. Gateworks has ensured that this update is robust but can not survive a power-cut or kernel crash in the middle of the update. Updates to the GSC firmware are expected to be rare.
Update GSC Firmware via JTAG
To update the GSC firmware via JTAG download the jtag_usbv4
application on a Linux x86 host from here and execute as follows:
./jtag_usbv4 -m gsc_8901_v62.txt
Note that the ftdi_sio
kernel module must not be loaded (sudo rmmod ftdi_sio) and you may need to run this command as root by pre-pending a sudo depending on the configuration of your linux host.
For more details please see: