[U-Boot] [PATCH v3 00/26] sunxi: Allwinner A64: SPL support
Jagan Teki
jagannadh.teki at gmail.com
Sun Jan 1 20:02:53 CET 2017
On Mon, Dec 19, 2016 at 2:49 AM, Andre Przywara <andre.przywara at arm.com> wrote:
> Hi,
>
> another reworked version of the SPL support series for the Allwinner A64
> SoC. Again many thanks to the diligent reviewers, I hope I didn't miss any
> comments.
> 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 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
Please rebase on top of master, I am getting merge conflicts.
thanks!
--
Jagan Teki
Free Software Engineer | www.openedev.com
U-Boot, Linux | Upstream Maintainer
Hyderabad, India.
More information about the U-Boot
mailing list