Skip to content

Instantly share code, notes, and snippets.

@Josua-SR
Created August 29, 2024 10:52
Show Gist options
  • Select an option

  • Save Josua-SR/c547fb0c3be41cf3df598e69d83795f2 to your computer and use it in GitHub Desktop.

Select an option

Save Josua-SR/c547fb0c3be41cf3df598e69d83795f2 to your computer and use it in GitHub Desktop.
How to upgrade preinstalled 2013.01 U-Boot on Armada 388 SoM with eMMC

How to upgrade preinstalled 2013.01 U-Boot on Armada 388 SoM with eMMC

Armada 388 SoMs from older stock still ship with a very old version of u-boot which can not load from USB. Upgrade to v2018.01 or v2024.04 is recommended for general usability.

This document outlines how to upgrade the u-boot that is installed on eMMC.

Prebuilt binaries are available here, pick the file suffixed -emmc-boot0, either:

  • u-boot-clearfog-base-emmc-boot0.kwb
  • u-boot-clearfog-pro-emmc-boot0.kwb

Upgrade using the serial console

This procedure requires a serial terminal application including xymodem support for file upload, such as e.g. tio or Tera Term.

As an example tio is used, but the same concepts apply for Tera Term, and could be automated with rzsz:

  1. Open Serial Terminal, power-on the board and stop u-boot automatic boot at the prompt:

    U-Boot 2013.01-g29201ec-dirty (Feb 24 2019 - 16:45:11) Marvell version: 2015_T1.0p11
    
    Board: A38x-Customer-Board-1
    mvCtrlRevNameGet: Error: Failed to read Revision ID
    SoC:   MV88F6828
           running 2 CPUs
    CPU:   ARM Cortex A9 MPCore (Rev 1) LE
           CPU 0
           CPU    @ 1600 [MHz]
           L2     @ 800 [MHz]
           TClock @ 250 [MHz]
           DDR3    @ 800 [MHz]
           DDR3 32 Bit Width,FastPath Memory Access, DLB Enabled, ECC Disabled
    DRAM:  1 GiB
    MMC:   mv_sdh: 0
    sdhci_transfer_data: Error detected in status(0x408000)!
    *** Warning - bad CRC, using default environment
    
    PCI-e 0: Detected No Link.
    PCI-e 1: Detected No Link.
    USB2.0 0: Host Mode
    USB3.0 0: Host Mode
    USB3.0 1: Host Mode
    
    Map:   Code:                    0x3fed4000:0x3ff9809c
           BSS:                     0x3ffefd5c
           Stack:                   0x3f9c3f20
           Heap:                    0x3f9c4000:0x3fed4000
           U-Boot Environment:      0x000f0000:0x00100000 (MMC)
    
    Board configuration detected:
    Net:
    |  port  | Interface | PHY address  |
    |--------|-----------|--------------|
    | egiga0 |   RGMII   |     0x00     |
    | egiga1 |   SGMII   |   In-Band    |
    | egiga2 |   SGMII   |   In-Band    |
    egiga0 [PRIME], egiga1, egiga2
    Hit any key to stop autoboot:  0
    Marvell>>
    
  2. Initiate ymodem protocol on the board at 115200 baudrate:

    Marvell>> loady $loadaddr 115200
    ## Switch baudrate to 115200  115200 bps and press ENTER ...
    ## Ready for binary (ymodem) download to 0x02000000 at 115200 bps...
    C
    
  3. Send new u-boot binary using ymodem protocol from terminal application:

    In tio press ctrl+t, then y, and enter path to the u-boot binary:

    ## Ready for binary (ymodem) download to 0x02000000 at 115200 bps...
    C
    [13:30:39.633] Send file with YMODEM
    [13:30:47.828] Sending file '/home/user/u-boot-clearfog-base-emmc-boot0.kwb'
    [13:30:47.828] Press any key to abort transfer
    .......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................|
    [13:32:05.300] Done
    ## Total Size      = 0x00099600 = 628224 Bytes
    Marvell>>
    

    Note: Sometimes the transfer will not actually start and keep printing "C". In this case press any key to abort and then restart sending the file from terminal application/

    Note: The transfer can be sped up by a factor of 4 with higher baudrate 460800, at the cost of more interactions, see below console log as example:

    Marvell>> loady $loadaddr 460800
    ## Switch baudrate to 460800  115200 bps and press ENTER ...
    ## Switch baudrate to 460800 bps and press ENTER ...
    
    [13:39:52.219] Disconnected
    ➜  workspace tio -b 460800 /dev/ttyUSB0
    [13:39:57.146] tio v2.7
    [13:39:57.146] Press ctrl-t q to quit
    [13:39:57.367] Connected
    ## Ready for binary (ymodem) download to 0x02000000 at 460800 bps...
    CC
    [13:40:06.903] Send file with YMODEM
    [13:40:08.717] Sending file '/home/user/u-boot-clearfog-base-emmc-boot0.kwb'
    [13:40:08.717] Press any key to abort transfer
    .......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................|
    [13:40:45.964] Done
    ## Total Size      = 0x00099600 = 628224 Bytes
    ## Switch baudrate to 115200 bps and press ESC ...
    
    [13:40:51.315] Disconnected
    ➜  workspace tio -b 115200 /dev/ttyUSB0
    [13:40:54.649] tio v2.7
    [13:40:54.649] Press ctrl-t q to quit
    [13:40:54.872] Connected
    Marvell>>
    
  4. Write to eMMC boot0 partition:

    Marvell>> mmc dev 0 1
    switch to partions #1, OK
    mmc0(part 1) is current device
    Marvell>> mmc write $loadaddr 0 0x2000
    
    MMC write: dev # 0, block # 0, count 8192 ... 8192 blocks write: OK
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment