Now it is possible to load and execute the same U-Boot SPL,
as used for booting from SD cards. Just a different delivery
method (a USB OTG cable instead of an SD card) for handling
exactly the same content.
The only argument for this new command is the name of the SPL
binary file (with a eGON header generated by the 'mksunxiboot'
tool). Now the 'fel' tool can be run as:
fel spl u-boot-sunxi-with-spl.bin
Before this change, the SPL was only able to use the memory between
addresses 0x2000 and ~0x5D00, totalling to something like ~15 KiB.
This is the biggest contiguous area in SRAM, which is not used
by the FEL code from the BROM. Unfortunately, it is rather small.
And also the unusual starting offset was making it difficult to
use the same SPL binary for booting from the SD card and via FEL.
There are surely more unused parts of SRAM, but they are scattered
across multiple locations, primarily because the FEL code from the
BROM sets up two stacks at inconvenient locations (the IRQ handler
stack at 0x2000, and a regular stack at 0x7000). Essentially, the
problem to solve here is to ensure a sufficiently large and consistent
SRAM address space for the SPL without any potentially SoC specific
holes in the case of booting over USB via FEL.
This is achieved by injecting special entry/exit thunk code, which
is moving the data in SRAM to provide a contiguous space for the SPL
at the beginning of SRAM, while still preserving the the data from
the BROM elsewhere. When the SPL tries to return control back to the
FEL code in the BROM, the thunk code moves the data back to its
original place. Additionally, the eGON checksum is verified to
ensure that no data corruption has happened due to some unexpected
clash with the FEL protocol code from the BROM.
So the thunk code takes care of the address space allocation uglyness
and provides the U-Boot SPL with a somewhat nicer abstraction.
Now the FEL booted SPL on A10/A13/A20/A31 can use up to 32 KiB of
SRAM because the BROM data is saved to different SRAM section.
There is also generic code, which does not rely on extra SRAM
sections, but just glues together the unused free space from
both BROM FEL stacks to provide something like ~21 KiB to the SPL.
Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
sunxi-tools Copyright (C) 2012 Alejandro Mery <amery@geeks.cl> Tools to help hacking Allwinner A10 (aka sun4i) based devices and possibly it's successors, that's why the 'x' in the package name. fexc: `.fex` file (de)compiler Usage: ./fexc [-vq] [-I <infmt>] [-O <outfmt>] [<input> [<output>]] infmt: fex, bin (default:fex) outfmt: fex, bin (default:bin) bin2fex: compatibility shortcut to call `fexc` to decompile an script.bin blob back into `.fex` format used by allwinner's SDK to configure the boards. fex2bin: compatiblity shortcut to call `fexc` to compile a `.fex` file into the binary form used by the sun4i kernel. fel: script interface for talking to the FEL USB handler built in to th CPU. You activate FEL mode by pushing the usboot/recovery button at poweron. usb-boot: Simple wrapper to automate USB booting in FEL mode See http://linux-sunxi.org/FEL/USBBoot for details fel-gpio: Simple wrapper around fel-pio and fel to allos GPIO manipulations via FEL fel-sdboot: ARM native sdcard bootloader forcing the device into FEL mode fel-pio: ARM native helper for fel-gpio pio: Manipulate PIO register dumps nand-part: Tool for manipulating Allwinner NAND partition tables jtag-loop.sunxi: ARM native boot helper to force the SD port into JTAG and then stop, to ease debugging of bootloaders. bootinfo: Dump information from Allwinner boot files (boot0/boot1) --type=sd include SD boot info --type=nand include NAND boot info (not implemented) phoenix_info: gives information about a phoenix image created by the phoenixcard utility and optionally extracts the embedded boot code & firmware file from their hidden partitions. meminfo: Tool for reading DRAM settings from registers. Compiled as a static binary for use on android and other OSes. To build this, get a toolchain, and run: make CROSS_COMPILE=arm-linux-gnueabihf- meminfo This software is licensed under the terms of GPLv2+ as defined by the Free Software Foundation, details can be read in the COPYING file.
Description
Languages
C
87.6%
Assembly
4%
Makefile
2.6%
Shell
2.3%
Roff
2%
Other
1.5%