[[PageOutline]] [=#u-boot] = Venice U-Boot Bootloader Gateworks supports the U-Boot Bootloader for the Venice product family. The purpose of a bootloader is to load the Linux kernel and execute it passing it configuration parameters such as an optional kernel command-line, an optional initial ramdisk filesystem, and a device-tree. The following items are supported in the Gateworks U-Boot for Venice: - IMX8M FEC GbE - IMX8MP EQOS GbE - USB Host support (USB Mass Storage and USB Networking for ASIX USB 2.0 USB Network device) - eMMC / microSD The following items are not currently supported in the Gateworks U-Boot for Venice: - PCIe support (include PCIe based Gbe) Additional resources: * [http://dev.gateworks.com/venice/boot_firmware/ Pre-built boot firmware (updated from U-Boot/Linux)] * [http://dev.gateworks.com/venice/images/ firmware-venice* JTAG binaries] * [https://github.com/gateworks/uboot-venice source] see [wiki:uboot] for more info == Editing the environment If you would like to modify the default environment you can edit the [https://github.com/Gateworks/bsp-venice/blob/master/venice.env venice/venice.env] in the Venice BSP. [=#default] == Restoring environment defaults The Venice boot firmware has a copy of the original U-Boot env that was created during build time. To restore default bootloader environment variables: - At the "Hit any key to stop autoboot:" prompt press any key. - Execute the following command: {{{#!bash run restore_env && reset }}} [=#memmap] == Memory Mapping When working with boot firmware you are often dealing with choosing where to load in memory various components. Sometimes this is done by hard-coding addresses into U-Boot commands, using env variables, or hard coding them into the U-Boot build configuration files (ie binman node) or FIT image templates. Here is what we recommend for memory mapping on the IMX8M{M,N,P} SoC's: ||= address =||= var =||= Note =|| || 0x00920000 || || ARM Trusted Firmware || || 0x40000000 || || base of DRAM || || 0x40200000 || kernel_comp_addr_r || CONFIG_TEXT_BASE: base of non-secure memory
The ATF configures the first 2M of DRAM as secure for itself || || 0x40310000 || || binman_fip image gets put here || 0x44000000 || || CONFIG_SPL_LOAD_FIT_ADDRESS (used for secure boot) || 0x48200000 || loadaddr, kernel_addr_r || CONFIG_SYS_LOAD_ADDR || 0x50200000 || fdt_addr_r || area for loading fdt (128M above kernel_addr_r) || 0x50300000 || scriptaddr || area for loading script (512K above fdt_addr_r) || 0x7e000000 || || CFG_TZDRAM_START (secure boot with TEE; for 1GB DRAM boards) || 0x80000000 || || 1GB boundary || || 0xbe000000 || || CFG_TZDRAM_START (secure boot with TEE; for 2GB DRAM boards) || 0xc0000000 || || 2GB boundary || 0xfe000000 || || CGG_TZDRAM_START (secure boot with TEE; for 4GB DRAM boards) || 0x100000000 || || 3GB boundary || || 0x140000000 || || 4GB boundary ||