From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AA308C433EF for ; Wed, 8 Jun 2022 16:22:39 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E58C28437D; Wed, 8 Jun 2022 18:21:52 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="hOg6fgw9"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C7A6D8430F; Wed, 8 Jun 2022 18:21:28 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02on060c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe06::60c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 1947384355 for ; Wed, 8 Jun 2022 18:21:19 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P6XwP+01+mwkRMD1va0AfgN7/GGIAxoM48+tO8DQecuP5GLNXfP/F4AZS9fnEmUxevAOeMjt1y6czf6p2esFLwC1jmnlXmtTH1ozX7Ai8FHRDF1d6I3jgnklGVqfzWOTC+2acvg1Gp4+cVHCPoVd04bSzIgc3DWZ92oTrO1r7BETWWM85IC50Bbmh6GcmKqPhNJpeKmD8TLu2Ka+XiSYL4AAhgGGgMioQSHe9kZ0BdHcJblmF+JqtPvW1ZiUn62EJ4HQIPe8ink4Q4/6txlJ/HEOq4u3xgXX0tzkh6Nov9FBsy7dnm1g2Up5XYLxFOjXgSz2BGDal/sMRieXoNvlDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=67vJ2gTJ8NIVCeb0MTJNiftMXZueSAobWS1RPM55yJY=; b=AHZ7PfB+za3jAF8kHhdfEGGEiIrq8o1fy8Whm+K1KbvbcFK2bN3fscXrZnrQhZ8QDf2rchBooWlN7Qd0gX57YEwfvlb/Jj9/i2XhFZmtZH0HX0O3ryF4olBiMYOyi7Mh8MwUr/dJ+A3QQiE5q9xZWwSr7A+MmYZ4WAF5iUJ60q9YXwSGAtueQcPqi6X6ryprIW6O7Wa1TGGd0DRugmUpRpTia3y5U0clTqLem69V3HR/miMA7X7QIeNbadb5Gw4mGGiNLFeWRkRICzeKAe9HasvFw3X1KQQUSZ6U6//02o3I3UR6zWltDNp2LlPufEbcRiKy9dSAAQSup1punAF2Gg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=67vJ2gTJ8NIVCeb0MTJNiftMXZueSAobWS1RPM55yJY=; b=hOg6fgw9L4KBiWkv3hLIU0U1fC7XttUAGA+KWkCQ0We4A+9Q9mTMbxVAgBGo8LXzm4D2p3CaWHcS3aSN3byWd9ReaUcClQbOuC7ttRGEKPKE/aRknXpik9VhgIHxykALkYCtwhZzbZoSt16N1HJVs7tUEw/x5Z+ZQPMlibd0RFQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by VI1PR0802MB2189.eurprd08.prod.outlook.com (2603:10a6:800:9b::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.17; Wed, 8 Jun 2022 16:21:17 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f938:78d7:da4b:8d23]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::f938:78d7:da4b:8d23%9]) with mapi id 15.20.5314.019; Wed, 8 Jun 2022 16:21:17 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH 03/10] soc: xilinx: zynqmp: Add machine identification support Date: Wed, 8 Jun 2022 18:20:46 +0200 Message-Id: <20220608162054.25641-4-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220608162054.25641-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220608162054.25641-1-stefan.herbrechtsmeier-oss@weidmueller.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: AS8P250CA0006.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:330::11) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 03f801fe-6d0c-4ce4-f5c7-08da496aea69 X-MS-TrafficTypeDiagnostic: VI1PR0802MB2189:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kAtklIt/wonRW5Jgo1SE4NbQy8qp2/8fKsfRXQ962E0wG79bvi+7+1ZvE+Tf1STTpOVrs8OEZZXdf8qv8L0ufbNUAm2ZBm3zUO/72BI7D/Vqw7gD2wkF8r88Zv5y/AH5iAwHZBE24liNme1du92hbw9YoZHXwd7akrtNQvVxnPDp3l6cPBn0JxJLjCoQmF8nC6HPEWnnQmJJv5W66zqvV6J+tQiJvpImXs5y680/3iztspG8tEsqG2pHLcFQbXVgGKJY/THb2iYrvGX12Z0lo4oXvOqa+MUJ+MQD++cLji9ob7KiezA/8yw+AStNi0FEi9pnICcbWz2k2i1ognYl8GY8QlJuiFu1yZYMd7L2waS2mNmKf1IoZiReCtlwBfzBziOo//8ubOmDz8cm0ruIkdNb596CRhKf1yKfYmXJ5/AlHscUobijbEZuV/mHaya4gJOUorLE+Fx+v8ODRl3XVROdVL+OVpbxACjA1NrNjsTUpcFnYS63+TdTYjp528mewyniGEI0J7zH0UpbAJqO1yML1BKVwsgu3EhVHOauE99s2w7zBmLglUmFsrGMpvY/G+hQtxwZDKua82B4lYOoSB/GxfrBKKIK2ug+I/iX8yQRHoCVANwnh/XMKsx7LZQVJZvH+GFsrgE1Jxsto+W8V1cSXaSf7EFzJgVQQBQRSzhexIBoKnRIUUq/kL6d6IvSGAjxJ7V2XrOK+j/4WrHudg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(2906002)(66946007)(66556008)(66476007)(2616005)(1076003)(107886003)(83380400001)(8676002)(66574015)(5660300002)(186003)(8936002)(4326008)(6666004)(26005)(6512007)(6506007)(52116002)(36756003)(316002)(6486002)(86362001)(508600001)(38100700002)(6916009)(38350700002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aEV2aHBPODZYRWhkd1FPZ3FoYzJ5NHRBdTRITlJNcEYzbnBxQ2Qzckh2L2di?= =?utf-8?B?Y1RsQ3FsUW5kT3p3QTAwUGdRVTFIaHQ1RjgycmVRR2RVMnlJcEF5dGw1cVlG?= =?utf-8?B?R21kbFpsUUd6T3NzYnZkVElsL3M4RmhvUDAyRmJIdExDd2JwYUhXNVEzYUxM?= =?utf-8?B?elcwWEgrWUwvTTlPVnBLTTNXVmx5OElUUjMvdE4zT3JPNTZTaGZud0s0OFlQ?= =?utf-8?B?YkRiaDBKUkdoUUJmMXNiYk5IL0VJb0IzMzRrbTJ6QW5qZG9ZRWNyU09IeUI5?= =?utf-8?B?cFBHRlpGc2c4SitKeTFEZU5kWWZEUTh2QVFKSGs3YjhKeWlpamRVSUsxR0lW?= =?utf-8?B?b2hDTmtRQzFrOWpIRzdoNWhROHEveTdNUUJSU2tIVll4SFNjcVBQZ2xXZTc5?= =?utf-8?B?YjJBZzBmdnE1Yjh1MWVodzFLaEJQZEt1NU1aOTNNbTRoM3FXRUVPRCs4ZVlS?= =?utf-8?B?Q1VQeXN0N213eXplZmQraTZuZWM0cGZTV2lza1g4LzJvVXREc3hydEdMVGtI?= =?utf-8?B?L0JFdFlidm8zbXdqTVpmM3BMbE1tcEV5SVhiYURHRTRqelBXRmJoTFRORkZS?= =?utf-8?B?UDVQY1YvUlNBNEVnOEkyRFBzRlRjYktBTHJmT1o2OWRzUGFHa2F5OTB0U2dN?= =?utf-8?B?bDd2MFhnbkRzcE02WUtHa08zRWVJYlMzZnhqVlNpQ1k1ZmpEbUVCODl4Ymgr?= =?utf-8?B?RlhEdXh1RE9lU1RrQXZKWXI3Y2h1RDNUSHdtNVlJT0pYbUNYdEl0aGdBTERo?= =?utf-8?B?bTVpMU5kUFNWN1RtbE9pdVZHVE1WTTBYNGxKT0IzKzlVVjBQdjlzSXVmMkho?= =?utf-8?B?T2F4czM5WUtzQkxGZVRyOGdyeE1jZE9YenpSR1hNOENmSlFqclZ6M3dJQVpY?= =?utf-8?B?aVJ2eldCeVlFSnhERUkvbE1ZNWFKQlM5alVXVkdGUk9vZksyekJnMU5hYk1x?= =?utf-8?B?VUZzQWMvaUwxbWtYTDRwUFBCK3k5bXRxenFIUER5WDU4c3pmaFM1cFppYjJx?= =?utf-8?B?WC93ZnFlbFNPS0JoZmVXNG4rdERmTFdCd1FVU2xPeDVVMVR4NTN0STk0Si9V?= =?utf-8?B?S2l0VzRyNmpIZFB0a05VOE9YRmx4dXBBakFzaC9xMGtuUmlWUzV3QkJ5T0ps?= =?utf-8?B?WGNFUmlMOGplZVFZMWJ4c3A0NEFqa3YzYzcwbGxaaG1aQlhZdFFYTzByWUpW?= =?utf-8?B?ZzFzS2J2L3pGWkhyTUFWRVd5M2t3NE1ieUFGa0p6aVdFRUQzWDRkVzJIcVNH?= =?utf-8?B?MVhLWTRyeVNVUFJXeTNoWkZBWWh1Y0V5ckRJaDB2Vm1pazN0YWt5cnNIL2tu?= =?utf-8?B?V2ZHekxuMkNUNDZZbTI3ZGFVTVVUMHpwUUg2SlJnUmpOeitaZFNqWHFXVlFu?= =?utf-8?B?NWM1UkVueWI5N0hRNG9jNEI4L2hRK3BaTkF2Z1hmQnU0VnB2SFIxdXlWTm00?= =?utf-8?B?MjNUSW4vWXFEOVhEWUR1dUkxMWpjQ01XQkdIRVR5aG9udWJoZ2JseEdJVG95?= =?utf-8?B?ZXUwWjBHazF5b0hRNE80UE9WNWgySWM2UnZUM3BUVEZudjRkZEhJMXg4L3Fq?= =?utf-8?B?WHlNamRmTzRmT1JETmFJNjc2T0VZaVNveE9EcjdrRG42MzVNa0I5OVJhdEVL?= =?utf-8?B?RnZOTWE3elZPWnZGWkVKc0FuZGlPamlJVkFzdXNMRnk1ZC9BMExzbEl6NEhH?= =?utf-8?B?dWxLTllrelB3Mit1VEFaZ3A3V21mekt5dVp5T0JGZGtrL1o0b0tIWnVoSnZj?= =?utf-8?B?NWNvOERIYklhUmRMMS8ybXgxdTYvN1U4N1p0enlReXIwY0VQMUY0c2hiT3Ux?= =?utf-8?B?QjhQMFByeEU5Q0toT1VaVUVUTTRwTENJUmozZW8wcnB5eGQ3RnJPeVQ0MlFw?= =?utf-8?B?czc1RTlYOUFVTTAwMUFibVF3YWRpUU5IeUdGU0Z6Y2h0MGhHaVNjVGF3bEJz?= =?utf-8?B?YTd0TmtYZ012Sy81WGN3cGdpNzZmSkZTUkJ2a1ZFYUNEcElHeGx1am1nY2F4?= =?utf-8?B?ZnA3UnJHRXR5SEpGSUdhVVMxOTVHcW9LNHBuWFpHOXV2V0ZwQTVON1NvRGF1?= =?utf-8?B?TWxDWWJFWDdQUWdQZ3pSOEZBeVZzVkorVDdGRE5LcWl3QktNRWFOcGRJcXRs?= =?utf-8?B?TTRxaXA0RkhWa3llWkRXdFUwQVV6UmxiZGJEemNUK3BzSmJ2cGdGWjVQLy9i?= =?utf-8?B?allPN3BIaDYzZi9XOEZ5eE10akRqaFZvenhCaGk0S1VId2JUbmtmZEtVdE1T?= =?utf-8?B?Mi8zVXBvN244VC80RmpXYjNHZW1uRW13RVowMDM3Q3ltdlZzdk5GOUk4R0tR?= =?utf-8?B?YTNkQ2RFMzhUQlh4RXJvdzB3WTQvc0t6c0hKSVRkaUFPckJ4NjZ3eWJ5U2ZP?= =?utf-8?Q?t1AmlO1VkmxpigLQ=3D?= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 03f801fe-6d0c-4ce4-f5c7-08da496aea69 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2022 16:21:17.5457 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wt9+OqrN3CcNSBfIwqiBAnbh7GWMuRwHSS0YF2RNn+ljABWXx7K06T5to3zI0HhLF1RZfg0Kud4ZAVUWLGBLbQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2189 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Add machine identification support based on the zynqmp_get_silicon_idcode_name function in board/xilinx/zynqmp/zynqmp.c. Signed-off-by: Stefan Herbrechtsmeier --- drivers/soc/soc_xilinx_zynqmp.c | 289 +++++++++++++++++++++++++++++++- 1 file changed, 286 insertions(+), 3 deletions(-) diff --git a/drivers/soc/soc_xilinx_zynqmp.c b/drivers/soc/soc_xilinx_zynqmp.c index a71115b17c..45592ed534 100644 --- a/drivers/soc/soc_xilinx_zynqmp.c +++ b/drivers/soc/soc_xilinx_zynqmp.c @@ -3,10 +3,15 @@ * Xilinx ZynqMP SOC driver * * Copyright (C) 2021 Xilinx, Inc. + * Michal Simek + * + * Copyright (C) 2022 Weidmüller Interface GmbH & Co. KG + * Stefan Herbrechtsmeier */ #include #include +#include #include #include #include @@ -20,13 +25,260 @@ * v2 -> 2(XCZU7EV-ES1, XCZU9EG-ES2, XCZU19EG-ES1) * v3 -> 3(Production Level) */ -static const char zynqmp_family[] = "ZynqMP"; + +#define EFUSE_VCU_DIS_SHIFT 8 +#define EFUSE_VCU_DIS_MASK BIT(EFUSE_VCU_DIS_SHIFT) +#define EFUSE_GPU_DIS_SHIFT 5 +#define EFUSE_GPU_DIS_MASK BIT(EFUSE_GPU_DIS_SHIFT) +#define IDCODE2_PL_INIT_SHIFT 9 +#define IDCODE2_PL_INIT_MASK BIT(IDCODE2_PL_INIT_SHIFT) + +#define ZYNQMP_VERSION_SIZE 7 + +enum { + ZYNQMP_VARIANT_EG = BIT(0), + ZYNQMP_VARIANT_EV = BIT(1), + ZYNQMP_VARIANT_CG = BIT(2), + ZYNQMP_VARIANT_DR = BIT(3), +}; + +struct zynqmp_device { + u32 id; + u8 device; + u8 variants; +}; struct soc_xilinx_zynqmp_priv { const char *family; + char machine[ZYNQMP_VERSION_SIZE]; char revision; }; +static struct zynqmp_device zynqmp_devices[] = { + { + .id = 0x04688093, + .device = 1, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04711093, + .device = 2, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04710093, + .device = 3, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04721093, + .device = 4, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | + ZYNQMP_VARIANT_EV, + }, + { + .id = 0x04720093, + .device = 5, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | + ZYNQMP_VARIANT_EV, + }, + { + .id = 0x04739093, + .device = 6, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04730093, + .device = 7, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | + ZYNQMP_VARIANT_EV, + }, + { + .id = 0x04738093, + .device = 9, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04740093, + .device = 11, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04750093, + .device = 15, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04759093, + .device = 17, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04758093, + .device = 19, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x047E1093, + .device = 21, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E3093, + .device = 23, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E5093, + .device = 25, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E4093, + .device = 27, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E0093, + .device = 28, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E2093, + .device = 29, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E6093, + .device = 39, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FD093, + .device = 43, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047F8093, + .device = 46, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FF093, + .device = 47, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FB093, + .device = 48, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FE093, + .device = 49, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x046d0093, + .device = 67, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x04714093, + .device = 24, + .variants = 0, + }, + { + .id = 0x04724093, + .device = 26, + .variants = 0, + }, +}; + +static const char zynqmp_family[] = "ZynqMP"; + +static const struct zynqmp_device *zynqmp_get_device(u32 idcode) +{ + idcode &= 0x0FFFFFFF; + + for (int i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { + if (zynqmp_devices[i].id == idcode) + return &zynqmp_devices[i]; + } + + return NULL; +} + +static int soc_xilinx_zynqmp_detect_machine(struct udevice *dev, u32 idcode, + u32 idcode2) +{ + struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); + const struct zynqmp_device *device; + int ret; + + device = zynqmp_get_device(idcode); + + if (!device) + return 0; + + /* Add device prefix to the name */ + ret = snprintf(priv->machine, sizeof(priv->machine), "%s%d", + device->variants ? "zu" : "xck", device->device); + if (ret < 0) + return ret; + + if (device->variants & ZYNQMP_VARIANT_EV) { + /* Devices with EV variant might be EG/CG/EV family */ + if (idcode2 & IDCODE2_PL_INIT_MASK) { + u32 family = ((idcode2 & EFUSE_VCU_DIS_MASK) >> + EFUSE_VCU_DIS_SHIFT) << 1 | + ((idcode2 & EFUSE_GPU_DIS_MASK) >> + EFUSE_GPU_DIS_SHIFT); + + /* + * Get family name based on extended idcode values as + * determined on UG1087, EXTENDED_IDCODE register + * description + */ + switch (family) { + case 0x00: + strlcat(priv->machine, "ev", + sizeof(priv->machine)); + break; + case 0x10: + strlcat(priv->machine, "eg", + sizeof(priv->machine)); + break; + case 0x11: + strlcat(priv->machine, "cg", + sizeof(priv->machine)); + break; + default: + /* Do not append family name*/ + break; + } + } else { + /* + * When PL powered down the VCU Disable efuse cannot be + * read. So, ignore the bit and just findout if it is CG + * or EG/EV variant. + */ + strlcat(priv->machine, (idcode2 & EFUSE_GPU_DIS_MASK) ? + "cg" : "e", sizeof(priv->machine)); + } + } else if (device->variants & ZYNQMP_VARIANT_CG) { + /* Devices with CG variant might be EG or CG family */ + strlcat(priv->machine, (idcode2 & EFUSE_GPU_DIS_MASK) ? + "cg" : "eg", sizeof(priv->machine)); + } else if (device->variants & ZYNQMP_VARIANT_EG) { + strlcat(priv->machine, "eg", sizeof(priv->machine)); + } else if (device->variants & ZYNQMP_VARIANT_DR) { + strlcat(priv->machine, "dr", sizeof(priv->machine)); + } + + return 0; +} + static int soc_xilinx_zynqmp_get_family(struct udevice *dev, char *buf, int size) { struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); @@ -34,6 +286,17 @@ static int soc_xilinx_zynqmp_get_family(struct udevice *dev, char *buf, int size return snprintf(buf, size, "%s", priv->family); } +int soc_xilinx_zynqmp_get_machine(struct udevice *dev, char *buf, int size) +{ + struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); + const char *machine = priv->machine; + + if (!machine[0]) + machine = "unknown"; + + return snprintf(buf, size, "%s", machine); +} + static int soc_xilinx_zynqmp_get_revision(struct udevice *dev, char *buf, int size) { struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); @@ -44,6 +307,7 @@ static int soc_xilinx_zynqmp_get_revision(struct udevice *dev, char *buf, int si static const struct soc_ops soc_xilinx_zynqmp_ops = { .get_family = soc_xilinx_zynqmp_get_family, .get_revision = soc_xilinx_zynqmp_get_revision, + .get_machine = soc_xilinx_zynqmp_get_machine, }; static int soc_xilinx_zynqmp_probe(struct udevice *dev) @@ -54,8 +318,7 @@ static int soc_xilinx_zynqmp_probe(struct udevice *dev) priv->family = zynqmp_family; - if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3 || - !IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) + if (!IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) ret = zynqmp_mmio_read(ZYNQMP_PS_VERSION, &ret_payload[2]); else ret = xilinx_pm_request(PM_GET_CHIPID, 0, 0, 0, 0, @@ -65,6 +328,26 @@ static int soc_xilinx_zynqmp_probe(struct udevice *dev) priv->revision = ret_payload[2] & ZYNQMP_PS_VER_MASK; + if (IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) { + /* + * Firmware returns: + * payload[0][31:0] = status of the operation + * payload[1] = IDCODE + * payload[2][19:0] = Version + * payload[2][28:20] = EXTENDED_IDCODE + * payload[2][29] = PL_INIT + */ + u32 idcode = ret_payload[1]; + u32 idcode2 = ret_payload[2] >> + ZYNQMP_CSU_VERSION_EMPTY_SHIFT; + dev_dbg(dev, "IDCODE: 0x%0x, IDCODE2: 0x%0x\n", idcode, + idcode2); + + ret = soc_xilinx_zynqmp_detect_machine(dev, idcode, idcode2); + if (ret) + return ret; + } + return 0; } -- 2.30.2