From nobody Sat Nov 15 04:16:35 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1755782362; cv=pass; d=zohomail.com; s=zohoarc; b=ZjWOHpGULXeLv57FSGXAlv1WxiL3NnXKoX/Dt2SFOD4Q2a+nkzVxGJrliWCA0DXMJVFdQrJLe/fhMH2YdsxfISLGqsBUdu8XIfNlB9z26Rrdl6b/sCtOftgCRcswtiJw5NFCZ9Petfz3ZIMCxDf6POXE9iSG9ruT8hJgg+TYe2Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755782362; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZUnYRsXWGmFZ3Bap7nE86ynnEbvqzlPl9BQdJkJYkJg=; b=PwI+DX9qVP+JfJQwJSfcKnkKhMWLG9GPzOIgvBKcxlnePUA73jbvUqAtxAovHwh/R3igtoueEzoWGrQvDToaIuNoKTA0lv+F3RzkNx+0pBaQpAEtmE44whs+fuWiFcVqsaJgRkEzW1PiqpxV3hONRhdwf/oKhEZeN8QgWDM1rfs= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=amd.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175578236223835.98192798942648; Thu, 21 Aug 2025 06:19:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1up50U-0004SL-LU; Thu, 21 Aug 2025 09:07:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1up4zJ-0002iT-2A; Thu, 21 Aug 2025 09:05:55 -0400 Received: from mail-dm6nam10on2062b.outbound.protection.outlook.com ([2a01:111:f403:2413::62b] helo=NAM10-DM6-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1up4zC-0003HE-Np; Thu, 21 Aug 2025 09:05:52 -0400 Received: from SA9PR13CA0047.namprd13.prod.outlook.com (2603:10b6:806:22::22) by MW4PR12MB6873.namprd12.prod.outlook.com (2603:10b6:303:20c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.19; Thu, 21 Aug 2025 13:05:32 +0000 Received: from SA2PEPF0000150B.namprd04.prod.outlook.com (2603:10b6:806:22:cafe::b9) by SA9PR13CA0047.outlook.office365.com (2603:10b6:806:22::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9073.7 via Frontend Transport; Thu, 21 Aug 2025 13:05:32 +0000 Received: from SATLEXMB03.amd.com (165.204.84.17) by SA2PEPF0000150B.mail.protection.outlook.com (10.167.242.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9052.8 via Frontend Transport; Thu, 21 Aug 2025 13:05:32 +0000 Received: from SATLEXMB04.amd.com (10.181.40.145) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 21 Aug 2025 08:05:30 -0500 Received: from XFR-LUMICHEL-L2.xilinx.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Thu, 21 Aug 2025 08:05:29 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hDhyF0ZTULuu+SHqfcgD0a4DPQvOiKmbIxb7Wd1SBnnRA9OoQ3gG+2/0Ms1diNLEtVhYxCw7LaHg4cWJ8VDivMRpqbU6ZvuzVc69y+YrPHMgKR3Lo8F2fRb6scoxcTx38EfqP+XDnOUxkM7jZAVjcaZqLoybOHvxjIb+yLXwA268w71jizO8A0NeZOZqdzawTFFqv4yg9OWhKZKRr4EysP7b5CQ0NMjTTSYcYFRr96BFSLcf12i2ZhcZ8LnSjViAMaxgn426hcSegsjtMhDpdSip6ozCkgHJbj1cLC28Kx3DxW+t2MA8ycrlDua8r341B0iKGO78svE+mLp84Vawjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=ZUnYRsXWGmFZ3Bap7nE86ynnEbvqzlPl9BQdJkJYkJg=; b=MEOTs84x0HLGC2rVpIVXU2LW5LOuPJNci7WHn9V4yXcq9/eegrS8n2OkJDglDpldUHBBdJVUL2xC6mUvJcbBriMEm1RMMMMvAcr61SryJvF0af5wJtVKNm7I8yrh8wSBHLO2ndCFE3LBrnmq5z38lDpAr0gl/prw/wrJX2W5QIQ5TCX1FVU+CJ/Owr9cJyAJ+r7g9SZ3wGCrLMLwsEVdeZ1O8xDl3HWivDvgOyP0oFMIdTPJg3FiBNmdcbFAPJ41Dhpak5TD8l6xwS9FXtqNs8tgm3vbhd5cw46l+hn3kWtrcAeJNgtbvPXHdoSUQAaWPGfn4pWbbAH4SN6wwS9UEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nongnu.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZUnYRsXWGmFZ3Bap7nE86ynnEbvqzlPl9BQdJkJYkJg=; b=Y3TpZylG5Z1hNCks7THlBBbTBVg8IGX+X0wygvtGJdvVJab+fEuzP0P8RZoGgNGF9tFA6G9uRQFHi+DSBqZGGJGeN58//SOas7r1ho2AYgf/CNjm6yOhqd9vojUm6sR/YLu8ez7scqX3WmzMbkib72XjrsoqaELEMOngIJywUHs= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C From: Luc Michel To: , CC: Luc Michel , Peter Maydell , Francisco Iglesias , "Edgar E . Iglesias" , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alistair Francis , "Frederic Konrad" , Sai Pavan Boddu Subject: [PATCH v3 46/47] hw/arm/xlnx-versal-virt: add the xlnx-versal2-virt machine Date: Thu, 21 Aug 2025 15:03:45 +0200 Message-ID: <20250821130354.125971-47-luc.michel@amd.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250821130354.125971-1-luc.michel@amd.com> References: <20250821130354.125971-1-luc.michel@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: None (SATLEXMB03.amd.com: luc.michel@amd.com does not designate permitted sender hosts) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF0000150B:EE_|MW4PR12MB6873:EE_ X-MS-Office365-Filtering-Correlation-Id: c54559b5-fb45-4a97-20d8-08dde0b368f0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?QvS1Z1iKzQv3423MrWMka/tGdFo0ztkqDUA3QSxbSGUmJfIqk9Fejl6UH3Su?= =?us-ascii?Q?I9IpEnDOUCmJMp/npjbsKfSvy25If/UNmtZ9XKx18YE2DAVqw8eelhdCkC5M?= =?us-ascii?Q?gSUCISMd+4ooWfual1KGXzohD3hyO40mymKD18L08F7B79iijDzyOkyXKfJq?= =?us-ascii?Q?fq3pmV9e8c5cCYQ9i1jG1qRY2ETQK4tyZ15ToZ/jKRUVhLjZulAlrzpGLcV4?= =?us-ascii?Q?ULP58HsHlsbPE3UXaw36xZW5C4GHeoZ6A5WuVT5bq0mH6rJycx1MIJcUS11D?= =?us-ascii?Q?V3Ny6c4HaRRdHBAwwQJgFj8NrwWl5imZvAgcJmWsbs2/0wog4Gb3tMnqMWKH?= =?us-ascii?Q?QuXht8kEq8C1ZT5tZu8mIN83Jsf3jNZYrmS6Q55YCwmvk6RvGfq1hOmQI5t7?= =?us-ascii?Q?WoXM7ViLwsZnFRpplhbT8vnxq2ztL25fQFosXsO7mA19JdCOytIP5cz8Jku/?= =?us-ascii?Q?o5PcfOM/2IeSmfq7gnrXRJQ3TMH8oGFA78NvTdlWQS+LSVTtxwAB5KpLiI5q?= =?us-ascii?Q?R5ehthkd3wxDeKcAEuZqOVC5tsO+LSbzMaLtnnH/iTWjdjjKF2+pcQ+TpHRR?= =?us-ascii?Q?k8F5MMGjXxWlaV/2a6gdiR2+zB2WEf9BQ1snC0xs79Ah2suXXAYDcOEB4txg?= =?us-ascii?Q?CAY4DTx6hNONypxjkjxQO/jvFb40uJGU2C8HxvmT+LwN5ArueuSy+VTQg/AB?= =?us-ascii?Q?GVcJOQsIF20/2S2ohCXmGc0LaMXcEZ5VArHsJFPwXinutycmMQo4mXnciS2x?= =?us-ascii?Q?nLfXujBJ2YzMjNojA4IoxPobN8IknG0YqbQPP+nRM5ujcjhTSnjUVIIm7QdP?= =?us-ascii?Q?3VkYEkEIo+Zl0lY0lWxNd/dTrMZb3dYSUponFtDp88G7EpyR6ECe11RslHHe?= =?us-ascii?Q?MuNu6ekrYy+fBNuv3wOF0ve2+AWduRS3HBprLlyB68nU3oXFa7A2e0DueVPE?= =?us-ascii?Q?jrHU3cAivycMclMH/6ikggQIl9yWvUroT5oD7wU41Uh3oBjLlrzGY8Z4ANSr?= =?us-ascii?Q?N5Z9fH3wKx3oJFGWXOkIlkI3CyM1j6qoB/1ebRXgAEfBbQjmy3s3+9QS9E/M?= =?us-ascii?Q?9kANTMVELzfwZ9cKMaKRu5ICwE1t49uW7SRf/s5jl8jHnSoP5iW1EVejLT75?= =?us-ascii?Q?JOnJUZUY+pbowLlunM9xjVNXTQlqQKkesUDe0GiV3ooxlqWzsrEmIBv0gpTi?= =?us-ascii?Q?idD2ZolzwDJvWsNnFjNAQkqqKSFXSTRTYJcVPbdohsoixmH9ImVr5E/wAB2m?= =?us-ascii?Q?hUuOiZ9uVnTmMl1vOUxj2Lh4cMT2Twl72X/FwM8FsORlXOl9pmP17AMzFUAl?= =?us-ascii?Q?Xwr1WyeQ0e8uYLUEDEVWMJwsM2lKKCDMRVOjB8rRoN02Wh3iBDGToRjjD9+c?= =?us-ascii?Q?7ISt77InfohPq3NbmHOAYA+7vwIimpQviW2kYSMp/xLM78MhSsJQ7LkgvGMt?= =?us-ascii?Q?RWJcskERI7puLIB/jZw1QRSVrz1xdxrsH4c+dNA/t/L1fPtT0wnKDy0+vt3J?= =?us-ascii?Q?yDLh2atQN3ZWzm8lwr6/v9OQFK9JMmBSg04zI9KWZue7GgkOdNWT01WzRg?= =?us-ascii?Q?=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB03.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Aug 2025 13:05:32.0059 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c54559b5-fb45-4a97-20d8-08dde0b368f0 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF0000150B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6873 Received-SPF: permerror client-ip=2a01:111:f403:2413::62b; envelope-from=Luc.Michel@amd.com; helo=NAM10-DM6-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, WEIRD_QUOTING=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1755782364091116600 Content-Type: text/plain; charset="utf-8" Add the Versal Gen 2 Virtual development machine embedding a versal2 SoC. This machine follows the same principle than the xlnx-versal-virt machine. It creates its own DTB and feeds it to the software payload. This way only implemented devices are exposed to the guest and the user does not need to provide a DTB. Signed-off-by: Luc Michel Reviewed-by: Francisco Iglesias --- docs/system/arm/xlnx-versal-virt.rst | 49 ++++++++++++++++++++++++---- hw/arm/xlnx-versal-virt.c | 37 +++++++++++++++++++-- 2 files changed, 76 insertions(+), 10 deletions(-) diff --git a/docs/system/arm/xlnx-versal-virt.rst b/docs/system/arm/xlnx-ve= rsal-virt.rst index 5d7fa18592b..640cc07f808 100644 --- a/docs/system/arm/xlnx-versal-virt.rst +++ b/docs/system/arm/xlnx-versal-virt.rst @@ -1,16 +1,18 @@ -AMD Versal Virt (``amd-versal-virt``) -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +AMD Versal Virt (``amd-versal-virt``, ``amd-versal2-virt``) +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 AMD Versal is a family of heterogeneous multi-core SoCs (System on Chip) that combine traditional hardened CPUs and I/O peripherals in a Processing System (PS) with runtime programmable FPGA logic (PL) and an Artificial Intelligence Engine (AIE). =20 -QEMU implements the Versal Series variant of Versal SoCs, with the -``amd-versal-virt`` machine. The alias ``xlnx-versal-virt`` is kept for -backward compatibility. +QEMU implements the following Versal SoCs variants: + +- Versal (the ``amd-versal-virt`` machine, the alias ``xlnx-versal-virt`` = is + kept for backward compatibility) +- Versal Gen 2 (the ``amd-versal2-virt`` machine) =20 More details here: https://www.amd.com/en/products/adaptive-socs-and-fpgas/versal.html =20 The family of Versal SoCs share a single architecture but come in @@ -19,10 +21,12 @@ other differences. =20 The AMD Versal Virt board in QEMU is a model of a virtual board (does not exist in reality) with a virtual Versal SoC without I/O limitations. Currently, we support the following cores and devices: =20 +Versal +"""""" Implemented CPU cores: =20 - 2 ACPUs (ARM Cortex-A72) with their GICv3 and ITS - 2 RCPUs (ARM Cortex-R5F) with their GICv2 =20 @@ -41,20 +45,42 @@ Implemented devices: - 2 CANFDs - USB controller - OSPI controller - TRNG controller =20 +Versal Gen 2 +"""""""""""" +Implemented CPU cores: + +- 8 ACPUs (ARM Cortex-A78AE) with their GICv3 and ITS +- 10 RCPUs (ARM Cortex-R52) with their GICv3 (one per cluster) + +Implemented devices: + +- 2 UARTs (ARM PL011) +- An RTC (Versal built-in) +- 3 GEMs (Cadence MACB Ethernet MACs) +- 8 ADMA (Xilinx zDMA) channels +- 2 SD Controllers +- OCM (256KB of On Chip Memory) +- DDR memory +- BBRAM (36 bytes of Battery-backed RAM) +- 2 CANFDs +- 2 USB controllers +- OSPI controller +- TRNG controller + QEMU does not yet model any other devices, including the PL and the AI Eng= ine. =20 Other differences between the hardware and the QEMU model: =20 - QEMU allows the amount of DDR memory provided to be specified with the ``-m`` argument. If a DTB is provided on the command line then QEMU will edit it to include suitable entries describing the Versal DDR memory ran= ges. =20 -- QEMU provides 8 virtio-mmio virtio transports; these start at - address ``0xa0000000`` and have IRQs from 111 and upwards. +- QEMU provides 8 virtio-mmio virtio transports. They use reserved memory + regions and IRQ pins to avoid conflicts with real SoC peripherals. =20 Running """"""" If the user provides an Operating System to be loaded, we expect users to use the ``-kernel`` command line option. @@ -212,10 +238,15 @@ To use a different index value, N, from default of 0,= add: =20 -global driver=3Dxlnx.bbram-ctrl,property=3Ddrive-index,value=3DN =20 eFUSE File Backend """""""""""""""""" + +.. note:: + The eFUSE device is not implemented in the Versal Gen 2 QEMU model + yet. + eFUSE can have an optional file backend, which must be a seekable binary file with a size of 3072 bytes or larger. A file with all binary 0s is a 'blank'. =20 To add a file-backend for the eFUSE: @@ -269,5 +300,9 @@ To connect CANFD0 and CANFD1 to host machine's CAN inte= rface can0: =20 .. code-block:: bash =20 -object can-bus,id=3Dcanbus -machine canbus0=3Dcanbus -machine canbus1= =3Dcanbus -object can-host-socketcan,id=3Dcanhost0,if=3Dcan0,canbus=3Dcanbus + +.. note:: + Versal Gen 2 has 4 CAN controllers. ``canbus0`` to ``canbus3`` can + be specified on the command line. diff --git a/hw/arm/xlnx-versal-virt.c b/hw/arm/xlnx-versal-virt.c index de475e89412..514072d6f61 100644 --- a/hw/arm/xlnx-versal-virt.c +++ b/hw/arm/xlnx-versal-virt.c @@ -1,7 +1,7 @@ /* - * AMD/Xilinx Versal Virtual board. + * AMD/Xilinx Versal family Virtual board. * * Copyright (c) 2018 Xilinx Inc. * Copyright (c) 2025 Advanced Micro Devices, Inc. * Written by Edgar E. Iglesias * @@ -27,10 +27,11 @@ #define TYPE_XLNX_VERSAL_VIRT_BASE_MACHINE \ MACHINE_TYPE_NAME("amd-versal-virt-base") OBJECT_DECLARE_TYPE(VersalVirt, VersalVirtClass, XLNX_VERSAL_VIRT_BASE_MAC= HINE) =20 #define TYPE_XLNX_VERSAL_VIRT_MACHINE MACHINE_TYPE_NAME("amd-versal-virt") +#define TYPE_XLNX_VERSAL2_VIRT_MACHINE MACHINE_TYPE_NAME("amd-versal2-virt= ") =20 #define XLNX_VERSAL_NUM_OSPI_FLASH 4 =20 struct VersalVirt { MachineState parent_obj; @@ -55,11 +56,13 @@ struct VersalVirtClass { }; =20 static void fdt_create(VersalVirt *s) { MachineClass *mc =3D MACHINE_GET_CLASS(s); + VersalVirtClass *vvc =3D XLNX_VERSAL_VIRT_BASE_MACHINE_GET_CLASS(s); const char versal_compat[] =3D "amd-versal-virt\0xlnx-versal-virt"; + const char versal2_compat[] =3D "amd-versal2-virt"; =20 s->fdt =3D create_device_tree(&s->fdt_size); if (!s->fdt) { error_report("create_device_tree() failed"); exit(1); @@ -69,12 +72,22 @@ static void fdt_create(VersalVirt *s) qemu_fdt_add_subnode(s->fdt, "/chosen"); qemu_fdt_add_subnode(s->fdt, "/aliases"); =20 /* Header */ qemu_fdt_setprop_string(s->fdt, "/", "model", mc->desc); - qemu_fdt_setprop(s->fdt, "/", "compatible", versal_compat, - sizeof(versal_compat)); + + switch (vvc->version) { + case VERSAL_VER_VERSAL: + qemu_fdt_setprop(s->fdt, "/", "compatible", versal_compat, + sizeof(versal_compat)); + break; + + case VERSAL_VER_VERSAL2: + qemu_fdt_setprop(s->fdt, "/", "compatible", versal2_compat, + sizeof(versal2_compat)); + break; + } } =20 static void fdt_nop_memory_nodes(void *fdt, Error **errp) { Error *err =3D NULL; @@ -362,10 +375,21 @@ static void versal_virt_machine_class_init(ObjectClas= s *oc, const void *data) vvc->version =3D VERSAL_VER_VERSAL; =20 versal_virt_machine_class_init_common(oc); } =20 +static void versal2_virt_machine_class_init(ObjectClass *oc, const void *d= ata) +{ + MachineClass *mc =3D MACHINE_CLASS(oc); + VersalVirtClass *vvc =3D XLNX_VERSAL_VIRT_BASE_MACHINE_CLASS(oc); + + mc->desc =3D "AMD Versal Gen 2 Virtual development board"; + vvc->version =3D VERSAL_VER_VERSAL2; + + versal_virt_machine_class_init_common(oc); +} + static const TypeInfo versal_virt_base_machine_init_typeinfo =3D { .name =3D TYPE_XLNX_VERSAL_VIRT_BASE_MACHINE, .parent =3D TYPE_MACHINE, .class_size =3D sizeof(VersalVirtClass), .instance_init =3D versal_virt_machine_instance_init, @@ -378,12 +402,19 @@ static const TypeInfo versal_virt_machine_init_typein= fo =3D { .name =3D TYPE_XLNX_VERSAL_VIRT_MACHINE, .parent =3D TYPE_XLNX_VERSAL_VIRT_BASE_MACHINE, .class_init =3D versal_virt_machine_class_init, }; =20 +static const TypeInfo versal2_virt_machine_init_typeinfo =3D { + .name =3D TYPE_XLNX_VERSAL2_VIRT_MACHINE, + .parent =3D TYPE_XLNX_VERSAL_VIRT_BASE_MACHINE, + .class_init =3D versal2_virt_machine_class_init, +}; + static void versal_virt_machine_init_register_types(void) { type_register_static(&versal_virt_base_machine_init_typeinfo); type_register_static(&versal_virt_machine_init_typeinfo); + type_register_static(&versal2_virt_machine_init_typeinfo); } =20 type_init(versal_virt_machine_init_register_types) --=20 2.50.1