[U-Boot] [PATCH v4 00/26] sunxi: Allwinner A64: SPL support

Jagan Teki jagannadh.teki at gmail.com
Fri Aug 11 11:29:31 UTC 2017

On Wed, Jan 4, 2017 at 9:20 PM, Jagan Teki <jagan at openedev.com> wrote:
> On Mon, Jan 2, 2017 at 12:48 PM, Andre Przywara <andre.przywara at arm.com> wrote:
>> Hi,
>> hopefully the final version of the SPL support series for the Allwinner A64
>> SoC. Actually no real code changes this time, just rebased on top of recent
>> master, adding some comments in patches 16/26 and 19/26 following Maxime's
>> suggestions and adding Acked-by:s and Reviewed-by:s.
>> I left the final patch 26/26 in for the sake of completeness, but don't expect
>> it to be merged. We need a clever solution to unify 32-bit and 64-bit board
>> configurations, but that shouldn't hold back this series for now.
>> Merging everything until and including patch 21/26 (sunxi: A64: enable SPL)
>> would be great, the other patches until 25/26 can go in as well, I think.
>> -------------
>> As the previous versions this one includes support for both AArch64 and
>> AArch32 SPL builds. The FIT support is still missing, which means the
>> functionality is limited. Due to the missing ARM Trusted Firmware (ATF)
>> in this firmware chain we lose Ethernet and SMP, among other minor things.
>> A full 64-bit build can be written to an SD card as expected and will
>> boot the U-Boot proper prompt. However Linux will crash on boot, as
>> PSCI is missing.
>> Building the 32-bit version of the SPL and combining this with an ATF
>> build and the 64-bit U-Boot proper allows to use FEL booting now:
>> # sunxi-fel spl sunxi-spl.bin write 0x4a000000 u-boot-dtb.bin \
>>   write 0x44000 bl31.bin reset64 0x44000
>> This way of booting the board gives full functionality.
>> The first patch is a rather simple fix (with no changes to v2).
>> Patches 2-8 prepare the SPL code to be compiled for 64-bit in general and
>> AArch64 in particular.
>> Patches 9-11 refactor the existing boot0 header functionality to be used
>> by patch 12, which introduces the 64-bit switch in the first SPL
>> instructions.
>> Patches 13-20 then introduce the actual core of the SPL support: the DRAM
>> initialization, courtesy of Jens. This piggy backs on the existing
>> H3 DRAM code, deviating where needed. This has been reworked compared to
>> v2: I added a patch from Philipp to replace the rather uninspired
>> register writes in the MBUS priority setup function with some meaningful
>> code, explaining the various bits. Also the actual A64 DRAM code is no
>> longer #ifdef'ed into the H3 driver, but uses parameters to (static)
>> functions. The compiler detects this and removes the dead code from
>> the other variant, resulting in the same binary size for the H3.
>> Patch 21 finally enables the 64-bit SPL support. So now building the
>> existing pine64_plus_defconfig will generate a sunxi-spl.bin, which
>> can be prepended to the U-Boot proper image (not .bin) to boot from
>> an SD card. Due to the missing ATF support this is of limited usability
>> at the moment, though. Also FEL support requires more love - to switch
>> back to AArch32 before returning to FEL (without crashing, that is ;-),
>> so this is disabled.
>> On my setup this results in a 26KB SPL binary, which is close to the
>> 28K limit mksunxiboot imposes at the moment. Adding anything (like
>> FIT support or DEBUG) will exceed this, and although I have patches
>> to let mksunxiboot get close to 32KB, this is the ulimate frontier.
>> So patches 22-25 then teach the SPL how to detect an U-Boot image file
>> of a different bitness and do the RMR switch from AArch32 to AArch64,
>> if needed.
>> This is used by the final patch 26, which creates another _defconfig
>> to let the SPL compile for AArch32 using the Thumb2 encoding. This
>> results in a binary of less than 17KB in my case, so has plenty of
>> room for extensions.
>> Cheers,
>> Andre.
>> Changelog v3 .. v4:
>> - rebased on top of latest HEAD
>> - add various Reviewed-by: and Acked-by: tags
>> - add comments about register bit meanings in non-ODT-setting fix
>> - clarify meaning of delay values in single bit delay support patch
>> - removing stray semicolons from boot0.h header
>> Changelog v2 .. v3:
>> - add various Reviewed-by: and Acked-by: tags
>> - split tiny-printf fix to handle "-" separately
>> - add various comments and extend commit messages
>> - add assembly file to re-create the embedded RMR switch code
>> - add patch 14/26 to explain the MBUS priority setup
>> - move DRAM r/w delay values into #defines to simplify re-usablity
>> - replace #ifdef'ed addition of A64 support to the H3 DRAM driver with an
>>   approach using static parameters
>> Changelog v1 .. v2:
>> - drop SPI build fix (already merged)
>> - confine A31 register init change to H3 and A64
>> - use IS_ENABLED() instead of #idef to guard MBUS2 clock init
>> - fix tiny-printf (proper sign extension for 32-bit integers)
>> - add "size" output in commit msg to document tiny-printf size impact
>> - fix sdelay(): use only one register, add "cc" clobber
>> - update RMR switch code to provide easy access to RVBAR register address
>> - drop redundant DRAM frequency setting from Pine64 defconfig
>> - minor changes as requested by reviewers
>> Andre Przywara (21):
>>   sun6i: Restrict some register initialization to Allwinner A31 SoC
>>   armv8: prevent using THUMB
>>   armv8: add lowlevel_init.S
>>   SPL: tiny-printf: add "l" modifier
>>   SPL: tiny-printf: ignore "-" modifier
>>   move UL() macro from armv8/mmu.h into common.h
>>   SPL: make struct spl_image 64-bit safe
>>   armv8: add simple sdelay implementation
>>   armv8: move reset branch into boot hook
>>   ARM: boot0 hook: remove macro, include whole header file
>>   sunxi: introduce extra config option for boot0 header
>>   sunxi: A64: do an RMR switch if started in AArch32 mode
>>   sunxi: provide default DRAM config for sun50i in Kconfig
>>   sunxi: H3/A64: fix non-ODT setting
>>   sunxi: DRAM: fix H3 DRAM size display on aarch64
>>   sunxi: A64: enable SPL
>>   SPL: read and store arch property from U-Boot image
>>   Makefile: use "arm64" architecture for U-Boot image files
>>   ARM: SPL/FIT: differentiate between arm and arm64 arch properties
>>   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 as well
>> Philipp Tomsich (2):
>>   sunxi: H3: Rework MBUS priority setup
>>   sunxi: clocks: Use the correct pattern register for PLL11
> Except arm64, applied SPL support (till 21)

The remaining 4 arm64 patches need necessary changes wrt current tree,
so updated patchwork status as "Changes Requested"

Jagan Teki
Free Software Engineer | www.openedev.com
U-Boot, Linux | Upstream Maintainer
Hyderabad, India.

More information about the U-Boot mailing list