Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

U-Boot (Universal Boot-loader), developed by Denx Software Engineering, is an open-source bootloader commonly used in embedded systems. It serves as the initial program that loads the operating system, notably the Linux kernel, into DRAM and prepares the system for execution. U-Boot is highly configurable and supports a wide range of architectures and hardware platforms. Moreover, it is licensed as free software under the GNU General Public License, fostering collaborative development and widespread adoption.

Refer to:https://www.denx.de/project/u-boot/

The U-Boot Official Web: U-Boot

The U-Boot Documentation: The U-Boot Documentation

U-Boot 2024.07 is downloaded from: u-boot-2024.07.tar.bz2

Table of Contents

Table of Contents
stylenone

Features of U-Boot

Key features and characteristics of U-Boot include:

  1. Versatility: U-Boot is designed to be versatile and can be adapted to various architectures, including ARM, MIPS, x86, and more.

  2. Open Source: U-Boot is released under the GNU General Public License (GPL), providing users with the freedom to view, modify, and distribute the source code.

  3. Boot Sequence Control: U-Boot handles the initialization and configuration of the hardware during the boot process. It allows users to interact with the bootloader through a command-line interface, enabling them to control the boot sequence, load kernel images, and set various parameters.

  4. Support for Various Storage Devices: U-Boot supports loading firmware and kernel images from a variety of storage devices, including NAND and NOR flash memory, SD cards, USB storage, TFTP servers, and more.

  5. Environment Variables: U-Boot allows the configuration of environment variables that store important settings, such as boot parameters and memory addresses.

  6. Network Booting: U-Boot supports network booting, allowing systems to load kernel images and other files over the network using protocols like TFTP or NFS.

  7. Development and Debugging Tools: U-Boot includes tools for debugging and development, such as memory and register inspection, script execution.

Features of U-Boot of SP7350 Platform

U-Boot serves as the second-stage bootloader in SP7350 platform. After initializing itself, U-Boot then loads Linux kernel image from external storage devices into DRAM and executes it. As it runs in DRAM, its size is no longer limited by SRAM of SP7350 (only limited by the system's DRAM size), ranging from hundreds of kilobytes to several megabytes.

Apart from being a boot-loader its role as a bootloader for loading the Linux kernel, U-Boot supports to read reading images from external storage device devices such as USB flash drives or SD cards and write writing images into NOR flash, NAND flash, and eMMC devices in system. key Key features of U-Boot of for SP7350 are listed belowas follows:

  • Support console at UART0 (@ 115,200 bps).

  • Support booting Linux from SPI-NOR flash, SPI-NAND flash, 8-bit NAND flash or eMMC device.

  • Support in-system program (ISP) for SPI-NOR flash, SPI-NAND flash, 8-bit NAND flash or eMMC device.

  • Support read images from USB flash drives or SD cards for in-system program (ISP).

  • Support secure-boot (check hash value of Linux image).

  • Support fastboot function for eMMC device.

  • Support fastboot function for SPI-NAND and 8-bit NAND flashes (only for updating Linux kernel or rootfs partition).

Supported Drivers

...

for SP7350 Platform

The source files of U-Boot are conveniently located within the "boot/uboot/" directory under the project's top directory. For the SP7350 platform, a wide array of device drivers is supported. These drivers are within the "drivers" directory. Below is a reference table detailing the drivers along with their corresponding feature descriptions:

Drivers

Folders or files

 Feature descriptions

8-bit NAND

mtd/nand/raw/sp_paranand/

  1. Support Supports mtd framework.

  2. Support Supports read and write standard 2k/4k/8k ECC sectors.

  3. Support Supports read and write 1K60 ECC sectors.

  4. Support Supports block and chip erase.

Clock

clk/sunplus/

  1. Support Supports common clock framework (CCF).

  2. Support Supports clock functions for all devices.

eMMC

mmc/sp_mmc*

  1. Support Supports MMC framework.

  2. Support Supports read and write User Data Area.

  3. Support Supports read and write RPMB partition.

  4. Support Supports DMA mode.

Ethernet

net/designware.*

  1. Support Supports 802.3 packets transactions.

  2. Support Supports 100M and 1000M speeds.

  3. Support Supports RGMII and RMII interfaces.

fastboot

fastboot/

  1. Support eMMC update all partitions.

  2. Support SPI-NAND and 8-bit NAND update the following partitions:

    1. uboot2

    2. fip

    3. env

    4. env_redund

    5. kernel (uImage)

    6. rootfs (ubifs)

I2C

i2c/designware_i2c*

  1. Support Supports I2C master mode access.

  2. Support Supports 100kHz and 400kHz speeds.

OTP

soc/sunplus/

  1. Support Supports write and read OTP.

  2. Support Supports rotp and wotp commands.

Reset

reset/reset-sunplus.c

  1. Support Supports reset functions for all devices.

Pinctrl

pinctrl/sunplus/

  1. Support Supports generic helper bindings.

  2. Support Supports pin-mux of all devices.

  3. Support Supports all GPIO pins.

SD card

mmc/sp_sd*

  1. Support Supports MMC framework.

  2. Support Supports read and write operations.

  3. Support Supports DMA mode.

SPI

spi/designware_spi.c

  1. Support Supports SPI master mode access.

  2. Support Supports set clock frequency in dts.

  3. Support Supports mode 0, 1, 2 and 3 in dts.

SPI-NAND

mtd/nand/raw/sp_*

  1. Support Supports mtd framework.

  2. Support Supports read and write standard 2k ECC sectors for 1 or 2 planes.

  3. Supports read and write standard 4k ECC sectors for 1 plane only.

  4. Support Supports read and write 1K60 ECC sectors..

  5. Support Supports block and chip erase.

  6. Support Supports 4-bit operations.

  7. Support Supports set clock frequency in dts.

SPI-NOR

mtd/spi/spi-nor-ids.c

spi/sp_spi_nor.c

  1. Support Supports mtd framework.

  2. Support Supports read and write operations.

  3. Support Supports block and chip erase.

  4. Support Supports set clock frequency in dts.

UART

serial/serial_sunplus.c

  1. Support Supports U-Boot console at UART0.

  2. Baud rate is set by i-boot.

USB2.0 EHCI

usb/host/ehci-sunplus.c

  1. Support Supports high-speed read and write operations.

USB2.0 OHCI

usb/host/ohci-sunplus.c

  1. Support Supports full-speed read and write operations.

USB2.0 UDC

usb/gadget/sp_udc.c

  1. Support Supports USB device devices (gadgets).

USB3.0 DRD

usb/host/xhci-spdwc3.c

usb/gadget/spdwc3_udc.c
phy/phy-sunplus-dwc3.c

  1. Support Supports super-speed, high-speed and full-speed access.

  2. Support Supports host and device modemodes.

  3. Support Supports USB type C receptacle.

Video

video/sunplus/sp7350/disp/

  1. Support Supports U-Boot video console.

...

SP7350 Platform-specific Files or Folders

Board-specific

...

Files

Board-specific files of for the SP7350 platform are located at can be found in the “board/sunplus/.”

The following table lists board specific files

” directory. Below is a breakdown of the folders and their descriptions:

Folders

Descriptions

common/secure_sp7350/

Contains files related to secure - boot related filesfunctionality.

sp7350/

Contains Houses SP7350 platform-specific or hardware-specific files.

Machine (CPU) specific files

...

Architecture-specific Files

Architecture-specific files for the SP7350 platform are located situated at “arch/arm/mach-pentagram” under ” within the U-Boot directory. The following table lists Here's a summary of the files or and folders.:

Files or folders

Descriptions

cpu/armv8/

Contains ARMv8 CPU (ex: Cortex A55) related files.

mach-pentagram/include/mach

Contains platform or hardware-related header files.

mach-pentagram/cpu.c

Contains Encompasses subroutines responsible for CPU reset, memory mapmapping, DRAM settingconfiguration, and etcmore.

Configuration

...

Header File

The configuration header file contains comprises board-specific configuration options, hardware parameters, and initialization settings tailored to the target platform. Configuration For the SP7350 platform, the configuration header file of SP7350 platform is “include/configs/pentagram_common_sp7350_c.h.”

Default

...

Configuration Files

Default configuration files of U-Boot are located under stored in the “configs” directory. Default configuration files of SP7350 platform are the files with name prefixing “sp7350_”Specifically for the SP7350 platform, default configuration files are prefixed with “sp7350_”.

Device-tree Source Files

U-Boot and Linux share device-tree source files, situated in the directory:

'linux/kernel/arch/arm64/boot/dts/sunplus/'

For usage guidance, please consult:

https://sunplus.atlassian.net/wiki/x/HwB8dg

DRAM Space Allocation

The diagram below depicts the DRAM allocation during U-Boot execution for a 2GB DRAM configuration.

...

Each segment serves a specific purpose:

  • null_pointer_prot: Reserved for null pointer protection, this segment is never mapped to physical memory, ensuring safety from accidental memory access.

  • warm-boot: Holds the code responsible for resuming the system from deep sleep mode.

  • BL31: Contains the BL31 firmware code as part of the Trusted Firmware-A (TF-A).

  • OP-TEE OS: Stores the OP-TEE OS and its applications. This segment is designated as a secure zone in the x-boot process.

  • uboot: Initially used to load the U-Boot image. The image is later relocated to the end of DRAM.

  • temporary: An unused segment, currently reserved for potential future purposes.

  • kernel: Allocated for the Linux kernel image, where the image is loaded, decompressed, and executed.

  • relocated_uboot: U-Boot is relocated to this segment at runtime, which is typically located at the very end of system DRAM.

U-Boot Log and Explanation

Line 1: The banner (version) of U-Boot.

Line 3: The size of the CPU cache-line is 64 bytes.

Line 4: Model name is ‘Sunplus SP7350 EVB’.

Line 5: The DRAM size is 3.8 GiB.

Line 6: PLLA (Audio PLL) is set to 147,456,000 Hz.

Line 7: PLLC (CPU frequency) is set to 1,500,000,000 Hz.

Line 8: PLLL3 (L3 cache frequency) is set to 1,200,000,000 Hz.

Line 9: PLLD (SDRAM PLL) is set to 800,000,000 Hz.

Line 10: PLLH (Peripheral PLL) is set to 2,150,000,000 Hz.

Line 11: PLLN (NPU PLL) is set to 500,000,000 Hz.

Line 12: PLLS (System PLL) is set to 2,000,000,000 Hz.

Line 17: The U-Boot environment variable is successfully loaded.

Line 18-21: The display is successfully probed.

Line 22-24: Standard input, output and error are directed to the serial (UART0)

Line 27-39: Initializing and scanning USB devices.

Line 41: Starting to run the default script command.

Line 42: Boot-device is 0x1F (MX[6..2]), indicating eMMC boot.

Line 43: “[scr] emmc boot” indicates that U-Boot is executing the default 'eMMC boot' script.

Line 45: Loading the header of the Linux kernel image.

Line 47: Loading the Linux kernel image.

Line 48-49: Unzipping the Linux kernel image.

Line 50-57: Preparing to run Linux kernel.

Code Block
U-Boot 2024.07-gc1f79898b (Sep 26 2024 - 18:41:04 +0800)

CONFIG_SYS_CACHELINE_SIZE: 64
Model: Sunplus SP7350 EVB
DRAM:  3.8 GiB (effective 4 GiB)
PLLA            :  147456000 Hz
PLLC            : 1500000000 Hz
PLLL3           : 1200000000 Hz
PLLD            :  800000000 Hz
PLLH            : 2150000000 Hz
PLLN            :  500000000 Hz
PLLS            : 2000000000 Hz
reset: reset@f8800004
Core:  338 devices, 21 uclasses, devicetree: separate
SPI:   Manufacturer id = 0x00, Device id = 0x0000
MMC:   emmc: 0, sd: 1
Loading Environment from MMC... Reading from MMC(0)... OK
Disp: probe ...
Disp: init 1920x1080 settings
Disp: init lt8912b bridge ic
Disp: probe done
In:    usbkbd,serial
Out:   vidconsole,serial
Err:   vidconsole,serial
Net:   eth0: stmmac@f8103000

starting USB...
Bus usb@f8102100: ehci_sunplus_probe.164, dev_name:usb@f8102100,port_num:0
after write usbruncmd,usbcmd:80b01,retry_times:0
USB EHCI 1.10
Bus usb@f8102080: ohci_sunplus_probe.51, dev_name:usb@f8102080,port_num:1
USB OHCI 1.0
Bus dwc3@f80a1000: Register 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus usb@f8102100 for devices... 1 USB Device(s) found
scanning bus usb@f8102080 for devices... 1 USB Device(s) found
scanning bus dwc3@f80a1000 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0
[scr] bootcmd started
fa218008: 0000001f                             ....
[scr] emmc boot

MMC read: dev # 0, block # 8738, count 1 ... 1 blocks read: OK

MMC read: dev # 0, block # 8738, count 18262 ... 18262 blocks read: OK
unzip 10000000 2000000
Uncompressed size: 22896648 = 0x15D6008
booti 2000000 - ef8db4b0
## Flattened Device Tree blob at ef8db4b0
   Booting using the fdt blob at 0xef8db4b0
Working FDT set to ef8db4b0
   Loading Device Tree to 00000000ee8b1000, end 00000000ee8c28bb ... OK
Working FDT set to ee8b1000

Starting kernel ...