[U-Boot] [RFC PATCH 00/10] sunxi: Allwinner A64 SPL support

Andre Przywara andre.przywara at arm.com
Thu Nov 3 02:36:31 CET 2016


Hi,

this is my first take on the SPL support for the Allwinner A64 SoC.
The actual meat - the DRAM initialization code - has been provided
by Jens - many thanks for that!
The rest of the patches mostly deal with the 32-bit/64-bit switch.

While it is possible and seems natural to let the SPL also run in 64-bit,
this creates a really large binary (32600 Bytes in my case). With some
hacks (plus some fixes to make the SPL 64-bit safe) I got this to work,
but any addition will probably break it and exceed the 32KB limit that
the BROM imposes. Debug is the first obvious victim here.

So this series lets the SPL run entirely in AArch32, which is what the
BROM comes from anyway. With the help of patch 2/10 and 8/10 we detect
that the next binary should be run in AArch64 mode, so patch 9/10 adds
the required RMR switch to enter the 64-bit mode.
It compiles for me into less than 20 KB, so plenty of room for debug
and future code. Technically running the SPL in 32-bit or 64-bit does
not make any difference, actually having it in AArch32 helps FEL boot
(which works fine with this series).

The only real drawback of this approach is the build process, which is
now split between the SPL (AArch32) and the U-Boot proper (AArch64).
Patch 10/10 introduces a new defconfig, which defines CPU_V7 and thus
creates a 32-bit binary. This requires an ARM cross-compiler or a
native compile on an ARM board. The resulting sunxi-spl.bin can then
be either directly written to the SD card or later combined with the
AArch64 U-Boot proper into one image file.

What this series still lacks is proper Linux support, because we miss
the ARM Trusted Firmware (ATF) binary to be loaded and executed.
I have patches to extend the SPL FIT support to handle this very nicely
in a generic way, but these patches need some clean up. I didn't want
this series to be held back any longer, so I will send the FIT patches
later.

I appreciate any comments on this series!

Cheers,
Andre.

Andre Przywara (7):
  sun6i: Restrict some register initialization to Allwinner A31 SoC
  Makefile: use "arm64" architecture for U-Boot image files
  sunxi: provide default DRAM config for sun50i in Kconfig
  sunxi: H3/A64: fix non-ODT setting
  SPL: read and store arch property from U-Boot image
  sunxi: introduce RMR switch to enter payloads in 64-bit mode
  sunxi: A64: add 32-bit SPL support

Jens Kuske (3):
  sunxi: H3: add and rename some DRAM contoller registers
  sunxi: H3: add DRAM controller single bit delay support
  sunxi: A64: use H3 DRAM initialization code for A64

 Makefile                                        |   9 +-
 arch/arm/include/asm/arch-sunxi/clock_sun6i.h   |   1 +
 arch/arm/include/asm/arch-sunxi/dram.h          |   2 +-
 arch/arm/include/asm/arch-sunxi/dram_sun8i_h3.h |  51 +++---
 arch/arm/lib/spl.c                              |  14 ++
 arch/arm/mach-sunxi/Makefile                    |   2 +
 arch/arm/mach-sunxi/clock_sun6i.c               |   7 +-
 arch/arm/mach-sunxi/dram_sun8i_h3.c             | 213 +++++++++++++++++-------
 arch/arm/mach-sunxi/spl_switch.c                |  60 +++++++
 board/sunxi/Kconfig                             |  17 +-
 common/spl/spl.c                                |   1 +
 common/spl/spl_fit.c                            |   8 +
 configs/pine64_plus_defconfig                   |   4 +-
 configs/sun50i_spl32_defconfig                  |  11 ++
 include/spl.h                                   |   3 +-
 15 files changed, 308 insertions(+), 95 deletions(-)
 create mode 100644 arch/arm/mach-sunxi/spl_switch.c
 create mode 100644 configs/sun50i_spl32_defconfig

-- 
2.8.2



More information about the U-Boot mailing list