On Thu, Nov 17, 2016 at 04:25:14AM -0500, Ian Sutton wrote:
> (resending as list seemed to eat my last mail)
>
> Hi,
>
> I've got a natively-built bootloader working on the pine64 boards
> generously donated to the foundation. Simply dd(1) the following image
> directly to a uSD card, insert it, reset the pine64, and you will be
> greeted by a u-boot prompt over the serial terminal:
>
> https://ce.gl/pine64-uboot-openbsd.img
>
> To provide a better understanding of what's going on here, I've devised
> a tarball that (attempts) to build such an image, found here:
>
> http://ce.gl/pine64-openbsd-bootloader-tool.tgz
>
> Note -- I cobbled this together pretty quickly just as a
> proof-of-concept: there will likely be mundane bugs in the Makefile
>
> In the above tarball, there are a few important items:
>
> - gcc aarch64 cross-tools & binutils, from patrick@'s excellent patch
>
> - modified u-boot port, also patrick
>
> - boot0img, small tool, generates final image
>
> - ARM trusted firmware tool, generates board-specific firmware binaries
>used early-on in the boot process. It informs the hardware logic
>where the u-boot binary lives, how big it is, what its checksum is,
>etc.
>
> - boot0.bin, the (I think) very first bit of code executed at power-on
>time. I stripped this from around the top of the vendor-provided boot
>images. i sure hope it is legally distributable
>
> I suggest editing the makefile and setting -j8 or similar flags on the
> lines that build u-boot and the aarch64-none-elf tools as they take an
> insanely long amount of time.
>
> Similar to most ARM boards, the boot process on the pine64 is not at all
> trivial -- about 5 discrete bodies of code that could be construed as
> 'bootloaders' exist between the power jack & userspace. To the best of
> my understanding, the process is as follows:
>
> 1.) at power-on, hardware logic checks for presence of boot media (in
> our case only uSD card). If no card is inserted, hardware falls back
> to some arcane USB boot/firmware upgrade mode we don't care about
>
> 2.) hardware logic seeks to ~0x2000 and reads a few KB from uSD card
> and writes it to on-silicon SRAM.
>
> 3.) boot0.img code gleans hints about the "real" bootloader, u-boot,
> such that it can safely load an image. I don't know if it's loaded
> to DRAM or SRAM; something here happens that involves trampolining
> which I do not understand. Ostensibly the ARM trusted firmware code
> runs around here, checksumming the purported u-boot image and
> comparing it against the sum written near the top of the "disk"
The proposed patches to implement SPL support for A64 have not been
merged to the main u-boot repository yet. The SPL support does what
the closed boot0 did.
http://lists.denx.de/pipermail/u-boot/2016-November/271722.html
ATF runs in trustzone and persists to implement PSCI.
And of course you'd have to jump back to 32 bit to actually run the
kernel.