[U-Boot] [PATCH] tools: xilinx: Fix zynq/zynqmp image recognition
Alexander Graf
agraf at suse.de
Thu Mar 15 21:54:03 UTC 2018
On 14.03.18 11:14, Michal Simek wrote:
> There is an issue to recognize zynq or zynqmp image because header
> checking is just the same. That's why zynqmp images are recognized as
> zynq one.
> Check unused fields which are initialized to zero in zynq format
> (__reserved1 0x38 and __reserved2 0x44) which are initialized for
> zynqmp. This should ensure that images are properly recognized by:
> ./tools/mkimage -l spl/boot.bin
>
> Also show image type as ZynqMP instead of Zynq which is confusing
> and parse a53 64bit cpu select option in image_attributes field to make
> sure that this is ZynqMP image.
What if the target is on R5?
> Reported-by: Alexander Graf <agraf at suse.de>
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
Tested-by: Alexander Graf <agraf at suse.de>
Alex
> ---
>
> tools/zynqimage.c | 6 ++++++
> tools/zynqmpimage.c | 8 ++++++--
> 2 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/tools/zynqimage.c b/tools/zynqimage.c
> index 021d2d3fc91f..aa003a7543b6 100644
> --- a/tools/zynqimage.c
> +++ b/tools/zynqimage.c
> @@ -147,6 +147,12 @@ static int zynqimage_verify_header(unsigned char *ptr, int image_size,
> if (image_size < sizeof(struct zynq_header))
> return -1;
>
> + if (zynqhdr->__reserved1 != 0)
> + return -1;
> +
> + if (zynqhdr->__reserved2 != 0)
> + return -1;
> +
> if (zynqhdr->width_detection != HEADER_WIDTHDETECTION)
> return -1;
> if (zynqhdr->image_identifier != HEADER_IMAGEIDENTIFIER)
> diff --git a/tools/zynqmpimage.c b/tools/zynqmpimage.c
> index f48ac6dbe505..9cef78dc7cf6 100644
> --- a/tools/zynqmpimage.c
> +++ b/tools/zynqmpimage.c
> @@ -63,6 +63,7 @@
> #define HEADER_REGINIT_NULL (cpu_to_le32(0xffffffff))
> #define HEADER_WIDTHDETECTION (cpu_to_le32(0xaa995566))
> #define HEADER_IMAGEIDENTIFIER (cpu_to_le32(0x584c4e58))
> +#define HEADER_CPU_SELECT_A53_64BIT (0x2 << 10)
>
> enum {
> ENCRYPTION_EFUSE = 0xa5c3c5a3,
> @@ -132,7 +133,7 @@ static void zynqmpimage_default_header(struct zynqmp_header *ptr)
> return;
>
> ptr->width_detection = HEADER_WIDTHDETECTION;
> - ptr->image_attributes = 0x800;
> + ptr->image_attributes = HEADER_CPU_SELECT_A53_64BIT;
> ptr->image_identifier = HEADER_IMAGEIDENTIFIER;
> ptr->encryption = cpu_to_le32(ENCRYPTION_NONE);
>
> @@ -162,6 +163,9 @@ static int zynqmpimage_verify_header(unsigned char *ptr, int image_size,
> if (image_size < sizeof(struct zynqmp_header))
> return -1;
>
> + if (zynqhdr->image_attributes != HEADER_CPU_SELECT_A53_64BIT)
> + return -1;
> +
> if (zynqhdr->width_detection != HEADER_WIDTHDETECTION)
> return -1;
> if (zynqhdr->image_identifier != HEADER_IMAGEIDENTIFIER)
> @@ -178,7 +182,7 @@ static void zynqmpimage_print_header(const void *ptr)
> struct zynqmp_header *zynqhdr = (struct zynqmp_header *)ptr;
> int i;
>
> - printf("Image Type : Xilinx Zynq Boot Image support\n");
> + printf("Image Type : Xilinx ZynqMP Boot Image support\n");
> printf("Image Offset : 0x%08x\n", le32_to_cpu(zynqhdr->image_offset));
> printf("Image Size : %lu bytes (%lu bytes packed)\n",
> (unsigned long)le32_to_cpu(zynqhdr->image_size),
>
More information about the U-Boot
mailing list