wiki:malibu/firmware

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:

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}
      
  • 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
      
  • 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
      

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:

Last modified 19 months ago Last modified on 04/17/2023 08:24:44 PM
Note: See TracWiki for help on using the wiki.