[U-Boot] [PATCH v2] arm64: allow space reservation for boot header

Andre Przywara andre.przywara at arm.com
Thu May 26 11:49:51 CEST 2016


Hi Steve,

On 25/05/16 17:56, Steve Rae wrote:
> 
> 
> On Wed, May 25, 2016 at 9:50 AM, Andre Przywara <andre.przywara at arm.com
> <mailto:andre.przywara at arm.com>> wrote:
> 
>     Hi,
> 
>     On 25/05/16 17:15, Steve Rae wrote:
>     > Hi,
>     >
>     > On Wed, May 25, 2016 at 1:48 AM, Hans de Goede <hdegoede at redhat.com <mailto:hdegoede at redhat.com>
>     > <mailto:hdegoede at redhat.com <mailto:hdegoede at redhat.com>>> wrote:
>     >
>     >     Hi,
>     >
>     >     On 25-05-16 10:40, Andre Przywara wrote:
>     >
>     >         Some SPL loaders (like Allwinner's boot0) require a header
>     >         before the
>     >         actual U-Boot binary to both check its validity and to find
>     >         other data
>     >         to load.
>     >         Introduce a config option to reserve some space at the
>     beginning
>     >         of the
>     >         binary to later hold the header if needed.
>     >         Please note that the current arm64 start.S jumps over some
>     >         portion of
>     >         data already, so this option bascially just increases this
>     region
>     >         to allow post-processing tools to insert more data there.
>     >         This also means that both filling the header is optional and
>     >         also having
>     >         some extra space in there does not hurt apart from
>     enlarging the
>     >         binary.
>     >
>     >         For the use with Allwinner's boot0 blob there is a tool called
>     >         boot0img[1], which fills the header to allow booting A64 based
>     >         boards.
>     >         For the Pine64 we need a 1536 Byte header (including the
>     branch
>     >         instruction) at the moment, so we add this to the defconfig.
>     >
>     >         Signed-off-by: Andre Przywara <andre.przywara at arm.com
>     <mailto:andre.przywara at arm.com>
>     >         <mailto:andre.przywara at arm.com
>     <mailto:andre.przywara at arm.com>>>
>     >
>     >         [1] https://github.com/apritzel/pine64/tree/master/tools
>     >
>     >
>     >     v2 looks good to me:
>     >
>     >     Acked-by: Hans de Goede <hdegoede at redhat.com <mailto:hdegoede at redhat.com>
>     >     <mailto:hdegoede at redhat.com <mailto:hdegoede at redhat.com>>>
>     >
>     >     Tom, can you pick this one up please (I'm asking you since it is
>     >     touching some non sunxi files) ?
>     >
>     >     Regards,
>     >
>     >     Hans
>     >
>     >
>     >
>     >         ---
>     >          arch/arm/cpu/armv8/start.S    | 3 +++
>     >          board/sunxi/Kconfig           | 7 +++++++
>     >          configs/pine64_plus_defconfig | 1 +
>     >          include/configs/sun50i.h      | 4 ++++
>     >          4 files changed, 15 insertions(+)
>     >
>     >         diff --git a/arch/arm/cpu/armv8/start.S
>     b/arch/arm/cpu/armv8/start.S
>     >         index e933021..a9cd7e9 100644
>     >         --- a/arch/arm/cpu/armv8/start.S
>     >         +++ b/arch/arm/cpu/armv8/start.S
>     >         @@ -21,6 +21,9 @@
>     >          _start:
>     >                 b       reset
>     >
>     >         +#ifdef CONFIG_START_HEADER_SPACE
>     >         +       .space CONFIG_START_HEADER_SPACE /* can be filled
>     with a
>     >         boot0 header */
>     >         +#endif
>     >                 .align 3
>     >
>     >
>     > Just wondering, is there any way to make this even more generic?
>     > In your case, you are wanting
>     >         .space 1532
>     > But in my case I am actually wanting something like:
>     >         .word   0x12345678
>     >         .word   _end - _start
>     > Thanks, Steve
> 
>     I don't think we should go down that rabbit hole. Mainline U-Boot just
>     provides the space for it, and you have a post-processing tool that
>     fills it. This is what we do for Allwinner's boot0 (which includes
>     magics, checksums, sizes, load address, etc.) You could even include
>     this tool in the build process, similar to mkimage calls.
> 
>     Or if you like, feel free to send a patch which shows how you
>     imagine that.
> 
>     Cheers,
>     Andre.
> 
> 
> I agree that this _might_ be a rabbit hole, but the following is fairly
> straightforward and seems to work:
> 
> +#ifdef CONFIG_BOOT0_CODE
> +CONFIG_BOOT0_CODE
> +#endif
> 
> ( then elsewhere: )
> +#define CONFIG_BOOT0_CODE      \
> +       .word  0x12345678;     \
> +       .word   _end - _start
> 
> And for your code:
> +#define CONFIG_BOOT0_CODE      \
> +       .space  1532
> 
> The "hint" is that these lines need to start with a tab, and need the
> semi-colon to separate lines....
> Would this work for you?

Frankly: I don't like this so much, but also don't have a strong opinion
on this.

So if you like please make a proper patch and send it to the list.

Cheers,
Andre.

>     >
>     >          .globl _TEXT_BASE
>     >         diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
>     >         index fa78720..9f2e17e 100644
>     >         --- a/board/sunxi/Kconfig
>     >         +++ b/board/sunxi/Kconfig
>     >         @@ -15,6 +15,13 @@ config SUNXI_GEN_SUN6I
>     >                 separate ahb reset control registers, custom pmic bus,
>     >         new style
>     >                 watchdog, etc.
>     >
>     >         +config SUNXI_BOOT0
>     >         +       bool "prepare for boot0 header"
>     >         +       ---help---
>     >         +       If U-Boot is loaded from the Allwinner provided boot0
>     >         blob, it
>     >         +       expects a header area filled with magic values.
>     >         +       This option will add some space at the beginning
>     of the
>     >         image to
>     >         +       let a tool later on fill in this header with
>     sensible data.
>     >
>     >          choice
>     >                 prompt "Sunxi SoC Variant"
>     >         diff --git a/configs/pine64_plus_defconfig
>     >         b/configs/pine64_plus_defconfig
>     >         index 0977334..b93e4da 100644
>     >         --- a/configs/pine64_plus_defconfig
>     >         +++ b/configs/pine64_plus_defconfig
>     >         @@ -18,3 +18,4 @@ CONFIG_CMD_EXT2=y
>     >          CONFIG_CMD_EXT4=y
>     >          CONFIG_CMD_FAT=y
>     >          CONFIG_CMD_FS_GENERIC=y
>     >         +CONFIG_SUNXI_BOOT0=y
>     >         diff --git a/include/configs/sun50i.h
>     b/include/configs/sun50i.h
>     >         index 0fdb4c7..6923b60 100644
>     >         --- a/include/configs/sun50i.h
>     >         +++ b/include/configs/sun50i.h
>     >         @@ -17,6 +17,10 @@
>     >          #define GICD_BASE              0x1c81000
>     >          #define GICC_BASE              0x1c82000
>     >
>     >         +#ifdef CONFIG_SUNXI_BOOT0
>     >         +#define CONFIG_START_HEADER_SPACE      1532
>     >         +#endif
>     >         +
>     >          /*
>     >           * Include common sunxi configuration where most the
>     settings are
>     >           */
>     >
>     >
> 
> 


More information about the U-Boot mailing list