From patchwork Wed Nov 7 09:53:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 994165 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="JcufDNm3"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42qhZc13F7z9sB7 for ; Wed, 7 Nov 2018 20:53:56 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 30DBAC2247B; Wed, 7 Nov 2018 09:53:50 +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_MSPIKE_H2, 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 882B4C221EB; Wed, 7 Nov 2018 09:53:47 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2320EC221EB; Wed, 7 Nov 2018 09:53:46 +0000 (UTC) Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by lists.denx.de (Postfix) with ESMTPS id B872FC22101 for ; Wed, 7 Nov 2018 09:53:45 +0000 (UTC) Received: by mail-wm1-f67.google.com with SMTP id 124-v6so8454354wmw.0 for ; Wed, 07 Nov 2018 01:53:45 -0800 (PST) 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=WNSmFKmbVfZd4+/9cq3Wmx0nys5i3+Mzfwafbp8ZciU=; b=JcufDNm3eazPkqzr1Tq/+u6/zwNdGa8tvgIptT4Uxad/2l2R8gVKNzIBWgTdzQwfRI d5CyQ6EKYtLXYPBda+41pOlaqR7betFLRzKYZWhnchPLbr4kXBdKRlv2o50MadHo7Li1 8g4jFdlIrKxASXx+LeZIE4Mosp2I+GOXI/k+r5OvOPBuZmRVZEo+DZQjMmnoRcdGcALJ dMIYWbQ6mwt1GLkOFGskt3tGO2WrBB08LukBw/i9moyHfnleSuUJSoig+xb18fzgqNBq peRIfi3NNC4ClNoIr3Rj3FDFEp0fTMMSrhChgGNjx1HyE9x9xr0YYX88QS+7g2k8EsXK 2ozA== 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=WNSmFKmbVfZd4+/9cq3Wmx0nys5i3+Mzfwafbp8ZciU=; b=sk1hNUkEJSnfcnwZLV8AkaUX1a/RgA/7oG+6KAeyBPYtLIHA5onmIOERVNjFkRQ31N G83YHrCxzmytcGKoTIdLQDf/O8VHDn3AtcnhoOIMm99dk1OcRkY7pN92e9QfM8wEaCQf 3YQRzDWwHbe58cEMJ4t5gki8T/YR+8vUVVqhA2Ctd7rWb981Rjgqb5GaEQ9tAUBhXzeH Gd22ZoLsNm4xe74WYx8IBY7CqU/gC6+ECoPH/2376bjY8xZ2ZNobuv1N8PtCIKxNBRIE wE5s+dH5hVwThxjRCEmUNy8hiI+xzfEGnGF9qxokLZhA47N1sxdx09oLpgi3iTQBOnrO kjKA== X-Gm-Message-State: AGRZ1gKH5SWeuaDbEOXiwX/SoAwztS27YaEp5+fyFGgOgD43THoQ7+FJ QsyBJ0sYBHVil5YhDuopPFRehRuEIk0A0Q== X-Google-Smtp-Source: AJdET5ceMHf3f/TxBNqT+dO8dS8MJnE62Q6ZSFgcQn//xGH3Ar5vbjS8ACZQyU/5mlFsB/yFkfFDFQ== X-Received: by 2002:a1c:8fc5:: with SMTP id r188-v6mr1406147wmd.136.1541584424972; Wed, 07 Nov 2018 01:53:44 -0800 (PST) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id h198-v6sm719269wmd.31.2018.11.07.01.53.44 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 07 Nov 2018 01:53:44 -0800 (PST) From: Michal Simek To: u-boot@lists.denx.de Date: Wed, 7 Nov 2018 10:53:40 +0100 Message-Id: <62f8d370dff19ab1cd99895450c80292c4e677a8.1541584418.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.9.1 Subject: [U-Boot] [PATCH] arm64: zynqmp: Fix logic in CG/EG/EV detection 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" From: Siva Durga Prasad Paladugu The VCU disable bit(8) in IP disable register of efuse is valid only if PL powered up and hence PL powerup status has to be considered while determining the CG part also. This patch considers the PL powerup status and ignores the VCU disable bit if PL not powered up. This fixes the issue of "unknown" id for CG parts if PL not powered up and VCU bit(8) is not set. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- board/xilinx/zynqmp/zynqmp.c | 48 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index af91cde7c894..168cf5c14b45 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -72,6 +72,7 @@ static const struct { .id = 0x20, .ver = 0x12c, .name = "5cg", + .evexists = 1, }, { .id = 0x21, @@ -88,6 +89,7 @@ static const struct { .id = 0x21, .ver = 0x12c, .name = "4cg", + .evexists = 1, }, { .id = 0x30, @@ -104,6 +106,7 @@ static const struct { .id = 0x30, .ver = 0x12c, .name = "7cg", + .evexists = 1, }, { .id = 0x38, @@ -234,14 +237,18 @@ int chip_id(unsigned char id) #define ZYNQMP_VERSION_SIZE 9 #define ZYNQMP_PL_STATUS_BIT 9 +#define ZYNQMP_IPDIS_VCU_BIT 8 #define ZYNQMP_PL_STATUS_MASK BIT(ZYNQMP_PL_STATUS_BIT) #define ZYNQMP_CSU_VERSION_MASK ~(ZYNQMP_PL_STATUS_MASK) +#define ZYNQMP_CSU_VCUDIS_VER_MASK ZYNQMP_CSU_VERSION_MASK & \ + ~BIT(ZYNQMP_IPDIS_VCU_BIT) +#define MAX_VARIANTS_EV 3 #if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \ !defined(CONFIG_SPL_BUILD) static char *zynqmp_get_silicon_idcode_name(void) { - u32 i, id, ver; + u32 i, id, ver, j; char *buf; static char name[ZYNQMP_VERSION_SIZE]; @@ -249,24 +256,43 @@ static char *zynqmp_get_silicon_idcode_name(void) ver = chip_id(IDCODE2); for (i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { - if ((zynqmp_devices[i].id == id) && - (zynqmp_devices[i].ver == (ver & - ZYNQMP_CSU_VERSION_MASK))) { - strncat(name, "zu", 2); - strncat(name, zynqmp_devices[i].name, - ZYNQMP_VERSION_SIZE - 3); - break; + if (zynqmp_devices[i].id == id) { + if (zynqmp_devices[i].evexists && + !(ver & ZYNQMP_PL_STATUS_MASK)) + break; + if (zynqmp_devices[i].ver == (ver & + ZYNQMP_CSU_VERSION_MASK)) + break; } } if (i >= ARRAY_SIZE(zynqmp_devices)) return "unknown"; - if (!zynqmp_devices[i].evexists) + strncat(name, "zu", 2); + if (!zynqmp_devices[i].evexists || + (ver & ZYNQMP_PL_STATUS_MASK)) { + strncat(name, zynqmp_devices[i].name, + ZYNQMP_VERSION_SIZE - 3); return name; + } - if (ver & ZYNQMP_PL_STATUS_MASK) - return name; + /* + * Here we are means, PL not powered up and ev variant + * exists. So, we need to ignore VCU disable bit(8) in + * version and findout if its CG or EG/EV variant. + */ + for (j = 0; j < MAX_VARIANTS_EV; j++, i++) { + if ((zynqmp_devices[i].ver & ~BIT(ZYNQMP_IPDIS_VCU_BIT)) == + (ver & ZYNQMP_CSU_VCUDIS_VER_MASK)) { + strncat(name, zynqmp_devices[i].name, + ZYNQMP_VERSION_SIZE - 3); + break; + } + } + + if (j >= MAX_VARIANTS_EV) + return "unknown"; if (strstr(name, "eg") || strstr(name, "ev")) { buf = strstr(name, "e");