From nobody Mon Dec 15 11:25:33 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1753602186; cv=none; d=zohomail.com; s=zohoarc; b=cb6MiJ0Jro/L/ikuJMW/iFiNBItfwTcaoqWdUNuvGhtVVkl4BHR7jTUPHKQSmKv+k1pz4txxTrpW5owyhqdP4Q1qcjoVENuDs2lGB4BkeTZVlskwQk7Xe1sxgSQng2cSBTdJiwsfdsjZ+PbAi4hzBWtufyqZKFAOAEM5l2y2614= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753602186; 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=XNubQwhHjekWcdPAePqyJsttCoxvHncnRgRs+UUfMAk=; b=gz/WWJYTP0Qf1H2czwrutbLmFYIyohJces9dp6V6jjLhLtllerNOoDaWvlrT6EfJAmEFPBtEXo+Z+eaQYwwRDNp0d4QmXoQyA0S7BKaEY3+zBD7/gtTAbNWcj8v1fxQZIn0QwimoT8QkoJAwgG30Pn/pyM263Oz4wpdI0gGBicU= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1753602186451398.90140759119015; Sun, 27 Jul 2025 00:43:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ufw1U-0006RE-Cr; Sun, 27 Jul 2025 03:42:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ufw1O-0006Hn-HC for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:14 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ufw1L-00014j-5M for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:13 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-236470b2dceso29558945ad.0 for ; Sun, 27 Jul 2025 00:42:09 -0700 (PDT) Received: from localhost.localdomain (syn-098-150-199-049.res.spectrum.com. [98.150.199.49]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23fbe53b546sm29633055ad.177.2025.07.27.00.42.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jul 2025 00:42:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1753602128; x=1754206928; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XNubQwhHjekWcdPAePqyJsttCoxvHncnRgRs+UUfMAk=; b=k6JsM4eMC1iaoXT/C1fTGJUWLWHvYMLrvmRybUKZmkVBuWffqOXteRWRYXrG4QZ6pb fDY+/734KL7hRZfHfX/fMZCtTlDJHWfe3Cw8qW07LplQBsoku/6tySxau2t8OhgAh5EW wBTIypzS1ymjf3gw75j0o3ngrKB1SccVk1QpN15l9h9HPMS4bLbUIEjHMLMFcC8aRz2f q6mrvIw7hZSoDr4Hfqtok8+hZaAjtZ8YAv32yIjwv0vD9/6mRbFimYAvttq73gIs3ChG wIsfTLoZywqTzLFm8Y1TvqIt53jl+xk1sFUl04vicyuV4uUt1n9b0b9Ifl7PhK43UOjX gEXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753602128; x=1754206928; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XNubQwhHjekWcdPAePqyJsttCoxvHncnRgRs+UUfMAk=; b=oKB9U8W7ygrb24N3MtcTeitZRpAlSQP9wLPXS+XXuCc5ZwF3Qs8X1gmBxyKzgXtbzv iD2hmqhHAcvpR5gxW9UKyuiciWnA9Mesbo6G/KTEZunsQN7XG8doCDF3JbQPJbcITASm /Oq9kafLVBrI4JNv1sol+6QExoPmaQZT8avWN9gHxyFHnfBrlYsq8LhWLPqXGHGPFG07 DEWfBC8opf8XpOruujnFW44eHp77GJSJQewRTJIMJq5zCDWtHXLJldocgNPbCQLogvk9 sQ7RAFZ3TzsoR6lQWcyl/H+zDk/1QD/a9Hlb+FFV5aTgRfGzdPVygni0rkhN+GUz9Bz/ 1G5A== X-Gm-Message-State: AOJu0YxK1S66iideHIPgGU3oSpBjlmRYDHA431a36mo4P97Ww47PoW3E sV8lObIYqVxsCRV44G1KkBdBRUjgn37BZj89+OoH8LS7MkGJTIPtyD+uLxTv1HbOgPmCXyPqXRx rTeSP X-Gm-Gg: ASbGncvgqa/SI+i7Axq5Eog+uMkTqwbplC8+KP4YEo59Uflk9FDBk5Wvj/1PNv/PtBN mPblT2Mnfqjyf32VsFGxh7rgsCrbPhDwis6+lGepoEVA1ZoA4x2ExroCWu6F0Ra3WAEFry/8353 RMVPSFoMSYbidOAsPdVvLmo8vti+fxySeiDCdOWy+WARXoMXamIP0CF2IpXgwrWsKHfI39a56ap JLuU6otCb2r4W/Pzm4CPTaSKa+6JMLVYyuhIuTe+Vj27vdIF+Xh3mraoEwYPK903I1+nF4K/1LZ Fhrq8V+2na2JqdJU0MNC17OE+az/oJRod7D3lybn3m9eKenvO2IzlCNQr4QxJL93gh7Mdr2VFfV 9cScyyT3QGYe06F3aN/iPOwJIwGTVQ3l3HCOD37I3NM7DLoM+dlSnlzacqRjwA5qcQAzb+zrsny bGBduEA2TD9Q== X-Google-Smtp-Source: AGHT+IHBB4zlTMZ3rLRelmgvt/+6G9eF+jrUElzNVihq1WOHfeBvgx+4GIro0XahLQmnhrnyfZpsoA== X-Received: by 2002:a17:903:46c6:b0:236:6f5f:cab4 with SMTP id d9443c01a7336-23fb307c150mr108722485ad.5.1753602128605; Sun, 27 Jul 2025 00:42:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v9 1/6] tests/functional/test_aarch64_device_passthrough: update image Date: Sat, 26 Jul 2025 21:41:57 -1000 Message-ID: <20250727074202.83141-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250727074202.83141-1-richard.henderson@linaro.org> References: <20250727074202.83141-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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: 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 @linaro.org) X-ZM-MESSAGEID: 1753602187725116600 Content-Type: text/plain; charset="utf-8" From: Pierrick Bouvier TF-A needs to be patched to enable support for FEAT_TCR2 and FEAT_SCTLR2. This new image contains updated firmware. Signed-off-by: Pierrick Bouvier Signed-off-by: Richard Henderson Message-ID: <20250719035838.2284029-2-pierrick.bouvier@linaro.org> --- .../test_aarch64_device_passthrough.py | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/tests/functional/test_aarch64_device_passthrough.py b/tests/fu= nctional/test_aarch64_device_passthrough.py index 1f3f158a9f..17437784bb 100755 --- a/tests/functional/test_aarch64_device_passthrough.py +++ b/tests/functional/test_aarch64_device_passthrough.py @@ -9,7 +9,7 @@ # # SPDX-License-Identifier: GPL-2.0-or-later =20 -import os +from os.path import join =20 from qemu_test import QemuSystemTest, Asset from qemu_test import exec_command, wait_for_console_pattern @@ -77,15 +77,16 @@ =20 class Aarch64DevicePassthrough(QemuSystemTest): =20 - # https://github.com/pbo-linaro/qemu-linux-stack + # https://github.com/pbo-linaro/qemu-linux-stack/tree/device_passthrou= gh + # $ ./build.sh && ./archive_artifacts.sh out.tar.xz # # Linux kernel is compiled with defconfig + # IOMMUFD + VFIO_DEVICE_CDEV + ARM_SMMU_V3_IOMMUFD # https://docs.kernel.org/driver-api/vfio.html#vfio-device-cde ASSET_DEVICE_PASSTHROUGH_STACK =3D Asset( - ('https://fileserver.linaro.org/s/fx5DXxBYme8dw2G/' - 'download/device_passthrough.tar.xz'), - '812750b664d61c2986f2b149939ae28cafbd60d53e9c7e4b16e97143845e196d= ') + ('https://github.com/pbo-linaro/qemu-linux-stack/' + 'releases/download/build/device_passthrough-c3fb84a.tar.xz'), + '15ac2b02bed0c0ea8e3e007de0bcfdaf6fd51c1ba98213f841dc7d01d6f72f04= ') =20 # This tests the device passthrough implementation, by booting a VM # supporting it with two nvme disks attached, and launching a nested VM @@ -96,16 +97,16 @@ def test_aarch64_device_passthrough(self): =20 self.vm.set_console() =20 - stack_path_tar_gz =3D self.ASSET_DEVICE_PASSTHROUGH_STACK.fetch() - self.archive_extract(stack_path_tar_gz, format=3D"tar") + stack_path_tar =3D self.ASSET_DEVICE_PASSTHROUGH_STACK.fetch() + self.archive_extract(stack_path_tar, format=3D"tar") =20 stack =3D self.scratch_file('out') - kernel =3D os.path.join(stack, 'Image.gz') - rootfs_host =3D os.path.join(stack, 'host.ext4') - disk_vfio =3D os.path.join(stack, 'disk_vfio') - disk_iommufd =3D os.path.join(stack, 'disk_iommufd') - guest_cmd =3D os.path.join(stack, 'guest.sh') - nested_guest_cmd =3D os.path.join(stack, 'nested_guest.sh') + kernel =3D join(stack, 'Image.gz') + rootfs_host =3D join(stack, 'host.ext4') + disk_vfio =3D join(stack, 'disk_vfio') + disk_iommufd =3D join(stack, 'disk_iommufd') + guest_cmd =3D join(stack, 'guest.sh') + nested_guest_cmd =3D join(stack, 'nested_guest.sh') # we generate two random disks with open(disk_vfio, "wb") as d: d.write(randbytes(512)) with open(disk_iommufd, "wb") as d: d.write(randbytes(1024)) --=20 2.43.0 From nobody Mon Dec 15 11:25:33 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1753602151; cv=none; d=zohomail.com; s=zohoarc; b=fw5G0utcMyqgRPd88zJaOkP8ABoScpEI1ExxWNrxIEKZPu4l7y+EK7yU0VNJ5iZvQlCdg6PW0HetTpX4xzMe+KwgqFyVH2c0SJ41LAPiXFrl23VV1/cPrU80bLdZXMEvOFBd4e0aHzKANPTBOHsPQZjwCQMZXHp2RaAUE6JjfYI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753602151; 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=HolV9X4BkVapdOFNAuZ95FskSHr7YQ0pnoaUzo/RGgg=; b=MrC88HXfAYaRBC2seXw38EDMqPl42EPmmDvzFFNUAKrZzsahXM8XQdjyVsHxrUUZwbZeqUdljJvtLiD0AJqAYq2/qbPGisVf9l+O0QM+hQ44yofbNQ30YD2JPkkqk/pl9Gr9uA6BUPIL1ofTIMTvHcnBZx86ohmg5Cs7oqmnn6w= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1753602151883602.5148516065767; Sun, 27 Jul 2025 00:42:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ufw1W-0006bA-KU; Sun, 27 Jul 2025 03:42:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ufw1O-0006I6-Pw for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:16 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ufw1L-000152-Pm for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:14 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2350fc2591dso39774975ad.1 for ; Sun, 27 Jul 2025 00:42:11 -0700 (PDT) Received: from localhost.localdomain (syn-098-150-199-049.res.spectrum.com. [98.150.199.49]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23fbe53b546sm29633055ad.177.2025.07.27.00.42.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jul 2025 00:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1753602130; x=1754206930; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HolV9X4BkVapdOFNAuZ95FskSHr7YQ0pnoaUzo/RGgg=; b=TDodKcjTBJwzNKL2KIdzdsjFxLg6XL6/9Fdr5nzTR0RlNAvTvT74zDHirQIqm77JdU N+RcQAb/xUVhLXgrTGpbpogPzCH46zSNCUHKYLqFf+n5us1/YGfMvja7itDCa5hweHvM AJ1b05DeAp4Go8S1zVKsTymhvzyEOVTzIrn7YOAmV1EYlfwGgCGjaBCjA/gbNEKajKq+ HFxRac+Y/uTgRYVmVAJGlfHgjKdaa3aL/Z9tyTB5V7e8KjJ2YODZp9KotSz4bfaggNqP QcszdM9ZD71kiDC30TiaALlHmKkb6k+nwyxD1gUYxcxS4q0eRI5GQOuk47b3keuyfGCC tQdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753602130; x=1754206930; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HolV9X4BkVapdOFNAuZ95FskSHr7YQ0pnoaUzo/RGgg=; b=Xaqb7JbHxD0MrvnNDV65Z/rXbkYrhqPK7uF+EL9dnOIxWhcqXFNpYFg5vLeihyejj7 me7zdcCpePD9B38JxA5P2zTz+PHXQsQ+ryFsekkHHFbQMz8t7Lh8sYFRpuu7Un/wlHrg FD3I6CKtL9T78Xrxt0EGybTsnrB2+OnuXt/qpC2F6Wl8GQk16piTg7EhVGcd9meeWzYY 8dNn9IkkOYxHJ4sAmi7rsQPD2H1P6s12eC921PToindpifANjOHAU5XnCChcZedMZgAV MXiJUfP6oizpMXuGywq5nTD/VC7lQx+r2jNI19cAGkwNyTI1r6MLhGfmgLGTVA+1O830 nZ2g== X-Gm-Message-State: AOJu0YxK0Vs7hfA9iS6jj4iX5O342qmPp5JZJWAs6F/5be8T6mStVx0/ VnuNRMCcFYv1wHO4wbL9ZwVcxrOU6NMgkBv+y0Q1fV5J3sB3loEhWhUSyptCJ7uL/R7X9tsLVs0 aTATk X-Gm-Gg: ASbGncsDkNT2QBm8//4TkfYKo8OAI5U1lwvAuW4lN9dlnLdxcmr/zRVdEUjYlaAG7vH 7u2HQhQb8PxDHaL+hW/ZYpg4XuSh2ZVe4xHDkX/7D7r499p7VH4Sn/eq2hzfEK71UuML8C7hu2J 3dMBBOSgthYlaCMTe9BPFqWzBVwajhL+Dc0Wx/pe1VYc6oqr6vOOrxrgTig/FW/Id8Km+pWT+p7 Kunkas4hSalKpCMuAcZltSwHwtmjjyM/yvybSPXDskHBLOfOVoNolPWtAW7tb8xUUhSJSsl97Gy P/Iej//QroY0qlVQy9+tOZdzXWtrCcPZgWiU+4KjE/UNvqWBz7kr/J39/lZtLbEskcOA4P0GODs 4U58e5CA+e3U4mkhhHmOsce8EDSABlQJcUF8nXtVuEmZ2Qb2pCX6Ou/ekrSRqIZfSqU5Cv8XLNE WeTFKHXAuCiA== X-Google-Smtp-Source: AGHT+IGgbIPDqR/0dS1vLD1FRaP6Zr4Wl/SyOGVyUerc20avUG9AN4+6cjQh+CQ2W9k6rNhQ0/8g+Q== X-Received: by 2002:a17:902:cccd:b0:23f:75d1:3691 with SMTP id d9443c01a7336-23fb2b5c028mr104499585ad.15.1753602130119; Sun, 27 Jul 2025 00:42:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Pierrick Bouvier Subject: [PATCH v9 2/6] tests/functional/test_aarch64_rme: update image Date: Sat, 26 Jul 2025 21:41:58 -1000 Message-ID: <20250727074202.83141-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250727074202.83141-1-richard.henderson@linaro.org> References: <20250727074202.83141-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.google.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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: 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 @linaro.org) X-ZM-MESSAGEID: 1753602153650116600 Content-Type: text/plain; charset="utf-8" From: Pierrick Bouvier TF-A needs to be patched to enable support for FEAT_TCR2 and FEAT_SCTLR2. This new image contains updated firmware. Signed-off-by: Pierrick Bouvier Signed-off-by: Richard Henderson Message-ID: <20250719035838.2284029-3-pierrick.bouvier@linaro.org> Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- tests/functional/test_aarch64_rme_sbsaref.py | 64 ++++++++------- tests/functional/test_aarch64_rme_virt.py | 85 +++++++------------- 2 files changed, 66 insertions(+), 83 deletions(-) diff --git a/tests/functional/test_aarch64_rme_sbsaref.py b/tests/functiona= l/test_aarch64_rme_sbsaref.py index 746770e776..cd6390b548 100755 --- a/tests/functional/test_aarch64_rme_sbsaref.py +++ b/tests/functional/test_aarch64_rme_sbsaref.py @@ -10,21 +10,23 @@ # SPDX-License-Identifier: GPL-2.0-or-later =20 import os +from os.path import join +import shutil =20 from qemu_test import QemuSystemTest, Asset, wait_for_console_pattern from qemu_test import exec_command_and_wait_for_pattern -from test_aarch64_rme_virt import test_realms_guest =20 =20 class Aarch64RMESbsaRefMachine(QemuSystemTest): =20 - # Stack is built with OP-TEE build environment from those instructions: + # Stack is inspired from: # https://linaro.atlassian.net/wiki/spaces/QEMU/pages/29051027459/ - # https://github.com/pbo-linaro/qemu-rme-stack + # https://github.com/pbo-linaro/qemu-linux-stack/tree/rme_sbsa_release + # ./build.sh && ./archive_artifacts.sh out.tar.xz ASSET_RME_STACK_SBSA =3D Asset( - ('https://fileserver.linaro.org/s/KJyeBxL82mz2r7F/' - 'download/rme-stack-op-tee-4.2.0-cca-v4-sbsa.tar.gz'), - 'dd9ab28ec869bdf3b5376116cb3689103b43433fd5c4bca0f4a8d8b3c104999e= ') + ('https://github.com/pbo-linaro/qemu-linux-stack/' + 'releases/download/build/rme_sbsa_release-a7f02cf.tar.xz'), + '27d8400b11befb828d6db0cab97e7ae102d0992c928d3dfbf38b24b6cf6c324c= ') =20 # This tests the FEAT_RME cpu implementation, by booting a VM supporti= ng it, # and launching a nested VM using it. @@ -35,35 +37,41 @@ def test_aarch64_rme_sbsaref(self): =20 self.vm.set_console() =20 - stack_path_tar_gz =3D self.ASSET_RME_STACK_SBSA.fetch() - self.archive_extract(stack_path_tar_gz, format=3D"tar") + stack_path_tar =3D self.ASSET_RME_STACK_SBSA.fetch() + self.archive_extract(stack_path_tar, format=3D"tar") =20 - rme_stack =3D self.scratch_file('rme-stack-op-tee-4.2.0-cca-v4-sbs= a') - pflash0 =3D os.path.join(rme_stack, 'images', 'SBSA_FLASH0.fd') - pflash1 =3D os.path.join(rme_stack, 'images', 'SBSA_FLASH1.fd') - virtual =3D os.path.join(rme_stack, 'images', 'disks', 'virtual') - drive =3D os.path.join(rme_stack, 'out-br', 'images', 'rootfs.ext4= ') + rme_stack =3D self.scratch_file('.') + pflash0 =3D join(rme_stack, 'out', 'SBSA_FLASH0.fd') + pflash1 =3D join(rme_stack, 'out', 'SBSA_FLASH1.fd') + rootfs =3D join(rme_stack, 'out', 'host.ext4') =20 - self.vm.add_args('-cpu', 'max,x-rme=3Don,pauth-impdef=3Don') + efi =3D join(rme_stack, 'out', 'EFI') + os.mkdir(efi) + shutil.copyfile(join(rme_stack, 'out', 'Image'), join(efi, 'Image'= )) + with open(join(efi, 'startup.nsh'), 'w') as startup: + startup.write('fs0:Image nokaslr root=3D/dev/vda rw init=3D/in= it --' + ' /host/out/lkvm run --realm' + ' -m 256m' + ' --restricted_mem' + ' --kernel /host/out/Image' + ' --disk /host/out/guest.ext4' + ' --params "root=3D/dev/vda rw init=3D/init"') + + self.vm.add_args('-cpu', 'max,x-rme=3Don') + self.vm.add_args('-smp', '2') self.vm.add_args('-m', '2G') self.vm.add_args('-M', 'sbsa-ref') self.vm.add_args('-drive', f'file=3D{pflash0},format=3Draw,if=3Dpf= lash') self.vm.add_args('-drive', f'file=3D{pflash1},format=3Draw,if=3Dpf= lash') - self.vm.add_args('-drive', f'file=3Dfat:rw:{virtual},format=3Draw') - self.vm.add_args('-drive', f'format=3Draw,if=3Dnone,file=3D{drive}= ,id=3Dhd0') - self.vm.add_args('-device', 'virtio-blk-pci,drive=3Dhd0') - self.vm.add_args('-device', 'virtio-9p-pci,fsdev=3Dshr0,mount_tag= =3Dshr0') - self.vm.add_args('-fsdev', f'local,security_model=3Dnone,path=3D{r= me_stack},id=3Dshr0') - self.vm.add_args('-device', 'virtio-net-pci,netdev=3Dnet0') - self.vm.add_args('-netdev', 'user,id=3Dnet0') - + self.vm.add_args('-drive', f'file=3Dfat:rw:{efi},format=3Draw') + self.vm.add_args('-drive', f'format=3Draw,file=3D{rootfs},if=3Dvir= tio') + self.vm.add_args('-virtfs', + f'local,path=3D{rme_stack}/,mount_tag=3Dhost,' + 'security_model=3Dmapped,readonly=3Doff') self.vm.launch() - # Wait for host VM boot to complete. - wait_for_console_pattern(self, 'Welcome to Buildroot', - failure_message=3D'Synchronous Exception = at') - exec_command_and_wait_for_pattern(self, 'root', '#') - - test_realms_guest(self) + # Wait for host and guest VM boot to complete. + wait_for_console_pattern(self, 'root@guest', + failure_message=3D'Kernel panic') =20 if __name__ =3D=3D '__main__': QemuSystemTest.main() diff --git a/tests/functional/test_aarch64_rme_virt.py b/tests/functional/t= est_aarch64_rme_virt.py index 8452d27928..bb603aaa26 100755 --- a/tests/functional/test_aarch64_rme_virt.py +++ b/tests/functional/test_aarch64_rme_virt.py @@ -9,50 +9,22 @@ # # SPDX-License-Identifier: GPL-2.0-or-later =20 -import os +from os.path import join =20 from qemu_test import QemuSystemTest, Asset from qemu_test import exec_command, wait_for_console_pattern from qemu_test import exec_command_and_wait_for_pattern =20 -def test_realms_guest(test_rme_instance): - - # Boot the (nested) guest VM - exec_command(test_rme_instance, - 'qemu-system-aarch64 -M virt,gic-version=3D3 ' - '-cpu host -enable-kvm -m 512M ' - '-M confidential-guest-support=3Drme0 ' - '-object rme-guest,id=3Drme0 ' - '-device virtio-net-pci,netdev=3Dnet0,romfile=3D ' - '-netdev user,id=3Dnet0 ' - '-kernel /mnt/out/bin/Image ' - '-initrd /mnt/out-br/images/rootfs.cpio ' - '-serial stdio') - # Detect Realm activation during (nested) guest boot. - wait_for_console_pattern(test_rme_instance, - 'SMC_RMI_REALM_ACTIVATE') - # Wait for (nested) guest boot to complete. - wait_for_console_pattern(test_rme_instance, - 'Welcome to Buildroot') - exec_command_and_wait_for_pattern(test_rme_instance, 'root', '#') - # query (nested) guest cca report - exec_command(test_rme_instance, 'cca-workload-attestation report') - wait_for_console_pattern(test_rme_instance, - '"cca-platform-hash-algo-id": "sha-256"') - wait_for_console_pattern(test_rme_instance, - '"cca-realm-hash-algo-id": "sha-512"') - wait_for_console_pattern(test_rme_instance, - '"cca-realm-public-key-hash-algo-id": "sha-25= 6"') - class Aarch64RMEVirtMachine(QemuSystemTest): =20 - # Stack is built with OP-TEE build environment from those instructions: + # Stack is inspired from: # https://linaro.atlassian.net/wiki/spaces/QEMU/pages/29051027459/ - # https://github.com/pbo-linaro/qemu-rme-stack + # https://github.com/pbo-linaro/qemu-linux-stack/tree/rme_release + # ./build.sh && ./archive_artifacts.sh out.tar.xz ASSET_RME_STACK_VIRT =3D Asset( - ('https://fileserver.linaro.org/s/iaRsNDJp2CXHMSJ/' - 'download/rme-stack-op-tee-4.2.0-cca-v4-qemu_v8.tar.gz'), - '1851adc232b094384d8b879b9a2cfff07ef3d6205032b85e9b3a4a9ae6b0b7ad= ') + ('https://github.com/pbo-linaro/qemu-linux-stack/' + 'releases/download/build/rme_release-86101e5.tar.xz'), + 'e42fef8439badb52a071ac446fc33cff4cb7d61314c7a28fdbe61a11e1faad3a= ') =20 # This tests the FEAT_RME cpu implementation, by booting a VM supporti= ng it, # and launching a nested VM using it. @@ -63,15 +35,16 @@ def test_aarch64_rme_virt(self): =20 self.vm.set_console() =20 - stack_path_tar_gz =3D self.ASSET_RME_STACK_VIRT.fetch() - self.archive_extract(stack_path_tar_gz, format=3D"tar") + stack_path_tar =3D self.ASSET_RME_STACK_VIRT.fetch() + self.archive_extract(stack_path_tar, format=3D"tar") =20 - rme_stack =3D self.scratch_file('rme-stack-op-tee-4.2.0-cca-v4-qem= u_v8') - kernel =3D os.path.join(rme_stack, 'out', 'bin', 'Image') - bios =3D os.path.join(rme_stack, 'out', 'bin', 'flash.bin') - drive =3D os.path.join(rme_stack, 'out-br', 'images', 'rootfs.ext4= ') + rme_stack =3D self.scratch_file('.') + kernel =3D join(rme_stack, 'out', 'Image') + bios =3D join(rme_stack, 'out', 'flash.bin') + rootfs =3D join(rme_stack, 'out', 'host.ext4') =20 - self.vm.add_args('-cpu', 'max,x-rme=3Don,pauth-impdef=3Don') + self.vm.add_args('-cpu', 'max,x-rme=3Don') + self.vm.add_args('-smp', '2') self.vm.add_args('-m', '2G') self.vm.add_args('-M', 'virt,acpi=3Doff,' 'virtualization=3Don,' @@ -79,23 +52,25 @@ def test_aarch64_rme_virt(self): 'gic-version=3D3') self.vm.add_args('-bios', bios) self.vm.add_args('-kernel', kernel) - self.vm.add_args('-drive', f'format=3Draw,if=3Dnone,file=3D{drive}= ,id=3Dhd0') - self.vm.add_args('-device', 'virtio-blk-pci,drive=3Dhd0') - self.vm.add_args('-device', 'virtio-9p-device,fsdev=3Dshr0,mount_t= ag=3Dshr0') - self.vm.add_args('-fsdev', f'local,security_model=3Dnone,path=3D{r= me_stack},id=3Dshr0') - self.vm.add_args('-device', 'virtio-net-pci,netdev=3Dnet0') - self.vm.add_args('-netdev', 'user,id=3Dnet0') + self.vm.add_args('-drive', f'format=3Draw,file=3D{rootfs},if=3Dvir= tio') + self.vm.add_args('-virtfs', + f'local,path=3D{rme_stack}/,mount_tag=3Dhost,' + 'security_model=3Dmapped,readonly=3Doff') # We need to add nokaslr to avoid triggering this sporadic bug: # https://gitlab.com/qemu-project/qemu/-/issues/2823 - self.vm.add_args('-append', 'root=3D/dev/vda nokaslr') + self.vm.add_args('-append', + 'nokaslr root=3D/dev/vda rw init=3D/init --' + ' /host/out/lkvm run --realm' + ' -m 256m' + ' --restricted_mem' + ' --kernel /host/out/Image' + ' --disk /host/out/guest.ext4' + ' --params "root=3D/dev/vda rw init=3D/init"') =20 self.vm.launch() - # Wait for host VM boot to complete. - wait_for_console_pattern(self, 'Welcome to Buildroot', - failure_message=3D'Synchronous Exception = at') - exec_command_and_wait_for_pattern(self, 'root', '#') - - test_realms_guest(self) + # Wait for host and guest VM boot to complete. + wait_for_console_pattern(self, 'root@guest', + failure_message=3D'Kernel panic') =20 if __name__ =3D=3D '__main__': QemuSystemTest.main() --=20 2.43.0 From nobody Mon Dec 15 11:25:33 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1753602225; cv=none; d=zohomail.com; s=zohoarc; b=KcHs2/6zmKRPI9+rCWmZRkKWhaweFKaGvpXOvINNCNlPtMz30BMokFuNEW8+iQCdGgMPle2V45Qwh2jdQj/yUj5LIPzCQPlsE61ajz145hxK7IdQaAMjpGWgxJCKjsDS1Yn4MAKiPdgNvVtFqWSve5X1FnClLYhN/i6DhWonRTM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753602225; 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=96pyrgkhSUw4iByVkrcfQqMdWJZyumlNicYUABZLtYw=; b=hJyqp0aw9EBe5eSFI5vGbqURzGTlnBaQwAAQzoY7TdXtowC780ef0eDjGUqGFGl7YNHMPDCIQ+rFKdPe+tggKX9djnZllzX9XUhwSf3SpoHaz4SvH8Duoq3QwLey4axc33CFQsFl53efwiXTkBay/yFKJue+ApXqcH9Px4fq2cs= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1753602225428877.5572837510987; Sun, 27 Jul 2025 00:43:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ufw1Y-0006t1-Bg; Sun, 27 Jul 2025 03:42:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ufw1Q-0006Ip-M0 for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:17 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ufw1O-00015R-Ao for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:16 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-23dea2e01e4so45380705ad.1 for ; Sun, 27 Jul 2025 00:42:12 -0700 (PDT) Received: from localhost.localdomain (syn-098-150-199-049.res.spectrum.com. [98.150.199.49]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23fbe53b546sm29633055ad.177.2025.07.27.00.42.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jul 2025 00:42:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1753602132; x=1754206932; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=96pyrgkhSUw4iByVkrcfQqMdWJZyumlNicYUABZLtYw=; b=EAAK20IghD81/2e9l44suVYMT4wwevG81I57eHe4LV/Capsgz4rZIQ/fi72llJclZP vsjMIrXYGjCxD7xQnG4Cwz2j1awIN4/09ehkcY+hkxXibcuWNdzbDhsivJWqaPnZ7cGX aClq0c7XuYzi2v6Br8EXgW8wiv4jd1/R0TFO2G2KCiiUeDIAwMimtXr+97/MMv1CPR2n JOd3mhSntUlZ8SXIKP/W95zRaNXqqxV9gjjqEVzwNvSzO7df9Djp2k106RdQX2On47jp 2tZmJIDJsD1HPfe9/qNBrz0RW4T3KcLuH9GeqxXscpAemTR7nEc0Xs7Fr5Ukp1GK7P1E T1kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753602132; x=1754206932; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=96pyrgkhSUw4iByVkrcfQqMdWJZyumlNicYUABZLtYw=; b=sq6U9lXpuHsp1BKdcYreH4ZzVHc2MqiCtceoxsJmJSvknSZKVGWZrocq+TChNsItYx Qcv506LrDwmXB9sG8nbD5fumAfA8i3RMJpKakMxPIQIHP3ZjrNE5ozp1+4hxq+TgBqxD DBnAdmItoLuQAAtE9aPwhNqoWn5NhVEmaEbIlOK6oYTxSLOBsfUFerT4aBx9bwAVf9n6 ckl9SbAIfKWOkjA+rTX1I0u/LClUZcDUeNpOE+JBaCtw2oCRbQlGNhG5qI6t11BYBW5o D1l7sOYvNOOaYgkNCQ8aspEl8m4ymLZb+7AH7N3DQ5agEh+GsrzOODlJin032i1WX7K1 8u3Q== X-Gm-Message-State: AOJu0YzMtcVMxrzVV4Vggp/K/lyALW4u6sdxxE6OEYdmyDfhVX69wUP5 fsTtKF7LM6q3JcShpXBIG6IXoNRwlHcXkenLxQZBh/XxFS6dsaRQNORZgkVooazmvUPaMuQo87L pQFMa X-Gm-Gg: ASbGncs0R2UA/jBQQBtxm1GMQpJCjmJzlHbkjv0tKSL/ARu63zjiHJqxI0ZRbBTMxSy F155TmKBf/l4sN2Tu6aeo88kygZ3beJG7zUhrIaxjls0y00mmOE8IcMEj5ZdSdtznMGZr4wqJTl jmtsohKCX6ktlHLTx2PS1raWNtYJmDj1YwdtdbUorSbAKQvMXPXPXAEKCPjmWvUG4PqtM7FgqOI VvJX1SickmWdyby78JdG8Svz8JBdkCakPKS69MNFptDt0jaAazntb6fh+0uJz2X+/YzvpEQ3LRc S0YRaDBMhhdblJivhB283AiNKSVK+W8ZMrpE1jHhSAgYTg9QnKEE/jv4C/4wh0QMQDro3T+BP3r snQDjZ54H6FSiWv62LDVWwMKlMvk+0BF3p3ZanwP+oq5JwehcvlqFgbQSfzMopozMxscmPX18Jx QFjipyChhJ8g== X-Google-Smtp-Source: AGHT+IHjrnsaVl+/JclQ9ZBTOBSaIBsAYfaXri0CfKgBK051IV/Z6WIqaIcijJIdVaB5bWr3VBOiUg== X-Received: by 2002:a17:902:d48f:b0:23f:ae3c:5f59 with SMTP id d9443c01a7336-23fb2e614f3mr109490355ad.0.1753602131645; Sun, 27 Jul 2025 00:42:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Gustavo Romero Subject: [PATCH v9 3/6] target/arm: Implement FEAT_SCTLR2 and enable with -cpu max Date: Sat, 26 Jul 2025 21:41:59 -1000 Message-ID: <20250727074202.83141-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250727074202.83141-1-richard.henderson@linaro.org> References: <20250727074202.83141-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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: 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 @linaro.org) X-ZM-MESSAGEID: 1753602225897116600 Content-Type: text/plain; charset="utf-8" From: Gustavo Romero Add FEAT_SCTLR2, which introduces the SCTLR2_EL1, SCTLR2_EL2, and SCTLR2_EL3 registers. These registers are extensions of the SCTLR_ELx ones. Signed-off-by: Gustavo Romero Reviewed-by: Richard Henderson Message-ID: <20250711140828.1714666-4-gustavo.romero@linaro.org> [rth: Remove FEAT_MEC code; handle SCR and HCRX enable bits.] Signed-off-by: Richard Henderson --- target/arm/cpu-features.h | 5 ++ target/arm/cpu.h | 15 ++++++ target/arm/internals.h | 1 + target/arm/cpu.c | 3 ++ target/arm/helper.c | 97 ++++++++++++++++++++++++++++++++--- target/arm/tcg/cpu64.c | 5 +- docs/system/arm/emulation.rst | 1 + 7 files changed, 119 insertions(+), 8 deletions(-) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 5876162428..e372543bf3 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -904,6 +904,11 @@ static inline bool isar_feature_aa64_nv2(const ARMISAR= egisters *id) return FIELD_EX64_IDREG(id, ID_AA64MMFR2, NV) >=3D 2; } =20 +static inline bool isar_feature_aa64_sctlr2(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64MMFR3, SCTLRX) !=3D 0; +} + static inline bool isar_feature_aa64_pmuv3p1(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64DFR0, PMUVER) >=3D 4 && diff --git a/target/arm/cpu.h b/target/arm/cpu.h index dc9b6dce4c..08a29802e1 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -337,6 +337,7 @@ typedef struct CPUArchState { }; uint64_t sctlr_el[4]; }; + uint64_t sctlr2_el[4]; /* Extension to System control register. */ uint64_t vsctlr; /* Virtualization System control register. */ uint64_t cpacr_el1; /* Architectural feature access control regist= er */ uint64_t cptr_el[4]; /* ARMv8 feature trap registers */ @@ -1420,6 +1421,19 @@ void pmu_init(ARMCPU *cpu); #define SCTLR_SPINTMASK (1ULL << 62) /* FEAT_NMI */ #define SCTLR_TIDCP (1ULL << 63) /* FEAT_TIDCP1 */ =20 +#define SCTLR2_EMEC (1ULL << 1) /* FEAT_MEC */ +#define SCTLR2_NMEA (1ULL << 2) /* FEAT_DoubleFault2 */ +#define SCTLR2_ENADERR (1ULL << 3) /* FEAT_ADERR */ +#define SCTLR2_ENANERR (1ULL << 4) /* FEAT_ANERR */ +#define SCTLR2_EASE (1ULL << 5) /* FEAT_DoubleFault2 */ +#define SCTLR2_ENIDCP128 (1ULL << 6) /* FEAT_SYSREG128 */ +#define SCTLR2_ENPACM (1ULL << 7) /* FEAT_PAuth_LR */ +#define SCTLR2_ENPACM0 (1ULL << 8) /* FEAT_PAuth_LR */ +#define SCTLR2_CPTA (1ULL << 9) /* FEAT_CPA2 */ +#define SCTLR2_CPTA0 (1ULL << 10) /* FEAT_CPA2 */ +#define SCTLR2_CPTM (1ULL << 11) /* FEAT_CPA2 */ +#define SCTLR2_CPTM0 (1ULL << 12) /* FEAT_CAP2 */ + #define CPSR_M (0x1fU) #define CPSR_T (1U << 5) #define CPSR_F (1U << 6) @@ -1712,6 +1726,7 @@ static inline void xpsr_write(CPUARMState *env, uint3= 2_t val, uint32_t mask) #define SCR_HXEN (1ULL << 38) #define SCR_TRNDR (1ULL << 40) #define SCR_ENTP2 (1ULL << 41) +#define SCR_SCTLR2EN (1ULL << 44) #define SCR_GPF (1ULL << 48) #define SCR_NSE (1ULL << 62) =20 diff --git a/target/arm/internals.h b/target/arm/internals.h index 1b3d0244fd..ea485835fa 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -232,6 +232,7 @@ FIELD(VTCR, SL2, 33, 1) #define HCRX_CMOW (1ULL << 9) #define HCRX_MCE2 (1ULL << 10) #define HCRX_MSCEN (1ULL << 11) +#define HCRX_SCTLR2EN (1ULL << 15) =20 #define HPFAR_NS (1ULL << 63) =20 diff --git a/target/arm/cpu.c b/target/arm/cpu.c index e2b2337399..2ab04cb5f7 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -644,6 +644,9 @@ void arm_emulate_firmware_reset(CPUState *cpustate, int= target_el) if (cpu_isar_feature(aa64_fgt, cpu)) { env->cp15.scr_el3 |=3D SCR_FGTEN; } + if (cpu_isar_feature(aa64_sctlr2, cpu)) { + env->cp15.scr_el3 |=3D SCR_SCTLR2EN; + } } =20 if (target_el =3D=3D 2) { diff --git a/target/arm/helper.c b/target/arm/helper.c index 0c1299ff84..11ddeabb13 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -741,6 +741,9 @@ static void scr_write(CPUARMState *env, const ARMCPRegI= nfo *ri, uint64_t value) if (cpu_isar_feature(aa64_ecv, cpu)) { valid_mask |=3D SCR_ECVEN; } + if (cpu_isar_feature(aa64_sctlr2, cpu)) { + valid_mask |=3D SCR_SCTLR2EN; + } } else { valid_mask &=3D ~(SCR_RW | SCR_ST); if (cpu_isar_feature(aa32_ras, cpu)) { @@ -3907,23 +3910,21 @@ static void hcrx_write(CPUARMState *env, const ARMC= PRegInfo *ri, ARMCPU *cpu =3D env_archcpu(env); uint64_t valid_mask =3D 0; =20 - /* FEAT_MOPS adds MSCEn and MCE2 */ if (cpu_isar_feature(aa64_mops, cpu)) { valid_mask |=3D HCRX_MSCEN | HCRX_MCE2; } - - /* FEAT_NMI adds TALLINT, VINMI and VFNMI */ if (cpu_isar_feature(aa64_nmi, cpu)) { valid_mask |=3D HCRX_TALLINT | HCRX_VINMI | HCRX_VFNMI; } - /* FEAT_CMOW adds CMOW */ if (cpu_isar_feature(aa64_cmow, cpu)) { valid_mask |=3D HCRX_CMOW; } - /* FEAT_XS adds FGTnXS, FnXS */ if (cpu_isar_feature(aa64_xs, cpu)) { valid_mask |=3D HCRX_FGTNXS | HCRX_FNXS; } + if (cpu_isar_feature(aa64_sctlr2, cpu)) { + valid_mask |=3D HCRX_SCTLR2EN; + } =20 /* Clear RES0 bits. */ env->cp15.hcrx_el2 =3D value & valid_mask; @@ -3981,11 +3982,16 @@ uint64_t arm_hcrx_el2_eff(CPUARMState *env) * This may need to be revisited for future bits. */ if (!arm_is_el2_enabled(env)) { + ARMCPU *cpu =3D env_archcpu(env); uint64_t hcrx =3D 0; - if (cpu_isar_feature(aa64_mops, env_archcpu(env))) { - /* MSCEn behaves as 1 if EL2 is not enabled */ + + /* Bits which whose effective value is 1 if el2 not enabled. */ + if (cpu_isar_feature(aa64_mops, cpu)) { hcrx |=3D HCRX_MSCEN; } + if (cpu_isar_feature(aa64_sctlr2, cpu)) { + hcrx |=3D HCRX_SCTLR2EN; + } return hcrx; } if (arm_feature(env, ARM_FEATURE_EL3) && !(env->cp15.scr_el3 & SCR_HXE= N)) { @@ -4513,6 +4519,8 @@ static void define_arm_vh_e2h_redirects_aliases(ARMCP= U *cpu) static const struct E2HAlias aliases[] =3D { { K(3, 0, 1, 0, 0), K(3, 4, 1, 0, 0), K(3, 5, 1, 0, 0), "SCTLR", "SCTLR_EL2", "SCTLR_EL12" }, + { K(3, 0, 1, 0, 3), K(3, 4, 1, 0, 3), K(3, 5, 1, 0, 3), + "SCTLR2_EL1", "SCTLR2_EL2", "SCTLR2_EL12", isar_feature_aa64_sct= lr2 }, { K(3, 0, 1, 0, 2), K(3, 4, 1, 1, 2), K(3, 5, 1, 0, 2), "CPACR", "CPTR_EL2", "CPACR_EL12" }, { K(3, 0, 2, 0, 0), K(3, 4, 2, 0, 0), K(3, 5, 2, 0, 0), @@ -5994,6 +6002,77 @@ static const ARMCPRegInfo actlr2_hactlr2_reginfo[] = =3D { .resetvalue =3D 0 }, }; =20 +static CPAccessResult sctlr2_el2_access(CPUARMState *env, + const ARMCPRegInfo *ri, + bool isread) +{ + if (arm_current_el(env) < 3 + && arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_SCTLR2EN)) { + return CP_ACCESS_TRAP_EL3; + } + return CP_ACCESS_OK; +} + +static CPAccessResult sctlr2_el1_access(CPUARMState *env, + const ARMCPRegInfo *ri, + bool isread) +{ + CPAccessResult ret =3D access_tvm_trvm(env, ri, isread); + if (ret !=3D CP_ACCESS_OK) { + return ret; + } + if (arm_current_el(env) < 2 && !(arm_hcrx_el2_eff(env) & HCRX_SCTLR2EN= )) { + return CP_ACCESS_TRAP_EL2; + } + return sctlr2_el2_access(env, ri, isread); +} + +static void sctlr2_el1_write(CPUARMState *env, const ARMCPRegInfo *ri, + uint64_t value) +{ + uint64_t valid_mask =3D 0; + + value &=3D valid_mask; + raw_write(env, ri, value); +} + +static void sctlr2_el2_write(CPUARMState *env, const ARMCPRegInfo *ri, + uint64_t value) +{ + uint64_t valid_mask =3D 0; + + value &=3D valid_mask; + raw_write(env, ri, value); +} + +static void sctlr2_el3_write(CPUARMState *env, const ARMCPRegInfo *ri, + uint64_t value) +{ + uint64_t valid_mask =3D 0; + + value &=3D valid_mask; + raw_write(env, ri, value); +} + +static const ARMCPRegInfo sctlr2_reginfo[] =3D { + { .name =3D "SCTLR2_EL1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 0, .opc2 =3D 3, .crn =3D 1, .crm =3D 0, + .access =3D PL1_RW, .accessfn =3D sctlr2_el1_access, + .writefn =3D sctlr2_el1_write, .fgt =3D FGT_SCTLR_EL1, + .nv2_redirect_offset =3D 0x278 | NV2_REDIR_NV1, + .fieldoffset =3D offsetof(CPUARMState, cp15.sctlr2_el[1]) }, + { .name =3D "SCTLR2_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 3, .crn =3D 1, .crm =3D 0, + .access =3D PL2_RW, .accessfn =3D sctlr2_el2_access, + .writefn =3D sctlr2_el2_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.sctlr2_el[2]) }, + { .name =3D "SCTLR2_EL3", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 6, .opc2 =3D 3, .crn =3D 1, .crm =3D 0, + .access =3D PL3_RW, .writefn =3D sctlr2_el3_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.sctlr2_el[3]) }, +}; + void register_cp_regs_for_features(ARMCPU *cpu) { /* Register all the coprocessor registers based on feature bits */ @@ -7223,6 +7302,10 @@ void register_cp_regs_for_features(ARMCPU *cpu) define_arm_cp_regs(cpu, nmi_reginfo); } =20 + if (cpu_isar_feature(aa64_sctlr2, cpu)) { + define_arm_cp_regs(cpu, sctlr2_reginfo); + } + if (cpu_isar_feature(any_predinv, cpu)) { define_arm_cp_regs(cpu, predinv_reginfo); } diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 35cddbafa4..f4efff03a5 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1247,7 +1247,10 @@ void aarch64_max_tcg_initfn(Object *obj) t =3D FIELD_DP64(t, ID_AA64MMFR2, E0PD, 1); /* FEAT_E0PD */ SET_IDREG(isar, ID_AA64MMFR2, t); =20 - FIELD_DP64_IDREG(isar, ID_AA64MMFR3, SPEC_FPACC, 1); /* FEAT_FPACC_SPE= C */ + t =3D GET_IDREG(isar, ID_AA64MMFR3); + t =3D FIELD_DP64(t, ID_AA64MMFR3, SCTLRX, 1); /* FEAT_SCTLR2 */ + t =3D FIELD_DP64(t, ID_AA64MMFR3, SPEC_FPACC, 1); /* FEAT_FPACC_SPEC */ + SET_IDREG(isar, ID_AA64MMFR3, t); =20 t =3D GET_IDREG(isar, ID_AA64ZFR0); t =3D FIELD_DP64(t, ID_AA64ZFR0, SVEVER, 2); /* FEAT_SVE2p1 */ diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 890dc6fee2..66043b0747 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -121,6 +121,7 @@ the following architecture extensions: - FEAT_RPRES (Increased precision of FRECPE and FRSQRTE) - FEAT_S2FWB (Stage 2 forced Write-Back) - FEAT_SB (Speculation Barrier) +- FEAT_SCTLR2 (Extension to SCTLR_ELx) - FEAT_SEL2 (Secure EL2) - FEAT_SHA1 (SHA1 instructions) - FEAT_SHA256 (SHA256 instructions) --=20 2.43.0 From nobody Mon Dec 15 11:25:33 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1753602199; cv=none; d=zohomail.com; s=zohoarc; b=cUKvfEjy+AYR76ubJHsvrBhAAH8nN2KUOtxZhfOmrw0tCYhS+S7BK0AosD1tLKfrMB4Z4EKLMpa29eG/dmJJdXGpGz+OPCOK3qvEb4M3VHuErtLkv6pZYrO3AOVFcBUp5fSncpCn3cofrq3qHP85NDQVue8c8mqsB5CK5VZr3go= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753602199; 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=fNLo+7ALroGiAGWFemZWDAH0MuMwfSmyxDTl4Ftnsyk=; b=NAi84S5Cz0kuPbf/0ACEU9OxINu4dD7QJgYfuk3zQfCEKstsj16aLtDNjvxlQ9d0XbppqRzBDHFcLuDrML1lIsjK5FO9/8FapslMu9E24Y/FL+kjP8JckDBQvb8kl2gAcrhezhlOjUo2oMyIjqA/jrPyAg+85LkSO4HPpPir+Cg= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1753602199133914.9576098424827; Sun, 27 Jul 2025 00:43:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ufw1a-00078q-2k; Sun, 27 Jul 2025 03:42:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ufw1Q-0006J6-WB for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:18 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ufw1O-00015o-P0 for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:16 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-234c5b57557so28932605ad.3 for ; Sun, 27 Jul 2025 00:42:14 -0700 (PDT) Received: from localhost.localdomain (syn-098-150-199-049.res.spectrum.com. [98.150.199.49]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23fbe53b546sm29633055ad.177.2025.07.27.00.42.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jul 2025 00:42:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1753602133; x=1754206933; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fNLo+7ALroGiAGWFemZWDAH0MuMwfSmyxDTl4Ftnsyk=; b=xach8I7WqyGRSMJnMnVgsSqO+MfKcM9vnTgjvVFrW9xDH9+BgFTgs3qTUQxyaF8AeW nBUV8C9mnAtoFRn4YhM/MqmDRgcOaFwwgaHWw63stNn1mSbjreFKPXFdzwOFm6vaaJPO XPpyHCDz2QX9+Vs0FBk89ir1ZHZeFsjqcvXma8jkRTn+U1AGF703ez0iaPHyFNPU50xJ weyTWqIQMKqyv6Nzf6P9cH6i9OrpmjuArG0C2JpoP4weg92hlO5OB5z/M78vMh12L6Gl QEYmOv01aBiFaO/QADO3gV8Xu0UCtZ92ATNC8of0Hp5dRFk4JITEpsiXYXAy9j8bEoq6 VTcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753602133; x=1754206933; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fNLo+7ALroGiAGWFemZWDAH0MuMwfSmyxDTl4Ftnsyk=; b=Xe6hTSO9u3QWM/QHcA80fjgLwBTYQivx1cw6OfjpgH/ubc7Aq/pWqxOyGTi/AyGhxW Y1Sv5WfT+ueSzt0C62mJrcKubi/bIeo0eI2PUSaRf8vf9EFMTrIofY31XdWiE+IIXyya Dq9lgnS7Q15dvTtj+70oj0G/TH+68oXnITafzBA3GOYwNEHvBCUS6pHXF3ieBmAnRfui /WnwQ4YqBkxbmDFdtZPJHA7uii+zFLEQ/g/23gozhQxdaP7KGZ6DbbH3cVYzowZ7vXQZ MLEbWCI2+2rTpimbsnM6LnlsXOfRDlhVsQLlMOGMq+p5azKp1C7dT6xtJlKUlWLhWuxw 856g== X-Gm-Message-State: AOJu0Yylkl6bFG4QHuPCY3C3XBcRdWBISOdLGu7sMc6l+5s3QtqNrxhl ImRPTPTyA0hyCFBGB8dfblwFmul0HQre5sMRqgTuRf7DjlHt6BHoYdMwYJEFuHEGJVb2NfSgvUD xOPou X-Gm-Gg: ASbGncsvHGAtsM5v9CgLAFr+NA4WdEZHoZw7Ph4gwMO9s4L0Fg1rebQXa2+/O8Tk24o Vd3dvpRyyd590saqVw00C8jLPiBqhTSg/Z2FwDx5i0QlFnxVeXDiyzzeVR16kPrnrqeqtI4ZwaC IHyWT1Y+MP3DB5/gr/o3qXzrqO1gEthvgXqDnD/6BtL2b0C8wjeN1xfEor0nzFo3DOkaym58rpx TMthejDvYTc542rEoDS4xB4Xz/YIiH8okyE+1NuvcTNSPNgxzhJJPnJd9kDC8jESkpBI5Qg8Otz h758+23VyIaZ9wm/ZFbI5/1hqTqj613OmxEyNu+ZbC0WUY9jelQBMqZsXH1z9/LpXchYDLf2W3B SsWciq6PseUurS7gs73HSV2rNz0kTbsXlsG/BMEk1XEBWXaZpMm1UXu1rgQQkENEUWYrYI3cuSb JI2V1nUHbOvw== X-Google-Smtp-Source: AGHT+IEC8IiuRfRARjtcDasZ7JhZ7r11NtCCH5OHeZD9z/ubYzvs7VirctSRGuq/3k+P7j/o4UMOdA== X-Received: by 2002:a17:902:d487:b0:23f:af68:ae38 with SMTP id d9443c01a7336-23fb30b3006mr113060295ad.31.1753602133349; Sun, 27 Jul 2025 00:42:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Gustavo Romero Subject: [PATCH v9 4/6] target/arm: Implement FEAT_TCR2 and enable with -cpu max Date: Sat, 26 Jul 2025 21:42:00 -1000 Message-ID: <20250727074202.83141-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250727074202.83141-1-richard.henderson@linaro.org> References: <20250727074202.83141-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x631.google.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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: 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 @linaro.org) X-ZM-MESSAGEID: 1753602199739116600 Content-Type: text/plain; charset="utf-8" From: Gustavo Romero Add FEAT_TCR2, which introduces the TCR2_EL1 and TCR2_EL2 registers. These registers are extensions of the TCR_ELx registers and provide top-level control of the EL10 and EL20 translation regimes. Signed-off-by: Gustavo Romero Message-ID: <20250711140828.1714666-5-gustavo.romero@linaro.org> Reviewed-by: Richard Henderson [rth: Remove FEAT_MEC code; handle SCR and HCRX enable bits.] Signed-off-by: Richard Henderson --- target/arm/cpu-features.h | 5 +++ target/arm/cpu.h | 2 + target/arm/internals.h | 19 ++++++++++ target/arm/cpu.c | 3 ++ target/arm/helper.c | 71 +++++++++++++++++++++++++++++++++++ target/arm/tcg/cpu64.c | 1 + docs/system/arm/emulation.rst | 1 + 7 files changed, 102 insertions(+) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index e372543bf3..8ec8c3feb3 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -904,6 +904,11 @@ static inline bool isar_feature_aa64_nv2(const ARMISAR= egisters *id) return FIELD_EX64_IDREG(id, ID_AA64MMFR2, NV) >=3D 2; } =20 +static inline bool isar_feature_aa64_tcr2(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64MMFR3, TCRX) !=3D 0; +} + static inline bool isar_feature_aa64_sctlr2(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64MMFR3, SCTLRX) !=3D 0; diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 08a29802e1..c15d79a106 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -366,6 +366,7 @@ typedef struct CPUArchState { uint64_t vsttbr_el2; /* Secure Virtualization Translation Table. */ /* MMU translation table base control. */ uint64_t tcr_el[4]; + uint64_t tcr2_el[3]; uint64_t vtcr_el2; /* Virtualization Translation Control. */ uint64_t vstcr_el2; /* Secure Virtualization Translation Control. = */ uint32_t c2_data; /* MPU data cacheable bits. */ @@ -1726,6 +1727,7 @@ static inline void xpsr_write(CPUARMState *env, uint3= 2_t val, uint32_t mask) #define SCR_HXEN (1ULL << 38) #define SCR_TRNDR (1ULL << 40) #define SCR_ENTP2 (1ULL << 41) +#define SCR_TCR2EN (1ULL << 43) #define SCR_SCTLR2EN (1ULL << 44) #define SCR_GPF (1ULL << 48) #define SCR_NSE (1ULL << 62) diff --git a/target/arm/internals.h b/target/arm/internals.h index ea485835fa..ffc981c3b6 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -201,6 +201,24 @@ FIELD(CPTR_EL3, TCPAC, 31, 1) #define TTBCR_SH1 (1U << 28) #define TTBCR_EAE (1U << 31) =20 +#define TCR2_PNCH (1ULL << 0) +#define TCR2_PIE (1ULL << 1) +#define TCR2_E0POE (1ULL << 2) +#define TCR2_POE (1ULL << 3) +#define TCR2_AIE (1ULL << 4) +#define TCR2_D128 (1ULL << 5) +#define TCR2_PTTWI (1ULL << 10) +#define TCR2_HAFT (1ULL << 11) +#define TCR2_AMEC0 (1ULL << 12) +#define TCR2_AMEC1 (1ULL << 13) +#define TCR2_DISCH0 (1ULL << 14) +#define TCR2_DISCH1 (1ULL << 15) +#define TCR2_A2 (1ULL << 16) +#define TCR2_FNG0 (1ULL << 17) +#define TCR2_FNG1 (1ULL << 18) +#define TCR2_FNGNA0 (1ULL << 20) +#define TCR2_FNGNA1 (1ULL << 21) + FIELD(VTCR, T0SZ, 0, 6) FIELD(VTCR, SL0, 6, 2) FIELD(VTCR, IRGN0, 8, 2) @@ -232,6 +250,7 @@ FIELD(VTCR, SL2, 33, 1) #define HCRX_CMOW (1ULL << 9) #define HCRX_MCE2 (1ULL << 10) #define HCRX_MSCEN (1ULL << 11) +#define HCRX_TCR2EN (1ULL << 14) #define HCRX_SCTLR2EN (1ULL << 15) =20 #define HPFAR_NS (1ULL << 63) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 2ab04cb5f7..27a4610da5 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -644,6 +644,9 @@ void arm_emulate_firmware_reset(CPUState *cpustate, int= target_el) if (cpu_isar_feature(aa64_fgt, cpu)) { env->cp15.scr_el3 |=3D SCR_FGTEN; } + if (cpu_isar_feature(aa64_tcr2, cpu)) { + env->cp15.scr_el3 |=3D SCR_TCR2EN; + } if (cpu_isar_feature(aa64_sctlr2, cpu)) { env->cp15.scr_el3 |=3D SCR_SCTLR2EN; } diff --git a/target/arm/helper.c b/target/arm/helper.c index 11ddeabb13..5a219703ae 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -741,6 +741,9 @@ static void scr_write(CPUARMState *env, const ARMCPRegI= nfo *ri, uint64_t value) if (cpu_isar_feature(aa64_ecv, cpu)) { valid_mask |=3D SCR_ECVEN; } + if (cpu_isar_feature(aa64_tcr2, cpu)) { + valid_mask |=3D SCR_TCR2EN; + } if (cpu_isar_feature(aa64_sctlr2, cpu)) { valid_mask |=3D SCR_SCTLR2EN; } @@ -3922,6 +3925,9 @@ static void hcrx_write(CPUARMState *env, const ARMCPR= egInfo *ri, if (cpu_isar_feature(aa64_xs, cpu)) { valid_mask |=3D HCRX_FGTNXS | HCRX_FNXS; } + if (cpu_isar_feature(aa64_tcr2, cpu)) { + valid_mask |=3D HCRX_TCR2EN; + } if (cpu_isar_feature(aa64_sctlr2, cpu)) { valid_mask |=3D HCRX_SCTLR2EN; } @@ -3989,6 +3995,9 @@ uint64_t arm_hcrx_el2_eff(CPUARMState *env) if (cpu_isar_feature(aa64_mops, cpu)) { hcrx |=3D HCRX_MSCEN; } + if (cpu_isar_feature(aa64_tcr2, cpu)) { + hcrx |=3D HCRX_TCR2EN; + } if (cpu_isar_feature(aa64_sctlr2, cpu)) { hcrx |=3D HCRX_SCTLR2EN; } @@ -4529,6 +4538,8 @@ static void define_arm_vh_e2h_redirects_aliases(ARMCP= U *cpu) "TTBR1_EL1", "TTBR1_EL2", "TTBR1_EL12" }, { K(3, 0, 2, 0, 2), K(3, 4, 2, 0, 2), K(3, 5, 2, 0, 2), "TCR_EL1", "TCR_EL2", "TCR_EL12" }, + { K(3, 0, 2, 0, 3), K(3, 4, 2, 0, 3), K(3, 5, 2, 0, 3), + "TCR2_EL1", "TCR2_EL2", "TCR2_EL12", isar_feature_aa64_tcr2 }, { K(3, 0, 4, 0, 0), K(3, 4, 4, 0, 0), K(3, 5, 4, 0, 0), "SPSR_EL1", "SPSR_EL2", "SPSR_EL12" }, { K(3, 0, 4, 0, 1), K(3, 4, 4, 0, 1), K(3, 5, 4, 0, 1), @@ -6073,6 +6084,62 @@ static const ARMCPRegInfo sctlr2_reginfo[] =3D { .fieldoffset =3D offsetof(CPUARMState, cp15.sctlr2_el[3]) }, }; =20 +static CPAccessResult tcr2_el2_access(CPUARMState *env, const ARMCPRegInfo= *ri, + bool isread) +{ + if (arm_current_el(env) < 3 + && arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_TCR2EN)) { + return CP_ACCESS_TRAP_EL3; + } + return CP_ACCESS_OK; +} + +static CPAccessResult tcr2_el1_access(CPUARMState *env, const ARMCPRegInfo= *ri, + bool isread) +{ + CPAccessResult ret =3D access_tvm_trvm(env, ri, isread); + if (ret !=3D CP_ACCESS_OK) { + return ret; + } + if (arm_current_el(env) < 2 && !(arm_hcrx_el2_eff(env) & HCRX_TCR2EN))= { + return CP_ACCESS_TRAP_EL2; + } + return tcr2_el2_access(env, ri, isread); +} + +static void tcr2_el1_write(CPUARMState *env, const ARMCPRegInfo *ri, + uint64_t value) +{ + uint64_t valid_mask =3D 0; + + value &=3D valid_mask; + raw_write(env, ri, value); +} + +static void tcr2_el2_write(CPUARMState *env, const ARMCPRegInfo *ri, + uint64_t value) +{ + uint64_t valid_mask =3D 0; + + value &=3D valid_mask; + raw_write(env, ri, value); +} + +static const ARMCPRegInfo tcr2_reginfo[] =3D { + { .name =3D "TCR2_EL1", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 0, .opc2 =3D 3, .crn =3D 2, .crm =3D 0, + .access =3D PL1_RW, .accessfn =3D tcr2_el1_access, + .writefn =3D tcr2_el1_write, .fgt =3D FGT_TCR_EL1, + .nv2_redirect_offset =3D 0x270 | NV2_REDIR_NV1, + .fieldoffset =3D offsetof(CPUARMState, cp15.tcr2_el[1]) }, + { .name =3D "TCR2_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 3, .crn =3D 2, .crm =3D 0, + .access =3D PL2_RW, .accessfn =3D tcr2_el2_access, + .writefn =3D tcr2_el2_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.tcr2_el[2]) }, +}; + void register_cp_regs_for_features(ARMCPU *cpu) { /* Register all the coprocessor registers based on feature bits */ @@ -7306,6 +7373,10 @@ void register_cp_regs_for_features(ARMCPU *cpu) define_arm_cp_regs(cpu, sctlr2_reginfo); } =20 + if (cpu_isar_feature(aa64_tcr2, cpu)) { + define_arm_cp_regs(cpu, tcr2_reginfo); + } + if (cpu_isar_feature(any_predinv, cpu)) { define_arm_cp_regs(cpu, predinv_reginfo); } diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index f4efff03a5..4eb51420ef 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1248,6 +1248,7 @@ void aarch64_max_tcg_initfn(Object *obj) SET_IDREG(isar, ID_AA64MMFR2, t); =20 t =3D GET_IDREG(isar, ID_AA64MMFR3); + t =3D FIELD_DP64(t, ID_AA64MMFR3, TCRX, 1); /* FEAT_TCR2 */ t =3D FIELD_DP64(t, ID_AA64MMFR3, SCTLRX, 1); /* FEAT_SCTLR2 */ t =3D FIELD_DP64(t, ID_AA64MMFR3, SPEC_FPACC, 1); /* FEAT_FPACC_SPEC */ SET_IDREG(isar, ID_AA64MMFR3, t); diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 66043b0747..1c597d8673 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -149,6 +149,7 @@ the following architecture extensions: - FEAT_SPECRES (Speculation restriction instructions) - FEAT_SSBS (Speculative Store Bypass Safe) - FEAT_SSBS2 (MRS and MSR instructions for SSBS version 2) +- FEAT_TCR2 (Support for TCR2_ELx) - FEAT_TGran16K (Support for 16KB memory translation granule size at stage= 1) - FEAT_TGran4K (Support for 4KB memory translation granule size at stage 1) - FEAT_TGran64K (Support for 64KB memory translation granule size at stage= 1) --=20 2.43.0 From nobody Mon Dec 15 11:25:33 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1753602169; cv=none; d=zohomail.com; s=zohoarc; b=WJU+kCJNkJfAlNVJx9JJI8HK7RA9Ziddz9rDaSbK2xp8TirxTggU9uEoEkUqxwJEYXRh0AC3Zn2vldYRtO5UtcqjTSaMr5OJr0ZGGpswpKVTMmONGxJX9v5uWNF2bMww9Lu6S+8B0zXQ5bMWQQL15QQKm6COQ0vsKGf2T445idM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753602169; 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=ZZEiredJhDqkeFwlGWRs9PoM2IRfxTwE098IMi+CROg=; b=ZPnsaAvp4lN5dmruBPu8x29vdvQnhUUOhD72s8cAXsRN4uKzNpdUmgxRCamz1BWc50u/WFyW7ZO+OCbTIzEIGb5w5XflzHEVMxg2S/ZeAr5uVazAAvgzTzqwpjdXQywoW+d9ouvNsJhxACJvgQALrLvymhuT1pvjhrdQXxP8Tk4= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1753602169204891.0964607405151; Sun, 27 Jul 2025 00:42:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ufw1a-0007GN-PG; Sun, 27 Jul 2025 03:42:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ufw1U-0006S3-2t for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:20 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ufw1R-00016E-Vn for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:19 -0400 Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-b390136ed88so2609271a12.2 for ; Sun, 27 Jul 2025 00:42:16 -0700 (PDT) Received: from localhost.localdomain (syn-098-150-199-049.res.spectrum.com. [98.150.199.49]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23fbe53b546sm29633055ad.177.2025.07.27.00.42.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jul 2025 00:42:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1753602135; x=1754206935; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZZEiredJhDqkeFwlGWRs9PoM2IRfxTwE098IMi+CROg=; b=Ieogk1CU26FotQWi6k0KO91QMTswGgwiQNHzYu/QNDP7uAZnjNKoqEzUqwYuM8dkF2 M7QrZ2/+fcmo05IyvAhZuYKwropQBF4a0XxkutawT4JCHoSifGbZKa7pWD3G+iyHMpCm no6ahfGyJNgiJK1x4/OZZH/xFl+FWSgw1urxKfWwou9XKrm8lsAZtmtHYvDx0V5tC01s endK9T4oiIoI6k+EnPLNeu4q+I7r0NgvEZJv/srKicT8SPWRuVm1sp7/wihnzn0gMm3m umG9wEqWzR0JaVnENb1P/xanFEY6FSc0JeoXS1RhPo6kK0kVaa/PC9UnWQZx4wnexofK oTHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753602135; x=1754206935; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZZEiredJhDqkeFwlGWRs9PoM2IRfxTwE098IMi+CROg=; b=JOrLITJwT6rN0eRE6LnLNxH26V7fUUtgaOxcmjAKH8MfZHJaxe7Zu5pPvEHSQ4FrOq 4BBrrXJ+1zlSSxuIO6Q8Lc/8horbINY9RV3W4cqZOgWobBYMZExf1MUnQ1kd7gJSgas0 wdevjCGQaXEE7/DY68LfhH0SNeLkCVG9ajGEUB308fhgAEMkHccRIkMCm7WA4Nd9yL89 iIrN7idVpgURA48o16BXog9sG+2C8L/YHA5hXDft/LqW3BENVP1LzRLrw01Pv1DXysX1 SO1aMrzGMmFNBWkfjWbBweVQftn8eRwKBLfsAoE+2nFU/EpoNLxnCN904PD3k2H49SmP ewbg== X-Gm-Message-State: AOJu0YxPaDB78vrA5J2nrx4qhKfyoFD0svuEA1n1PDE6I61SYOD7UZLx G/86sdkHZIPUPHSzRe08DQho1BxAUzmuHxLZAJCDZyxcE9CeEV8+gnlo3bgUrksufIrJgkwZzZr Q3Azm X-Gm-Gg: ASbGncuQ3YtZor9dV8svn6BSP2e6O/uw/vyLx0LJqm/QXxlQrN+pZ+2W2lWZMwCHqGn WR4+iK18KWcIruXO7AODQQNFddm1+Yni+NVPnRWQKKu9c9NQr21ym51c6bxImLZ1c56wgswKd6E DDAjcS/GlsYFBEzCruleW6D2jojgFJzoJ1s/JzclZNZr9lpkrbsPk+RGETLKw5ITTZrr0rTpzCF 35Dx8JEpTHTa/ZYovH3JGzDXk8qePfHsX4OsZM17bAljuF0wFgiwYVRNKw+JPmCUvjhRFAb3vgx LRqYwKD8ZNhv1Z5J9jr/fkhP7vsecApH3dcdWYesdLPBECb3zPjIwVQEyFpDkllMFc9kYfivtO6 f833OA89/GvCiabF4RdeEEg09ddEiCK5J51pj7C4c08O1YbinsvNB0AXLwgsRwhLAvahaIspZgb /8a/0q9BBZLQ== X-Google-Smtp-Source: AGHT+IHlnv3cRavrG/Z+dmdJIbWIeUqVaf/04dVWIjo/GK8lSsQasIEfOjU6+ZkzrLZyZWdTBOeeuQ== X-Received: by 2002:a17:903:32d1:b0:234:ef42:5d75 with SMTP id d9443c01a7336-23fb3032327mr109497715ad.20.1753602135264; Sun, 27 Jul 2025 00:42:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Gustavo Romero Subject: [PATCH v9 5/6] target/arm: Implement FEAT_MEC registers Date: Sat, 26 Jul 2025 21:42:01 -1000 Message-ID: <20250727074202.83141-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250727074202.83141-1-richard.henderson@linaro.org> References: <20250727074202.83141-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52e.google.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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: 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 @linaro.org) X-ZM-MESSAGEID: 1753602171537116600 Content-Type: text/plain; charset="utf-8" From: Gustavo Romero Add all FEAT_MEC registers. Enable access to the registers via the SCTLR2 and TCR2 control bits. Add the two new cache management instructions, which are nops in QEMU because we do not model caches. Signed-off-by: Gustavo Romero Message-ID: <20250711140828.1714666-3-gustavo.romero@linaro.org> Reviewed-by: Richard Henderson [rth: Squash 3 patches to add all registers at once.] Signed-off-by: Richard Henderson --- target/arm/cpu-features.h | 5 ++ target/arm/cpu.h | 10 ++++ target/arm/internals.h | 3 ++ target/arm/cpu.c | 3 ++ target/arm/helper.c | 106 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 127 insertions(+) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 8ec8c3feb3..9579d93cec 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -914,6 +914,11 @@ static inline bool isar_feature_aa64_sctlr2(const ARMI= SARegisters *id) return FIELD_EX64_IDREG(id, ID_AA64MMFR3, SCTLRX) !=3D 0; } =20 +static inline bool isar_feature_aa64_mec(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64MMFR3, MEC) !=3D 0; +} + static inline bool isar_feature_aa64_pmuv3p1(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64DFR0, PMUVER) >=3D 4 && diff --git a/target/arm/cpu.h b/target/arm/cpu.h index c15d79a106..defe2852f2 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -578,6 +578,15 @@ typedef struct CPUArchState { =20 /* NV2 register */ uint64_t vncr_el2; + + /* MEC registers */ + uint64_t mecid_p0_el2; + uint64_t mecid_a0_el2; + uint64_t mecid_p1_el2; + uint64_t mecid_a1_el2; + uint64_t mecid_rl_a_el3; + uint64_t vmecid_p_el2; + uint64_t vmecid_a_el2; } cp15; =20 struct { @@ -1730,6 +1739,7 @@ static inline void xpsr_write(CPUARMState *env, uint3= 2_t val, uint32_t mask) #define SCR_TCR2EN (1ULL << 43) #define SCR_SCTLR2EN (1ULL << 44) #define SCR_GPF (1ULL << 48) +#define SCR_MECEN (1ULL << 49) #define SCR_NSE (1ULL << 62) =20 /* Return the current FPSCR value. */ diff --git a/target/arm/internals.h b/target/arm/internals.h index ffc981c3b6..118659815f 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -2001,4 +2001,7 @@ void vfp_clear_float_status_exc_flags(CPUARMState *en= v); void vfp_set_fpcr_to_host(CPUARMState *env, uint32_t val, uint32_t mask); bool arm_pan_enabled(CPUARMState *env); =20 +/* Used in FEAT_MEC to set the MECIDWidthm1 field in the MECIDR_EL2 regist= er. */ +#define MECID_WIDTH 16 + #endif diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 27a4610da5..f0545a276e 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -650,6 +650,9 @@ void arm_emulate_firmware_reset(CPUState *cpustate, int= target_el) if (cpu_isar_feature(aa64_sctlr2, cpu)) { env->cp15.scr_el3 |=3D SCR_SCTLR2EN; } + if (cpu_isar_feature(aa64_mec, cpu)) { + env->cp15.scr_el3 |=3D SCR_MECEN; + } } =20 if (target_el =3D=3D 2) { diff --git a/target/arm/helper.c b/target/arm/helper.c index 5a219703ae..20b69a12df 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -747,6 +747,9 @@ static void scr_write(CPUARMState *env, const ARMCPRegI= nfo *ri, uint64_t value) if (cpu_isar_feature(aa64_sctlr2, cpu)) { valid_mask |=3D SCR_SCTLR2EN; } + if (cpu_isar_feature(aa64_mec, cpu)) { + valid_mask |=3D SCR_MECEN; + } } else { valid_mask &=3D ~(SCR_RW | SCR_ST); if (cpu_isar_feature(aa32_ras, cpu)) { @@ -5215,6 +5218,93 @@ static const ARMCPRegInfo nmi_reginfo[] =3D { .resetfn =3D arm_cp_reset_ignore }, }; =20 +static CPAccessResult mecid_access(CPUARMState *env, + const ARMCPRegInfo *ri, bool isread) +{ + int el =3D arm_current_el(env); + + if (el =3D=3D 2) { + if (arm_security_space(env) !=3D ARMSS_Realm) { + return CP_ACCESS_UNDEFINED; + } + + if (!(env->cp15.scr_el3 & SCR_MECEN)) { + return CP_ACCESS_TRAP_EL3; + } + } + + return CP_ACCESS_OK; +} + +static void mecid_write(CPUARMState *env, const ARMCPRegInfo *ri, + uint64_t value) +{ + value =3D extract64(value, 0, MECID_WIDTH); + raw_write(env, ri, value); +} + +static CPAccessResult cipae_access(CPUARMState *env, const ARMCPRegInfo *r= i, + bool isread) +{ + switch (arm_security_space(env)) { + case ARMSS_Root: /* EL3 */ + case ARMSS_Realm: /* Realm EL2 */ + return CP_ACCESS_OK; + default: + return CP_ACCESS_UNDEFINED; + } +} + +static const ARMCPRegInfo mec_reginfo[] =3D { + { .name =3D "MECIDR_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 7, .crn =3D 10, .crm =3D 8, + .access =3D PL2_R, .type =3D ARM_CP_CONST, .resetvalue =3D MECID_WID= TH - 1 }, + { .name =3D "MECID_P0_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 0, .crn =3D 10, .crm =3D 8, + .access =3D PL2_RW, .accessfn =3D mecid_access, + .writefn =3D mecid_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.mecid_p0_el2) }, + { .name =3D "MECID_A0_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 1, .crn =3D 10, .crm =3D 8, + .access =3D PL2_RW, .accessfn =3D mecid_access, + .writefn =3D mecid_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.mecid_a0_el2) }, + { .name =3D "MECID_P1_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 2, .crn =3D 10, .crm =3D 8, + .access =3D PL2_RW, .accessfn =3D mecid_access, + .writefn =3D mecid_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.mecid_p1_el2) }, + { .name =3D "MECID_A1_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 3, .crn =3D 10, .crm =3D 8, + .access =3D PL2_RW, .accessfn =3D mecid_access, + .writefn =3D mecid_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.mecid_a1_el2) }, + { .name =3D "MECID_RL_A_EL3", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 6, .opc2 =3D 1, .crn =3D 10, .crm =3D 10, + .access =3D PL3_RW, .accessfn =3D mecid_access, + .writefn =3D mecid_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.mecid_rl_a_el3) }, + { .name =3D "VMECID_P_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 0, .crn =3D 10, .crm =3D 9, + .access =3D PL2_RW, .accessfn =3D mecid_access, + .writefn =3D mecid_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.vmecid_p_el2) }, + { .name =3D "VMECID_A_EL2", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 3, .opc1 =3D 4, .opc2 =3D 1, .crn =3D 10, .crm =3D 9, + .access =3D PL2_RW, .accessfn =3D mecid_access, + .writefn =3D mecid_write, + .fieldoffset =3D offsetof(CPUARMState, cp15.vmecid_a_el2) }, + { .name =3D "DC_CIPAE", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 4, .crn =3D 7, .crm =3D 14, .opc2 =3D 0, + .access =3D PL2_W, .accessfn =3D cipae_access, .type =3D ARM_CP_NOP = }, +}; + +static const ARMCPRegInfo mec_mte_reginfo[] =3D { + { .name =3D "DC_CIGDPAE", .state =3D ARM_CP_STATE_AA64, + .opc0 =3D 1, .opc1 =3D 4, .crn =3D 7, .crm =3D 14, .opc2 =3D 7, + .access =3D PL2_W, .accessfn =3D cipae_access, .type =3D ARM_CP_NOP = }, +}; + #ifndef CONFIG_USER_ONLY /* * We don't know until after realize whether there's a GICv3 @@ -6053,6 +6143,9 @@ static void sctlr2_el2_write(CPUARMState *env, const = ARMCPRegInfo *ri, { uint64_t valid_mask =3D 0; =20 + if (cpu_isar_feature(aa64_mec, env_archcpu(env))) { + valid_mask |=3D SCTLR2_EMEC; + } value &=3D valid_mask; raw_write(env, ri, value); } @@ -6062,6 +6155,9 @@ static void sctlr2_el3_write(CPUARMState *env, const = ARMCPRegInfo *ri, { uint64_t valid_mask =3D 0; =20 + if (cpu_isar_feature(aa64_mec, env_archcpu(env))) { + valid_mask |=3D SCTLR2_EMEC; + } value &=3D valid_mask; raw_write(env, ri, value); } @@ -6122,6 +6218,9 @@ static void tcr2_el2_write(CPUARMState *env, const AR= MCPRegInfo *ri, { uint64_t valid_mask =3D 0; =20 + if (cpu_isar_feature(aa64_mec, env_archcpu(env))) { + valid_mask |=3D TCR2_AMEC0 | TCR2_AMEC1; + } value &=3D valid_mask; raw_write(env, ri, value); } @@ -7377,6 +7476,13 @@ void register_cp_regs_for_features(ARMCPU *cpu) define_arm_cp_regs(cpu, tcr2_reginfo); } =20 + if (cpu_isar_feature(aa64_mec, cpu)) { + define_arm_cp_regs(cpu, mec_reginfo); + if (cpu_isar_feature(aa64_mte, cpu)) { + define_arm_cp_regs(cpu, mec_mte_reginfo); + } + } + if (cpu_isar_feature(any_predinv, cpu)) { define_arm_cp_regs(cpu, predinv_reginfo); } --=20 2.43.0 From nobody Mon Dec 15 11:25:33 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1753602157; cv=none; d=zohomail.com; s=zohoarc; b=TYPm1sc6Bo7SajcA/vg6uE18vKmLM+pztqqpgND4PNvBk+2NTeBk3G0fwXcAoWFMhe/OFL6MMm8/yNPco/Z8eKkFldijdz649aM7dhow7yFCW/i0FpO9pIMc9UUw2qqPERZ1xEDRwYuS9ke3ku7aFnCRnX9RpD28V+3pojKR08w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753602157; 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=o6I/c6izRvO/9YY3k1FhH9eJOO9nj/nIYdH0I7uHsCI=; b=BdNDCtE7TNHC3o54hEp4o1egSeKRYEyipMFNLbZoUrIAuWpLjYWWldacrOYZ/QxwMoTIAq23H9zUt/NZfeM32D85Ie2+12DintmOLbXAJQWwYLzANqFMXAeVVp3tWrhPi1MrGp40XgDt44T1QCokOVcBvt82xNKUmWl6zsdOonE= 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=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1753602157247889.6612706447446; Sun, 27 Jul 2025 00:42:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ufw1a-0007Dk-IQ; Sun, 27 Jul 2025 03:42:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ufw1U-0006RK-1J for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:20 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ufw1S-00016y-Df for qemu-devel@nongnu.org; Sun, 27 Jul 2025 03:42:19 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2401b855980so296985ad.1 for ; Sun, 27 Jul 2025 00:42:18 -0700 (PDT) Received: from localhost.localdomain (syn-098-150-199-049.res.spectrum.com. [98.150.199.49]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-23fbe53b546sm29633055ad.177.2025.07.27.00.42.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Jul 2025 00:42:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1753602137; x=1754206937; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=o6I/c6izRvO/9YY3k1FhH9eJOO9nj/nIYdH0I7uHsCI=; b=wNZbE0iIRyx+wKTFaqdJbVfkRxYgcuaY3MNtQxzCO36xE0KgrUXm5qqJ00uCfwj5Tk wYVcLB+M6UYhDUQKw0a0Kwmn+siWM4aaMVYTABSBC2Su3ga/919cEtLMzDb3bspO0jfb ZLGIXmt9676MxYtFFUQJtknJriAXEg/TEKToc0Wt289w+J1d4IYngzUbxoIAqNUVllkc uVfdNNmfI5PVtLnDMnfhE7HrnSudgLxPrs0Fter29/KxraT/yPtQ1nKWNEiWl8hgnslX wTp3rtMWuH3OBSw3fvWVSwVBQb9qLI1sLGXDVwMaI2iK2B3LNzgrTGAuv1uGVH5EEKVS vFVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753602137; x=1754206937; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=o6I/c6izRvO/9YY3k1FhH9eJOO9nj/nIYdH0I7uHsCI=; b=r6xrxT0VJxYoCCXatqTCLsfSLfFvSSayinLmh/gGv/B+dq3MRA1qgMy9qBTw3bowIF XgPMBoHyGUKOzREnG9/Ma7oYVyVpTyikkOS4z6Q/Y+wgug+U+EsBK5FaeLNtnHK2t36i jN5s8WDITP2GwyafOYK6zUmsWkpeW8fP/8kaTlDT39EK41r91o9pDlJCNgf5NwFcPBGL yOUQRgH8GgADVZMnauiHs0fUm8B8LhysSsid1yxYRiOa/RnEMedkXg3vaMnDStSPR4aQ jFk5HLwdXN5ceMzNbGdyNpY4TcbpE2cdbCFICsJsBoZNYjZE4IxCjAEnv8wVKkH95haO /TTA== X-Gm-Message-State: AOJu0YyfmSNqKAaGvR9EnUKpbuakQj7oz21dQE7AJK2D7vXDgpG1im7O AyWJV4YO5H9CwE5psanuamQG8hXDHTdb67yom4g/cEgZBArhDdEazGKmtuajd72i3aLkSSafKkY PeZNM X-Gm-Gg: ASbGncth/ohhOOfAIjZCPCWYVeUrc+kVK9ErITvkhS1LEALb9wEVKQXOqUiIlWHRFc6 Emgs3chmBoc7l5GWmtBB4+Lr0enQOyZ5PXt0mkUvGFf5H9IbxIXH4CM1boPqwjohMFpYW+HZHnQ bjLKa8K9jjTdSgn9KsE90xe6OcIrfPyNgYiIOWqcCnrUG8qLpHMjt5lkI0pLT6XfN61jrQs9sS3 +TaidPt3mBPbTzJAY7o5la95wF7WtlPIQYDclHkGT/uY3oki5I5q1F1dXqYFz7EmAUh/7+wqUHu 50kwLFQbSSUyJXDxxjLeNizPDND8Gm9iFSgVxLaiIOeAtrPw1Bug3F0KVJcFpgA+Oj8vVFCURD6 t1gtqXxfHDeVp41lNfz1miy9pg7Xsson28FomEiare++4SfeY+b6YIL1S2aOKhTMsPgRLNNlMoJ avU2KpcVWQxw== X-Google-Smtp-Source: AGHT+IETF/Tl9fw42ilp67lr6vwrhtW7A/H1HWuow0B2+KLHZLi0AjQ3Cy0OLMZW9emZ8JYggA2drg== X-Received: by 2002:a17:902:e1d3:b0:240:90d:468d with SMTP id d9443c01a7336-240090d4734mr9724485ad.9.1753602136932; Sun, 27 Jul 2025 00:42:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, Gustavo Romero Subject: [PATCH v9 6/6] target/arm: Enable FEAT_MEC in -cpu max Date: Sat, 26 Jul 2025 21:42:02 -1000 Message-ID: <20250727074202.83141-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250727074202.83141-1-richard.henderson@linaro.org> References: <20250727074202.83141-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62d.google.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=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: 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 @linaro.org) X-ZM-MESSAGEID: 1753602159280116600 Content-Type: text/plain; charset="utf-8" From: Gustavo Romero Advertise FEAT_MEC in AA64MMFR3 ID register for the Arm64 cpu max as a first step to fully support FEAT_MEC. The FEAT_MEC is an extension to FEAT_RME that implements multiple Memory Encryption Contexts (MEC) so the memory in a realm can be encrypted and accessing it from the wrong encryption context is not possible. An encryption context allow the selection of a memory encryption engine. At this point, no real memory encryption is supported, but software stacks that rely on FEAT_MEC should work properly. Signed-off-by: Gustavo Romero Reviewed-by: Richard Henderson Message-ID: <20250711140828.1714666-7-gustavo.romero@linaro.org> Signed-off-by: Richard Henderson --- target/arm/tcg/cpu64.c | 1 + docs/system/arm/emulation.rst | 3 +++ 2 files changed, 4 insertions(+) diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 4eb51420ef..c54aa528c6 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1250,6 +1250,7 @@ void aarch64_max_tcg_initfn(Object *obj) t =3D GET_IDREG(isar, ID_AA64MMFR3); t =3D FIELD_DP64(t, ID_AA64MMFR3, TCRX, 1); /* FEAT_TCR2 */ t =3D FIELD_DP64(t, ID_AA64MMFR3, SCTLRX, 1); /* FEAT_SCTLR2 */ + t =3D FIELD_DP64(t, ID_AA64MMFR3, MEC, 1); /* FEAT_MEC */ t =3D FIELD_DP64(t, ID_AA64MMFR3, SPEC_FPACC, 1); /* FEAT_FPACC_SPEC */ SET_IDREG(isar, ID_AA64MMFR3, t); =20 diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 1c597d8673..d207a9f266 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -89,6 +89,9 @@ the following architecture extensions: - FEAT_LSE (Large System Extensions) - FEAT_LSE2 (Large System Extensions v2) - FEAT_LVA (Large Virtual Address space) +- FEAT_MEC (Memory Encryption Contexts) + + * This is a register-only implementation without encryption. - FEAT_MixedEnd (Mixed-endian support) - FEAT_MixedEndEL0 (Mixed-endian support at EL0) - FEAT_MOPS (Standardization of memory operations) --=20 2.43.0