From patchwork Wed Mar 14 10:14:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 885662 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="bczrWQOO"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 401SJF0PMgz9sTf for ; Wed, 14 Mar 2018 21:14:35 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 42E0BC21D8E; Wed, 14 Mar 2018 10:14:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 2D0ECC21D4A; Wed, 14 Mar 2018 10:14:29 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 74FECC21D4A; Wed, 14 Mar 2018 10:14:27 +0000 (UTC) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by lists.denx.de (Postfix) with ESMTPS id A9D19C21BE5 for ; Wed, 14 Mar 2018 10:14:24 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id x7so2873500wmc.0 for ; Wed, 14 Mar 2018 03:14:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=GTF+27HTwvmytMMfomxW+PEQFQEbC+2FdU0ZMWX3Va0=; b=bczrWQOOVx6N+NgyueENk1fzLJSNOIuPCzRbfKo7hRQGdLGBwOFJGWP44sFqDHPoM3 cXaqjb1mvQA1IaFcW+cKwxlec/CAmLEjQPgCpoe0XbhbfBOi8m8Cr5r2ths//I1PSyLX V312681BCUFen8RBQs8tO+tSlAASnFieJApT6+QhASuVPKtTeUSmC78/O7Cz+/ryWQ8O uhBQnzsHCqVpNoBezHzXppEfyDaqzfYrqkoYholt1Dgp5xSxiVrSp1ScHR1hx62weaRC R2SoSFCPuFz1qNjmdnJgDlf2Nx0O6xl4ibTEIlh7X1mbGq0iu5HbtG9v4rFDyY9ti8YT Ddxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=GTF+27HTwvmytMMfomxW+PEQFQEbC+2FdU0ZMWX3Va0=; b=jHY1hz5JeMtA8mcYnbTBFQ7oIDz6gNLWGK7XgcKH172+qMm5TOwuBRFtWgBbAQN+Ag CfSaUrpjDGjUy0uJyeoWZ0X7OJvdP+/GoFsPVOQKMjoDUM4Mq8HTAUMCe19kLkpNQjOz QzcwQoMb+46iMVc/y1kRF0yLD/tcWAhtOjUquy90XLPTuGoXc3iY5+A+7SyH8ZoMUlmb usNji+dKAWqlo8xXXfyd1Cq8gZq9xpRlXEfrU4hcLJhppZ3rBzP9E2IwMmMIzsSuUlkt yF32s7a/tEBsq6P7XvOwK4uPhZecja/68skIa06bY6EZS5vHYF0EE4PLYkBGrKw7YolT GcbA== X-Gm-Message-State: AElRT7FaamubmV9Ox8KX6GKckCPtBQopNNms2vt6KCK8wTJmDk6K/9Vw tcQ2hkevS7uCOqbmNWli97opFH9o X-Google-Smtp-Source: AG47ELuaV8xEnmKKUN1Z/CVzheMODSspwB4EonjOy+nmpmUiEtPuEeWzsELP6zgu6R4mGBDmMmZlzg== X-Received: by 10.28.181.134 with SMTP id e128mr1202030wmf.57.1521022464001; Wed, 14 Mar 2018 03:14:24 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id 8sm1120592wmf.13.2018.03.14.03.14.23 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 14 Mar 2018 03:14:23 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de Date: Wed, 14 Mar 2018 11:14:17 +0100 Message-Id: <1b7c27a751133830a9952d932b81b47023b433a4.1521022453.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.9.1 Cc: Jean-Francois Dagenais Subject: [U-Boot] [PATCH] tools: xilinx: Fix zynq/zynqmp image recognition X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" 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. Reported-by: Alexander Graf Signed-off-by: Michal Simek Tested-by: Alexander Graf --- 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),