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

Jagan Teki jagan at openedev.com
Wed Jan 4 16:50:50 CET 2017


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)

Applied to u-boot-sunxi/master

thanks!


More information about the U-Boot mailing list