From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552870; cv=none; d=zohomail.com; s=zohoarc; b=C0ConhrAp+d7GxrBDYJ0wth74++FXCiJNXcePxEeAsOFMGqcx1MyOX7MUiVUPRbzIjXxveS3Gy0IepVXniL0f8n7+HytvkoCLBKeTza41aQy4jGJpwaoguPieFc/kD7ezgpTR4z7tkusvrdSvTxhZSGestB7Eqvl2R5vSrrblsw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552870; 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=iYVACPKWHpWfFPVC6CpICnn9uOMZiXBkx8rjI67+qrA=; b=LXAUy46q0Mr/UC9h5BPrYYrGKtAd4by1JDLZuvB+saVclbuiKsMRjA/QilBNp7EplL3EoffRL6QQYU/3CHtRMbnjL4CFh3Bt25vJD4/E7OVPi3iuhF6HJL9vTlJASW9P/W37Cpur1uuD/NpueRvv4u9wxbjS5nEWvjVUO5zbYNA= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789552870523429.11149048520565; Wed, 16 Sep 2026 03:01:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mRm-00089n-SZ; Wed, 16 Sep 2026 06:00:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRY-00086g-Sy for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:49 -0400 Received: from qs-2004j-snip6-3.eps.apple.com ([2a01:b747:3006:206::60] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRT-0005DG-2A for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:44 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id DB3B018009F7; Wed, 16 Sep 2026 10:00:34 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id 27D341800156; Wed, 16 Sep 2026 10:00:33 +0000 (UTC) X-ICL-RepId: 01a0a9a9-3937-7679-a047-fd3e700a25e0 X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0ISxMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpZHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552836; x=1792144836; bh=iYVACPKWHpWfFPVC6CpICnn9uOMZiXBkx8rjI67+qrA=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=PVtSaJMCzgNxZay9JF0P/ShpaYcn07kedhVExgI5seDfLtyUCTDWG15/RE3YCSQAY8MGCY8kgjmjCRhdtt53/jJ2P3WTgJAslmTe73RZHeDYhCuFnTVgJPWawIrLxNZ36wMxmP1QSgepejlxPnsc2j27WdnKFImV5j5Rly3A1+FcXpaXO7qmmNlnXeVXXJzuM2+n7lxeGgSxNTuRpALfUQl9B45ccBfntN1uymq+AJMGT4Lcrqp5LHSajkeEwZRsaMl1x3jN9p1KXO1GLUpUl6dKxDMO8mzIQlqjivV++PscDE2ULMKe0XarNIR9c/KrCfo7H3oQfgxd9sL6el/hDA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini , Lucas Amaral Subject: [RFC PATCH v8 01/10] target/arm/emulate: add ISV=0 emulation library with load/store immediate Date: Wed, 16 Sep 2026 12:00:09 +0200 Message-ID: <20260916100021.73825-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX8E/W9urafuAw t2be0di8dWbmG/fjr/ZQa63U8c+OUUoJMFHxXcCZEznejGNO7CcoYWPr7+i2L5oNADwtg9Di53u X6nNSwR+OneSemrqTpzGvyTdvcKutXqxOcNEkHYYztwM7EOuczmCbU4g5+9UXDzMolUnb7Tzqcy K0DQpV9cNc0qCilAJvOS/9UVKm5w20T3uOx51EsxBpej15+0c7Le1eghpeIIioD7qH56jvxi/Mz 0CbeZOctxFP033KTvm77jPXJCfaGVwjprNF+6giwxJOHm0nWrW/W3HGVvjVyCSELYkraG0RGSyJ IF7mqiSuQ7uGQyChSY27qMCIhDCaoWqFfX87qEBn/rmvN4l9I0zmVHwacdzZ/s= X-Proofpoint-ORIG-GUID: 9yRJFkPyltSBVSl22Q7hV03RCO_z-zz0 X-Proofpoint-GUID: 9yRJFkPyltSBVSl22Q7hV03RCO_z-zz0 X-Authority-Info-Out: v=2.4 cv=D8VK6/Rj c=1 sm=1 tr=0 ts=6aaa68c3 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=pGLkceISAAAA:8 a=ieRqX75kiepghOHPk6kA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-JNJ: AAAAAAAB+/kp2nMrTXbJvtgaVa+TYWS69qzD+P7TJ2ftMX6JU2wMGBQGnf+xpsJeOZg7NQkzy3FumhT6rtrZg4g1irLwdNVOuUCAvwvkRfkp61iqUqvB3lb59m+fL++UFlASX/omFHhS3OGFd4fujEwjDl7E9JxP32EHMXgbIJllC8Jo9gDhModWxxNVit2kh8X9+Ui37C/DK9/46ECREySAvmpAipay+PxeuoGgwhFaNvALmPmvaacaWPML8RS08dpjXEqvgrTAxK7wAnzmFRNUWSfp2FMwKJXYbJZ34cP8qJHdddel5dGg/WA2DV7zUI/7TmzjvxfefiUHJAeMQLF3hrSCbNiZoUibxa7BI/griVNcOl/dppw//bDwgB9SLV5RduTrv0LpR3QfSurR0yWwfv4YMMYWzU64QjKcZQUSrHaw/TGRASsZWGP2k1VEMmvmvWbspmfC8nG1CMZederX1hfXC2UbTxRlZE9pjLFZWKc10RENgFUHjSYGX3xR+CsK7lAnPPXDfI/zyOUX5kbIUHqb8hH4qjAgZNd1Z+Xim64QsHJtVCSu/VAlb1xglq6xOJkgrg5/MwNrrZ2A4XeapjQFQGMlsYCaBCgItyS2FvR2AGrCOVmerHc3vjWma7BD7otII9y0FZ9EHDMrEt3v5aug+KxH3EYG4SOBXaTfdCd5HSlChseGQoC70fVdCBe0zHO8Nbo5VYHmgNF67j+k6Qt2x9s3udqLLyTCfwsZQQg/w8uKnNMaISE/LAGBKpPz0SilYbqnEYDyKkLvKVO6lDZLLJ+wXvaLbHx+mZlFzKbKK5UBs6gnS0nvIdIA5Y63YX52LPAJo7FLffLRKmO/45A53T17DpH0/7ChM4qOI30je/JAzi9JOMegZO+A 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:206::60; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552875108158500 From: Lucas Amaral Add a shared emulation library for AArch64 load/store instructions that cause ISV=3D0 data aborts under hardware virtualization (HVF, WHPX). When the Instruction Syndrome Valid bit is clear, the hypervisor cannot determine the faulting instruction's target register or access size from the syndrome alone. This library fetches and decodes the instruction using a decodetree-generated decoder, then emulates it by accessing the vCPU's register file (CPUARMState) and memory (cpu_memory_rw_debug) directly. This patch establishes the framework and adds load/store single with immediate addressing =E2=80=94 the most common ISV=3D0 trigger. Subsequent patches add register-offset, pair, exclusive, and atomic instructions. Instruction coverage: - STR/LDR (GPR): unscaled, post-indexed, unprivileged, pre-indexed, unsigned offset =E2=80=94 all sizes (8/16/32/64-bit), sign/zero extensi= on - STR/LDR (SIMD/FP): same addressing modes, 8-128 bit elements - PRFM: prefetch treated as NOP - DC cache maintenance (SYS CRn=3DC7): NOP on MMIO This library uses its own a64-ldst.decode rather than sharing target/arm/tcg/a64.decode. TCG's trans_* functions are a compiler: they emit IR ops into a translation block for later execution. This library's trans_* functions are an interpreter: they execute directly against the vCPU register file and memory. The decodetree-generated dispatcher calls trans_* by name, so both cannot coexist in the same translation unit. Decode patterns are kept consistent with TCG's where possible. Decodetree differences from TCG: - &ldst_imm adds a 'u' flag to distinguish 9-bit signed vs 12-bit unsigned immediate forms. TCG uses %uimm_scaled to pre-scale the unsigned immediate at decode time; here imm:12 is extracted raw and the handler scales it. Signed-off-by: Lucas Amaral --- target/arm/emulate/a64-ldst.decode | 129 ++++++++++++++++ target/arm/emulate/arm_emulate.c | 237 +++++++++++++++++++++++++++++ target/arm/emulate/arm_emulate.h | 30 ++++ target/arm/emulate/meson.build | 8 + target/arm/meson.build | 1 + 5 files changed, 405 insertions(+) create mode 100644 target/arm/emulate/a64-ldst.decode create mode 100644 target/arm/emulate/arm_emulate.c create mode 100644 target/arm/emulate/arm_emulate.h create mode 100644 target/arm/emulate/meson.build diff --git a/target/arm/emulate/a64-ldst.decode b/target/arm/emulate/a64-ld= st.decode new file mode 100644 index 0000000000..c887dcba7d --- /dev/null +++ b/target/arm/emulate/a64-ldst.decode @@ -0,0 +1,129 @@ +# AArch64 load/store instruction patterns for ISV=3D0 emulation +# +# Copyright (c) 2026 Lucas Amaral +# +# SPDX-License-Identifier: GPL-2.0-or-later + +### Argument sets + +# Load/store immediate (unscaled, pre/post-index, unprivileged, unsigned o= ffset) +# 'u' flag: 0 =3D 9-bit signed immediate (byte offset), 1 =3D 12-bit unsig= ned (needs << sz) +&ldst_imm rt rn imm sz sign w p unpriv ext u + +### Format templates + +# Load/store immediate (9-bit signed) +@ldst_imm .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm u=3D0 unp= riv=3D0 p=3D0 w=3D0 +@ldst_imm_pre .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm u=3D0 unp= riv=3D0 p=3D0 w=3D1 +@ldst_imm_post .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm u=3D0 unp= riv=3D0 p=3D1 w=3D1 +@ldst_imm_user .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm u=3D0 unp= riv=3D1 p=3D0 w=3D0 + +# Load/store unsigned offset (12-bit, handler scales by << sz) +@ldst_uimm .. ... . .. .. imm:12 rn:5 rt:5 &ldst_imm u=3D1 unp= riv=3D0 p=3D0 w=3D0 + +### Load/store register =E2=80=94 unscaled immediate (LDUR/STUR) + +# GPR +STR_i sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D0 +LDR_i 00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D1 sz=3D1 +LDR_i 10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D1 sz=3D2 +LDR_i 11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D0 sz=3D3 +LDR_i 00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm s= ign=3D1 ext=3D0 sz=3D0 +LDR_i 01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm s= ign=3D1 ext=3D0 sz=3D1 +LDR_i 10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm s= ign=3D1 ext=3D0 sz=3D2 +LDR_i 00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm s= ign=3D1 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm s= ign=3D1 ext=3D1 sz=3D1 + +# SIMD/FP +STR_v_i sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D0 +STR_v_i 00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D0 sz=3D4 +LDR_v_i sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D0 +LDR_v_i 00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm s= ign=3D0 ext=3D0 sz=3D4 + +### Load/store register =E2=80=94 post-indexed + +# GPR +STR_i sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D0 +LDR_i 00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D1 sz=3D1 +LDR_i 10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D1 sz=3D2 +LDR_i 11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D0 sz=3D3 +LDR_i 00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D1 ext=3D0 sz=3D0 +LDR_i 01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D1 ext=3D0 sz=3D1 +LDR_i 10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D1 ext=3D0 sz=3D2 +LDR_i 00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D1 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D1 ext=3D1 sz=3D1 + +# SIMD/FP +STR_v_i sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D0 +STR_v_i 00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D0 sz=3D4 +LDR_v_i sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D0 +LDR_v_i 00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_p= ost sign=3D0 ext=3D0 sz=3D4 + +### Load/store register =E2=80=94 unprivileged + +# GPR only (no SIMD/FP unprivileged forms) +STR_i sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D0 ext=3D0 +LDR_i 00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D0 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D0 ext=3D1 sz=3D1 +LDR_i 10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D0 ext=3D1 sz=3D2 +LDR_i 11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D0 ext=3D0 sz=3D3 +LDR_i 00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D1 ext=3D0 sz=3D0 +LDR_i 01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D1 ext=3D0 sz=3D1 +LDR_i 10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D1 ext=3D0 sz=3D2 +LDR_i 00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D1 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_u= ser sign=3D1 ext=3D1 sz=3D1 + +### Load/store register =E2=80=94 pre-indexed + +# GPR +STR_i sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D0 +LDR_i 00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D1 sz=3D1 +LDR_i 10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D1 sz=3D2 +LDR_i 11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D0 sz=3D3 +LDR_i 00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D1 ext=3D0 sz=3D0 +LDR_i 01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D1 ext=3D0 sz=3D1 +LDR_i 10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D1 ext=3D0 sz=3D2 +LDR_i 00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D1 ext=3D1 sz=3D0 +LDR_i 01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D1 ext=3D1 sz=3D1 + +# SIMD/FP +STR_v_i sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D0 +STR_v_i 00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D0 sz=3D4 +LDR_v_i sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D0 +LDR_v_i 00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_p= re sign=3D0 ext=3D0 sz=3D4 + +### PRFM =E2=80=94 unscaled immediate: prefetch is a NOP + +NOP 11 111 0 00 10 0 --------- 00 ----- ----- + +### Load/store register =E2=80=94 unsigned offset + +# GPR +STR_i sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 +LDR_i 00 111 0 01 01 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D1 sz=3D0 +LDR_i 01 111 0 01 01 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D1 sz=3D1 +LDR_i 10 111 0 01 01 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D1 sz=3D2 +LDR_i 11 111 0 01 01 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 sz=3D3 +LDR_i 00 111 0 01 10 ............ ..... ..... @ldst_uimm= sign=3D1 ext=3D0 sz=3D0 +LDR_i 01 111 0 01 10 ............ ..... ..... @ldst_uimm= sign=3D1 ext=3D0 sz=3D1 +LDR_i 10 111 0 01 10 ............ ..... ..... @ldst_uimm= sign=3D1 ext=3D0 sz=3D2 +LDR_i 00 111 0 01 11 ............ ..... ..... @ldst_uimm= sign=3D1 ext=3D1 sz=3D0 +LDR_i 01 111 0 01 11 ............ ..... ..... @ldst_uimm= sign=3D1 ext=3D1 sz=3D1 + +# PRFM =E2=80=94 unsigned offset +NOP 11 111 0 01 10 ------------ ----- ----- + +# SIMD/FP +STR_v_i sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 +STR_v_i 00 111 1 01 10 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 sz=3D4 +LDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 +LDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 sz=3D4 + +### System instructions =E2=80=94 DC cache maintenance + +# SYS with CRn=3DC7 covers all data cache operations (DC CIVAC, CVAC, etc.= ). +# On MMIO regions, cache maintenance is a harmless no-op. +NOP 1101 0101 0000 1 --- 0111 ---- --- ----- diff --git a/target/arm/emulate/arm_emulate.c b/target/arm/emulate/arm_emul= ate.c new file mode 100644 index 0000000000..02fefc30bf --- /dev/null +++ b/target/arm/emulate/arm_emulate.c @@ -0,0 +1,237 @@ +/* + * AArch64 instruction emulation for ISV=3D0 data aborts + * + * Copyright (c) 2026 Lucas Amaral + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "arm_emulate.h" +#include "target/arm/cpu.h" +#include "exec/cpu-common.h" +#include "exec/target_page.h" + +/* TODO: assumes LE guest data layout (sufficient for HVF/WHPX, both LE-on= ly) */ + +/* Named "DisasContext" as required by the decodetree code generator */ +typedef struct { + CPUState *cpu; + CPUARMState *env; + ArmEmulResult result; +} DisasContext; + +#include "decode-a64-ldst.c.inc" + +/* GPR data access (Rt, Rs, Rt2) -- register 31 =3D XZR */ + +static uint64_t gpr_read(DisasContext *ctx, int reg) +{ + if (reg =3D=3D 31) { + return 0; /* XZR */ + } + return ctx->env->xregs[reg]; +} + +static void gpr_write(DisasContext *ctx, int reg, uint64_t val) +{ + if (reg =3D=3D 31) { + return; /* XZR -- discard */ + } + ctx->env->xregs[reg] =3D val; + ctx->cpu->vcpu_dirty =3D true; +} + +/* Base register access (Rn) -- register 31 =3D SP */ + +static uint64_t base_read(DisasContext *ctx, int rn) +{ + return ctx->env->xregs[rn]; +} + +static void base_write(DisasContext *ctx, int rn, uint64_t val) +{ + ctx->env->xregs[rn] =3D val; + ctx->cpu->vcpu_dirty =3D true; +} + +/* SIMD/FP register access */ + +static void fpreg_read(DisasContext *ctx, int reg, void *buf, int size) +{ + memcpy(buf, &ctx->env->vfp.zregs[reg], size); +} + +static void fpreg_write(DisasContext *ctx, int reg, const void *buf, int s= ize) +{ + memset(&ctx->env->vfp.zregs[reg], 0, sizeof(ctx->env->vfp.zregs[reg])); + memcpy(&ctx->env->vfp.zregs[reg], buf, size); + ctx->cpu->vcpu_dirty =3D true; +} + +/* Memory access wrappers */ + +static int mem_read(DisasContext *ctx, uint64_t va, void *buf, int size) +{ + if (((va & ~TARGET_PAGE_MASK) + size) > TARGET_PAGE_SIZE) { + ctx->result =3D ARM_EMUL_ERR_MEM; + return -1; + } + int ret =3D cpu_memory_rw_debug(ctx->cpu, va, buf, size, false); + if (ret !=3D 0) { + ctx->result =3D ARM_EMUL_ERR_MEM; + } + return ret; +} + +static int mem_write(DisasContext *ctx, uint64_t va, const void *buf, int = size) +{ + if (((va & ~TARGET_PAGE_MASK) + size) > TARGET_PAGE_SIZE) { + ctx->result =3D ARM_EMUL_ERR_MEM; + return -1; + } + int ret =3D cpu_memory_rw_debug(ctx->cpu, va, (void *)buf, size, true); + if (ret !=3D 0) { + ctx->result =3D ARM_EMUL_ERR_MEM; + } + return ret; +} + +/* Sign/zero extension helpers */ + +static uint64_t sign_extend(uint64_t val, int from_bits) +{ + int shift =3D 64 - from_bits; + return (int64_t)(val << shift) >> shift; +} + +/* Apply sign/zero extension */ +static uint64_t load_extend(uint64_t val, int sz, int sign, int ext) +{ + int data_bits =3D 8 << sz; + + if (sign) { + val =3D sign_extend(val, data_bits); + if (ext) { + /* Sign-extend to 32 bits (W register) */ + val &=3D 0xFFFFFFFF; + } + } else if (ext) { + /* Zero-extend to 32 bits (W register) */ + val &=3D 0xFFFFFFFF; + } + return val; +} + +/* Load/store single -- immediate (GPR) (DDI 0487 C3.3.8 -- C3.3.13) */ + +static bool trans_STR_i(DisasContext *ctx, arg_ldst_imm *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int64_t offset =3D a->u ? ((int64_t)(uint64_t)a->imm << a->sz) + : (int64_t)a->imm; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; + + uint64_t val =3D gpr_read(ctx, a->rt); + if (mem_write(ctx, va, &val, esize) !=3D 0) { + return true; + } + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + +static bool trans_LDR_i(DisasContext *ctx, arg_ldst_imm *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int64_t offset =3D a->u ? ((int64_t)(uint64_t)a->imm << a->sz) + : (int64_t)a->imm; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; + uint64_t val =3D 0; + + if (mem_read(ctx, va, &val, esize) !=3D 0) { + return true; + } + + val =3D load_extend(val, a->sz, a->sign, a->ext); + gpr_write(ctx, a->rt, val); + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + +/* + * Load/store single -- immediate (SIMD/FP) + * STR_v_i / LDR_v_i (DDI 0487 C3.3.10) + */ + +static bool trans_STR_v_i(DisasContext *ctx, arg_ldst_imm *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int64_t offset =3D a->u ? ((int64_t)(uint64_t)a->imm << a->sz) + : (int64_t)a->imm; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; + uint8_t buf[16]; + + fpreg_read(ctx, a->rt, buf, esize); + if (mem_write(ctx, va, buf, esize) !=3D 0) { + return true; + } + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + +static bool trans_LDR_v_i(DisasContext *ctx, arg_ldst_imm *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int64_t offset =3D a->u ? ((int64_t)(uint64_t)a->imm << a->sz) + : (int64_t)a->imm; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; + uint8_t buf[16]; + + if (mem_read(ctx, va, buf, esize) !=3D 0) { + return true; + } + + fpreg_write(ctx, a->rt, buf, esize); + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + +/* PRFM, DC cache maintenance -- treated as NOP */ +static bool trans_NOP(DisasContext *ctx, arg_NOP *a) +{ + (void)ctx; + (void)a; + return true; +} + +/* Entry point */ + +ArmEmulResult arm_emul_insn(CPUArchState *env, uint32_t insn) +{ + DisasContext ctx =3D { + .cpu =3D env_cpu(env), + .env =3D env, + .result =3D ARM_EMUL_OK, + }; + + if (!decode_a64_ldst(&ctx, insn)) { + return ARM_EMUL_UNHANDLED; + } + + return ctx.result; +} diff --git a/target/arm/emulate/arm_emulate.h b/target/arm/emulate/arm_emul= ate.h new file mode 100644 index 0000000000..7fe298394f --- /dev/null +++ b/target/arm/emulate/arm_emulate.h @@ -0,0 +1,30 @@ +/* + * AArch64 instruction emulation library + * + * Copyright (c) 2026 Lucas Amaral + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef ARM_EMULATE_H +#define ARM_EMULATE_H + +#include "qemu/osdep.h" + +/** + * ArmEmulResult - return status from arm_emul_insn() + */ +typedef enum { + ARM_EMUL_OK, /* Instruction emulated successfully */ + ARM_EMUL_UNHANDLED, /* Instruction not recognized by decoder */ + ARM_EMUL_ERR_MEM, /* Memory access failed */ +} ArmEmulResult; + +/** + * arm_emul_insn - decode and emulate one AArch64 instruction + * + * Caller must synchronize CPU state and fetch @insn before calling. + */ +ArmEmulResult arm_emul_insn(CPUArchState *env, uint32_t insn); + +#endif /* ARM_EMULATE_H */ diff --git a/target/arm/emulate/meson.build b/target/arm/emulate/meson.build new file mode 100644 index 0000000000..e5455bd206 --- /dev/null +++ b/target/arm/emulate/meson.build @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +gen_a64_ldst =3D decodetree.process('a64-ldst.decode', + extra_args: ['--static-decode=3Ddecode_a64_ldst']) + +arm_common_system_ss.add(when: 'TARGET_AARCH64', if_true: [ + gen_a64_ldst, files('arm_emulate.c') +]) diff --git a/target/arm/meson.build b/target/arm/meson.build index 0369f96b4c..1963c0ec21 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -61,6 +61,7 @@ arm_common_system_ss.add(files( 'ptw.c', )) =20 +subdir('emulate') subdir('hvf') subdir('whpx') =20 --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552961; cv=none; d=zohomail.com; s=zohoarc; b=HoSkKZy+9Zz/0XQ60SLwnMBsNXq8Wj0qKxxQoRX03w5m+u9G17hMsCWuRf18fsMMFZd12DcqjlszZu+ZgAYWGSEq52I4JvkdefpIwPUFnTf03kMxAmK4WTma7a6wS9fqH0o3jFAQdjG/4fGSFULaM1ZXtTV9fud82pzxV5+no2k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552961; 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=5gD9T2JNnhAfwEF4HwlMjEqcrc+zMBpch1LWxK38wpE=; b=Dqsci5UNTHb0wvo1bQdBs3rS17zCUVh1R+2NHwAp4V9jccgUXjORVqvNtZtlSu/1SaHiZZEDIzfvpkGLZLkbWKTgM8hZwaqooGlOEIhv8syaogujcLs9+2VPP6FVuV79EnEBBB/ahDocUiykpglOylFU+SQFAKzXbUVZSqYjyWQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178955296198735.11621001872845; Wed, 16 Sep 2026 03:02:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mRo-0008An-2B; Wed, 16 Sep 2026 06:01:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRc-00086o-Re for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:50 -0400 Received: from qs-2003h-snip6-3.eps.apple.com ([2a01:b747:3006:204::4c] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRW-0005DT-Fj for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:45 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id 5D18218009F5; Wed, 16 Sep 2026 10:00:37 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id D94EF18009F6; Wed, 16 Sep 2026 10:00:34 +0000 (UTC) X-ICL-RepId: 01a0a9a9-4287-744a-971c-1eaf631e3b42 X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0ISxMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpYHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552841; x=1792144841; bh=5gD9T2JNnhAfwEF4HwlMjEqcrc+zMBpch1LWxK38wpE=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=iOjeBAnYqG6sa/nibF4RhX0zkxffKjUjMIsvhOY+n6DCvkxxNyGmymPaXaCuUzYdbbysaJsYYLpdgYZutgEH/mUQRQB1a7rIeh0NAYkaUn3L8zZMbURBpA3qjzu8dYgbAoABySZ8E7I/Z4fVZ9I59MENrgagjSxsMVXEieJbQVr9+o/kzHlrW+2p4Gbvkc21llwR/El3d2Sj7O2aTD/pcrbta9IxoRtaVOPHPHgYnGGUAbmhVVfSTX/HdpoY9b1waZI77vgn0jfpyMzTaYdD3ua7LsFEqCgS85kiHsVHQQTy7N6VpYsBl8uWfStzFUsV+IeXgcm1n0eI9nLp+1JoIg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini , Lucas Amaral Subject: [RFC PATCH v8 02/10] target/arm/emulate: add load/store register offset Date: Wed, 16 Sep 2026 12:00:10 +0200 Message-ID: <20260916100021.73825-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 984moXqKJIxSqw5wEwh9pePK8liwt0Aa X-Proofpoint-ORIG-GUID: 984moXqKJIxSqw5wEwh9pePK8liwt0Aa X-Authority-Info-Out: v=2.4 cv=EfPFgfmC c=1 sm=1 tr=0 ts=6aaa68c7 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=pGLkceISAAAA:8 a=6j-v74XZrVUtoDfXaNsA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfXxudNgzkt9DV2 jpRHOgSKWUTby3E5fLd0CDgZl7u99FwKrX+Uk195vHwrSihJrZMYINzfZMIsPzTl4nNDX4fl9bC 83OfaQf2vYcXymxveEu81DHjyFyANtx4ur5yTtW1Wvvap8smQxsXewDEj3T6Wa23MDD+OGwwVeJ Ba7S4d3F0rzVcf48OmQEmHkRKZ3UYRACUTxWjvgtNY86X328QSEd1rCV5qPeJ/ExXeDRp3FMI+h /cjZaEZjlWGHK3/nzFvPO7vUwdcGYkzW8WiXCVI+v+KCb8X08F8iDVO2g22Ki5fBRRTph7igtSQ kfB/Mu19+1mPsiDys97zXrTXV1JiwU+1/QvtVPtOIeeQsUnURF1kOEC9IO0BO8= X-JNJ: AAAAAAABh99Pw5na1q9WV0vOrxmCBWTghzXk1lf5TxLshNvCGlt04zpYadJuJOruNcemy9SqRDPTMgpT9b3Wp96t7PFGqeM2CFqVMd4wTe8FFBxM8TMLL4UjWpZE2NYOosZIho+WR+2oF25dNUdgNqjRatHdmvwEo0e9SJOPztjKU72PsZcuLGhyQCKxNV5KH89d4oR0rxPPykIaA8ypEZPXirmEB6l2ogtarlAgy3DbKZnHaBoexUlp2fd7l6P7YMOUnDmE2G4Id+EtdvtCGTrYMLi/aZx41TAaXG/Al+tg7xU9Zg54+Ni4qSs++f13o1EHkRC3XNBxx4IrJV5P7PNfTDNfwY0R7U11h5Zf4Pw1BFIZqckXCsIjipupaX+YcVhDp7EOdvHop/q8XJcbSkAYDd3W0JscRyXy7Ab0dzXCXRolG/abAXYgflpMno4yL3HonjSrS4OkHoBIphl0DR4vnIwHS50Kz6kwRJQ3EwJHRW6lxqIOUIriMCmQ/sUmIJu3urbxzzJVFoW08+TxL2Pl6k99hvDSkW6t4vqF4OUzXsGge0rN7xtEhmEJ55m1/BIwxVWcfnb7XXf+t08164+K1CXXp9hn8Ep+mIvQm76Bu5pfjHs+IkRjk+hBBLUvzBsTu/cE2jtmF9tsDFnz3R/Im+wLiZoJPReRWIcF3DP9xBIeR9xomLA8BZzKMxULO9s5OJvboCUzci2JjSGdNdoje19Ih+QjEkyPf9f0HB6ESlQMXQ7RXfPeDck+vZzhK3OTtxjcCni3+2lovlSUEekaD97XfogsqJaaPJMesOAue1M7G0QoWSTViecBucAKRk4oTee5OxDBjEBzMO4QyWqt 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::4c; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552964000158500 From: Lucas Amaral Add emulation for load/store register offset addressing mode (DDI 0487 C3.3.9). The offset register value is extended via UXTB/UXTH/UXTW/UXTX/SXTB/SXTH/SXTW/SXTX and optionally shifted by the element size. Instruction coverage: - STR/LDR (GPR): register offset with extend, all sizes - STR/LDR (SIMD/FP): register offset with extend, 8-128 bit - PRFM register offset: NOP Signed-off-by: Lucas Amaral --- target/arm/emulate/a64-ldst.decode | 29 ++++++++ target/arm/emulate/arm_emulate.c | 103 +++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) diff --git a/target/arm/emulate/a64-ldst.decode b/target/arm/emulate/a64-ld= st.decode index c887dcba7d..af6babe14a 100644 --- a/target/arm/emulate/a64-ldst.decode +++ b/target/arm/emulate/a64-ldst.decode @@ -10,6 +10,9 @@ # 'u' flag: 0 =3D 9-bit signed immediate (byte offset), 1 =3D 12-bit unsig= ned (needs << sz) &ldst_imm rt rn imm sz sign w p unpriv ext u =20 +# Load/store register offset +&ldst rm rn rt sign ext sz opt s + ### Format templates =20 # Load/store immediate (9-bit signed) @@ -21,6 +24,9 @@ # Load/store unsigned offset (12-bit, handler scales by << sz) @ldst_uimm .. ... . .. .. imm:12 rn:5 rt:5 &ldst_imm u=3D1 unp= riv=3D0 p=3D0 w=3D0 =20 +# Load/store register offset +@ldst .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst + ### Load/store register =E2=80=94 unscaled immediate (LDUR/STUR) =20 # GPR @@ -122,6 +128,29 @@ STR_v_i 00 111 1 01 10 ............ ..... ....= . @ldst_uimm sign=3D LDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 LDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 sz=3D4 =20 +### Load/store register =E2=80=94 register offset + +# GPR +STR sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D0 +LDR 00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D1 sz=3D0 +LDR 01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D1 sz=3D1 +LDR 10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D1 sz=3D2 +LDR 11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D0 sz=3D3 +LDR 00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign= =3D1 ext=3D0 sz=3D0 +LDR 01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign= =3D1 ext=3D0 sz=3D1 +LDR 10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign= =3D1 ext=3D0 sz=3D2 +LDR 00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign= =3D1 ext=3D1 sz=3D0 +LDR 01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign= =3D1 ext=3D1 sz=3D1 + +# PRFM =E2=80=94 register offset +NOP 11 111 0 00 10 1 ----- -1- - 10 ----- ----- + +# SIMD/FP +STR_v sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D0 +STR_v 00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D0 sz=3D4 +LDR_v sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D0 +LDR_v 00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign= =3D0 ext=3D0 sz=3D4 + ### System instructions =E2=80=94 DC cache maintenance =20 # SYS with CRn=3DC7 covers all data cache operations (DC CIVAC, CVAC, etc.= ). diff --git a/target/arm/emulate/arm_emulate.c b/target/arm/emulate/arm_emul= ate.c index 02fefc30bf..bf09e2a67b 100644 --- a/target/arm/emulate/arm_emulate.c +++ b/target/arm/emulate/arm_emulate.c @@ -211,6 +211,109 @@ static bool trans_LDR_v_i(DisasContext *ctx, arg_ldst= _imm *a) return true; } =20 +/* Register offset extension (DDI 0487 C6.2.131) */ + +static uint64_t extend_reg(uint64_t val, int option, int shift) +{ + switch (option) { + case 0: /* UXTB */ + val =3D (uint8_t)val; + break; + case 1: /* UXTH */ + val =3D (uint16_t)val; + break; + case 2: /* UXTW */ + val =3D (uint32_t)val; + break; + case 3: /* UXTX / LSL */ + break; + case 4: /* SXTB */ + val =3D (int64_t)(int8_t)val; + break; + case 5: /* SXTH */ + val =3D (int64_t)(int16_t)val; + break; + case 6: /* SXTW */ + val =3D (int64_t)(int32_t)val; + break; + case 7: /* SXTX */ + break; + } + return val << shift; +} + +/* + * Load/store single -- register offset (GPR) + * STR / LDR (DDI 0487 C3.3.9) + */ + +static bool trans_STR(DisasContext *ctx, arg_ldst *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int shift =3D a->s ? a->sz : 0; + uint64_t rm_val =3D gpr_read(ctx, a->rm); + uint64_t offset =3D extend_reg(rm_val, a->opt, shift); + uint64_t va =3D base_read(ctx, a->rn) + offset; + + uint64_t val =3D gpr_read(ctx, a->rt); + mem_write(ctx, va, &val, esize); + return true; +} + +static bool trans_LDR(DisasContext *ctx, arg_ldst *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int shift =3D a->s ? a->sz : 0; + uint64_t rm_val =3D gpr_read(ctx, a->rm); + uint64_t offset =3D extend_reg(rm_val, a->opt, shift); + uint64_t va =3D base_read(ctx, a->rn) + offset; + uint64_t val =3D 0; + + if (mem_read(ctx, va, &val, esize) !=3D 0) { + return true; + } + + val =3D load_extend(val, a->sz, a->sign, a->ext); + gpr_write(ctx, a->rt, val); + return true; +} + +/* + * Load/store single -- register offset (SIMD/FP) + * STR_v / LDR_v (DDI 0487 C3.3.10) + */ + +static bool trans_STR_v(DisasContext *ctx, arg_ldst *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int shift =3D a->s ? a->sz : 0; + uint64_t rm_val =3D gpr_read(ctx, a->rm); + uint64_t offset =3D extend_reg(rm_val, a->opt, shift); + uint64_t va =3D base_read(ctx, a->rn) + offset; + uint8_t buf[16]; + + fpreg_read(ctx, a->rt, buf, esize); + mem_write(ctx, va, buf, esize); + return true; +} + +static bool trans_LDR_v(DisasContext *ctx, arg_ldst *a) +{ + int esize =3D (a->sz <=3D 3) ? (1 << a->sz) : 16; + int shift =3D a->s ? a->sz : 0; + uint64_t rm_val =3D gpr_read(ctx, a->rm); + uint64_t offset =3D extend_reg(rm_val, a->opt, shift); + uint64_t va =3D base_read(ctx, a->rn) + offset; + uint8_t buf[16]; + + if (mem_read(ctx, va, buf, esize) !=3D 0) { + return true; + } + + fpreg_write(ctx, a->rt, buf, esize); + return true; +} + /* PRFM, DC cache maintenance -- treated as NOP */ static bool trans_NOP(DisasContext *ctx, arg_NOP *a) { --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552946; cv=none; d=zohomail.com; s=zohoarc; b=cLutehT2nLGw0CYMTAEGAah6gDar57mXrR3L6+tdSFQSC99AhNQFoMzTy14SGvEHtboXBwgZEMF6Vr16Q5tP0nYOiIp/yfbl4scJukxg5J8nF9ccqGJV50PHF7RrFcgILL/0eabKlTyrfCORObt0uaJXWKz2/gRQdGwcdagw8ok= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552946; 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=4BwMwrO7JAl69k934i2fO7Es+BH41aFRqji3KVvqW4Y=; b=BcrUzJt4t2FM3lG9AypHPx4ih0kzMKB/Nl6NbzYEg2hyn/UOmB6EuglmLuSDthuTDll7o5PpernbNa2HkouYPcQuTqRIaayZqBau/1oipT5no6gwjXMlKw/f5IDtwlE0/H+VJ8p6qNXjGptPVRe2zBIm2pV2R6lNp0zUXDSIngM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789552946719226.5534638284281; Wed, 16 Sep 2026 03:02:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mRn-0008Ah-Du; Wed, 16 Sep 2026 06:00:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRY-00086h-TX for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:49 -0400 Received: from qs-2003f-snip6-11.eps.apple.com ([2a01:b747:3006:204::3f] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRV-0005DQ-La for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:44 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id C94E618009DA; Wed, 16 Sep 2026 10:00:38 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id 9950C18009EE; Wed, 16 Sep 2026 10:00:36 +0000 (UTC) X-ICL-RepId: 01a0a9a9-4854-7311-ab53-abd902c26911 X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0ISxMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpfHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552841; x=1792144841; bh=4BwMwrO7JAl69k934i2fO7Es+BH41aFRqji3KVvqW4Y=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=p4HnGKIgQ5sn01K1DfzPy1JFPxQxDTCgmrRr3WO1+ncZr2M9y3E3xYYEeiVx1DBHT+2lDE5mwk1G59n05ALeqq1qj8/UNy3wf3eVcEaezytb5Gkhf3K7GQiBgFwuhTs3pdrMnfEPc5kTbrJEmOwTWryt3Oubpkqvv8KYm1MHKJ8gfE05dnKoIRa0JiTo04Y8EN47K0a4H1FFW1sNEtmaKKfibh3DP9ZIEP8BeHut/MlMqU8okBTKD7duWDEahDf7M9qtYk9j6fnvLehMhN8m/0OWrCI8LxTzQNtjhgywY3NCF7kQTU435iGPN9AvZzfIoGu8BkyrscjF+6AA18SIug== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini , Lucas Amaral Subject: [RFC PATCH v8 03/10] target/arm/emulate: add load/store pair Date: Wed, 16 Sep 2026 12:00:11 +0200 Message-ID: <20260916100021.73825-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: KKqxK7NhA4Y_z0JUTt0UU1B9Me102zy1 X-Proofpoint-GUID: KKqxK7NhA4Y_z0JUTt0UU1B9Me102zy1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX7bjBn+FP5mAy pItdV6pXbFGKGqJKz/p1327SkkCKdqqmovLynVC26nsjFpSL28/559zrq1gexzlgOjfhPW2Grg9 vNpNKbeNOShVUL++lpoHqoUdvw1TH9qyPovOVn33DvKUtE56nIBZ/bwbR0Sk/L4221CoXQt/r4A AT0UDOLD5mN6b1rioSFEZkDuL8gnV3s00hzfgibI2yI5oG4c4gugG/T+mJijf5zbyy97F22Kb1U e2NqarbVTxBJ8dHMiMZRzNhDWTJc5nb3UOJad0fMypc91iL2y6IGOGpSFFKuSHL8sWbZPjg4Qul JZpSxAbNbWUjwlbfFVynx6H9oAYQVaqeTJ/w+QtHU2ZTmRSf+SEg4DqTnzPGlk= X-Authority-Info-Out: v=2.4 cv=Dbcaa/tW c=1 sm=1 tr=0 ts=6aaa68c8 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=pGLkceISAAAA:8 a=Id3laG5OJmoZrSkAkcIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-JNJ: AAAAAAABvZ1zU6K/G0kmh3gx9mnSk+GGIEIl9NCggJTGPbK9Kms1dU9gd4nsDQzsPh8hydDcRHFMsDkTn28gB2JUMl2RL68IpeMgMUCSuaSThRI0G9Yywn5yXtcy/KRwGYxtXiD63mLFSXvfXJ2dpNwoIEE9XgsZpZULU/FcT3jvSZ4eYLt6dWCIEZPn2Nn/lEvyrFPBEP1Oh8tbJpC2DpR43yLlB6wVPAOtzy9zlRLlt6S8O7vjgW6B7hcllCBKCdeTZj7HCYnoYmDDFmRa94MmT3HR9axymhyJgmJxw9+4NzLsXoZSfisYlv5ayTmrMFYXIInM7hfqikMYEDRfDzuTyQ7+9wXm3zjKKvHY0QuE57+ulW9iLW/+P89HCY+JMDcfft74NyAy/mKT2NGkItRThhc3bfuJlF/ZR3zJNZbwUQTVGg83Bb70mGTTIJYbHyk9UZwTbiL+OFwtReHlUo5r9NhdKGTZ7GvJBdUSbtU8cOdjsSzJwpCeapPlfIY3xDW5tZVXLl6q5DqaSSLV3FKSe5Cb/NpPRSTAo9fpXqaHQ/Elc6N+2uBr8TxkrhBbzOCGR7QoNDqw1FXLH6d8DN/bjYjkBzKYhUmOVwvFpmes+mS8WZ5AYF0PINJeq4MzJBai8xC91g3n7Kfc4Ws7pswqoIkA5GFaCXeo+dmS44q9+iESsRa5BFrrXCgIqkFazgBLIgkHiWUHE0fbagvVucm5NJnv7vA5BVmJR3daKhz1BYqUC7INBwvGCIhI1NTmEWYPQ+1/zfi+OH2e3TRIP+W1CxhDUPNeTC0flQZgbylGcCUl53CElfkZHXwjJpU4PjtGtofVrGCBfdRtdw== 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::3f; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552948476158500 From: Lucas Amaral Add emulation for load/store pair instructions (DDI 0487 C3.3.14 -- C3.3.16). All addressing modes are covered: non-temporal (STNP/LDNP), post-indexed, signed offset, and pre-indexed. Instruction coverage: - STP/LDP (GPR): 32/64-bit pairs, all addressing modes - STP/LDP (SIMD/FP): 32/64/128-bit pairs, all addressing modes - LDPSW: sign-extending 32-bit pair load - STGP: store allocation tag pair (tag operation is NOP for MMIO) Signed-off-by: Lucas Amaral --- target/arm/emulate/a64-ldst.decode | 68 ++++++++++++++++++ target/arm/emulate/arm_emulate.c | 111 +++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) diff --git a/target/arm/emulate/a64-ldst.decode b/target/arm/emulate/a64-ld= st.decode index af6babe14a..f3de3f86cb 100644 --- a/target/arm/emulate/a64-ldst.decode +++ b/target/arm/emulate/a64-ldst.decode @@ -10,6 +10,9 @@ # 'u' flag: 0 =3D 9-bit signed immediate (byte offset), 1 =3D 12-bit unsig= ned (needs << sz) &ldst_imm rt rn imm sz sign w p unpriv ext u =20 +# Load/store pair (GPR and SIMD/FP) +&ldstpair rt2 rt rn imm sz sign w p + # Load/store register offset &ldst rm rn rt sign ext sz opt s =20 @@ -24,6 +27,9 @@ # Load/store unsigned offset (12-bit, handler scales by << sz) @ldst_uimm .. ... . .. .. imm:12 rn:5 rt:5 &ldst_imm u=3D1 unp= riv=3D0 p=3D0 w=3D0 =20 +# Load/store pair: imm7 is signed, scaled by element size in handler +@ldstpair .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair + # Load/store register offset @ldst .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst =20 @@ -128,6 +134,68 @@ STR_v_i 00 111 1 01 10 ............ ..... ....= . @ldst_uimm sign=3D LDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 LDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm= sign=3D0 ext=3D0 sz=3D4 =20 +### Load/store pair =E2=80=94 non-temporal (STNP/LDNP) + +# STNP/LDNP: offset only, no writeback. Non-temporal hint ignored. +STP 00 101 0 000 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +LDP 00 101 0 000 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +STP 10 101 0 000 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +LDP 10 101 0 000 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +STP_v 00 101 1 000 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +LDP_v 00 101 1 000 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +STP_v 01 101 1 000 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +LDP_v 01 101 1 000 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +STP_v 10 101 1 000 0 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D0 w=3D0 +LDP_v 10 101 1 000 1 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D0 w=3D0 + +### Load/store pair =E2=80=94 post-indexed + +STP 00 101 0 001 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D1 w=3D1 +LDP 00 101 0 001 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D1 w=3D1 +LDP 01 101 0 001 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D1 p=3D1 w=3D1 +STP 10 101 0 001 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D1 w=3D1 +LDP 10 101 0 001 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D1 w=3D1 +STP_v 00 101 1 001 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D1 w=3D1 +LDP_v 00 101 1 001 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D1 w=3D1 +STP_v 01 101 1 001 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D1 w=3D1 +LDP_v 01 101 1 001 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D1 w=3D1 +STP_v 10 101 1 001 0 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D1 w=3D1 +LDP_v 10 101 1 001 1 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D1 w=3D1 + +### Load/store pair =E2=80=94 signed offset + +STP 00 101 0 010 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +LDP 00 101 0 010 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +LDP 01 101 0 010 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D1 p=3D0 w=3D0 +STP 10 101 0 010 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +LDP 10 101 0 010 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +STP_v 00 101 1 010 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +LDP_v 00 101 1 010 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D0 +STP_v 01 101 1 010 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +LDP_v 01 101 1 010 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +STP_v 10 101 1 010 0 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D0 w=3D0 +LDP_v 10 101 1 010 1 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D0 w=3D0 + +### Load/store pair =E2=80=94 pre-indexed + +STP 00 101 0 011 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D1 +LDP 00 101 0 011 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D1 +LDP 01 101 0 011 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D1 p=3D0 w=3D1 +STP 10 101 0 011 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D1 +LDP 10 101 0 011 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D1 +STP_v 00 101 1 011 0 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D1 +LDP_v 00 101 1 011 1 ....... ..... ..... ..... @ldstpair = sz=3D2 sign=3D0 p=3D0 w=3D1 +STP_v 01 101 1 011 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D1 +LDP_v 01 101 1 011 1 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D1 +STP_v 10 101 1 011 0 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D0 w=3D1 +LDP_v 10 101 1 011 1 ....... ..... ..... ..... @ldstpair = sz=3D4 sign=3D0 p=3D0 w=3D1 + +### Load/store pair =E2=80=94 STGP (store allocation tag + pair) + +STGP 01 101 0 001 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D1 w=3D1 +STGP 01 101 0 010 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D0 +STGP 01 101 0 011 0 ....... ..... ..... ..... @ldstpair = sz=3D3 sign=3D0 p=3D0 w=3D1 + ### Load/store register =E2=80=94 register offset =20 # GPR diff --git a/target/arm/emulate/arm_emulate.c b/target/arm/emulate/arm_emul= ate.c index bf09e2a67b..6c63a0d0d1 100644 --- a/target/arm/emulate/arm_emulate.c +++ b/target/arm/emulate/arm_emulate.c @@ -122,6 +122,117 @@ static uint64_t load_extend(uint64_t val, int sz, int= sign, int ext) return val; } =20 +/* + * Load/store pair: STP, LDP, STNP, LDNP, STGP, LDPSW + * (DDI 0487 C3.3.14 -- C3.3.16) + */ + +static bool trans_STP(DisasContext *ctx, arg_ldstpair *a) +{ + int esize =3D 1 << a->sz; /* 4 or 8 bytes */ + int64_t offset =3D (int64_t)a->imm << a->sz; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; /* post-index: unmodified= base */ + uint8_t buf[16]; /* max 2 x 8 bytes */ + + uint64_t v1 =3D gpr_read(ctx, a->rt); + uint64_t v2 =3D gpr_read(ctx, a->rt2); + memcpy(buf, &v1, esize); + memcpy(buf + esize, &v2, esize); + + if (mem_write(ctx, va, buf, 2 * esize) !=3D 0) { + return true; + } + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + +static bool trans_LDP(DisasContext *ctx, arg_ldstpair *a) +{ + int esize =3D 1 << a->sz; + int64_t offset =3D (int64_t)a->imm << a->sz; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; + uint8_t buf[16]; + uint64_t v1 =3D 0, v2 =3D 0; + + if (mem_read(ctx, va, buf, 2 * esize) !=3D 0) { + return true; + } + memcpy(&v1, buf, esize); + memcpy(&v2, buf + esize, esize); + + /* LDPSW: sign-extend 32-bit values to 64-bit (sign=3D1, sz=3D2) */ + if (a->sign) { + v1 =3D sign_extend(v1, 8 * esize); + v2 =3D sign_extend(v2, 8 * esize); + } + + gpr_write(ctx, a->rt, v1); + gpr_write(ctx, a->rt2, v2); + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + +/* STGP: tag operation is a NOP for emulation; data stored via STP */ +static bool trans_STGP(DisasContext *ctx, arg_ldstpair *a) +{ + return trans_STP(ctx, a); +} + +/* + * SIMD/FP load/store pair: STP_v, LDP_v + * (DDI 0487 C3.3.14 -- C3.3.16) + */ + +static bool trans_STP_v(DisasContext *ctx, arg_ldstpair *a) +{ + int esize =3D 1 << a->sz; /* 4, 8, or 16 bytes */ + int64_t offset =3D (int64_t)a->imm << a->sz; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; + uint8_t buf[32]; /* max 2 x 16 bytes */ + + fpreg_read(ctx, a->rt, buf, esize); + fpreg_read(ctx, a->rt2, buf + esize, esize); + + if (mem_write(ctx, va, buf, 2 * esize) !=3D 0) { + return true; + } + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + +static bool trans_LDP_v(DisasContext *ctx, arg_ldstpair *a) +{ + int esize =3D 1 << a->sz; + int64_t offset =3D (int64_t)a->imm << a->sz; + uint64_t base =3D base_read(ctx, a->rn); + uint64_t va =3D a->p ? base : base + offset; + uint8_t buf[32]; + + if (mem_read(ctx, va, buf, 2 * esize) !=3D 0) { + return true; + } + + fpreg_write(ctx, a->rt, buf, esize); + fpreg_write(ctx, a->rt2, buf + esize, esize); + + if (a->w) { + base_write(ctx, a->rn, base + offset); + } + return true; +} + /* Load/store single -- immediate (GPR) (DDI 0487 C3.3.8 -- C3.3.13) */ =20 static bool trans_STR_i(DisasContext *ctx, arg_ldst_imm *a) --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552965; cv=none; d=zohomail.com; s=zohoarc; b=PpWNZEXHC4JrCBZQzXz05pTxyYRX88pkO+4oYUOddRdcibpv2Xrc/pJeVTbefss8P4KQ4abMgbblgXvtG6fEDJgUYeHimqqCihjchxVtK+ewmcM6gXQ1Ey1wE31GRF1OgKBjQ9zRt8Ev7bVAc1B4gWW6apq0Y6hk+61Qtfm+BZE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552965; h=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=Vd967nqTBhrEi2kDcB3CUx3ds/jf5dl62DCQCUC6cT0=; b=dHd/gFJgAEHUxTpr1yPLvSiSqZQ1Q9C/B8GljRhxJFhOxpqUjj8+jP2PNQbcKLYiwKzlpmY/ZKaYzjXGxATYgsjcNDUSiHFvkiTtQuEVfZJtUJAIFIa2/DbB+zkRmhdKEHY3XoZJEWYXAGJCYXk3yMOASuQMH5ACr1RjlqK5UpE= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789552965036488.7757782419767; Wed, 16 Sep 2026 03:02:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mRr-0008CG-4y; Wed, 16 Sep 2026 06:01:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRg-00087s-G2 for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:54 -0400 Received: from qs-2003c-snip6-11.eps.apple.com ([2a01:b747:3006:204::21] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRa-0005E4-Kv for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:49 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id E071518009F1; Wed, 16 Sep 2026 10:00:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id 5A5BA180010A; Wed, 16 Sep 2026 10:00:38 +0000 (UTC) X-ICL-RepId: 01a0a9a9-5052-7ae2-a645-d6cbbd5d202d X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0ISxMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpeHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552844; x=1792144844; bh=Vd967nqTBhrEi2kDcB3CUx3ds/jf5dl62DCQCUC6cT0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=KT9NiyAsRXVGsDjQJ0q2tsp2xM4DbdSzDbrEo2G5X/bmHVJqCWFBelSrpy2Z8kvANxjXG3UOC+n9SF6L/k2iibKjbS+fek/uT6jcRNgpCtwvtsevtTjsXtKstfY7X6Ocy8Hf5XEGVnQJglZDSL9jpSeJ8a4PEwQT7GUE6H3nEW0OxE1rwSBat2O6j7XaMFZPxfA7695pWPjcsoel23suqHxxSqnjAjlslwxRERDQqg+PruUSxzfbOBE/zn0HmvTojPICMBfvHj4BYWa8pfG1pnJ0LcUoGvqLjaeCawHKvsYr0fht6Qq9xbZ3kkZ721DjrN44IYDFZXOOLwIqCU38MQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini , Lucas Amaral Subject: [RFC PATCH v8 04/10] target/arm/hvf, whpx: wire ISV=0 emulation for data aborts Date: Wed, 16 Sep 2026 12:00:12 +0200 Message-ID: <20260916100021.73825-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX0MwwonVxIjHU /tr7zs1mZEGwdf99wTMHXFwj8+QhkwKVzCLCMNgRmVmKPleNY9/ImWwwY3T8V24MsaxWAlFYAGE dJkOTX/FZ+5N9ymwHyuq8dDreaCY8sJFxfOV44hUdgnF9XrzpmaSAAAajEgxYNZaVwdMFe5AgYT jUfwXR8wLSpCrB1E74iWDSvrA0m+XP2L2CbmVU6bRH5DK9e5tFCSu2K10F2aFvzySiSquU/fwuW bH0DyDg7mcZhhL8jDNcjrtRlYMjMXdBZqc8tbQCUb4upXbr//2ceAtk9GWVid/3UvZN8073BZGF 9Ugkyi8ldGK+yWdbRrhN7oAQ/W9Ig+29WjWOmgOmT3IogMkInoCBOAVwAQt1P8= X-Authority-Info-Out: v=2.4 cv=TaybdBQh c=1 sm=1 tr=0 ts=6aaa68ca cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=pGLkceISAAAA:8 a=1-PEhprmmTEWANFiw-YA:9 X-Proofpoint-GUID: UQojr-6vxKyqjNhtfji93Z-vJNrclCBq X-Proofpoint-ORIG-GUID: UQojr-6vxKyqjNhtfji93Z-vJNrclCBq X-JNJ: AAAAAAABW0TIoUwbnb2/Y4BHNHHZJwYj3XHB1AE9bA1WaBE3owluuHG9gpFhgRkiDwqGwytzG34sg6AStCblyQk9S7MEF4yQsVgesR3jqFD/XqAuhnfOEj2MC90zSU0n5YfHh09voJ0C8MVODVhRLF0UofpVxP0WyD8Wym801CA6mXa9sHYZ5orlLQBQrc+y+OXVeQN5vkeSLBXaU/lLOSKumpSoo/GxHdc7LL4gogdQuTOgQ7LYk3NHmCHlJEqE+dLbCknyKYz0AO6hc3T5OJ9Sh07miUk+miCRdwiVUFtj+oQa6qgh+CJH45pLCL5mIumwH8ngjKdcBmGwfIuxdkmc0ODP1ziirHGXy9DyBDXrx7s5m/QeHJiAAZRlz+TLXdWzO2AhWZN6+jF4mDawxxyv6lYhVupQkdhUTgRWA/4ZHGicQTAfHqqj0BQIcTGTZTk2L+N4bDyQJHpUrlWgpka+E1LcgJKsmc6hlct+MBJubU475mdrnNRvKcpBuoSrbwJ+8SlQ3lZAP6l6E78ZwbxpyhzeL3wGAY8c5UbdZ+hs3C/8nuAB+HjisbFTyumtOs5Bs+ZCa6F/95zzCea8gf5jiVof5fH3QUIca1bxIJg+1NzAiEvMUZs7B1sI4o5Lb29++nBj6FkbbOpo/1B+ojO/21yQtygBgDj2/2WwqosjaghPUPNf3r8fVYgpDAAZZGEXYqRMArobfT3ZwTSgPOleqba9+Wn3YToOzFzqht0cJT0bvMeaA34/ZH6KwzXTJJMi4QN7RQAXbH5BvpUjstDhlFdmzmVFJGW7WvoGJ1Jq1IPlLLlsNooSyrJZZNfSV1nmUq9QiZB1P1VeKAQWs7EZel/4nj+U/BzlwvU= 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::21; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552965646158500 Content-Type: text/plain; charset="utf-8" From: Lucas Amaral When a data abort with ISV=3D0 occurs during MMIO emulation, the syndrome register does not carry the access size or target register. Previously this hit an assert(isv) and killed the VM. Replace the assert with instruction fetch + decode + emulate using the shared library in target/arm/emulate/. The faulting instruction is read from guest memory via cpu_memory_rw_debug(), decoded by the decodetree- generated decoder, and emulated against the vCPU register file. Both HVF (macOS) and WHPX (Windows Hyper-V) use the same pattern: 1. cpu_synchronize_state() to flush hypervisor registers 2. Fetch 4-byte instruction at env->pc 3. arm_emul_insn(env, insn) 4. On success, advance PC past the emulated instruction If the instruction is unhandled or a memory error occurs, a synchronous external abort is injected into the guest via syn_data_abort_no_iss() with fnv=3D1 and fsc=3D0x10, matching the syndrome that KVM uses in kvm_inject_arm_sea(). The guest kernel's fault handler then reports the error through its normal data abort path. WHPX adds a whpx_inject_data_abort() helper and adjusts the whpx_handle_mmio() return convention so the caller skips PC advancement when an exception has been injected. Signed-off-by: Lucas Amaral --- target/arm/hvf/hvf.c | 46 ++++++++++++++++++++++++++-- target/arm/whpx/whpx-all.c | 61 +++++++++++++++++++++++++++++++++++++- 2 files changed, 103 insertions(+), 4 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index b00a7e1a84..a087e920e9 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -34,6 +34,7 @@ #include "arm-powerctl.h" #include "target/arm/cpu.h" #include "target/arm/internals.h" +#include "emulate/arm_emulate.h" #include "target/arm/multiprocessing.h" #include "target/arm/gtimer.h" #include "target/arm/trace.h" @@ -2441,10 +2442,49 @@ static int hvf_handle_exception(CPUState *cpu, hv_v= cpu_exit_exception_t *excp) assert(!s1ptw); =20 /* - * TODO: ISV will be 0 for SIMD or SVE accesses. - * Inject the exception into the guest. + * ISV=3D0: syndrome doesn't carry access size/register info. + * Fetch and emulate via target/arm/emulate/. */ - assert(isv); + if (!isv) { + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + uint32_t insn; + ArmEmulResult r; + + cpu_synchronize_state(cpu); + + if (cpu_memory_rw_debug(cpu, env->pc, + (uint8_t *)&insn, 4, false) !=3D 0) { + bool same_el =3D arm_current_el(env) =3D=3D 1; + uint32_t esr =3D syn_data_abort_no_iss(same_el, + 1, 0, 0, 0, iswrite, 0x10); + + error_report("HVF: cannot read insn at pc=3D0x%" PRIx64, + (uint64_t)env->pc); + env->exception.vaddress =3D excp->virtual_address; + hvf_raise_exception(cpu, EXCP_DATA_ABORT, esr, 1); + break; + } + + r =3D arm_emul_insn(env, insn); + if (r =3D=3D ARM_EMUL_UNHANDLED || r =3D=3D ARM_EMUL_ERR_MEM) { + bool same_el =3D arm_current_el(env) =3D=3D 1; + uint32_t esr =3D syn_data_abort_no_iss(same_el, + 1, 0, 0, 0, iswrite, 0x10); + + error_report("HVF: ISV=3D0 %s insn 0x%08x at " + "pc=3D0x%" PRIx64 ", injecting data abort", + r =3D=3D ARM_EMUL_UNHANDLED ? "unhandled" + : "memory error", + insn, (uint64_t)env->pc); + env->exception.vaddress =3D excp->virtual_address; + hvf_raise_exception(cpu, EXCP_DATA_ABORT, esr, 1); + break; + } + + advance_pc =3D true; + break; + } =20 /* * Emulate MMIO. diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index d106400686..c916df35a7 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -29,6 +29,7 @@ #include "syndrome.h" #include "target/arm/cpregs.h" #include "internals.h" +#include "emulate/arm_emulate.h" =20 #include "system/whpx-internal.h" #include "system/whpx-accel-ops.h" @@ -350,6 +351,27 @@ static void whpx_set_gp_reg(CPUState *cpu, int rt, uin= t64_t val) whpx_set_reg(cpu, reg, reg_val); } =20 +/* + * Inject a synchronous external abort (data abort) into the guest. + * Used when ISV=3D0 instruction emulation fails. Matches the syndrome + * that KVM uses in kvm_inject_arm_sea(). + */ +static void whpx_inject_data_abort(CPUState *cpu, bool iswrite) +{ + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + bool same_el =3D arm_current_el(env) =3D=3D 1; + uint32_t esr =3D syn_data_abort_no_iss(same_el, 1, 0, 0, 0, iswrite, 0= x10); + + cpu->exception_index =3D EXCP_DATA_ABORT; + env->exception.target_el =3D 1; + env->exception.syndrome =3D esr; + + bql_lock(); + arm_cpu_do_interrupt(cpu); + bql_unlock(); +} + static int whpx_handle_mmio(CPUState *cpu, WHV_MEMORY_ACCESS_CONTEXT *ctx) { uint64_t syndrome =3D ctx->Syndrome; @@ -365,7 +387,40 @@ static int whpx_handle_mmio(CPUState *cpu, WHV_MEMORY_= ACCESS_CONTEXT *ctx) =20 assert(syn_get_ec(syndrome) =3D=3D EC_DATAABORT); assert(!cm); - assert(isv); + + /* + * ISV=3D0: syndrome doesn't carry access size/register info. + * Fetch and decode the faulting instruction via the emulation library. + */ + if (!isv) { + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + uint32_t insn; + ArmEmulResult r; + + cpu_synchronize_state(cpu); + + if (cpu_memory_rw_debug(cpu, env->pc, + (uint8_t *)&insn, 4, false) !=3D 0) { + error_report("WHPX: cannot read insn at pc=3D0x%" PRIx64, + (uint64_t)env->pc); + whpx_inject_data_abort(cpu, iswrite); + return 1; + } + + r =3D arm_emul_insn(env, insn); + if (r =3D=3D ARM_EMUL_UNHANDLED || r =3D=3D ARM_EMUL_ERR_MEM) { + error_report("WHPX: ISV=3D0 %s insn 0x%08x at " + "pc=3D0x%" PRIx64 ", injecting data abort", + r =3D=3D ARM_EMUL_UNHANDLED ? "unhandled" + : "memory error", + insn, (uint64_t)env->pc); + whpx_inject_data_abort(cpu, iswrite); + return 1; + } + + return 0; + } =20 if (iswrite) { val =3D whpx_get_gp_reg(cpu, srt); @@ -451,6 +506,10 @@ int whpx_vcpu_run(CPUState *cpu) } =20 ret =3D whpx_handle_mmio(cpu, &vcpu->exit_ctx.MemoryAccess); + if (ret > 0) { + advance_pc =3D false; + ret =3D 0; + } break; case WHvRunVpExitReasonCanceled: cpu->exception_index =3D EXCP_INTERRUPT; --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552961; cv=none; d=zohomail.com; s=zohoarc; b=Z00y3U41ASYoZV7urJ6ybhwkTrCc5d4oORz97gmzu7grzcrw4CR4S6MP8GpYYvhxMw49OXHBwAVjDdluMzfo8rpj54QXGcrQGzGIsxTGsyrOpx3qnNN263yQdITYrEKevvctblX2R4RcZsuaNlpzt0mVQKNoBmohJHLMs9oDaDY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552961; h=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=X43fhFYPtF0mjqJMmFhMIodO6U95ZjocBPYULWRQocY=; b=hhLW+YJJyXlnPBUOKYuzBx8AqGpHDG0N9ay/kP/6xybxU7DeMn+mSMwXFfDx04tFiqCfmczihssp+Oox9iY7JtvhK1GRgmzxvD5B5mh3njeyJMZibnSY//8A0cSXO4fuOXKtq+2tjM84Gf/vW5d5PKGvVW9foSr4PpQl0KYaaDQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789552961845801.7321063665643; Wed, 16 Sep 2026 03:02:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mRo-0008BG-SW; Wed, 16 Sep 2026 06:01:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRg-00087o-Fe for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:54 -0400 Received: from qs-2003c-snip6-11.eps.apple.com ([2a01:b747:3006:204::21] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRa-0005EP-TE for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:50 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id 3641418009FE; Wed, 16 Sep 2026 10:00:42 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id 190DC18000BF; Wed, 16 Sep 2026 10:00:40 +0000 (UTC) X-ICL-RepId: 01a0a9a9-5595-7a0e-b009-edd138a9faa8 X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0IShMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpdHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552845; x=1792144845; bh=X43fhFYPtF0mjqJMmFhMIodO6U95ZjocBPYULWRQocY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=QRWFJb+ppjsbu/cxRq+foxEmywxyHAqZqMKo4D61ygGIqTrb75iRyjaS5YfUg6O5PPKz1mx9CVKj2Ao+Jh9OrMIvns5FxOZWLTzDdlxipldoJWta1RG7QmlvikVS8hde/iM5n86elXjmMCgR7s6xCOepIB+NYffFXoODYn7Zwov8BD49zcQsQM8JO79f6vMNE/UFixGyDVcpS91J86kxlob0bzi0JvA4wGurGtI4p0KSeLLcgRqaGY/jtq7aBubSIZIiY0iqwOJQx6QTNOFGNX6ovX9y2+EyPGsmtw9Qrbdz++EICTbWvr2Po9kr4a640U2hVHwEA1rToI93RSEsZQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini Subject: [RFC PATCH v8 05/10] vmapple: apple-gfx: make it work on the latest macOS release Date: Wed, 16 Sep 2026 12:00:13 +0200 Message-ID: <20260916100021.73825-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX3l0axmXKeZSI Dx1nv3vJ5B3OokI4gdjv2TZUshQY+flVAagHvRhHMafLhoMlSzkdOVwx+mK8FJ+pFCTubC6Su2P Fl0loInVUDieW/KO0nJZd46haf7xUnP9Wnij43acigO8hpvh+YIVzPsD/OaG9KKESw1VibCIhX9 112Lf7GD9Xhi7b+99oJG5jtvbyXWk7ky2Ll4yjGicIznlhvQ6yHb+ZaJGEOuaI4EmcSjC0M9hqo f0Rls0VPot5SwD91IGxFLarQ2avkyA+EmrW2L74c6EjnJEJWiireQXu87NmqlAQ8aCriZH2+dk3 /nyuh/L+ZUP86Y6wDljVMMOl99m8XOTnnuwDjK7H3d338vYIPykQYmK/Is9hPI= X-Authority-Info-Out: v=2.4 cv=f51FxeyM c=1 sm=1 tr=0 ts=6aaa68cb cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=XaNHVGzJZ3ayr3Wv:21 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=_6z4mGRrJ5MUOnpCZZoA:9 X-Proofpoint-GUID: 2XJXUsEPn1Kp8y9Dd8iWsHjbOmsgSWfd X-Proofpoint-ORIG-GUID: 2XJXUsEPn1Kp8y9Dd8iWsHjbOmsgSWfd X-JNJ: AAAAAAAB3BVlHVz2hRU3b06Ye63weOhbJ+o3srlVAZsbBAeSccthi9IYotdfkj5uxuZmXIWemwXKA2j17XAmeXcAv49qRRiEGhuEVTR/ZC7lHl1ce6dHskjV0wSyJztt0HAHAGyEpoSXa37Gzk7NEyDuZ0vjxhDCjYPmEk1kQXXowL2Wv9GBfy0Krk4/LhN7db2jMERGRnh1sYsJDx08JiocmvhOXEzLD99vJC/LxZxCoW1a7HRiSNqvV5pxzQtKZYHdErNsHwTQZZ8f7NnnPOR87MZ1iigsypfYj9l5MOgVPcntzAVRlVLQcAO9xSJM+xD8NSiYkKfcNMLTZwiQvT6USslYJHKTdOvOdlSqkGV30gz5u3L61LOh2q2S6B9EchRvoYAhBuJSVQwcRI+AeSzil/SPJ0nntPkxzBloPtB6LBdpCtUhsGK5uJGWILkd2n2pVBUXzIbQZiQ8anqb5eMzyHBxRl1u15l+4+8pybXuv28+n63gjpZjdy3qofrRthgxe3nk7QskQ2COSQy3ESDY0rTKD5Qodf73V18REyT243f+p+RQvhdqjnhQB6aDrK2QqII0dvaiiUzSheG0kGa4ePHGQBNa/MN1kUdbLcNQSJXj1Sv7Seziu070m/aUllkQPn2hjeHHcQ643ERSzU7UKP1OMxrhJfnVbTXwt7xtH2EObnHZk4auWNVBK/jvYdvdRiQB5RK/cz29DV1Te4zIfC4LdCGlAETO5qZLR2opozhRxc5RipVToy2tsLh2Jumzwo9jMqp1Nfbt+dLXSmXKiCIcKo2HmLnwuxrXiC6G3cYvD2awcQb9Cgll0JODuwwfu6oBiZR8PXpYY1L+1LZBtfg9kthLgz/YJucf1QrVB+NvtsE= 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::21; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552964060158500 Content-Type: text/plain; charset="utf-8" Follow changes in memory management introduced on macOS 15.4. The legacy memory management API has been removed for the IOSurface mapper = on that macOS version. Also enable process isolation for a sandboxed GPU process when on a new OS. Signed-off-by: Mohamed Mediouni --- hw/display/apple-gfx-mmio.m | 58 ++++++++++++++++++------ hw/display/apple-gfx.h | 16 +++++++ hw/display/apple-gfx.m | 90 ++++++++++++++++++++++++++++++++----- 3 files changed, 138 insertions(+), 26 deletions(-) diff --git a/hw/display/apple-gfx-mmio.m b/hw/display/apple-gfx-mmio.m index 58beaadd1f..19e2d38a1e 100644 --- a/hw/display/apple-gfx-mmio.m +++ b/hw/display/apple-gfx-mmio.m @@ -19,6 +19,7 @@ #include "hw/core/irq.h" #include "apple-gfx.h" #include "trace.h" +#include "system/address-spaces.h" =20 #import =20 @@ -36,12 +37,19 @@ typedef bool(^IOSFCMapMemory)(uint64_t phys, uint64_t l= en, bool ro, void **va, =20 @interface PGDeviceDescriptor (IOSurfaceMapper) @property (readwrite, nonatomic) bool usingIOSurfaceMapper; +@property (readwrite, nonatomic) bool enableArgumentBuffers; +@property (readwrite, nonatomic) bool enableProcessIsolation; +@property (readwrite, nonatomic) bool enableProtectedContent; + +@property (readwrite, nonatomic, copy, nullable) PGMemoryMapDescriptor* me= moryMapDescriptor; @end =20 @interface PGIOSurfaceHostDeviceDescriptor : NSObject -(PGIOSurfaceHostDeviceDescriptor *)init; @property (readwrite, nonatomic, copy, nullable) IOSFCMapMemory mapMemory; @property (readwrite, nonatomic, copy, nullable) IOSFCUnmapMemory unmapMem= ory; +@property (readwrite, nonatomic, copy, nullable) PGMemoryMapDescriptor* me= moryMapDescriptor; +@property (readwrite, nonatomic) unsigned long long mmioLength; @property (readwrite, nonatomic, copy, nullable) IOSFCRaiseInterrupt raise= Interrupt; @end =20 @@ -183,19 +191,32 @@ static bool apple_gfx_mmio_unmap_surface_memory(void = *ptr) [PGIOSurfaceHostDeviceDescriptor new]; PGIOSurfaceHostDevice *iosfc_host_dev; =20 - iosfc_desc.mapMemory =3D - ^bool(uint64_t phys, uint64_t len, bool ro, void **va, void *e, vo= id *f) { - *va =3D apple_gfx_mmio_map_surface_memory(phys, len, ro); - - trace_apple_gfx_iosfc_map_memory(phys, len, ro, va, e, f, *va); - - return *va !=3D NULL; - }; - - iosfc_desc.unmapMemory =3D - ^bool(void *va, void *b, void *c, void *d, void *e, void *f) { - return apple_gfx_mmio_unmap_surface_memory(va); - }; + /* + * The legacy memory management API is no longer present + * for the IOSurface mapper as of macOS 15.4. + */ + if (@available(macOS 15.4, *)) { + PGMemoryMapDescriptor *memory_map_descriptor =3D [PGMemoryMapDescr= iptor new]; + FlatView* fv =3D address_space_to_flatview(&address_space_memory); + flatview_for_each_range(fv, apple_gfx_register_memory_cb, memory_m= ap_descriptor); + /* the device model defines this as a single-page MMIO region, hen= ce 16KB */ + iosfc_desc.mmioLength =3D 0x10000; + iosfc_desc.memoryMapDescriptor =3D memory_map_descriptor; + } else { + iosfc_desc.mapMemory =3D + ^bool(uint64_t phys, uint64_t len, bool ro, void **va, void *e= , void *f) { + *va =3D apple_gfx_mmio_map_surface_memory(phys, len, ro); + + trace_apple_gfx_iosfc_map_memory(phys, len, ro, va, e, f, = *va); + + return *va !=3D NULL; + }; + + iosfc_desc.unmapMemory =3D + ^bool(void *va, void *b, void *c, void *d, void *e, void *f) { + return apple_gfx_mmio_unmap_surface_memory(va); + }; + } =20 iosfc_desc.raiseInterrupt =3D ^bool(uint32_t vector) { trace_apple_gfx_iosfc_raise_irq(vector); @@ -223,13 +244,22 @@ static void apple_gfx_mmio_realize(DeviceState *dev, = Error **errp) }; =20 desc.usingIOSurfaceMapper =3D true; - s->pgiosfc =3D apple_gfx_prepare_iosurface_host_device(s); + /*=20 + * Process isolation needs PGMemoryMapDescriptor instead of + * the legacy memory management interface present in releases + * older than macOS 15.4. + */ + if (@available(macOS 15.4, *)) { + desc.enableProcessIsolation =3D true; + } =20 if (!apple_gfx_common_realize(&s->common, dev, desc, errp)) { [s->pgiosfc release]; s->pgiosfc =3D nil; } =20 + s->pgiosfc =3D apple_gfx_prepare_iosurface_host_device(s); + [desc release]; desc =3D nil; } diff --git a/hw/display/apple-gfx.h b/hw/display/apple-gfx.h index 3197bd853d..384aee0c5f 100644 --- a/hw/display/apple-gfx.h +++ b/hw/display/apple-gfx.h @@ -12,6 +12,7 @@ #include "system/memory.h" #include "hw/core/qdev-properties.h" #include "ui/surface.h" +#include "objc/NSObject.h" =20 #define TYPE_APPLE_GFX_MMIO "apple-gfx-mmio" #define TYPE_APPLE_GFX_PCI "apple-gfx-pci" @@ -23,6 +24,17 @@ @protocol MTLTexture; @protocol MTLCommandQueue; =20 +typedef struct PGGuestPhysicalRange_s +{ + uint64_t physicalAddress; + uint64_t physicalLength; + void *hostAddress; +} PGGuestPhysicalRange_t; + +@interface PGMemoryMapDescriptor : NSObject +-(void)addRange:(PGGuestPhysicalRange_t) range; +@end + typedef QTAILQ_HEAD(, PGTask_s) PGTaskList; =20 typedef struct AppleGFXDisplayMode { @@ -68,6 +80,10 @@ void *apple_gfx_host_ptr_for_gpa_range(uint64_t guest_ph= ysical, uint64_t length, bool read_only, MemoryRegion **mapping_in_region); =20 +bool apple_gfx_register_memory_cb(Int128 start, Int128 len, + const MemoryRegion *mr, + hwaddr offset_in_region, void *opaque); + extern const PropertyInfo qdev_prop_apple_gfx_display_mode; =20 #endif diff --git a/hw/display/apple-gfx.m b/hw/display/apple-gfx.m index be0061b9db..4ef8f6dbf3 100644 --- a/hw/display/apple-gfx.m +++ b/hw/display/apple-gfx.m @@ -21,6 +21,7 @@ #include "system/address-spaces.h" #include "system/dma.h" #include "migration/blocker.h" +#include "system/memory.h" #include "ui/console.h" #include "apple-gfx.h" #include "trace.h" @@ -79,6 +80,7 @@ static dispatch_queue_t get_background_queue(void) GPtrArray *mapped_regions; }; =20 +API_OBSOLETED("Legacy ParavirtualizedGraphics", macos(11.0, 27.0, 27.0))=20 static PGTask_t *apple_gfx_new_task(AppleGFXState *s, uint64_t len) { mach_vm_address_t task_mem; @@ -102,6 +104,7 @@ static dispatch_queue_t get_background_queue(void) return task; } =20 +API_OBSOLETED("Legacy ParavirtualizedGraphics", macos(11.0, 27.0, 27.0)) static void apple_gfx_destroy_task(AppleGFXState *s, PGTask_t *task) { GPtrArray *regions =3D task->mapped_regions; @@ -151,6 +154,7 @@ static void apple_gfx_destroy_task(AppleGFXState *s, PG= Task_t *task) return host_ptr; } =20 +API_OBSOLETED("Legacy ParavirtualizedGraphics", macos(11.0, 27.0, 27.0)) static bool apple_gfx_task_map_memory(AppleGFXState *s, PGTask_t *task, uint64_t virtual_offset, PGPhysicalMemoryRange_t *ranges, @@ -207,6 +211,7 @@ static bool apple_gfx_task_map_memory(AppleGFXState *s,= PGTask_t *task, return success; } =20 +API_OBSOLETED("Legacy ParavirtualizedGraphics", macos(11.0, 27.0, 27.0)) static void apple_gfx_task_unmap_memory(AppleGFXState *s, PGTask_t *task, uint64_t virtual_offset, uint64_t = length) { @@ -596,6 +601,36 @@ void apple_gfx_common_init(Object *obj, AppleGFXState = *s, const char* obj_name) /* TODO: PVG framework supports serialising device state: integrate it= ! */ } =20 +@interface PGDeviceDescriptor (IOSurfaceMapper) +@property (readwrite, nonatomic, copy, nullable) PGMemoryMapDescriptor* me= moryMapDescriptor; +@end + +bool apple_gfx_register_memory_cb(Int128 start, Int128 len, + const MemoryRegion *mr, + hwaddr offset_in_region, void *opaque) { + PGGuestPhysicalRange_t range; + PGMemoryMapDescriptor *memory_map_descriptor =3D opaque; + if (memory_access_is_direct(mr, true, MEMTXATTRS_UNSPECIFIED)) { + range.physicalAddress =3D start; + range.physicalLength =3D len; + range.hostAddress =3D memory_region_get_ram_ptr(mr); + [memory_map_descriptor addRange:range]; + } + return false; +} + +static void apple_gfx_register_memory(AppleGFXState *s, + PGDeviceDescriptor *d= esc) +{ + PGMemoryMapDescriptor* memoryMapDescriptor =3D [PGMemoryMapDescriptor = new]; + + FlatView* fv =3D address_space_to_flatview(&address_space_memory); + flatview_for_each_range(fv, apple_gfx_register_memory_cb, memoryMapDes= criptor); + + desc.memoryMapDescriptor =3D memoryMapDescriptor; +} + +API_OBSOLETED("Legacy ParavirtualizedGraphics", macos(11.0, 27.0, 27.0)) static void apple_gfx_register_task_mapping_handlers(AppleGFXState *s, PGDeviceDescriptor *d= esc) { @@ -667,16 +702,25 @@ static void new_frame_handler_bh(void *opaque) BQL_LOCK_GUARD(); set_mode(s, sizeInPixels.x, sizeInPixels.y); }; - disp_desc.cursorGlyphHandler =3D ^(NSBitmapImageRep *glyph, - PGDisplayCoord_t hotspot) { - AppleGFXSetCursorGlyphJob *job =3D g_malloc0(sizeof(*job)); - job->s =3D s; - job->glyph =3D glyph; - job->hotspot =3D hotspot; - [glyph retain]; - aio_bh_schedule_oneshot(qemu_get_aio_context(), - set_cursor_glyph, job); - }; + + if (@available(macOS 27.0, *)) { + + } else { +#ifndef __MAC_27_0 + disp_desc.cursorGlyphHandler =3D ^(NSBitmapImageRep *glyph, + PGDisplayCoord_t hotspot) { + AppleGFXSetCursorGlyphJob *job =3D g_malloc0(sizeof(*job)); + job->s =3D s; + job->glyph =3D glyph; + job->hotspot =3D hotspot; + [glyph retain]; + aio_bh_schedule_oneshot(qemu_get_aio_context(), + set_cursor_glyph, job); + }; +#else + abort(); +#endif + } disp_desc.cursorShowHandler =3D ^(BOOL show) { trace_apple_gfx_cursor_show(show); qatomic_set(&s->cursor_show, show); @@ -763,11 +807,33 @@ bool apple_gfx_common_realize(AppleGFXState *s, Devic= eState *dev, =20 desc.device =3D s->mtl; =20 - apple_gfx_register_task_mapping_handlers(s, desc); + /*=20 + * The legacy memory management interface doesn't allow for + * vGPU sandboxing. As such, always use the new interface + * on macOS 15.4 onwards.=20 + */ + if (@available(macOS 15.4, *)) { + apple_gfx_register_memory(s, desc); + } else { +#ifndef __MAC_27_0 + apple_gfx_register_task_mapping_handlers(s, desc); +#else + abort(); +#endif + } =20 s->cursor_show =3D true; =20 - s->pgdev =3D PGNewDeviceWithDescriptor(desc); + if (@available(macOS 15.2, *)) { + s->pgdev =3D PGCreateDeviceWithDescriptor(desc); + } + else { +#ifndef __MAC_27_0 + s->pgdev =3D PGNewDeviceWithDescriptor(desc); +#else + abort(); +#endif + } =20 disp_desc =3D apple_gfx_prepare_display_descriptor(s); /* --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552943; cv=none; d=zohomail.com; s=zohoarc; b=KiMCRC6uAUY1aopxOBY/zNlsT2+/VRj19oAwa8l7EN95LMEHKhFBLcqwwLjrrrKyD+H9mbdfVPTz/h/buxaYaaVKYDJBjVO66JxuHD4CgyVGAoORs1/6ZXwLUbenPRAo6zJ1WE7NUrBLuYyb5/lS8aUhmyaDCZtpwAVGphIQERc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552943; h=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=KDf2DTW4By7UOzCqNMWGATcGpPtR9PyeQLUVDbCPI44=; b=lAtXm14CbNCKHUORqP0nTfs0ApTrvN/X4t5/h1je7FX52PUdPp/rwdjz8OZNiFc/EQ2I38/VSHGl0dKhAVCJXghM1RFzWZnzQz2TdMugvu2ifgPl9v5lf6iBH7RTO5FW59ADlChbCaqs0khOu5ZLrEojj/UlR684a5ISmMw/95c= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789552943217361.9981090006918; Wed, 16 Sep 2026 03:02:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mSA-0008Of-Kh; Wed, 16 Sep 2026 06:01:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRh-000884-Kk for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:56 -0400 Received: from qs-2003j-snip6-1.eps.apple.com ([2a01:b747:3006:204::5e] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRe-0005Eb-H2 for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:53 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id D4E831800BC5; Wed, 16 Sep 2026 10:00:43 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id B21F518009F4; Wed, 16 Sep 2026 10:00:41 +0000 (UTC) X-ICL-RepId: 01a0a9a9-5bff-7cb3-b7cd-d334028d275d X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0IShMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpcHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552846; x=1792144846; bh=KDf2DTW4By7UOzCqNMWGATcGpPtR9PyeQLUVDbCPI44=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=pJpQCW9VGXYCgN/eUJERmFaN24JmF0FI8OsGq2dKy6GtW8lSPSnv/AfuLleTlji1lI/v1yFPJYAjLPCit/kvxi8p7jvqxsNHb/FUYFmMQ8Saq4dpDw5m3SRI4CjiH+z9/OPsDVCEjO3F/2yXHJgtowwSB5EGdskZhDXoQYvnOx4+FiMew7JY6dNgl7NYiYI8jq8Mx7C7OOUrlTaUR+kZi2Y9TTxhOhpB6xre3EskxzAYnEHW8bcxqlrSnzil4cuPeyTSt4W2fshk632MXx90BKSTCUM78vmfl77Eq8UFYc653x23/+pAbe0d+Y0dm24t89EcCaFNS302Scux2w5zXQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini Subject: [RFC PATCH v8 06/10] hw/vmapple: aes: convert MAX_LEN to a #define Date: Wed, 16 Sep 2026 12:00:14 +0200 Message-ID: <20260916100021.73825-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=B9G0EetM c=1 sm=1 tr=0 ts=6aaa68cd cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=CNpkFlK3StMqgsPjqO8A:9 X-Proofpoint-ORIG-GUID: 4-ccaC-8I-h1vjB8vBubo6DDJYDpmUrJ X-Proofpoint-GUID: 4-ccaC-8I-h1vjB8vBubo6DDJYDpmUrJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX9ioFqSTqtDfM 0WSwI6zRKLPBF72zIusk5eorsjwx2MHL9J1E0anxwz/haFIsyw9/mc2hrZ8f5pBDGzPbkPqy3Qu XW9XvHkAwIXM7MhqbiWJAhu7PL7XyQCasyykqejxUk2olMkM/qQEguYJJC/a8FEeUthK++C6CEN ObPlfprY6jWTwgTES1iHpk6XXjlh/8aCcHOtRJ/+l68p0BJH1cFOMVTnp9nZ05ZRJgMQihpPLjk R7En31A15I+SFejsalMhs6/57DkFONVbx33C7rO50tvsOPk4kU0HmwV5wA810I26oUEkaoCvcKN H/IAWB56ONJNgIZhZ65mRQS1FbFlbxlBKpTwDmWoq2AK050sS+lrVieX4pguVo= X-JNJ: AAAAAAAB0EL8hrIM4W/71g2/KqLkLr2OtMUovKIeMlWBnj7KahzoPu/iwH56r4zlBNijufbi7sFV9hHa057vQbZQ2RYe4AT9f3hSxefFk63goVpG2jBvE+htIux/s/fwKv+X/6VuAQYNkx4pBoz7StWiX43mEJct4KXMvxrV2rdXbtiwHn10l+HdHCTEdz/i/Jg9b19pIGAN8vVuSUz3380xNMDH3mwJTRZmq5SAFZMOAtgkIi+7p6GPOciAx73M59J835M4ZeNDwAM5AK4C1fgmVAzY60EEekzGD9O+e6k+7qhoYzqJ9gUDvxrxdU0PLkygIBGACvBGEZKBlLbX0MrGSR+N5VzZbpiYk9JYtW73m1j5D/7+NfOr9lTfjr4RPZK3ABGKYZs4gvOlV2WfDfZv/W2FzJBKhdVuTtk2shQawqa8KCQbgjP83JKhpgvX2pHsKDhvGjOupXroYe8pOlNCT4etp+fnv3nGVsaAgyBL7QdtdeB/wTlE072XI7VfshEbAKf1lbv+kcYSKNHiPpzvOOWPzsy17eF3qR59vYFdi6azCxNsaRELYZbVFXtNSrqBxnrSm0ms7VW6/fhx1j73U/AdTWOCGqt7WTaStfRscQt8QABGDMO5PIVik12FRQ2XuBz44Cp/Ti2H6l05/ilUVciHMEY/9HBbuHQQwPtAsAbi1yS2bSqHWNgAUkLkWDD4ujRz5zNL1EMJhUGQAHDTDlgT1bxLq044ImjtqDuxWjk3dZvhXJhow1t0eN7b06HISNI4Id3lMPLQXKUvUDXLxPgWQDtN8zRY+MJLwz2lFzDvdv3jNn6jsaLmPzPQns2jGjRozf55V6RHhB2V+IZPJ8abNJi8KQ== 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::5e; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552948387158500 Content-Type: text/plain; charset="utf-8" Working around this compiler warning: ../hw/vmapple/aes.c:257:14: warning: variable length array folded to consta= nt array as an extension [-Wgnu-folding-constant] 257 | char hex[MAX_LEN * 2 + 1] =3D ""; | ^~~~~~~~~~~~~~~ 1 warning generated. Signed-off-by: Mohamed Mediouni --- hw/vmapple/aes.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/vmapple/aes.c b/hw/vmapple/aes.c index 553e688adb..9d062d5a7f 100644 --- a/hw/vmapple/aes.c +++ b/hw/vmapple/aes.c @@ -253,7 +253,7 @@ static bool cmd_iv(AESState *s) =20 static void dump_data(const char *desc, const void *p, size_t len) { - static const size_t MAX_LEN =3D 0x1000; +#define MAX_LEN 0x1000 char hex[MAX_LEN * 2 + 1] =3D ""; =20 if (len > MAX_LEN) { @@ -262,6 +262,7 @@ static void dump_data(const char *desc, const void *p, = size_t len) =20 qemu_hexdump_to_buffer(hex, sizeof(hex), p, len); trace_aes_dump_data(desc, hex); +#undef MAX_LEN } =20 static bool cmd_data(AESState *s) --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552992; cv=none; d=zohomail.com; s=zohoarc; b=exz9tqcENAdgSn7+mR+HArPOmNCYHWqvAeHAZ6N4jsb6t33ssZAYa7MSIdHS3kOf8lY1YlraXLnx791WZiDBQhLfqgBPE+uaj2BJBiRbIVCQwpOPZh4iiFv/dbxB73ArtsJgePcB4qxLX+HLb985EASRK4ms1ziWSfSJrqdZfnk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552992; h=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=j+R9HBIZk+dEKgvuVv7jehXngRjE0aJg5O20jEArfc0=; b=F14FKaAa8Mwaem96+utZTBT5y9N5pQlA9Zialc17LStFz/3Ruf6IXciZ49dgZcnCAWxkHRX2Uu/bRnaDJMuRklqO3CfRX9pTRKjuTIALC2Hz99KDH4aHcO9pi9jbfbHMZfZrNTfVCiYkuhO4gBDn63kw8yTrAYlY058WOW+9oPk= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789552992131720.5669558673094; Wed, 16 Sep 2026 03:03:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mRp-0008Bv-RX; Wed, 16 Sep 2026 06:01:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRg-00087j-Dl for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:54 -0400 Received: from qs-2003a-snip6-2.eps.apple.com ([2a01:b747:3006:204::5] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRd-0005Ey-Hd for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:51 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id 722521800130; Wed, 16 Sep 2026 10:00:45 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id 5881A18009ED; Wed, 16 Sep 2026 10:00:43 +0000 (UTC) X-ICL-RepId: 01a0a9a9-624b-7e6c-9877-52d2b8f6e054 X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0IShMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpTHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552848; x=1792144848; bh=j+R9HBIZk+dEKgvuVv7jehXngRjE0aJg5O20jEArfc0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=uQZkGkpoeJQbOr55Ys7FBVUBSO7UX4+XnFziIQ48xMj6InxKkim1baXa+ZHVPh8fiRcYjYtaKZdg/pV/uLjsqm09zK8Lek0bgjlwOK/AXtyq8LLR8UN00bXfl36rY2wvr4j27QGIN8UAa0J2cVYXke49MrSy81KK7ER0KXaeAuvAmCXcHGNhWA/6k3CyrWc/l3OOkyx3pW6vHu3jP7BbtPtTst1GBgo/XysAoG7Vlnx7mQIC3atCO8FNNx0c8jGEc5vbxlPJ47O8u64OJRFJ86rklRicGkgRcgvBRAauRzjEo+3625NaeS8BcWhz1s5icJEsvM9eEn5yNUAaW1YoMQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini Subject: [RFC PATCH v8 07/10] Revert "hw/arm: Do not build VMapple machine by default" Date: Wed, 16 Sep 2026 12:00:15 +0200 Message-ID: <20260916100021.73825-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: g_E4yBW1GmeZqB2YfL0mFSULV63HdS1U X-Authority-Info-Out: v=2.4 cv=Uo1u9uwB c=1 sm=1 tr=0 ts=6aaa68ce cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=XkhoILwbEVSdr8iLt8MA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX64UbtyPcpQCI WZmEJizn+y2B1DjCOyuWNsEXwLWV7gMieY6fKNw3Navj3ZBnSE8QQ1AElZ5M9fpEOLM5uW8q8X1 WrglWwX+bZUzhErLvacX9kYZY9luM3iaVXNHqY8vAMx0CbIgpdB+Kj4kpYAFCoOP12kOavxNIZW 0TIgYbbAxm3qT9s1gRUAEZgNBYkdEfi83YCkZATjo0aFPif2sL3xum+lDiQh+ITCBN7kATz7LFJ o7o/5aWMN4jq+OsUG37yIDD5Mmle0Vl9GdbKBS4gix1K0Bv3tYTELoAM5gKTQ2sHuTuCGPTy9Ns fUmrVbF4zbuq2fciLKb4J516OWFWt1larWggHY7e1bRiswSsNekfRD1H6sQ38g= X-Proofpoint-ORIG-GUID: g_E4yBW1GmeZqB2YfL0mFSULV63HdS1U X-JNJ: AAAAAAABY6RUChA4uD2C8bH+oe+rXnicz3+ZrTiImUsJNHsQs+DQtCznHmsP1+BRIqoBgeEwLwS2HKGOE62/EOUWNlC0u3jwwSeJLoEjHDBS2c+oV1vOopnnrafuxHxLyxK2EKY1EuJ7H4dH1cFeaDklLd8g0eoCAV9QLaPyHqPw6e/ZOnR6J5UnPISurHhWHy+7wVhvmUmFNdFY2UHCzzAnLVcP2XJBN3KcV7aJg+hdAXh+9AIrMezeqjwg4Apeia+b34D3kW0mHPVlT8deCQVs09J/20oh+msOZlBp/cQ+5eK6bA2o98oNLFDb/tvV2alp/VIyw8NZlwdUHdHJtpB+xxQxKpjMzWTYxCFnHau4toaAerGIlnk5L7Ip5k8eG3Uy2A3L9ANWrS6Kjr1ld37Yuj00OKM0+JxD7/pDToaWRPQ9ueP9kgOwqsBpH1l2zqPc/O9tHFsug5TAOcMPC1TeR1mYze6qocAcnKm5Mgk+Nc9kGyyIzkNrXlQ8WBZJ9iAmvnVDW9eegq3fF1aLjEu4kfq3cVRSEgqMLNPFa4ENDhwshpCgtjl9DaAmJ2bRE5rUpQLEgHKd6tC61m50TVG8RxZpqEcGvdPw1dVDezlxy9PXeSPru/hXD4t19HMLCvfTpTryHG67swPs3aR18JL7V/KTDYariAT5F8AADoBzA0/gJa6MRvTfc/Vt9Yx4vjnP8qV2tUIZKFeAI2EAe0wbwcxwn2bT6+V9FjQlnbCtGWDB3onLaiPcGUMNJgmktYrZcmC6YG7coktZAm5k364VJhXcKhyK2Labg4a+HBFgSg0LQGHWMiltA6HnfTEGayZFEvU7wyIjzKOOJTgXZxB2hZ5ufnDn7V9YRQ== 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::5; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552994232158500 Content-Type: text/plain; charset="utf-8" The vmapple virtual machine is now functional on newer macOS host releases. Revert commit 49551752e860f5e403cdacac11ee1d218141fd3d. Signed-off-by: Mohamed Mediouni --- configs/devices/aarch64-softmmu/default.mak | 1 - 1 file changed, 1 deletion(-) diff --git a/configs/devices/aarch64-softmmu/default.mak b/configs/devices/= aarch64-softmmu/default.mak index ad8028cfd4..93f4022ad6 100644 --- a/configs/devices/aarch64-softmmu/default.mak +++ b/configs/devices/aarch64-softmmu/default.mak @@ -9,4 +9,3 @@ include ../arm-softmmu/default.mak # CONFIG_XLNX_VERSAL=3Dn # CONFIG_SBSA_REF=3Dn # CONFIG_NPCM8XX=3Dn -CONFIG_VMAPPLE=3Dn --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:16 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552947; cv=none; d=zohomail.com; s=zohoarc; b=kU1Ur+jiFPS5ZQT3Jupnhk7L7/a/nQbx97px/MB/rZ+/27HuP+UyZHRs5ruPECIAN4gUgtBZHRW1qlUkaqn4fv/k8Dt+YlhMlmJOyv45TMKtPgABTGjh0aYEZ8zQF+1SgoY9Nk0fgUW/ttvLXS8BKGOK2CkBVcAsFlW+1t+7Dyk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552947; h=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=FIznWV24oNw8Sya1w+azG+7Xp+DpfmhjLIwDAtI19ts=; b=XlaKQVheT06FzhN+S7wUELNov0zl1h3MVSNuFCpYshfflvjZugJcBe1d7FIhNxPBXcfRqZHhtLLRdv1e8P+uSc7xQ05WdJPqceRCbz8ctDJ7D10vq83cjtCqGuEC6qcP9ml8LItmzgjczv47E+wU0lswlhdfE85KTcNE4wiU1v0= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17895529474831019.8249224442334; Wed, 16 Sep 2026 03:02:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mSK-0008Tc-Ro; Wed, 16 Sep 2026 06:01:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRh-000885-PA for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:56 -0400 Received: from qs-2003a-snip6-11.eps.apple.com ([2a01:b747:3006:204::d] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRg-0005FU-1z for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:53 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id 712E81800BC1; Wed, 16 Sep 2026 10:00:47 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id 0752A1800172; Wed, 16 Sep 2026 10:00:44 +0000 (UTC) X-ICL-RepId: 01a0a9a9-69e1-7621-888e-338619f70f67 X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0IShMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpSHx1WEFIAUg9yBVcIQQhTAlEEWBpfCBkNQE4ZDEodUlZRBUoMXABoD10dWBFd Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552851; x=1792144851; bh=FIznWV24oNw8Sya1w+azG+7Xp+DpfmhjLIwDAtI19ts=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=pj9bJkg6J1lp8yLVfHq705W2AGZwOOBh/ImLnfBc6g6/qtJn3gbr7JZwM33LUt34DQdSfXwiFQn/GAkW4rtZzojbLFenM+ywFABe+m0+ZOBJSnQEdu1a7qfU0ZJmEcB46Y/05EMOxWQtykdKEY19ZvoIEieejtnnzfUmBR5N5M8OOv97VbposJ9HImm/68O/LS1RARk2Or2YjgNscU6DU6LEBMpCSf+4KqkzLDlUkG/y1bJBL0YQs9wNHGfHUqdiw/VU95Tde/dsquXzLO2mowV/1qSULeFNWHFM7cGEkpz/Jz/eHSCurnztL/zdUomLSkLCPanCrB2BkC3NzdG6QQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini Subject: [RFC PATCH v8 08/10] vmapple: add gicv2m Date: Wed, 16 Sep 2026 12:00:16 +0200 Message-ID: <20260916100021.73825-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX6WetL08h+XOI Lc6xaFKPDqgOI8xlU+Mhk4DIh0dVzpoBU7/C7taAti4r03LyNA9QJ/ByjfLzzS2BNBqE5N7Lgky +YmC2hII2FDehtc4vdLosWEQWPmanxdGWD0SCKL66/YESTG+AgfdFg95tThKGfbFhuh9gwL9CyO SJL4RRgD/P0WKaY2AhLfVOmBnlhWvUIkuNywhapQuuUYwV9VVQE5zSGoHFpYaXemqwZ1lyOUvp/ y7A+uLDY39uX1CxLhtGhq60TmlYsCXFTfbGHa+qHBQS2uLZhRXm8Qn3fbL2/FhiuVtnlu5o1Vhf tOqfOjD+jqAhkLRIJyM5A32mPtSawTCKBbpDs9vbWdljGSY5xxeeK2yK76QQRo= X-Proofpoint-GUID: MLoCm096RJtGOciEHYXboPMpur-tdVoT X-Proofpoint-ORIG-GUID: MLoCm096RJtGOciEHYXboPMpur-tdVoT X-Authority-Info-Out: v=2.4 cv=V8hwEOni c=1 sm=1 tr=0 ts=6aaa68d1 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=sAlVIecbGMDsLuTEZI0A:9 X-JNJ: AAAAAAABueZG2hXuli0Tgtvg5E1kwblq65C2QVvbHsuZlud2IEP9jxqmBAwkzMQ2KEbC9UcSz0LepJaZj7tfF0YQFdVK/jbYcHlqOBuSZ7Fv7fePlS0Vv0urGdrSerC+fM6yNoUYMfXZcsRnaL9PqcMjqh3qrRzf8V4ygK0gnq/RQfvlAtxZenhgeMHmER+2hQCoENWH6c2AqCk+gC1yGcID0STUAKTsrb3Nhm12PoGbUcZYKOCMktDwjVjKQTgYrx7Q/BcsrPsVi1o11o2PNrZnRTUyhaTfcMnfQJ/UadB8VkDD9Rs0grTOnFiH0Z0gqbzl0M2zrVPSNr+fJr1ovb96gq2W7SFNJwguJDo8ae404S+spFp3hb9SOjXc7FajMO4W6MegbT+AzzWm1RujK4wqcDs6IXBs2INNCOmwyixdKGUd/ZvI0B0+Xhi7qU/LF/WGQw/m/FLZ4ZgfJGwQ13+leJfCDpi00lvVdsM93zc414U8bXvoWgCz4N/tJrdQmOGtuRJ+CBkkpxU0PFxK045m99TPBJl9Vm5X/Bgl7gximZeREahTJ0HaookEFFrirfv6CloHRGr6tbgYnw84bv9GGnHLesPlKYfKCFLJUUELd46gRMsyNCKTdpUT2rnlM9p1R+CDVEuRd6QuJbZuuQoxk5qYHKLKS/3cfCU777eQvI6br9KhjLeCg0AhzNqdh42kmbaF1Qc7hggW+FDv1kxZ6sF/27hmBqx9OJXGrUxfG0DGgoXaxMDxkIk6LPuf+kcitC6xHD05wiBQsfrU9dvuTKRxGmFdK4PdGP39oH2UR+O3HdCZlsQGfhJdDdlRoJhpe3W18ZPAKQqLX+hGJD9weYPrJzDGjA== 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::d; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552949230158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- hw/vmapple/vmapple.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index 607181f517..2467c79ab3 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -82,6 +82,7 @@ enum { VMAPPLE_MEM, VMAPPLE_GIC_DIST, VMAPPLE_GIC_REDIST, + VMAPPLE_GICV2M, VMAPPLE_UART, VMAPPLE_RTC, VMAPPLE_PCIE, @@ -103,6 +104,7 @@ static const MemMapEntry memmap[] =3D { =20 [VMAPPLE_GIC_DIST] =3D { 0x10000000, 0x00010000 }, [VMAPPLE_GIC_REDIST] =3D { 0x10010000, 0x00400000 }, + [VMAPPLE_GICV2M] =3D { 0x1FFF0000, 0x00010000 }, =20 [VMAPPLE_UART] =3D { 0x20010000, 0x00010000 }, [VMAPPLE_RTC] =3D { 0x20050000, 0x00001000 }, @@ -128,6 +130,7 @@ static const int irqmap[] =3D { [VMAPPLE_APV_GFX] =3D 0x11, [VMAPPLE_AES_1] =3D 0x12, [VMAPPLE_PCIE] =3D 0x20, + [VMAPPLE_GICV2M] =3D 0x80 }; =20 #define GPEX_NUM_IRQS 16 @@ -285,6 +288,26 @@ static void create_gic(VMAppleMachineState *vms, Memor= yRegion *mem) } } =20 +#define NUM_GICV2M_SPIS 128 + +static void create_gicv2m(VMAppleMachineState *vms) +{ + int i; + int irq =3D vms->irqmap[VMAPPLE_GICV2M]; + DeviceState *dev; + + dev =3D qdev_new("arm-gicv2m"); + qdev_prop_set_uint32(dev, "base-spi", irq); + qdev_prop_set_uint32(dev, "num-spi", NUM_GICV2M_SPIS); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, vms->memmap[VMAPPLE_GICV2M].ba= se); + + for (i =3D 0; i < NUM_GICV2M_SPIS; i++) { + sysbus_connect_irq(SYS_BUS_DEVICE(dev), i, + qdev_get_gpio_in(vms->gic, irq + i)); + } +} + static void create_uart(const VMAppleMachineState *vms, int uart, MemoryRegion *mem, Chardev *chr) { @@ -495,6 +518,7 @@ static void mach_vmapple_init(MachineState *machine) machine->ram); =20 create_gic(vms, sysmem); + create_gicv2m(vms); create_bdif(vms, sysmem); create_pvpanic(vms, sysmem); create_aes(vms, sysmem); --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:17 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552928; cv=none; d=zohomail.com; s=zohoarc; b=DHvLcaj9xJ5dogDSvh6FVnSMZKXosK6kdDRYGTJoLI03yW49a7U3bRb8tEB6B0lsAlh0IRpmkRoay3WpQfH1pqoWiXWpvh3wOXlUzpHWCGRPHXA5AfKro0IAT1FU3dJAcVvtQPIcLu2vs8qz6hXA+GIr4yiMuo3GN5nTDE1VSHs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552928; h=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=+9RJGRbMENE6HFIHE0Ze2Tr+1IRKcLOn/xT+W7qDSus=; b=J+m7SouNJ7l6uKSoNBQ5DnWkO+acVB16E0GtV+o8JkvXIN3RTNFXrlvfnBNwjMg3MKuPGQK3fCkypyIfe7RHJPrNPmK2oQWczHtCpq8BlssROX21scY+4UaFshuyOjandxqp5uT+VSnVFkRevn5I1d1SzAwy8cM9gz84HHScVvg= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178955292864354.99564039303061; Wed, 16 Sep 2026 03:02:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mSV-0000Gm-9g; Wed, 16 Sep 2026 06:01:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRi-00088A-EC for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:58 -0400 Received: from qs-2003k-snip6-1.eps.apple.com ([2a01:b747:3006:204::68] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRg-0005Ff-Hb for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:54 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id B37841800BCF; Wed, 16 Sep 2026 10:00:48 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id A0FA018009EA; Wed, 16 Sep 2026 10:00:46 +0000 (UTC) X-ICL-RepId: 01a0a9a9-6f0a-7e8e-8215-5dda3f8eb3ce X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0IShMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpaAl1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIHWEcURw4PE0wLRwJaNFYfVBlaAw== Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552851; x=1792144851; bh=+9RJGRbMENE6HFIHE0Ze2Tr+1IRKcLOn/xT+W7qDSus=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=xWhx6sEXXAGpY24G0zaZRHquIXXL71bsXCBlwXrEnBWtMqjILC2jFP3TV8SgYVX4bv7KxtKT1AbreTs4lfwqbegCOz81xVFpWxvm0vS8D2U9FzxEnL0+IbjGBYba4jg0K3W2j+PRR1jsQGzajmPj+zWnQpz7OjbDTzCyPbQuZwPcpkV3tMORLApGDpW7MCwCj+0mpZifGS+0a+oDjpWkfHAC6OEkBKz2Ag2yjJm9RnXJiAmCnJbiFjWhUCBxOdxMItVVg64YSo6XSk5ZzXJy8aBSJov8p0ygGP+OmMHYw64E5qKaIRAPgWJ5f8dsq3XqJImnfqMlQNotVtAD8gmF5w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini Subject: [RFC PATCH v8 09/10] vmapple, gicv2m: add macOS compat quirk Date: Wed, 16 Sep 2026 12:00:17 +0200 Message-ID: <20260916100021.73825-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: YXLEMC356AQdTEp13BMOYdc-aHPcMoVM X-Proofpoint-GUID: YXLEMC356AQdTEp13BMOYdc-aHPcMoVM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX5ZrpeGiF4s4Y bgIBvo3DTS+mj0p+eAGC2lNj7iWgqHMSel+CbdHaNg6sv0JcLLq9MohYvaQ/XSRwsV7YlyjrVu7 f6ZGj1u03ID69jl9f/fiTkeU8DDALXTNa035FMUmXYCwOu+ih6e1djgNsXwQ7W/JGxutWx6oPow 47GePLBJY7eFaSQ6gW8GiAYEH3XCrAMOyGDAs6PBRNsZIg5eL8QvlejhuiqGctqDrgUMbdKoC7l sduDMT1cOa/vCZNU4UQpV3Snq1y2Uqh+L7GzV/TfwKdTXqr3Q4jo6AOke6p4ihY+LyCf8+1gDs9 r1XvyEKxY1ITaUUc+ynIqk+q8WzB8GmX+VNmfd9mwtc7m5cOzHTFSjAjWL/A38= X-Authority-Info-Out: v=2.4 cv=H67WAuYi c=1 sm=1 tr=0 ts=6aaa68d1 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=6gOpaI4mCDWYJJ-FYbkA:9 X-JNJ: AAAAAAABYh5AWrTdkw0t0bnDBSbjQA6qAdbjmG3JRPBZiZIRn1c7lbMGOiy6TZFehoNffJKTZ4bJ8yrUSdr1tLmBgbLjY2s6e0FNsDapkQkZ/iazHr5PCr0eHflMmToXElvnOTRp913mN9yiBBtGDx5hJV/0K6aaAuzd7tLE8JvecSXgZXz8SYJBvd7cuIr7hm1OiZBaOjtiuNJHd5a7kmu8tnROorPXTodtevtHW96XR3JuswbElZe8HyLC0X7DWHHB2Bw8YP43JsHQ8xCagCX200qzFYUuJVQaP6gbrCfRU/DW0P1j51rfMxgCCK9BBsUc8NsELPWSPQxaPrK7WOx6Vq1xt6IKBoJjnp3ihTg5AiwhFb6sKP4moV/KoGHR3DHx53e0beepVfXscs0tGoXu+nh2sivu65CfZ27BwqaKpPtBEENvyjED0q6qShqe4jF0FZLEbVd2QFpV857QAfjMPkeHI5kMWcBHvMBQO3oJbMDpQSFIeq4sN+s9AYAWmpGDfiouS9uTPcofegq8R7sqx8pRZ6cr/153/bhe+7TQ98eva5B4/3fdsUHv4BeN3mZm8cPIU4IT3AXHRnw4JUREQrJg+zn77Qvw3vQEu3hmIqpS7r/UAST6fwkeKc9Eo+RFJ0yhisM+bBD8XiB7B7H/7A4K9144ZflGhSrFxe1CSTX7dMKWXAVN0vWTHtbN5/fWVGg2JLS4Jfwv1jTJctGcY8oXHJIs3cYtSqAC9Kc/Tjd299TFi4Ar9sPXhV9HsWERkGfqvyEkxDgT/mRh2cuSMfIvkdvZ9D+aYtrsh891c+Rc6vm13qY+lpvLhAiQHyHUB1m+SIGAk3pdF9X9veTjvfQ= 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::68; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552932044158500 Content-Type: text/plain; charset="utf-8" macOS expects bit 31 of MSI_TYPER to be set. Signed-off-by: Mohamed Mediouni --- hw/intc/arm_gicv2m.c | 5 +++++ hw/vmapple/vmapple.c | 1 + 2 files changed, 6 insertions(+) diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c index b343e17ca5..10598d8d50 100644 --- a/hw/intc/arm_gicv2m.c +++ b/hw/intc/arm_gicv2m.c @@ -57,6 +57,7 @@ struct ARMGICv2mState { =20 uint32_t base_spi; uint32_t num_spi; + uint32_t macos_compat; }; =20 static void gicv2m_set_irq(void *opaque, int irq) @@ -81,6 +82,9 @@ static uint64_t gicv2m_read(void *opaque, hwaddr offset, case V2M_MSI_TYPER: val =3D (s->base_spi + 32) << 16; val |=3D s->num_spi; + if (s->macos_compat) { + val |=3D BIT(31); + } return val; case V2M_MSI_IIDR: /* We don't have any valid implementor so we leave that field as z= ero @@ -173,6 +177,7 @@ static void gicv2m_init(Object *obj) static const Property gicv2m_properties[] =3D { DEFINE_PROP_UINT32("base-spi", ARMGICv2mState, base_spi, 0), DEFINE_PROP_UINT32("num-spi", ARMGICv2mState, num_spi, 64), + DEFINE_PROP_UINT32("x-macos-compat", ARMGICv2mState, macos_compat, 0), }; =20 static void gicv2m_class_init(ObjectClass *klass, const void *data) diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index 2467c79ab3..072a49ac4f 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -299,6 +299,7 @@ static void create_gicv2m(VMAppleMachineState *vms) dev =3D qdev_new("arm-gicv2m"); qdev_prop_set_uint32(dev, "base-spi", irq); qdev_prop_set_uint32(dev, "num-spi", NUM_GICV2M_SPIS); + qdev_prop_set_uint32(dev, "x-macos-compat", 1); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, vms->memmap[VMAPPLE_GICV2M].ba= se); =20 --=20 2.54.0 (Apple Git-157) From nobody Sat Sep 26 22:15:17 2026 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; dmarc=pass(p=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1789552930; cv=none; d=zohomail.com; s=zohoarc; b=TVfNEPpiIV3BT0umZNIeKFEm+fRgVumeIQ1SdYcqYuFC7KTPYzhzC8uP+4jo987RcsnZCddhrtgKodSsbORAIiIKxWtmTs6Ao8S/GS/mF2RTJ4GrWt8pRgekMWV6yTO2PAwcoe5umW8eK3BTI+tvDQ3fSH75Zpi3Qm5f8+751LE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789552930; h=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=nXTBrq9QmP+EI+S6P5g+rgoGsRJ/zxEegKF1eFwtIzY=; b=VDAqm378PbqTLbNYfdrRP6N+6s0r815L8qW0KSPbzEmDYKLaWlpL6T2Cf10dXI+YLVhdUopuFvjKYxXFiBtZI0QoY/k4NpLsF0v4oMWC03vXnxEjS/98sGmRtGEpF2nab8h4ll2juft8WmsyNY3S41aXUQGjN0faztwRa6f2py4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789552929478845.5442806294127; Wed, 16 Sep 2026 03:02:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x6mSK-0008Se-Nh; Wed, 16 Sep 2026 06:01:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRk-00088d-Cq for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:58 -0400 Received: from qs-2003f-snip6-11.eps.apple.com ([2a01:b747:3006:204::3f] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x6mRi-0005Gq-QR for qemu-devel@nongnu.org; Wed, 16 Sep 2026 06:00:56 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPS id A634A18009F0; Wed, 16 Sep 2026 10:00:50 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-8 (Postfix) with ESMTPSA id 4782C18009ED; Wed, 16 Sep 2026 10:00:48 +0000 (UTC) X-ICL-RepId: 01a0a9a9-7679-76d4-937e-43d07503887b X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQ1OHVwPUhxEDlYCVRcOVk1UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIZHldQQgVCAlwcWg5DClAcXFZVHxcZUU0IShMFUgddTVYNRw9YHlwUFwlAQ14IXh9MHB0OWAYSAE0KDjYGWQVeCVYDQwU2EhRdRUYDRxlXFFAbRwxVB1deXwoTAF4PD0wLSAFbB1IDRghIA10FWhxHCkABWBpaA11UF1sMWg5WMEwWQx9SD1sTTRlRAVJFVAIHWEcURw4PE0wLRwJaNFYfVBlaAw== Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1789552854; x=1792144854; bh=nXTBrq9QmP+EI+S6P5g+rgoGsRJ/zxEegKF1eFwtIzY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=CoEOfu/Z2Z0hxQ7FWm8aFlf8ERp0E8VdK5H3HckQB9h/Vxu+jCzjUtByNelHLpuLA4rUtHUU1Zpuv8ehUVZ58smMtNsfWbK4Qjl91Dyy73XfDCQZ0P+fDRCJaNGrKJe+5loNjpfNDtmBpB2ivwJOxzA+3DmFR4eDxYW/Ba+DRRbWL6aGdA+UkG/V56cQH+k+AVxk1+uM6K0XkRM1BU51PRpptzYDsC4Pp9L8kWMJ9cBBlN1qxErA8XGC2a+oMy6dGEsKaBh7gcwrUa0xpzcceqtDc2DPUKiH0Tb77qhJZqKr8ld0jhp3iWUCYD3WRKivSbOY8LttrwAELLyFeUPlUg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Roman Bolshakov , Peter Maydell , Peter Xu , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-arm@nongnu.org, Phil Dennis-Jordan , Akihiko Odaki , Mohamed Mediouni , Alexander Graf , Paolo Bonzini Subject: [RFC PATCH v8 10/10] hw/vmapple: virtio-blk: allow FileVault off Date: Wed, 16 Sep 2026 12:00:18 +0200 Message-ID: <20260916100021.73825-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260916100021.73825-1-mohamed@unpredictable.fr> References: <20260916100021.73825-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=cbTfb3DM c=1 sm=1 tr=0 ts=6aaa68d4 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=VdqzKS8jKosA:10 a=VkNPw1HP01LnGYTKEx00:22 a=XTwg747VhcxLksJOh8UA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTE2MDEzMCBTYWx0ZWRfX/p93+7Skz2lN s2o0x1larrbi3u4rxfpQAvWXpUC/3vJgsoWgCgehigI0aKYh2xNsSMRYPwNHuIJUxDQARX7kLwi mIdjBCcx3gRgfOXfiuKV+ZBs6XU+eHdZPS2SBFEEhg4/zSvKGq2sICYgLAYAEWDVBGPv3ON8zcp UhStSHmUqXA84lOfbY5ZqCZMsvsiUo3pJKIFb0qny9BbCqIOaMpbqT53sMr3F695sR272+mc6DT UwUPfM54LgyCzC0tDC6CqseySg2q+RnjFcGKE124tXGRGDmCKHY0ofSb0J/59nkdlfrRKxZXC4m 5Q3kwzy/kPDu1oIJTErMgxlZ5RhkvNlxY6Ij2KULTGtt/Isv9AsBMWpdzg4wrg= X-Proofpoint-ORIG-GUID: mSNohsmmwU0Cy0u0Q5E2_V9tUb8Bp4y3 X-Proofpoint-GUID: mSNohsmmwU0Cy0u0Q5E2_V9tUb8Bp4y3 X-JNJ: AAAAAAABS1Dvq5mZs8DFngDUrJFvPwtTuTBIHnuOA5udU0IyH0FAtRlCmh1CjCR5mvHT7+f8Ga6BOnKibds3x+Y54GhufXLP1NImgXqCse0+egVz+lwHRedIVxfmnFdCZNRDZoxuyusub5nELHOHVJ/viNhuq7MBxtaZSsxMKqfVr1ed7Umzl6eIZYvopBWt4IUwk/SZ0rwrc497aTu3ugSSVJ6V1LZvHYiemX7dT6B5T6QKO1C8V2Lt+feWc6Ytz5hdxyM/c+RQXuVzDVFj+GUarzedWh9le4HCMbfbN08WYhPJS2bDZ6LbZxg1LmEu5MTo8IE4Tjv576qu46MwWV1aPSpXNkh9DS7Jb/mJ5215bleQJikmx+l3OEkulLUWDfFWFWXb/B+5PuzPpJyVTsKvYxuc+/Gq15Rt0k1DAENg/g9KzmJ0GsPFcf3GINumwIXav09M4m8Am7fJxF2CTP9FtBW2K6mscJqpw6Y/OY4FQryjwIKYyRiLS9lwsXegWg8hjb3dq1y3cs7nK8r8yo+dksmK04DZud8x32ZlItcwbPBc6ngp+d4zdJOM5sS0rZ5feaXHiXxoldM+7KRka+EENze6a2MMs1ueccwfY2oict8In5WxgTywj8cWbZ2sTkRF9hYuz40rUmNjilY5YgR0Nr098V7qZ9Qbi3i8Of2Pk8M/GQCSI0/gLJ/akJ5sArLf/oiUAb45Dy7JcmcCa5hsaRmjIr7nMfNFnI1VI7prbREKHoKkI94xzC+z1TJqahV/jiEX7KXqPgjlLzs3j23xtYCNaE395rhJPlCHMyzoqu+snJvjknVzWmBWwZkkUGn0YFDzfs2rkJtrncZxWEvZaHddQDEQr2+fLF9J 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a01:b747:3006:204::3f; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.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, 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 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: qemu development 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 @unpredictable.fr) X-ZM-MESSAGEID: 1789552932023158500 Content-Type: text/plain; charset="utf-8" Otherwise, a newer macOS version with FileVault disabled in the guest does not boot. Signed-off-by: Mohamed Mediouni --- hw/vmapple/virtio-blk.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/hw/vmapple/virtio-blk.c b/hw/vmapple/virtio-blk.c index 9de9aaae0b..906c2b2ec8 100644 --- a/hw/vmapple/virtio-blk.c +++ b/hw/vmapple/virtio-blk.c @@ -119,12 +119,17 @@ static const Property vmapple_virtio_blk_pci_properti= es[] =3D { VM_APPLE_VIRTIO_BLK_VARIANT_UNS= PECIFIED), }; =20 +#define VMAPPLE_PCI_VNDR_SIZE 14 +/* Disable requirement for FileVault to be enabled on the guest */ +#define VMAPPLE_PCI_VNDR_LEGACY_FEATURES_DISABLE_ENCRYPTION (1 << 0) + static void vmapple_virtio_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error= **errp) { ERRP_GUARD(); VMAppleVirtIOBlkPCI *dev =3D VMAPPLE_VIRTIO_BLK_PCI(vpci_dev); DeviceState *vdev =3D DEVICE(&dev->vdev); VirtIOBlkConf *conf =3D &dev->vdev.parent_obj.conf; + int offset; =20 if (dev->variant =3D=3D VM_APPLE_VIRTIO_BLK_VARIANT_UNSPECIFIED) { error_setg(errp, "vmapple virtio block device variant unspecified"= ); @@ -162,6 +167,19 @@ static void vmapple_virtio_blk_pci_realize(VirtIOPCIPr= oxy *vpci_dev, Error **err pci_config_set_vendor_id(vpci_dev->pci_dev.config, PCI_VENDOR_ID_APPLE= ); pci_config_set_device_id(vpci_dev->pci_dev.config, PCI_DEVICE_ID_APPLE_VIRTIO_BLK); + + offset =3D pci_add_capability(&vpci_dev->pci_dev, PCI_CAP_ID_VNDR, 0, + VMAPPLE_PCI_VNDR_SIZE, errp); + if (offset < 0) { + return; + } + + pci_set_byte(vpci_dev->pci_dev.config + offset + 2, + VMAPPLE_PCI_VNDR_SIZE); + pci_set_byte(vpci_dev->pci_dev.config + offset + 3, 9); + pci_set_word(vpci_dev->pci_dev.config + offset + 4, PCI_VENDOR_ID_APPL= E); + pci_set_byte(vpci_dev->pci_dev.config + offset + 6, + VMAPPLE_PCI_VNDR_LEGACY_FEATURES_DISABLE_ENCRYPTION); } =20 static void vmapple_virtio_blk_pci_class_init(ObjectClass *klass, --=20 2.54.0 (Apple Git-157)