From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004491; cv=pass; d=zohomail.com; s=zohoarc; b=heFUM/VeJ2bXdQScPOiI9RU12V05WP2S8NfR4HSgB1joK0CD+npEtZJUlGwECVFitrx0s1Kro2XTNLMtzq9EpXjoZZnGcKqjdb3p0OfCrjVUDRLYRqRMbLcqITt00FsNOmb+LlhU5sN0uxpBtnftcrnTSByiT+OokGrYd2c0tZY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004491; 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=oNvF+T9ACFARBnHQn4jVRWIzhE2PW5UQBNk2K8XW2ZA=; b=kmJ6Ni+5sfgiDfmxp2Gru7UlU0XZpsd8F8F86dbIp2pp/trFKlayGJiAB1sRaMmf6vPcbHI/p6zrff80Qk/RBDkTPHs9J7pM2MRtJ4Kr3wgE8V4BAgdSQVzlrlmgGq1T2LzoOWZuMo6jt1PyARXbJRoxWjQ2+4Pq3Sc2GxxIO5c= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004491364910.7000487846728; Tue, 9 Jun 2026 04:28:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWuc6-0006Kh-Kl; Tue, 09 Jun 2026 07:27: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 1wWuc3-0006IS-2o; Tue, 09 Jun 2026 07:27:19 -0400 Received: from mail-westusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c001::5] helo=BYAPR05CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWuc0-0002wy-RO; Tue, 09 Jun 2026 07:27:18 -0400 Received: from SJ0PR03CA0272.namprd03.prod.outlook.com (2603:10b6:a03:39e::7) by SN7PR12MB7934.namprd12.prod.outlook.com (2603:10b6:806:346::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:27:09 +0000 Received: from MWH0EPF000A672F.namprd04.prod.outlook.com (2603:10b6:a03:39e:cafe::69) by SJ0PR03CA0272.outlook.office365.com (2603:10b6:a03:39e::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:08 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672F.mail.protection.outlook.com (10.167.249.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:07 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:46 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:38 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xBDgRMyIOFubhLg4YJgeNtUCuJ8b9ReMcLp/nIy8RxLgJvJRcVQYI6mEjpq0tA9rVowWBfMq7qNERK8m8MAXGEHKuETWC3l4D7x5+4I7y7PdKk4T8JCoRW933v+gub9zs0QbRU7u3Rjy+xI52x8bW8ZC91uYPC9OVnajEW79b74qNvJNvtEWqk5L/K7MRFjnTTf2MSwAA07UtperH/mdYo/gwOooXvZlWQvh4p0Ejutp5kXOomfRoirH0p9CduEPqYiZ0PP4zjPELV7lNp6gjCCK/AShGd+F+Wk7fsQqnQVZ+w3OjUHyO0HG7NeLm/6yf/BgYs2v7UCm4aQY28eU0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=oNvF+T9ACFARBnHQn4jVRWIzhE2PW5UQBNk2K8XW2ZA=; b=okxh/mGHWYvCnfy0q03TdK5QO67+sLPpTr5ksEL5BGkmlG4fUSEdawyF0clNbEUyLCzZXJriSVYibTnFu2jWkFeq7OH9CxqCHXfQT2YnQHqjrkpgQLhi8fBqhT8wBd5+3ivupNrAem44wBv7VufqLSgjC4ije1auodVEB0pc8UlgB0e1+D67Hd+EAacJwX93VwXU/6RSoYfoKm2SrfB6ccGkgTMJLhJ3AiXKBNGbBnRr/jH/g5h9mWwSheVlfnAncgByH7R17is6uwGDPhY+dk/hKJQGPu9JhW+uLbfRgANlogwumwd93YgVSWo0qdijwlrVr7x3LMMz1O9esHkKDA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oNvF+T9ACFARBnHQn4jVRWIzhE2PW5UQBNk2K8XW2ZA=; b=tDQW8NwVhFyqIp+0tuGPqZeXrHLXwe6oeDcCdA10iWKZ7grqjgKhXrppgLoPUzXhbOJ2oH1ihkptr4yBanddH2he5kG1/DOfgziuXx5Ax53Tp6nT672fzBHvCVSTBe/G/14SclLSGVFPNoOkGf8aUNITU4gWBO0uUIEramW4n+GNIzw7wfN0/Anzi26j4GH+rIN0Yxnl17C3mO6YJVok2mcCgYiazcP4vQow9bul0lMPtW4L7LJkBHKOjPUoTasZ/MTcZW+YyC1EJGL46koXYp7ONy5Y9rFcIIosDn2ODxjQlXf9/T6IxNcp6NXSHROg8ny/Iynyfr3Gix3w3JV/Dw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 01/31] backends/iommufd: Update iommufd_backend_get_device_info Date: Tue, 9 Jun 2026 12:25:22 +0100 Message-ID: <20260609112552.378999-2-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672F:EE_|SN7PR12MB7934:EE_ X-MS-Office365-Filtering-Correlation-Id: be75a49f-ef54-4fb8-ec0f-08dec61a0a8d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|36860700016|22082099003|18002099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: cDX5/vjYU5bpEwA7jYiwh/TbgSnNFIPWAh19J7mSS6ETa/T/q+wekuIaESvbkXdUUKkXVaB4LDfmCppoeBmiN4YCpi203A2JOnwZ0ossKe0TSjNN3bkcAiXB6s83tXVHwRQc3eSpzElxFop5HRSSRVPBIEdVFGUsyekssO7OHbRd9iZpkRcNo9gvDYn0ZbJjSnLmiidnIz1PPGSG4hBV6it+Q55eYs4nLxtIfKbyoTLhgFdmQN2ZlF8g8C9ezcoK53pm4xevq2MErtYB08G6lvaEDWGHjEtOYZDaGe9F+H0ohb7UaiT+xRp4rGdfOwruKwYIcDwZU0VzrJ4gp4m7yFQ8Gy3ziwZ47Prmz7Z2k7Ghr5DJSHPZJgIP69+7Oh0BB94xtVDOV1HPV1OBoooDcxNr4Hl+Lia7mcasoHxWOB2ORTYveCzES5FGbqzzv2E2sqbeiN5ZnwRt9oS+zuDEzhJg+wek1lM81LBcEsbJnI6N8rn63JVXX47i4XCEI0MfN4U0jG8AZghaiqgaD7EGVppOgq6scThok6dHSuzVxDI3D4uPQVv6J0CCovJyTmwwEJVNKcOm328h3gRUnatklj06K5byBsesdAe8TM4zq12mcDjAsUvB3rPsFsVb584rpy5cY4Zz4vS/lfrMMybO4vVeWNFxX2WL9FFBSb8eHlpmA3tA2YHyZu4J5LCSSkBANVrsDngS4PqSbIcqzBb4xvf8z9gHFO4dMXt9/Lg1ykg= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(36860700016)(22082099003)(18002099003)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +wgH+L5WsxTGlurwa9Q4HIiy/M+3ArccbbHg5Nxf51rpnfv1mqTLD8MkKkfBgYdvPnUEkD4G0jwlI9qFgdQQNtPC7udxE/rxpdZ/RhBILnD4272/SELLXKodijxEnPkoaQN7hHh0T450WDAQzMjuPgI/OnT9Ze49vtlEQ/H+aaHX9Zl/S5GACFU6l+LqAj22KgbUdkrDAhCu2rfNO6SRyc4VWmT09qtJc3kRLigfSjw7wT+C2mrTfxI7xFtjiA5lu0e6CWh0R2HdDXw0GaapOcx5RJxceGwUn758l4gYLpqaQaD1GMyE5sFMI3RSPUbhajGYn/a5zdRrijjO9pCgfw7JYinchLKXWEgnE4cTdvQtUfWTHcuzkgPpktk579V+n43frMA02Ug1vMNhH4NhDV2S8KHrVd9uDhCrWsn5eAhDbSqlcUeAUEwjlpaUSg3C X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:07.9861 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: be75a49f-ef54-4fb8-ec0f-08dec61a0a8d X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7934 Received-SPF: permerror client-ip=2a01:111:f403:c001::5; envelope-from=skolothumtho@nvidia.com; helo=BYAPR05CU005.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004493286158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen The updated IOMMUFD uAPI introduces the ability for userspace to request a specific hardware info data type via IOMMU_GET_HW_INFO. Update iommufd_backend_get_device_info() to set IOMMU_HW_INFO_FLAG_INPUT_TYPE when a non-zero type is supplied, and adjust all callers to pass a type value explicitly initialised to zero (IOMMU_HW_INFO_TYPE_DEFAULT) when no specific type is requested. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- backends/iommufd.c | 7 +++++++ hw/arm/smmuv3-accel.c | 2 +- hw/vfio/iommufd.c | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backends/iommufd.c b/backends/iommufd.c index 410b044370..8c3a981392 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -390,16 +390,23 @@ bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend = *be, return true; } =20 +/* + * @type can carry a desired HW info type defined in the uapi headers. If = caller + * doesn't have one, indicating it wants the default type, then @type shou= ld be + * zeroed (i.e. IOMMU_HW_INFO_TYPE_DEFAULT). + */ bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid, uint32_t *type, void *data, uint32_t = len, uint64_t *caps, uint8_t *max_pasid_lo= g2, Error **errp) { struct iommu_hw_info info =3D { + .flags =3D (*type) ? IOMMU_HW_INFO_FLAG_INPUT_TYPE : 0, .size =3D sizeof(info), .dev_id =3D devid, .data_len =3D len, .data_uptr =3D (uintptr_t)data, + .in_data_type =3D *type, }; =20 if (ioctl(be->fd, IOMMU_GET_HW_INFO, &info)) { diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 06dadf9cc7..163d3e7279 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -176,7 +176,7 @@ smmuv3_accel_hw_compatible(SMMUv3State *s, HostIOMMUDev= iceIOMMUFD *hiodi, Error **errp) { struct iommu_hw_info_arm_smmuv3 info; - uint32_t data_type; + uint32_t data_type =3D IOMMU_HW_INFO_TYPE_DEFAULT; uint64_t caps; =20 if (!iommufd_backend_get_device_info(hiodi->iommufd, hiodi->devid, diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index df148a49a7..495a59cc2e 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -353,7 +353,7 @@ static bool iommufd_cdev_autodomains_get(VFIODevice *vb= asedev, IOMMUFDBackend *iommufd =3D vbasedev->iommufd; VFIOContainer *bcontainer =3D VFIO_IOMMU(container); bool viommu_nesting, viommu_nesting_dirty; - uint32_t type, flags =3D 0; + uint32_t type =3D IOMMU_HW_INFO_TYPE_DEFAULT, flags =3D 0; uint64_t hw_caps; VendorCaps caps; VFIOIOASHwpt *hwpt; @@ -948,7 +948,7 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice *= hiod, void *opaque, HostIOMMUDeviceIOMMUFD *hiodi; HostIOMMUDeviceCaps *caps =3D &hiod->caps; VendorCaps *vendor_caps =3D &caps->vendor_caps; - enum iommu_hw_info_type type; + uint32_t type =3D IOMMU_HW_INFO_TYPE_DEFAULT; uint8_t max_pasid_log2; uint64_t hw_caps; =20 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004506; cv=pass; d=zohomail.com; s=zohoarc; b=Wu42nalqS740tiRjJwrzt13pjFP0NWKRfKPMAfxxJ9fXGC1RYdSsJlquMEcLkNEvOvrVxPqytagSEF3YL/yB9Y5v0F+1m4VIXbBYZI/cJ4hiWdEIojmr9fO/oXRhWwY4BT+BEnwcZLEVrd/tQzHsW9t/kKB2ySZSwWgywUjZtMY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004506; 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=AVkC/oNqi/PTBHyOnjIgwDp8OIkYvvV3m8HKo9BGDEc=; b=e+7L78c5h/cBAEeBhnZ4kkHQ+i0xjbTGzSbX7aNVKxv84O+v2zh+7syy9rZiCqUAZFH0McPxrHsoXAFDAdIh7xO0dVuVsGJpbEPSXjD64xfk+4OqJR58xuKHG9BHXZd9ZAHjQ4lLxSxAgr4b1rkU9Lw7rz328zAqgPBXWpU4AEA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004506096576.8883536112497; Tue, 9 Jun 2026 04:28:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWucN-0006LM-AU; Tue, 09 Jun 2026 07:27:45 -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 1wWuc4-0006JY-GK; Tue, 09 Jun 2026 07:27:20 -0400 Received: from mail-westusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c001::5] helo=BYAPR05CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWuc1-0002x8-VO; Tue, 09 Jun 2026 07:27:20 -0400 Received: from SJ0PR03CA0255.namprd03.prod.outlook.com (2603:10b6:a03:3a0::20) by SN7PR12MB8791.namprd12.prod.outlook.com (2603:10b6:806:32a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.12; Tue, 9 Jun 2026 11:27:10 +0000 Received: from MWH0EPF000C6186.namprd02.prod.outlook.com (2603:10b6:a03:3a0:cafe::72) by SJ0PR03CA0255.outlook.office365.com (2603:10b6:a03:3a0::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.15 via Frontend Transport; Tue, 9 Jun 2026 11:27:10 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6186.mail.protection.outlook.com (10.167.249.118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:10 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:48 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:42 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VUYp5IfA/zTv8AxqiFbMwT7pZiTDnKGHfD+czmWtDL6vMDY1g5c2p3Lmofbbrueae0WZ10eb/6aoto8vcIUxfrJImP+fUqMSgsMqNCKQmD7P0Xhqi8JLmQDCzz4I3vJBsyGsc9G5hqp+H9fjZ1oMCzH+MsZmxsVULDoxdtBb2HqHVgXLkZjsHEHb4sXz6us59U26aqQCeYaze8qY2JtPyjiB+7syTdUyqTar0y+fQSABekeY/BHr+i4PHv7iefArKA+l0RykMmFk6OvaFM0bqWeAWT3wzJV+/Ouy3S8n91VPhgA79ELvfcUJAsuX5+URVQjN+FF8zhPpon9xCYVW+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AVkC/oNqi/PTBHyOnjIgwDp8OIkYvvV3m8HKo9BGDEc=; b=oepqaual0Tswlm8XAxATRGKlklZI7s0zeAmzA3V3i/kjqm/VLcDYs3pzB2PfZoVSXirCT0zOW2ptTQ6kBIEL4qiG2sGOVQ1IT/FK3beJQ4Qimxso9eSshWx3cg1450FTpAzISvobvfrZAFxw/4AEBM8szC4Aezmti8AbGLbEFWuwEc9IVb6BXJqKuRIQrz1Vg4Y5mBrmMK/jvtCHR3TKLPU2nSMVlNkMkRho4W0bcb+QqHyhJhl809E7iUuSXIu4k4NXpZrNIoA2yK5wIHbP/aTn90I8ca/pA1JyDUSVBPuc6Tjz/BhU1p5z/FddLnrY2B2iRWk96z4lLItb79UW6A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AVkC/oNqi/PTBHyOnjIgwDp8OIkYvvV3m8HKo9BGDEc=; b=ZziC0CUc9QU6tSyo0QFGqT1+0g/EKlfRSeAv9xo2YoOdjNeQNhp3cbt1vB5W5yN1pUNfUp9vYF5rGow3TeOfULKrz2pNqAEzSgCHTwpdyecxjbKquSxz+uT8n53cKLLhq1k/tjBQXUX6T8+ig+uPrGdIP1Y3NGcihBsSn2gIWu95+yxoyvZjEie0KJyoJHKhIl1gjbH4J938v2TnC3j+g6P2ib8BShiQ/gVUUPI2AwaUz/a0ysyTizZlsjQTu1EDks7RVEkYUY7hmm4jGDHC+uuohUkpu/zs6OR/Pr6f5IVFFFNWElZETGVpzRNRIIkvhOaEU3aFtbMHQgdhgIfmkA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 02/31] backends/iommufd: Update iommufd_backend_alloc_viommu to allow user ptr Date: Tue, 9 Jun 2026 12:25:23 +0100 Message-ID: <20260609112552.378999-3-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6186:EE_|SN7PR12MB8791:EE_ X-MS-Office365-Filtering-Correlation-Id: 3226b364-a2c9-4b9a-8027-08dec61a0bcc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|1800799024|36860700016|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: pYjTF8pcTeyGmNnjUAb4cpaAXJIuzp+KZmBQCkmfgUJGE9DJvtzwRZWLAbE3GrClJfmpjeYk30TIMHxFZToogg3oMgTLli/2xIOSAn5QbRhnwOLYZB5nVP11rvPvy6kcwqeLCWrAIXLruyUBKETgUW4RW1lJTLazyhjj716pOr9/oTymlw60ZnVyBMmtWH41/rnqGqbYHhkWbH5Y1nU6pIuZpHUdVGN1Ja9QOF333cAQ+LXxAUlZwL49f/fxQwaHG6Rv3C8VOUXK5D08Bs0VItYh9FKZMeMCvU/XyiuROR1iG657QxnIeI+Xlb5HMGoyxeSJL5ZuRW9VtJde1KE7Qn/DOMe4eCNutbX33xXYip7EvOR8bAz7LoKflYrzMcG2pwXqb8wAtBfd14ENIVesQqIDpqokZXoU0tXEtiGG16t1m8DlLERKd2Oip6PGiMbEyPygwAMIGOOmcLFb3DRF35Qc9pkeUEKCXlIK1W7v8w8NiyYeB68CSmoJwrSOLRthmEi0XkbjUoeCrDG1TR6g5ga+3QSgBnN3gL7xMjzqWvYKEVRP+WODIc75JNrfbnQLlgoA+ZUgcr9jbNeAsvx4EJxtUkjEfy8iylD296QT9TPG5T2gy+I+1w9ThvJ4K8gG/+pVPIT2aKKgJ28TV/LuSpDVMfPzOG/XialiZJDsTXAQkikuY6Lz8fWNJWRrWipR+q+Kj6PoyF/qo4u8JDPCN0LNFa7DzZXyRZF0gtE6tcU= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(376014)(1800799024)(36860700016)(11063799006)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qEL1g3ysDpUdNMTx/1VqcnkSonKtWF3E3ap82tO2qoQz6Ce2egEElXcPa/qr6e6kAwFDqJZEi5ZjU/wp2vrNI4NkvgMU1Rvgr7WioBqN1c4aBYtCs5jZV5pZuQN2OfDG8PWuLToq5i8QprrO/5E5lhDXkWvh6V4l8TwO5PRDdtSYlRNXlOdGhwfH0jKacC9NPxBqf6tlnVmB5whG9FHYoqXnOeVXjnvpwZusVA2nrJkQVXim0WiZE0uIHJ24PREUj+efSmbyrXWjCeg3pstDOSmAQstxWumiVxvOw44ioz8HucBNk/Nk64dXAaD/FTwt8lgNAXmntjR0wgBPQKtF92ShABAXZZqGZiEzF2mbWRDB86JinO2pZmkCKoMoCDOY4vvPYD/+fcGlI8JWV48BUgM14nuiGw/zod9QlHlFgyQyx1/KFXfEr1SsGRe6WhkB X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:10.1042 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3226b364-a2c9-4b9a-8027-08dec61a0bcc X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6186.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8791 Received-SPF: permerror client-ip=2a01:111:f403:c001::5; envelope-from=skolothumtho@nvidia.com; helo=BYAPR05CU005.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004507303158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen The updated IOMMUFD VIOMMU_ALLOC uAPI allows userspace to provide a data buffer when creating a vIOMMU (e.g. for Tegra241 CMDQV). Extend iommufd_backend_alloc_viommu() to pass a user pointer and size to the kernel. Update the caller accordingly. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/system/iommufd.h | 1 + backends/iommufd.c | 4 ++++ hw/arm/smmuv3-accel.c | 4 ++-- backends/trace-events | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/system/iommufd.h b/include/system/iommufd.h index 2925d116ac..1b0266f660 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -89,6 +89,7 @@ bool iommufd_backend_alloc_hwpt(IOMMUFDBackend *be, uint3= 2_t dev_id, Error **errp); bool iommufd_backend_alloc_viommu(IOMMUFDBackend *be, uint32_t dev_id, uint32_t viommu_type, uint32_t hwpt_id, + void *data_ptr, uint32_t data_len, uint32_t *out_hwpt, Error **errp); =20 bool iommufd_backend_alloc_vdev(IOMMUFDBackend *be, uint32_t dev_id, diff --git a/backends/iommufd.c b/backends/iommufd.c index 8c3a981392..c745dbd2b1 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -463,6 +463,7 @@ bool iommufd_backend_invalidate_cache(IOMMUFDBackend *b= e, uint32_t id, =20 bool iommufd_backend_alloc_viommu(IOMMUFDBackend *be, uint32_t dev_id, uint32_t viommu_type, uint32_t hwpt_id, + void *data_ptr, uint32_t data_len, uint32_t *out_viommu_id, Error **errp) { int ret; @@ -471,11 +472,14 @@ bool iommufd_backend_alloc_viommu(IOMMUFDBackend *be,= uint32_t dev_id, .type =3D viommu_type, .dev_id =3D dev_id, .hwpt_id =3D hwpt_id, + .data_len =3D data_len, + .data_uptr =3D (uintptr_t)data_ptr, }; =20 ret =3D ioctl(be->fd, IOMMU_VIOMMU_ALLOC, &alloc_viommu); =20 trace_iommufd_backend_alloc_viommu(be->fd, dev_id, viommu_type, hwpt_i= d, + (uintptr_t)data_ptr, data_len, alloc_viommu.out_viommu_id, ret); if (ret) { error_setg_errno(errp, errno, "IOMMU_VIOMMU_ALLOC failed"); diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 163d3e7279..4cef487679 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -582,8 +582,8 @@ smmuv3_accel_alloc_viommu(SMMUv3State *s, HostIOMMUDevi= ceIOMMUFD *hiodi, IOMMUFDViommu *viommu; =20 if (!iommufd_backend_alloc_viommu(hiodi->iommufd, hiodi->devid, - IOMMU_VIOMMU_TYPE_ARM_SMMUV3, - s2_hwpt_id, &viommu_id, errp)) { + IOMMU_VIOMMU_TYPE_ARM_SMMUV3, s2_hwp= t_id, + NULL, 0, &viommu_id, errp)) { return false; } =20 diff --git a/backends/trace-events b/backends/trace-events index b9365113e7..3ba0c3503c 100644 --- a/backends/trace-events +++ b/backends/trace-events @@ -21,7 +21,7 @@ iommufd_backend_free_id(int iommufd, uint32_t id, int ret= ) " iommufd=3D%d id=3D%d (% iommufd_backend_set_dirty(int iommufd, uint32_t hwpt_id, bool start, int r= et) " iommufd=3D%d hwpt=3D%u enable=3D%d (%d)" iommufd_backend_get_dirty_bitmap(int iommufd, uint32_t hwpt_id, uint64_t i= ova, uint64_t size, uint64_t flags, uint64_t page_size, int ret) " iommufd= =3D%d hwpt=3D%u iova=3D0x%"PRIx64" size=3D0x%"PRIx64" flags=3D0x%"PRIx64" p= age_size=3D0x%"PRIx64" (%d)" iommufd_backend_invalidate_cache(int iommufd, uint32_t id, uint32_t data_t= ype, uint32_t entry_len, uint32_t entry_num, uint32_t done_num, uint64_t da= ta_ptr, int ret) " iommufd=3D%d id=3D%u data_type=3D%u entry_len=3D%u entry= _num=3D%u done_num=3D%u data_ptr=3D0x%"PRIx64" (%d)" -iommufd_backend_alloc_viommu(int iommufd, uint32_t dev_id, uint32_t type, = uint32_t hwpt_id, uint32_t viommu_id, int ret) " iommufd=3D%d type=3D%u dev= _id=3D%u hwpt_id=3D%u viommu_id=3D%u (%d)" +iommufd_backend_alloc_viommu(int iommufd, uint32_t dev_id, uint32_t type, = uint32_t hwpt_id, uint64_t data_ptr, uint32_t data_len, uint32_t viommu_id,= int ret) " iommufd=3D%d type=3D%u dev_id=3D%u hwpt_id=3D%u data_ptr=3D0x%"= PRIx64" data_len=3D0x%x viommu_id=3D%u (%d)" iommufd_backend_alloc_vdev(int iommufd, uint32_t dev_id, uint32_t viommu_i= d, uint64_t virt_id, uint32_t vdev_id, int ret) " iommufd=3D%d dev_id=3D%u = viommu_id=3D%u virt_id=3D0x%"PRIx64" vdev_id=3D%u (%d)" iommufd_viommu_alloc_eventq(int iommufd, uint32_t viommu_id, uint32_t type= , uint32_t veventq_id, uint32_t veventq_fd, int ret) " iommufd=3D%d viommu_= id=3D%u type=3D%u veventq_id=3D%u veventq_fd=3D%u (%d)" =20 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004545; cv=pass; d=zohomail.com; s=zohoarc; b=SgKMS2MSRREQ44+MZzTNmEhh2JJ/W4ZEVbW+KPtdKPJElIt7LtU4a2+PCR/AsqmzqHNXf7U+eutltmOKaYM9SyHRG6NsMMYPRs+nYgOHcN2OhBIBfMGJaI4yyT7Fmv2IRi2R1wKt6unnDR3aTF7boDemudhpObx12QYCe9cNN7Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004545; 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=ujg1un6yKBOQ1Q/ECxKp02+hcFgZYJxacTpiFnVUrTs=; b=Zf1dVqZGLdsmpncr6WOpHeTMSps9UjNktbxA0y448DHu2nNNw/pGu8/iUFBqW3qo4CqTCfVCk/Fnl0rNoWkg05+Mq+zfJzh21BwmL26DX06wG3t0Q2Ww+E8p26pgCqdBC92rHO6VmJbe41XUQEqPRTfqgGc1t5F2aNIy3/xQ1k0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004545392494.3828296040813; Tue, 9 Jun 2026 04:29:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudD-0007OX-BK; Tue, 09 Jun 2026 07:28:31 -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 1wWuc9-0006Ls-Ar; Tue, 09 Jun 2026 07:27:28 -0400 Received: from mail-westus2azlp170120002.outbound.protection.outlook.com ([2a01:111:f403:c007::2] helo=MW6PR02CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWuc7-0002xX-3z; Tue, 09 Jun 2026 07:27:25 -0400 Received: from MW4PR03CA0142.namprd03.prod.outlook.com (2603:10b6:303:8c::27) by CY5PR12MB6573.namprd12.prod.outlook.com (2603:10b6:930:43::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:27:13 +0000 Received: from MWH0EPF000A672E.namprd04.prod.outlook.com (2603:10b6:303:8c:cafe::69) by MW4PR03CA0142.outlook.office365.com (2603:10b6:303:8c::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:13 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672E.mail.protection.outlook.com (10.167.249.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:12 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:53 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:46 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QatPTHDJX9oAf3oxy3inbrBLYHarufKEHxUmqF1a11kxszm4qi/aHXn7S1FSHRGxHpdUJpFWSWdenzb1xUpIcZ0HOqyb5iFPxWozvo3onlDWc33YIgpqzvETYVeJcI7SMdBHikceri2Ns8+1jeTtXbuEMxALyZWkylZrYeodJgtkIsxh0M5BE18945Tul/XQzCtlL1+zJQWRTJ9yuhfAFah/wG8Sm3c+C9pwVp6FU3L5UOeacs4Fp36uR7jc3qdHRvJGVg2J+VBn+IAwWqb+dVKImfiPHO4e9EYZNgsD6ug6xwVfDgHj+PQ0cjqBcfXbiYrnRqlFVWZnikge0zqZEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ujg1un6yKBOQ1Q/ECxKp02+hcFgZYJxacTpiFnVUrTs=; b=dXF3T6cww1cvKZZ2zdvRYFezjPxstVX1aiZa8cnCnnK1o0ZXUFjXW7S4fxshfqDM/9t5wo4SJAzENRJkAK448g+KzLiR1gBa2dFGJmSl49dIHwvkLmFBamntzXjgvHMURJb1HY1AhuNR0HF+8u0l3YbwyX/GR0YqNDP7aS381JQ/G+bpToZVIXHWU8YHQA5Vxv8h9SI1fus1ukefVtCEpyU8VbMbisYZstSmaspZZUow43cNSLDrvEDKfq0/crz2CigB/V5OwtFaEvRqhRSne0Wj0qf+WlbNW8vwZ+pKqq3/WlG76c7JEBUWxGWr4lMt8XpvaeHj77UqDgJCjS7bBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ujg1un6yKBOQ1Q/ECxKp02+hcFgZYJxacTpiFnVUrTs=; b=Dv758T+1OC59uV4RAR5n7v4x6aTU67X7h4pglowHFmzVE4kIlUcuZjElFCXaDd8LjVibN7Fni+JsrwSoFpBRH2MWcqXELp1zIYxCxgaRpIAhXcCz1/tUcIUqZ+Dtd1vBYSojG+OulUoTzAKM4fLvB6eb8ipqGUNuAR4HpDmyaLlLYO36uG29xiKnk1HCCZTrzuKaIZDMejiGKSJ6FW3aQLSWBRFrT8HddAJWBJz86ieNNtRWDGztkG6eC/G/5ptSgFQ4ftaeSwjqHAxVJgF6XCwQnqyzpoOAgO61cJBdAjhnh7TU/Ke5WSnfFDR9eO84kGpd3hbSMiz0qlAR2KfGPQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 03/31] backends/iommufd: Introduce iommufd_backend_alloc_hw_queue Date: Tue, 9 Jun 2026 12:25:24 +0100 Message-ID: <20260609112552.378999-4-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672E:EE_|CY5PR12MB6573:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e544efa-e132-4535-d912-08dec61a0d3c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|376014|1800799024|56012099006|11063799006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: b1Y3LwD5cfhCCi6QgRT9m55/UE19R8PVAeovzNvhYc53Dm67UboMW0iPEK15Bo9VZllXoc4qepMFxKtxzT2NMr3BEp758QBlYV4UPRyuiGzHfZCoUphGlll3kWR5NB6Qk5qPxs6MSQGvcbtfinaoNJaeVyjQUiCMbhkN3/HtVkRhmNim2Pwq1yQUSoMkWpv8ghj6gE2lmVGKMcYgnwHUpy+Ifclmd4ESYFW34As1xBicI9tYDWEAmshU77OlPgP70lo1fbtoPiLX2Ga9NwCD3mN9cGxeSwR6KemHJmOWvFEJiQRi+iANxQzx7ueTXOXC8wLnMarMJ5DDFnUSLqlqu6Q9q/lWwlzJ5sLcO+IEn7/sLUIuC4hNM0Ur2bISo/rt/iEgCJNtaKBNldrkT+RItis3sl7jiMsay6zbdmHulqhsx2xotQz3o/9ndv72VRHTbLg/FrZ/dXu5rmEJj7jVZzkRc8AVz6yRQE661eaoogLDXLJyVV5jAnGnRLPeV8aIlchlmlLON8HuTriqzUy5H2bAFf54rdYa/hSBMo3/Wh7zqwo7CkoOh1u8hOtBhOq39UJjVx7F5NO/A+jZ9j4C+2u5vT7hpHZLRU52qup20aQhvE1GO3ac/g+QywNkAqs9uY8dTp6ELhSUjdDPlxGCcq/HGB0Va+C4gJrrSXzrqE46dMUzveQrsuNXLDHFAJSmzH/BvZ5oR1V/GLnpYyT4BCPqcJo6VbXNvsGk4t7IexI= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(376014)(1800799024)(56012099006)(11063799006)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: i4P8z2cQEx0x+jayHTu0l1YaBe7lqYE+eDOVs5VXxX5XtGWR+geDW7judLc1VqfaPB3G8tP+asTbI4y8yBoMongsI2Yodj2qQBxRxmU2Au3Lq/k25Qfr+AxbhmOxGHE4vumT2fOFzHFS/tgQMEgNcEFMBCkbgxFPYeYIb7wq+yH4ksJZOFIkoYSSIV4XzTqNh1obzD+Tpv8fmEmOrqBdkttUzyfzMBcRYyD5w5a5u9drX+SvYHQCNJiWjjX2/r026Z0D7OMke/WTf6I2Pm2Ql7LCx7ENCS5wU0D1e27mjMFbKCRHWmzql9zf/rPH+TCWXgu1ydh92+yo2cOd8JE7Lre44Flpi8v0jE5LBTQtobk7B1TrWnC5LU3mYfV8C5/KMztZgI+0uJmdiznHOHmr1beMTCQ0I9TarQlppJqVX06bBuiNu46iA9poy5SnWSIA X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:12.5383 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0e544efa-e132-4535-d912-08dec61a0d3c X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6573 Received-SPF: permerror client-ip=2a01:111:f403:c007::2; envelope-from=skolothumtho@nvidia.com; helo=MW6PR02CU001.outbound.protection.outlook.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=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 @Nvidia.com) X-ZM-MESSAGEID: 1781004545528158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Add a helper to allocate an iommufd backed HW queue for a vIOMMU. While at it, define a struct IOMMUFDHWqueue for use by vendor implementations. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/system/iommufd.h | 11 +++++++++++ backends/iommufd.c | 31 +++++++++++++++++++++++++++++++ backends/trace-events | 1 + 3 files changed, 43 insertions(+) diff --git a/include/system/iommufd.h b/include/system/iommufd.h index 1b0266f660..c6f2e87a7e 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -65,6 +65,12 @@ typedef struct IOMMUFDVeventq { bool event_start; /* True after first valid event; cleared on overflow= */ } IOMMUFDVeventq; =20 +/* HW queue object for a vIOMMU-specific HW-accelerated queue */ +typedef struct IOMMUFDHWqueue { + IOMMUFDViommu *viommu; + uint32_t hw_queue_id; +} IOMMUFDHWqueue; + bool iommufd_backend_connect(IOMMUFDBackend *be, Error **errp); void iommufd_backend_disconnect(IOMMUFDBackend *be); =20 @@ -101,6 +107,11 @@ bool iommufd_backend_alloc_veventq(IOMMUFDBackend *be,= uint32_t viommu_id, uint32_t *out_veventq_id, uint32_t *out_veventq_fd, Error **errp); =20 +bool iommufd_backend_alloc_hw_queue(IOMMUFDBackend *be, uint32_t viommu_id, + uint32_t queue_type, uint32_t index, + uint64_t addr, uint64_t length, + uint32_t *out_hw_queue_id, Error **err= p); + bool iommufd_backend_set_dirty_tracking(IOMMUFDBackend *be, uint32_t hwpt_= id, bool start, Error **errp); bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *be, uint32_t hwpt_id, diff --git a/backends/iommufd.c b/backends/iommufd.c index c745dbd2b1..8eaaf456e8 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -549,6 +549,37 @@ bool iommufd_backend_alloc_veventq(IOMMUFDBackend *be,= uint32_t viommu_id, return true; } =20 +bool iommufd_backend_alloc_hw_queue(IOMMUFDBackend *be, uint32_t viommu_id, + uint32_t queue_type, uint32_t index, + uint64_t addr, uint64_t length, + uint32_t *out_hw_queue_id, Error **err= p) +{ + int ret; + struct iommu_hw_queue_alloc alloc_hw_queue =3D { + .size =3D sizeof(alloc_hw_queue), + .flags =3D 0, + .viommu_id =3D viommu_id, + .type =3D queue_type, + .index =3D index, + .nesting_parent_iova =3D addr, + .length =3D length, + }; + + ret =3D ioctl(be->fd, IOMMU_HW_QUEUE_ALLOC, &alloc_hw_queue); + + trace_iommufd_backend_alloc_hw_queue(be->fd, viommu_id, queue_type, + index, addr, length, + alloc_hw_queue.out_hw_queue_id, r= et); + if (ret) { + error_setg_errno(errp, errno, "IOMMU_HW_QUEUE_ALLOC failed"); + return false; + } + + g_assert(out_hw_queue_id); + *out_hw_queue_id =3D alloc_hw_queue.out_hw_queue_id; + return true; +} + bool host_iommu_device_iommufd_attach_hwpt(HostIOMMUDeviceIOMMUFD *hiodi, uint32_t hwpt_id, Error **errp) { diff --git a/backends/trace-events b/backends/trace-events index 3ba0c3503c..c5c1d95aad 100644 --- a/backends/trace-events +++ b/backends/trace-events @@ -24,6 +24,7 @@ iommufd_backend_invalidate_cache(int iommufd, uint32_t id= , uint32_t data_type, u iommufd_backend_alloc_viommu(int iommufd, uint32_t dev_id, uint32_t type, = uint32_t hwpt_id, uint64_t data_ptr, uint32_t data_len, uint32_t viommu_id,= int ret) " iommufd=3D%d type=3D%u dev_id=3D%u hwpt_id=3D%u data_ptr=3D0x%"= PRIx64" data_len=3D0x%x viommu_id=3D%u (%d)" iommufd_backend_alloc_vdev(int iommufd, uint32_t dev_id, uint32_t viommu_i= d, uint64_t virt_id, uint32_t vdev_id, int ret) " iommufd=3D%d dev_id=3D%u = viommu_id=3D%u virt_id=3D0x%"PRIx64" vdev_id=3D%u (%d)" iommufd_viommu_alloc_eventq(int iommufd, uint32_t viommu_id, uint32_t type= , uint32_t veventq_id, uint32_t veventq_fd, int ret) " iommufd=3D%d viommu_= id=3D%u type=3D%u veventq_id=3D%u veventq_fd=3D%u (%d)" +iommufd_backend_alloc_hw_queue(int iommufd, uint32_t viommu_id, uint32_t q= ueue_type, uint32_t index, uint64_t addr, uint64_t size, uint32_t queue_id,= int ret) " iommufd=3D%d viommu_id=3D%u queue_type=3D%u index=3D%u addr=3D0= x%"PRIx64" size=3D0x%"PRIx64" queue_id=3D%u (%d)" =20 # igvm-cfg.c igvm_reset_enter(int type) "type=3D%u" --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004530; cv=pass; d=zohomail.com; s=zohoarc; b=YcVGy6VSbFdVZFELs1pDS7/PsttAMY5cqfq2K0e58GmXyr6TfXdCw/qqJ+LPH/CcNSm4AifDsdbYerl+wvtj2jC4M/YEXeTSaf8cYqOzHP9rSa5Smmdhy8xyq2qKnW+m7dpZhYvjot8Ncsa1JXI2YtPFUvYEqxf71dr2dfHCQjY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004530; 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=aC8KGMPb6q6TsTayKM4J5xOO0ls/3mlZ8CSEPKKIfao=; b=WXI0ySH8J9M6H/IzfH0xudlsdo7m4Y+JEQg8GndZ5XvM5kCp0AVvVaxoNcg4VGQBqBg5SkYABtTR+8dZB7LX6JahOd5nlOUHDc/UUC+5ZDzpz2dYLgEeRkxFc+aUIYbyzU5hy1TAbvtLdyJliLLCvouT4CadBita4nXj28vLwhE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004530661572.7639021510792; Tue, 9 Jun 2026 04:28:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudF-0007ZP-7q; Tue, 09 Jun 2026 07:28:33 -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 1wWucB-0006M1-10; Tue, 09 Jun 2026 07:27:37 -0400 Received: from mail-northcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c105::7] helo=CH4PR04CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWuc9-0002y2-93; Tue, 09 Jun 2026 07:27:26 -0400 Received: from SJ0PR03CA0282.namprd03.prod.outlook.com (2603:10b6:a03:39e::17) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.12; Tue, 9 Jun 2026 11:27:16 +0000 Received: from MWH0EPF000A672F.namprd04.prod.outlook.com (2603:10b6:a03:39e:cafe::43) by SJ0PR03CA0282.outlook.office365.com (2603:10b6:a03:39e::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:15 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672F.mail.protection.outlook.com (10.167.249.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:15 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:55 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jCdM8w2cJzNeXd9+JyaCMJYepZd9Fjlwy/lFYPt/LspwhBQoR7pn7MZ/R0rJAJsnq/CHuMRs7RazF7kTefyPjOAh6/MoguaK0fsWSlIOyX0uJ1JgQLKL42nYy+CCt2mssObmIxAy7tvLPRx8jtreoe7NmhK/AxBmhmiybxhrSkx5p4zWgjvp0VMEopb/oOKIFq8tIQK65rQRi+uukk/R1zYFg4ToHQHn3G2gLz5Qr2tRMMYtBeXQ7JEKFHLb21apMeKKxmQOSbVHrUJt0hXbr/inyP0QCMw5+IawYaBpiEkZRFmKPA8Jn525tHGoN3tT2mr5ijeJg2fS3uzPUC9caQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=aC8KGMPb6q6TsTayKM4J5xOO0ls/3mlZ8CSEPKKIfao=; b=PbLVlc+bZPVvTbuGohe98VvkIw/K4zbZaz7O2G5phzq6cckj9WzTcvvBNpzZfLeCtmut5FQRqM7nmM1rZXxxo3Rbb5nXKFnun4E+UPX+Q4avA1AvDoyapGFY5Qi9g4AhcWjwcNVa0RsfocuQCkMhJVMGjxcAAm3/IOjC4wxVnr/DC3X6Jn4Urf0930diGSVbWKXXCgzquq6VdP948IBvXxW8a/5++/JkpfPP1wQkrITFhKOSAcg7dHEY2CM2y2XEPlJm8qi7go/E4BpR6U+Bq/B9ujop7nXRmRP1zmdZdRcQG6OzCOAncyPGv98BUb6tFjM/tBX7GChnUtaSo1K2jw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aC8KGMPb6q6TsTayKM4J5xOO0ls/3mlZ8CSEPKKIfao=; b=jQ2s6XvSUFu12tn1f4QpGTOMgeGwhdE2V9eFP2AjBSpRlwiVpjHwVpsmAfDs9KT6KEQfXP9xrOatToeDGQB5FgJh/GZ+2aLwNwXw5LjOr7VU5vTlxreJIOLrtABSn+FA+Ik+9YbZXHHHadSqD3roA2tYlwtjGqQPUiEN7+x5pTVN4cJYfH5WBNoTDyGg8m5OtgIQyq83c2jZbm4FEuEEg+fkv/6g6WZq333np1RAytbTmT8UIe0mSssFFImbO8OnAImulmwCox5RXSaxhE1rhyCNAcLnfnT1WoOELEjPMrBJnVeo1sObxVo7EaBSq0qN7rJvsbwGVkZKWC75hWmONA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 04/31] backends/iommufd: Introduce iommufd_backend_viommu_mmap Date: Tue, 9 Jun 2026 12:25:25 +0100 Message-ID: <20260609112552.378999-5-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672F:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: 30bc3c8a-13c6-492c-39e0-08dec61a0ed6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|376014|82310400026|1800799024|56012099006|6133799003|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: fdlw+XzKAWA1EIEZO57n1EhRrQrnJGZSJYFEl2aseD7wE/3he2oinyigd71MMDoXr1law+7bv2UjcVYDQNIqLvFhrraPpfF0kCWrT91MlCu3hM/cP+OoxjnB6ReaBOBQ5tBMY5NfDPOl0NoBvgEm+ezvvW5AAvpIlvxaJainAp+DlmceO3Pw6lVtq2oW6UFNvFrQbeJbkFA1d+N+M5h1fwN4gCuYZDHXkynmTfUEXHriTKPXoWcdgvLnRIZWpesAvwBdHPZawHGsBeLtn+L8ZPYHqSM/iNJRTW77RzSVawwCD/XeFkUl0hoxT/d4XjH2oeApsQHOnNCzS46GOduuS4B9EQ9Y5/X+7JaXYHQtWBaaWHh47D8xa/odNFfwzoocHwiLZhRTPsysotNV6hnsnajhRsXDU8UIciPp/GRMXpZuw48ckvyjFW8pByKy2LmjKlCfgY5JIAJfaF19iCWE7BxX061tJ5cQ2j5TeQXP6N6wyhZEdRjPWjvcGHs3m2wWfE15vgoIopGvHTcdDJg6PKMqR1QICkj1Mffqoishi/wLohKv7OsQu90plkQx74v+G6oe5NEMx/pMt/rTXkQ7rjNBO+mM3LQ+Uh+rkSjnKBWLckzrNIfKqwz1ZPqtehy7RfD+IrCroEe1YFFYzmoJ3vXBCKfmkZkq/Iz+ys+lHvYWL22u2WyRHw+XR20OwutZNWsulxZ6h+J1956gwOyrRAXoFsWW+JXZxtBqY+aOel4= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(376014)(82310400026)(1800799024)(56012099006)(6133799003)(11063799006)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: m3rLBZC4qqaRznytgFN+Hi6u6Cfb+XAQfmiRfeUC1Y+Gdp6SLBQpLiOaJommSkSx9b6J4De2dRKY+9mokDDF8VPioJQZnDTzzZMtEGq1vjDKG+EWMKVm8rPO6aAItWQPxt0B5LoRmW+H3YRvfaLItd6X/Dbq3x7FHpw2iSkmouq2PzCEYRwOi3UNjTy0Y4LGy1Pi/joMyeYlgC5IGtIS4O96VJGPb7uuG5kOin4s8tLrOEC94SRnxQRZ+xNvDi5r/0xg6q9bPexHw/sLY8wnZWQBVA89VXwE0uPMDbkGzdM8KvKsIlhcuKEkNxcP/Reokk0ukWUf+n91+Zm82RbjjbbLADWD8FXJy2p9BLaVv4dEWLDAUkjggYsljYp+cj8A3wTgA7rP52Zi7/WuSZZhRoDpGXh9mOvhswAirldXmmNYzJymxiFsmz8Maqd1kQvO X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:15.2148 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 30bc3c8a-13c6-492c-39e0-08dec61a0ed6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 Received-SPF: permerror client-ip=2a01:111:f403:c105::7; envelope-from=skolothumtho@nvidia.com; helo=CH4PR04CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004531513158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Add a backend helper to mmap hardware MMIO regions exposed via iommufd for a vIOMMU instance. This allows user space to access HW-accelerated MMIO pages provided by the vIOMMU. The caller is responsible for unmapping the returned region. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/system/iommufd.h | 4 ++++ backends/iommufd.c | 22 ++++++++++++++++++++++ backends/trace-events | 1 + 3 files changed, 27 insertions(+) diff --git a/include/system/iommufd.h b/include/system/iommufd.h index c6f2e87a7e..bb8d5081d7 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -112,6 +112,10 @@ bool iommufd_backend_alloc_hw_queue(IOMMUFDBackend *be= , uint32_t viommu_id, uint64_t addr, uint64_t length, uint32_t *out_hw_queue_id, Error **err= p); =20 +bool iommufd_backend_viommu_mmap(IOMMUFDBackend *be, uint32_t viommu_id, + uint64_t size, off_t offset, void **out_p= tr, + Error **errp); + bool iommufd_backend_set_dirty_tracking(IOMMUFDBackend *be, uint32_t hwpt_= id, bool start, Error **errp); bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *be, uint32_t hwpt_id, diff --git a/backends/iommufd.c b/backends/iommufd.c index 8eaaf456e8..440c1b82bc 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -580,6 +580,28 @@ bool iommufd_backend_alloc_hw_queue(IOMMUFDBackend *be= , uint32_t viommu_id, return true; } =20 +/* + * Helper to mmap HW MMIO regions exposed via iommufd for a vIOMMU instanc= e. + * The caller is responsible for unmapping the mapped region. + */ +bool iommufd_backend_viommu_mmap(IOMMUFDBackend *be, uint32_t viommu_id, + uint64_t size, off_t offset, void **out_p= tr, + Error **errp) +{ + g_assert(viommu_id); + g_assert(out_ptr); + + *out_ptr =3D mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, be->= fd, + offset); + trace_iommufd_backend_viommu_mmap(be->fd, viommu_id, size, offset); + if (*out_ptr =3D=3D MAP_FAILED) { + error_setg_errno(errp, errno, "IOMMUFD vIOMMU mmap failed"); + return false; + } + + return true; +} + bool host_iommu_device_iommufd_attach_hwpt(HostIOMMUDeviceIOMMUFD *hiodi, uint32_t hwpt_id, Error **errp) { diff --git a/backends/trace-events b/backends/trace-events index c5c1d95aad..b63420b73e 100644 --- a/backends/trace-events +++ b/backends/trace-events @@ -25,6 +25,7 @@ iommufd_backend_alloc_viommu(int iommufd, uint32_t dev_id= , uint32_t type, uint32 iommufd_backend_alloc_vdev(int iommufd, uint32_t dev_id, uint32_t viommu_i= d, uint64_t virt_id, uint32_t vdev_id, int ret) " iommufd=3D%d dev_id=3D%u = viommu_id=3D%u virt_id=3D0x%"PRIx64" vdev_id=3D%u (%d)" iommufd_viommu_alloc_eventq(int iommufd, uint32_t viommu_id, uint32_t type= , uint32_t veventq_id, uint32_t veventq_fd, int ret) " iommufd=3D%d viommu_= id=3D%u type=3D%u veventq_id=3D%u veventq_fd=3D%u (%d)" iommufd_backend_alloc_hw_queue(int iommufd, uint32_t viommu_id, uint32_t q= ueue_type, uint32_t index, uint64_t addr, uint64_t size, uint32_t queue_id,= int ret) " iommufd=3D%d viommu_id=3D%u queue_type=3D%u index=3D%u addr=3D0= x%"PRIx64" size=3D0x%"PRIx64" queue_id=3D%u (%d)" +iommufd_backend_viommu_mmap(int iommufd, uint32_t viommu_id, uint64_t size= , uint64_t offset) " iommufd=3D%d viommu_id=3D%u size=3D0x%"PRIx64" offset= =3D0x%"PRIx64 =20 # igvm-cfg.c igvm_reset_enter(int type) "type=3D%u" --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004727; cv=pass; d=zohomail.com; s=zohoarc; b=DFvCTtqawRa6Gifu4mgeZC7MvxEhZxifMP6DgqfhQo4U2yzLqUTi9x2UH9N/x+qqr2+Wk+0/u4VvrO/zjy9XFvsQjWBA1vZUOc6D8A55pMWZ8yzneYeOYk8tcfz5u9xORT0vSwblBMTwlqMVpOgFlmNqEuccTUd6Ofncu5O8j+Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004727; 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=HlJh1vl4sOTD7une3BywM6TTdMZTX09BUYTEZPiCtpE=; b=PFyE8Aay2+npujy7vWkrEUwlmvK/skRwsgw7MyeVEl3I4qbN+Mg1+y3oc80EUAe2HlKXBk4Nk4p9xvfw+N8gnrd7pPwhvbuWfWjcvUMpmPtelTmXFvuWb2qN1rmToVXInSc6yki7qrlHhWCcUayalA1ZlOv1B3ZQTfp6wgptenE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004727549356.78687542947785; Tue, 9 Jun 2026 04:32:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudI-0007uE-Ar; Tue, 09 Jun 2026 07:28:36 -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 1wWucE-0006MB-9y; Tue, 09 Jun 2026 07:27:39 -0400 Received: from mail-northcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c105::7] helo=CH4PR04CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucC-0002yR-Px; Tue, 09 Jun 2026 07:27:29 -0400 Received: from MW4PR03CA0123.namprd03.prod.outlook.com (2603:10b6:303:8c::8) by DM6PR12MB4108.namprd12.prod.outlook.com (2603:10b6:5:220::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.11; Tue, 9 Jun 2026 11:27:20 +0000 Received: from MWH0EPF000A672E.namprd04.prod.outlook.com (2603:10b6:303:8c:cafe::6d) by MW4PR03CA0123.outlook.office365.com (2603:10b6:303:8c::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.14 via Frontend Transport; Tue, 9 Jun 2026 11:27:20 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672E.mail.protection.outlook.com (10.167.249.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:20 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:57 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:54 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x35PYG8vwPtGv5NVeiPsFoMJdw6RbddDTXErzcmHI8jex25BHkKzl5SA+ES5qeoki6+219VcTmrk8qRG3AE9uTpgn2+88YREwqgJyIRtKRFvW6Q6P2F/VTgKat8sSxcbRxQEwdK4BNTeGL62PFMIJhA2UZCRp6AhkCOlQWTWnuIkDHZhkLQJWvXkWohbyYTZ3O7XSVE1sr7dO8mWwGWkqjFVgQxqCvCVZPk6TDWMuTxQLsiA4wgcfTsaTw44qkqwaDzK2HaHb3e/PvQGh4sr4ZUMnJQFxbGcRb1bod8o6OgpSuEnI38lq4Z2xDrW0Rf4rTYaBYipA65Ceby2XPM+1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HlJh1vl4sOTD7une3BywM6TTdMZTX09BUYTEZPiCtpE=; b=lC4ecK87NcRBDPz50/vfnG8IN0u8NyM/zJdjXmHHUC47QxzFyOWh2tcsknSznKq48KjZN8CLGJlUJxRTTHUCXyWOsUmhHxYysBiDTEPZTMAxdiZ6FbRs/Y1RlXlpv7uQm+W472GIjbYW23VCH2FLVPEbA/XgPWVF7N6UF1N94debOvmEjrfZjLrmV7Ib3VTD+11DXp6QkcMjkdTT9WqyDmPfmZvfaTNvDOnWfG72tt0lVK5lQUwCpIvuqMz8CB7ssiDi0LxyguE7hrHZGYWQboAvDqHkaeWnj0RPrKFNl4GS3YYXOXvMwdo6IGGGSSwRth2v2R6yOSNlxsf/Gin9wQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HlJh1vl4sOTD7une3BywM6TTdMZTX09BUYTEZPiCtpE=; b=MhOl7gzwAH1K+T8VpHB0HxY5n6nz5dixAlKtNjV2Tlr5/CPTWlgp/Gj+y4Rg9k+xYw+zIYUDtGZH/3jU54ZjL4/6nojTHBFel6PcNNO/UzWF6Lqtd/7/PN5c54IeRavPF+m1vT2/VdSuFkt+fEYUMhE8ThrDEVFhjie0WYpyCTC+lVzeAPElPIpCVTPAPlXRXNiBmdfknEiV84CaLKg811QzLLQZQcsJ/seTofvasIpOXHFA/PLaZi6njd8pBs3veY4mTVH/che0a7jy3PkFJ8n/qnbu8riGCMoj9ovHjkVaFriYXmzb7EnDbypHdxR7rYXs6pVWHMHeMiazY1QwZA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 05/31] system/iommufd: Remove unused viommu pointer from IOMMUFDVeventq Date: Tue, 9 Jun 2026 12:25:26 +0100 Message-ID: <20260609112552.378999-6-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672E:EE_|DM6PR12MB4108:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d5ebe52-1455-47f1-91d2-08dec61a11e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|376014|36860700016|56012099006|22082099003|11063799006|18002099003; X-Microsoft-Antispam-Message-Info: yCbnxrnE+DHhmWuzoC5q/Vw2HiekCyvGLwqBq9HbHCCjQZbOQHi2QAzWrW0bL0BuQPtvtCf3IwWG1C/bsPZ87bDXE0+bX8J+DgOkDomiHwQ8SoeYz4BkJHajGRHmFTfY6IMVa+vL89yDuKRtw3Ayb3MTXRQG5bf4/eDrq3yw5QMBJx9i8l7evSN559ab2sQ4bmiadUzY+e9mzMoESzlELmM1QhqEcub18hq4j3XpxCu1wKbO30SBTY53C/v1wAS5GyF5le4wZ4CBzAgKpzh6O445G8NoSClS6P2rRUxm8ZEVUYXhZsEKDyyba2+4xWiPgGu9DwwO/6kUyKnC9+Rm40LtcOO+XkGrATfv889hT3cUW2tiPV+jY6zG3f4I6aZGr/R+70yvpqwdyBbEjtAriNV6csmvCybrcR3TG51xvdgGIK5lFsZjSUkgXb2J3VqittGwzEHKGnqjDDEyiaXIhWq/QsZC1953qtO29XNMekTGEB2iORFSEYfaO6zvyJGydro3tSeBItuS913feXEb6TVyBt/YkeXpeYULcR7ExWiAzglXBVlMwyxzFeLN/5UoHjbWQl+m+aztHbSA2h7R/KBjXs1ck3KWUmD7Zp3tnB5yAzb29oKhnHWT3DwcwQJSLu2ZmfmN2zI5pu+IMoRU3LAq4H2ByLqQ3A6SyrKf22f9K+GDDl948yu3erUWMomW4iufWQdWqpTbjLfi6mVDgzOW2G3MPsFevwERSaIzLKI= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(376014)(36860700016)(56012099006)(22082099003)(11063799006)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: x6SeXNHUbz5Na3ygUATH+/DNj6+oZaP0Q22pXsZ05kzkOmkoV/y6dvYGwhujxVpGY5uG244PKYOl8W13KxTpZonLBX3rSX6avAXJ/5maY5IlSfx/alSe/fcOVQsUez/zBpzHTUpFOqYwXTV/e8AzUQB4TlQvPbdUAkVBnZ9wJ7e61w+rEioD1nu4i+XVgAbsPxAry4xAkGPm8OH1nGVqLxUh5kGfvlhhlsEJzOMSl6+oZVZ31BS4IJOKCw8WO4+QCoKCRiH+HC6vTs5iCSDCXeq+cp1YyAJ8GjSJM1JeijGoTFiCXO7aY+cO3NV3L43bLAyGlrJo37O/BuQcHTyx7MwG4hZ/NmD9m7TGaD0WqNVAjfGxzcZhBADgVVAwHt4zYcupB5hmZn6kpaZahbOT/oM1dDjTsl29qNCLcQVGWxlK50/RCRqU05i5/pIt2H44 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:20.3502 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4d5ebe52-1455-47f1-91d2-08dec61a11e9 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4108 Received-SPF: permerror client-ip=2a01:111:f403:c105::7; envelope-from=skolothumtho@nvidia.com; helo=CH4PR04CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004729020158500 Content-Type: text/plain; charset="utf-8" The viommu field is assigned but never used. Callers freeing the veventq already have access to the IOMMUFDViommu object through other references, so this field is redundant. Removing it also simplifies upcoming changes where veventq is allocated based on the viommu id before the IOMMUFDViommu object is created (e.g. vendor CMDQV-based veventq allocation). No functional change. Reviewed-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/system/iommufd.h | 1 - hw/arm/smmuv3-accel.c | 1 - 2 files changed, 2 deletions(-) diff --git a/include/system/iommufd.h b/include/system/iommufd.h index bb8d5081d7..da68ba0037 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -58,7 +58,6 @@ typedef struct IOMMUFDVdev { =20 /* Virtual event queue interface for a vIOMMU */ typedef struct IOMMUFDVeventq { - IOMMUFDViommu *viommu; uint32_t veventq_id; uint32_t veventq_fd; uint32_t last_event_seq; /* Sequence number of last processed event */ diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 4cef487679..70b2581c17 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -553,7 +553,6 @@ bool smmuv3_accel_alloc_veventq(SMMUv3State *s, Error *= *errp) veventq =3D g_new0(IOMMUFDVeventq, 1); veventq->veventq_id =3D veventq_id; veventq->veventq_fd =3D veventq_fd; - veventq->viommu =3D accel->viommu; accel->veventq =3D veventq; =20 /* Set up event handler for veventq fd */ --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004727; cv=pass; d=zohomail.com; s=zohoarc; b=SV31wzap1TyTcGuzOD0s6r75UhpQM4Efb1QgwFPjN/miPndCbHhMHIxGTKTUwcZtwCq2uRO32VP4p4gE0ddxDHl5YFz2SYUZPza7DU0JNti6Usqk1Xgg9j/gRdLHb8iRnskV98qNjdlUg350w+TQq6MwHrUx0QdwpBAQkdREwB0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004727; 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=YPRUcrKVA4eH8RvznFC34xlDMOMTsQCLCy6H4okKBbs=; b=md4pPxcvSCTAa4VYWdXTlfO9o40WObRwnZVXws+fBmBihct4cURbycWmtWvbDqcM/rTAEKi0euiVHIDpf7h+5rwlKn/OBJdUFpyo7Op8saqKFZ5Y0PtfT7uormG9/I+qdgKWWdMMHeS2kShpP3ltWkigB3IPqvma8ePrWqhjUiM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004727305966.2836623157901; Tue, 9 Jun 2026 04:32:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudI-0007vX-JZ; Tue, 09 Jun 2026 07:28:36 -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 1wWucR-0006S6-6g; Tue, 09 Jun 2026 07:27:47 -0400 Received: from mail-westus3azlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c107::3] helo=PH0PR06CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucI-0002zH-3P; Tue, 09 Jun 2026 07:27:36 -0400 Received: from MW4PR03CA0123.namprd03.prod.outlook.com (2603:10b6:303:8c::8) by SJ2PR12MB8925.namprd12.prod.outlook.com (2603:10b6:a03:542::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.12; Tue, 9 Jun 2026 11:27:23 +0000 Received: from MWH0EPF000A672E.namprd04.prod.outlook.com (2603:10b6:303:8c:cafe::6d) by MW4PR03CA0123.outlook.office365.com (2603:10b6:303:8c::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.14 via Frontend Transport; Tue, 9 Jun 2026 11:27:23 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672E.mail.protection.outlook.com (10.167.249.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:23 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:01 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:26:58 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RIuT+NQdp0AIHWg+RtIv/E9mJV+mLyNv+oXD7jgjnPBh1fJb6Oz2lW6Ecayo5vL/Z9RHQ32n83GH/zHg99UY+TeVwpiB0PErrX0dE16kydaAc8E0r0rCyFJf/bd/eU+jFX+9dXmvGdQ6NGJ01er2b0AnCVsm9Rm2twvDr3ShnwgNnpxNkPZYXoDKn654wDRjxSZXQy+TIsilkTC9PX6fMpslNTk5HG3N+qmDBvKV3mIp8P5ZmXOX9A4CKLa+KDp/cgFpfb2HnQ+FhD1UqjkNKIMJ/wn1ZR0UsXpmFZwT9mCwl2IsOZ0o4I++2oL6OPT4CxIojsIru81d/PHgWylZSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YPRUcrKVA4eH8RvznFC34xlDMOMTsQCLCy6H4okKBbs=; b=KNZxZFxUifKGCWXbKkD2HG2FE3l3qI4uXiRRpDVZNVStMAEkponl9lm9iTgihHxSBd4iHa/mpCSyNNq7KVwS4obQEprVW8SKqPOJCSCx1xMiT1UrwP7E4eMgzi77AWCSxFmogD0pbeDyZ9TGThj+z1ITrUZZ/UgdDPM7KNOy2ylAUJ/gE7ISNFVi2tUVZw3kEdHfyP+o8Ep+ecCwZLROa9W/RClXMiN7fq5XpmtIxrkTIFq1YNDfSkOI7jRg+duN5dlKuwfbkP0j71qAImC0H+ww9ey4xyQfvcT3rbm/x3FVfn2K2XEUXg1yX1MPLe9VrD0TDD9earRLQePf/h0zog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YPRUcrKVA4eH8RvznFC34xlDMOMTsQCLCy6H4okKBbs=; b=rpT7xP72K38o4qO/ujVvcAbbg1JpvRoPa3jqGF2XEMW15rQ2dew7YJAeKSZdx8KUCVc0pOFCttzRts7x/2wv6O87FV2MU1CxHFAtAKqC/pJFFTyPIfP9Q0WBTYHDpu5+tJqBXu4sjuxZLLtVmARmnzK5ca6jl5tDi4zI577Ic4nfSQ9B2ahSDtOtzwlfCpQcYVSfuPM0+lVmLsCHdUGV8zCMWVqZzmhTWKnBylGUKtO/PJea4uOt89h2HK7MOaeuB5WzsGiRQsyc/ISB1cq8JzCKZTW3RN6z4eWlPsAd7+Wht5NQK/H8N5n8WceFvq6gfiVPmlJyeHQ4CrebcFKLCQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 06/31] hw/arm/smmuv3-accel: Introduce CMDQV ops interface Date: Tue, 9 Jun 2026 12:25:27 +0100 Message-ID: <20260609112552.378999-7-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672E:EE_|SJ2PR12MB8925:EE_ X-MS-Office365-Filtering-Correlation-Id: 218f44d3-6521-44fe-a0b7-08dec61a13d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|376014|82310400026|1800799024|56012099006|6133799003|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: KaDo8OFQfkku0OloNw+cr1bPmdyic18JrrayWdZIbYi4gcQw+InRSDcMghoc0CKWky6/+Dv2uwwl4NTqbwOLnn2ZhoIzzKWdZX51kKbpHghNmBb9muVRU8xfF0tCNFauO1nD9MTzD83JdnooB4NmtndyhsqLJu0Y6WjuocvNP6aQ2q9Fs1IL9uuwwN9etwIcowPDsKz+WEZ3ZZMHHwGdy4QgnNSRlmfCI8dvTnoNjkkxZcLWI3olc8bfQjvGQ3cuvNRD0bV1greIJOLTZ38AEnd0v4k3OuvdQ6zOWZSEeAycpY+DbncA/MjGo8FlbKJlEVUuSCLn0rdjYdyU1frQbCGclhps3IEb3ak7FtkKAUEWrwuk3wJJRQXO0QfakWc3Ad0sa8jAttQi3TI1iZamDZZBkQW3+w+E7o2wCoFqA4eEmtqqvJ8S1luG4+mRB/yyW75U5c5ISMams11dTKA9tX/Ut+yDrfbi3dxRjea6twm5FJnxRMYDZazLe2mfTNZzb7E/qSa9BI8cj4UsJTSLnccwCPhikYr9NuAoC3fHXOoe9+NCBWD8RnsxDRubysozHVad7rfCtPoP8ElH0HwfqVIY+HrHrieXpBr7m+YQ+OjZrzm5+TiWzADOldnsZpyXpi/4SJh3XHmcHqEWn4SzTG1d3by72bAnaHAVxoUvGxH89mvKjh4RG8UD/nzQRehQ64XG2iN+l4LyoFLx6U5WVils2Z2VgEz42AV9WuNJ3GQ= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(376014)(82310400026)(1800799024)(56012099006)(6133799003)(11063799006)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6f1JY+YfBaCZqR6Xol3lk6SlePD3w12SabpjkIVrBMo79f0OpoRiO7i95MjcKP2+WxbMRCcSakKwCDj3vgJwEtLkRD5KUENWTopAfIYD947VTpxFQ1N4OCvT2Pi5dX5qoTLGiweI6dud5eFzSNYMvJ4Z1pmnpRO/HhnxMISZUuu3UR51a6gR744WR7mKzpGtuz2kIPAioJsmjFbfFRXFuEOj93odGhprMDwxE6vRg3W6e0FS6ia5fN4Iflcp4QNvCw8v04k+6Nto7nGqmjWi81QbwJ+SGeyXJ1yb5yQAgh8B44qPyEli6bg2SEQKcj6DTgZThCWj2/1cEC8dhaN/KoYP3fSHVNP+aVsXhjLRGklPtP6YBIC1TyHRaDY2Wo0rtaT9V9z9hKjhd4vRj+hBcdNKsajffPNgVJdGddrP2Kkfh/E0Knsqika2L4iYzav7 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:23.6210 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 218f44d3-6521-44fe-a0b7-08dec61a13d4 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8925 Received-SPF: permerror client-ip=2a01:111:f403:c107::3; envelope-from=skolothumtho@nvidia.com; helo=PH0PR06CU001.outbound.protection.outlook.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=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 @Nvidia.com) X-ZM-MESSAGEID: 1781004728598154100 Content-Type: text/plain; charset="utf-8" Command Queue Virtualization (CMDQV) is a hardware extension available on certain platforms that allows the SMMUv3 command queue to be virtualized and passed through to a VM, improving performance. For example, NVIDIA Tegra241 implements CMDQV to support virtualization of multiple command queues (VCMDQs). The term CMDQV is used here generically to refer to any platform that provides hardware support to virtualize the SMMUv3 command queue. CMDQV support is a specialization of the IOMMUFD-backed accelerated SMMUv3 path. Introduce an ops interface to factor out CMDQV-specific probe, initialization, and vIOMMU allocation logic from the base implementation. The ops pointer and associated state are stored in the accelerated SMMUv3 state. This provides an extensible design to support future vendor-specific CMDQV implementations. No functional change. Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Reviewed-by: Eric Auger Signed-off-by: Shameer Kolothum --- hw/arm/smmuv3-accel.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h index 87fecb5c68..b45f25ad03 100644 --- a/hw/arm/smmuv3-accel.h +++ b/hw/arm/smmuv3-accel.h @@ -10,11 +10,44 @@ #define HW_ARM_SMMUV3_ACCEL_H =20 #include "hw/arm/smmu-common.h" +#include "hw/arm/smmuv3.h" #include "system/iommufd.h" #ifdef CONFIG_LINUX #include #endif =20 +/* + * CMDQ-Virtualization (CMDQV) hardware support, extends the SMMUv3 to + * support multiple VCMDQs with virtualization capabilities. + * CMDQV specific behavior is factored behind this ops interface. + */ +typedef struct SMMUv3AccelCmdqvOps { + /** + * @probe: Mandatory. Vendor-specific device probing. + */ + bool (*probe)(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev, Error **er= rp); + /** + * @init: Optional callback. Initialize CMDQV hardware. + */ + bool (*init)(SMMUv3State *s, Error **errp); + /** + * @alloc_viommu: Mandatory. Allocate CMDQV viommu resources. + */ + bool (*alloc_viommu)(SMMUv3State *s, + HostIOMMUDeviceIOMMUFD *idev, + uint32_t *out_viommu_id, + Error **errp); + /** + * @free_viommu: Optional callback. Free CMDQV viommu resources. + * If NULL, the viommu_id is freed directly via iommufd_backend_free_i= d(). + */ + void (*free_viommu)(SMMUv3State *s); + /** + * @reset: Optional callback. Reset CMDQV state. + */ + void (*reset)(SMMUv3State *s); +} SMMUv3AccelCmdqvOps; + /* * Represents an accelerated SMMU instance backed by an iommufd vIOMMU obj= ect. * Holds bypass and abort proxy HWPT IDs used for device attachment. @@ -27,6 +60,7 @@ typedef struct SMMUv3AccelState { QLIST_HEAD(, SMMUv3AccelDevice) device_list; bool auto_mode; bool auto_finalised; + const SMMUv3AccelCmdqvOps *cmdqv_ops; } SMMUv3AccelState; =20 typedef struct SMMUS1Hwpt { --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004515; cv=pass; d=zohomail.com; s=zohoarc; b=NoEiQrqPN549AtyyYAudF3sJwYX+9JhkokHDhaX5yPvdLylmxZ//6k/ye8vfyLHRRdm2gYjqob5iPI0DsNDtCh9XoGMNQDgSYxVWm09VZ4eowuooHSPMMq4fqtitqNJxS7eiNLHr8FEAoPhDNJ0kBWI6opazrlN2tB550kJ4IyE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004515; 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=dWSUorSX/l8b9tbv4B71ulhwR68gYwi8sGytJRbDLrE=; b=X6fif41LhbCH2T3oh1wKQicRrgd/9UqLVFMhDa9w08+O48Z6ne4mFKnIufd27m4g5FR7B2DYb5gAZ2M2uqnklSqlin6z8NVfwcweYwQdQ9bX4yzgIMvJBy6MQ2bj4k7uymFsTW9M9zkTVxk+anJwdO7vG7XQ17zYpzWoE73xfNE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004515500311.6756541974895; Tue, 9 Jun 2026 04:28:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudF-0007Z8-7C; Tue, 09 Jun 2026 07:28:33 -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 1wWucM-0006RY-9b; Tue, 09 Jun 2026 07:27:44 -0400 Received: from mail-eastus2azlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c110::3] helo=BN8PR05CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucG-0002z7-Iw; Tue, 09 Jun 2026 07:27:35 -0400 Received: from BY5PR04CA0019.namprd04.prod.outlook.com (2603:10b6:a03:1d0::29) by PH7PR12MB9126.namprd12.prod.outlook.com (2603:10b6:510:2f0::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.11; Tue, 9 Jun 2026 11:27:26 +0000 Received: from MWH0EPF000A6733.namprd04.prod.outlook.com (2603:10b6:a03:1d0:cafe::15) by BY5PR04CA0019.outlook.office365.com (2603:10b6:a03:1d0::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.13 via Frontend Transport; Tue, 9 Jun 2026 11:27:26 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A6733.mail.protection.outlook.com (10.167.249.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:25 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:06 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:02 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gXbNE/6nSIflQ6821cFxeV2ZV2SXrDqejYHV56V1QgIgTwgVvi2qT3EXO5uOFvwbopGqajGpCaC+jyD5rwKU9lvpHfJWRcM0I83mA66AY9RB6QPT0DUkHFat2YjUDI8Kf9lYMLJQZsT4Wd5gyoatTvCQv5w5IbR/OQPmGvIqlzHqGuk60iRRWjacI7CoCsOkZd8a799zcQQq6EQreLr6owoFWoMpPxuGu6rSTPU0iN6Dwpnm4XvqjdA7nwDLysDwhv4kJE+fNoE1iyf00FTaMXwKfYV2kxyYRcNCRTNugkFfi9NagIVb1xPf/G9C9DNqwoscJqb5E2eTO3UJVGtwrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dWSUorSX/l8b9tbv4B71ulhwR68gYwi8sGytJRbDLrE=; b=QTQ1050k9fdA4gk/D9L1yzctI96Spf2oWu2GboxpuZ2k2RLyKT6plppec7EUkQ75ZHF7rPKQ++Off5y8TA/9TduYvgmcpD80StwtU/Rvn70fFMoPyYEICwmlO3U7x9OCK9OoiXtmmIBSyHBDWI0j7gO+3rwW29qwoYbRz4ruTaB06qEdwzn0uyHa3xX/EAS3ZLNpZD8tIbYUwSaK3WHXeznvp+EINoaidc1xsZNEpOtLMag1o14vhF4DMquIS/8+SIa7V0sQU5KoA2btVauBF/n0daTkN0HHCyC1ArQhwg6Iwxn7Vj4wSNHxlTf3vNnPH/47ONPUdm0rcOHsF+X2Fg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dWSUorSX/l8b9tbv4B71ulhwR68gYwi8sGytJRbDLrE=; b=DC9ScNH2OWWO68jGvPqmemItr6nUKScSpgh6oHo5VWGH1sQ1a5MgJrHrnoDwjSpSe6lMWHekS6cOE7K6qF8cQmJV5fq9ZkKRTem3FywGMUbYgGCrOLNKmvNHtDnvmcDXYiD/6I+BIeu4pu2AOfMQhILx4gkPEBJ7GKzYKZj1HgUjinrC1TeWzJYG6N9081k0ML2k92ej9J2H59CeiWowfceUjIou256qch7eExfWXIp7EIJtyhAYXk2CC4iJwIuGYgdLKy00K2KXs/5ept2oBGdrZVDtplV3DlCDFP4kxSsZhsNQkGGMgu8bNhB1y11r5dnlwb/XLUMMar/7qLkBWQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 07/31] hw/arm/tegra241-cmdqv: Add Tegra241 CMDQV ops backend stub Date: Tue, 9 Jun 2026 12:25:28 +0100 Message-ID: <20260609112552.378999-8-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A6733:EE_|PH7PR12MB9126:EE_ X-MS-Office365-Filtering-Correlation-Id: 38f82f25-250d-46a5-6897-08dec61a151b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|1800799024|376014|22082099003|6133799003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: i/ZS3HYlUapcsvos4UYf3mNNn5pUW4WggBKRv6O/LRIfPMCArZHoueP5L1+zTdyvkgEmXnvQBy9omkkSICw5B9pWcjXmH2mOnoPr4Se74QxQ9SY9WZsXsFsaLpLoxxpOF3iCZU04BoBuarD+oHAxRKLiZHAATpHXK08xvroqW2055xFWT3+ggfichbKOJL7GD53sagz0C2KCtehOIpuNJ96oOFerzOiuk9g2viwkF9m85lFfhlFs34vpHn7G9vOot9eXmRMNNNy9q8NO8jjLKQdAfqkpxBKvVeqqcCwZFwrNrSj1sfCyeTMTP+ENYT3SwafnIYZ/IRpeXXj4+azaEUMjTvn1NTkCVsDvYNgOp8gqZlXwbS7oDNK+Kgz0ymCfsOvA+w6PI89M92bQoZjGP21oJ/lo4l8M5o5IQ6W9DwtIlv2trCUneE2DuFww480s9UUDKa4megqJFCXblpRnMgb1lbnCjsHp6VJ3KB798lqnp3qZHqLIaUKgZYQKEN3Ico5B1Pe7ygerc2qvIEL3OchXBnFo+uVr7NV79fJUYuWreUl+WFSqLqsrHyqJqBC/X+i0bhdhbV2hhE9oYKLjH3ioKO13rRCROKI7svQ1kj0ROlfpKzMV8/H9sIJglIhQ3LnDNymEsfUKh54kt8aKodimWJ2S1tR4YWBeAFjxAevgr+8OPeL3/njZPWMtOTsJDbknDoE9DGi5H8QdcrsXNX2xdeuUdwAddzljWc773oc= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(1800799024)(376014)(22082099003)(6133799003)(18002099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: g/VuPxaOX1KkTWFK/6+Hk1dAxRmJzBlxvDy6DCZ6lc1lhNMRQw0PrBAYAqH/JHfEEt4YXnAhhTx+AlNOeoRIRzpNM2cf0qBBc+rTrUCF6w7msgT3VFEAShezXDyJO4oEDnTGLiZ+pWXwQ7i15iv2oQ2JfsoaJBxgJ6Pmwi8pIEpsCpHnMfT1ymGRVSBr42yKq+Yc8MxDS/Ua6Or/FWoX5iJ4VMc9cz5VdxRP83BhwhbYLdAK6U2u9NNmVnEz92561BLNk0GOHEyuLX1eP0Wm+b/n3337luC3vx4E4XrNV5vmkdxJBBW1Z05hbFTu2deLijM8x1bU/fLvxLFFr1y0WPDxPmeh43DuamZjksMQGCds6m5pXHu/GfNzKLQHX7AsqNXiwr5BO1cSCPL+Yi0xi7zcEPK6iNKifnYE21PQbDmtFIi9ehRsZkpShFQBeOl6 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:25.7172 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 38f82f25-250d-46a5-6897-08dec61a151b X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A6733.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB9126 Received-SPF: permerror client-ip=2a01:111:f403:c110::3; envelope-from=skolothumtho@nvidia.com; helo=BN8PR05CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004517603158500 Content-Type: text/plain; charset="utf-8" Introduce a Tegra241 CMDQV backend that plugs into the SMMUv3 accelerated CMDQV ops interface. This patch wires up the Tegra241 CMDQV backend and provides a stub implementation for CMDQV probe, initialization, vIOMMU allocation and reset handling. Functional CMDQV support is added in follow-up patches. Reviewed-by: Eric Auger Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 15 ++++++++++ hw/arm/tegra241-cmdqv-stubs.c | 16 ++++++++++ hw/arm/tegra241-cmdqv.c | 56 +++++++++++++++++++++++++++++++++++ hw/arm/Kconfig | 5 ++++ hw/arm/meson.build | 2 ++ 5 files changed, 94 insertions(+) create mode 100644 hw/arm/tegra241-cmdqv.h create mode 100644 hw/arm/tegra241-cmdqv-stubs.c create mode 100644 hw/arm/tegra241-cmdqv.c diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h new file mode 100644 index 0000000000..74a6954017 --- /dev/null +++ b/hw/arm/tegra241-cmdqv.h @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights res= erved + * NVIDIA Tegra241 CMDQ-Virtualization extension for SMMUv3 + * + * Written by Nicolin Chen, Shameer Kolothum + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_ARM_TEGRA241_CMDQV_H +#define HW_ARM_TEGRA241_CMDQV_H + +const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); + +#endif /* HW_ARM_TEGRA241_CMDQV_H */ diff --git a/hw/arm/tegra241-cmdqv-stubs.c b/hw/arm/tegra241-cmdqv-stubs.c new file mode 100644 index 0000000000..4669f5c5f5 --- /dev/null +++ b/hw/arm/tegra241-cmdqv-stubs.c @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights res= erved + * + * Stubs for Tegra241 CMDQ-Virtualization extension for SMMUv3 + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "smmuv3-accel.h" +#include "hw/arm/tegra241-cmdqv.h" + +const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void) +{ + return NULL; +} diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c new file mode 100644 index 0000000000..ad5a0d4611 --- /dev/null +++ b/hw/arm/tegra241-cmdqv.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights res= erved + * NVIDIA Tegra241 CMDQ-Virtualization extension for SMMUv3 + * + * Written by Nicolin Chen, Shameer Kolothum + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" + +#include "hw/arm/smmuv3.h" +#include "smmuv3-accel.h" +#include "tegra241-cmdqv.h" + +static void tegra241_cmdqv_free_viommu(SMMUv3State *s) +{ +} + +static bool +tegra241_cmdqv_alloc_viommu(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev, + uint32_t *out_viommu_id, Error **errp) +{ + error_setg(errp, "NVIDIA Tegra241 CMDQV is unsupported"); + return false; +} + +static void tegra241_cmdqv_reset(SMMUv3State *s) +{ +} + +static bool tegra241_cmdqv_init(SMMUv3State *s, Error **errp) +{ + error_setg(errp, "NVIDIA Tegra241 CMDQV is unsupported"); + return false; +} + +static bool tegra241_cmdqv_probe(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *i= dev, + Error **errp) +{ + error_setg(errp, "NVIDIA Tegra241 CMDQV is unsupported"); + return false; +} + +static const SMMUv3AccelCmdqvOps tegra241_cmdqv_ops =3D { + .probe =3D tegra241_cmdqv_probe, + .init =3D tegra241_cmdqv_init, + .alloc_viommu =3D tegra241_cmdqv_alloc_viommu, + .free_viommu =3D tegra241_cmdqv_free_viommu, + .reset =3D tegra241_cmdqv_reset, +}; + +const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void) +{ + return &tegra241_cmdqv_ops; +} diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index fb798ccbee..500bfdfe2a 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -643,6 +643,10 @@ config FSL_IMX8MM_EVK depends on TCG select FSL_IMX8MM =20 +config TEGRA241_CMDQV + bool + depends on ARM_SMMUV3_ACCEL + config ARM_SMMUV3_ACCEL bool depends on ARM_SMMUV3 @@ -650,6 +654,7 @@ config ARM_SMMUV3_ACCEL config ARM_SMMUV3 bool select ARM_SMMUV3_ACCEL if IOMMUFD + imply TEGRA241_CMDQV =20 config FSL_IMX6UL bool diff --git a/hw/arm/meson.build b/hw/arm/meson.build index 8f66a80e10..4233a800be 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -89,6 +89,8 @@ arm_common_ss.add(when: 'CONFIG_FSL_IMX8MM_EVK', if_true:= files('imx8mm-evk.c')) arm_common_ss.add(when: 'CONFIG_ARM_SMMUV3', if_true: files('smmuv3.c')) arm_common_ss.add(when: 'CONFIG_ARM_SMMUV3_ACCEL', if_true: files('smmuv3-= accel.c')) stub_ss.add(files('smmuv3-accel-stubs.c')) +arm_common_ss.add(when: 'CONFIG_TEGRA241_CMDQV', if_true: files('tegra241-= cmdqv.c')) +stub_ss.add(files('tegra241-cmdqv-stubs.c')) arm_common_ss.add(when: 'CONFIG_FSL_IMX6UL', if_true: files('fsl-imx6ul.c'= , 'mcimx6ul-evk.c')) arm_common_ss.add(when: 'CONFIG_NRF51_SOC', if_true: files('nrf51_soc.c')) arm_common_ss.add(when: 'CONFIG_XEN', if_true: files( --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004541; cv=pass; d=zohomail.com; s=zohoarc; b=Zs9nAshwG3Lc9hakz0UTOnxpsiNNp3q8qWd4UYjXng0VE1Dcv5sMmI8ZoYo5qJBmDr4M2XPRbyaf544nwJZb+RKX1dT31UT/DPPjPOR96MPFF6ilHHrno8OPqtiABat9NVpihhfdV7sCCQS7C0msiOu1FLzey7ofytcU3a0i0ik= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004541; 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=ZTckrNPGOaT+Wq1owmIMnh+q3lWVFd7hbKmkLJq8RxM=; b=dabwXcFe0MGJI+JFRPvLhtBHxa35t3aQFKtSYgSiMZrJXJHR3IpEY4qdN2QfOwwKjkKBZ2V7JeHD0tcP8TWchv/RRt/sKYlErhzhDAS/+N8fBDb2dU8EkowkyCkavq7ooBQrSOLWejUI/RRsQ26gOqpdKw05RE57QJjjjny/qz0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004541369662.3452440630091; Tue, 9 Jun 2026 04:29:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudO-0008Ot-UY; Tue, 09 Jun 2026 07:28: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 1wWucU-0006TP-5W; Tue, 09 Jun 2026 07:27:51 -0400 Received: from mail-westusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c001::5] helo=BYAPR05CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucR-0002zy-M1; Tue, 09 Jun 2026 07:27:45 -0400 Received: from BY1P220CA0017.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:5c3::6) by CH3PR12MB8546.namprd12.prod.outlook.com (2603:10b6:610:15f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Tue, 9 Jun 2026 11:27:32 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:5c3:cafe::6d) by BY1P220CA0017.outlook.office365.com (2603:10b6:a03:5c3::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:32 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:31 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:10 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:07 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=la32AZnpehNIx0TWrRFjYyWY4iAktL/sMQMBJuYVKlkeKF6IcFQaCgxMeu9A1nzWwXnuha/p2hKbAuHa4p0HtusygcBPXE+RnFaOjfcXcP7Ym/xl7PxDl1aWP+9h3xkc/G6DM1BLlACcyQ43r1frXmVzoc+bHbyRa20Jw3z2TL5pKDAi6GrT08d2AqUrF9FoAFP2jGlz8RWPIpuzukfwMYJ8klI7/sVghaLiXCu+RcUPIzerDmCRu0mmE2aOahsXdg2TOQN0aLzHtsw0QU1yxoNM0yMSDh8+pcR1OBY7XDiclbsxFU2A1ei3Lsm2mXxkQAo2ghnkOqU3sVnf2AreLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZTckrNPGOaT+Wq1owmIMnh+q3lWVFd7hbKmkLJq8RxM=; b=hldDIFpfe3stGodFVgtu+XXZFzGB0AdUZkxlD0xXELEXgy9mOAkg7xh0RIfAgaoUz9U/ooDWWEfwJLFguSPkSAh+kKiViIj40OXIWNoev1xrU2Njd3OGyFGfhlVJvDgYchKnc0e+tf+G5nKwn5tedgmlYGW5pOJ46EUjzUhRwL5uhra4A8nDUMHuUZoPkUc4nT0MmxjHncyWh94C5JUYdZYQEd3i/16Ug3DX+Ra4WE3nN3HPIWVuZNSZ0K0igU+GBi9uoVTs6h2vYyZ3PQxj2gVCL3D6onKAimQrxmJzRwW4NB21AScuzTfUR/WP94Ed4GpjbQGIa6zQ003bBJsvSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZTckrNPGOaT+Wq1owmIMnh+q3lWVFd7hbKmkLJq8RxM=; b=FfyOLQIwybWA5sIRLP+k/abW56UO1TWUTwDaITWu73CEGXoWnGqvc4wiXp9Dl/ls9CTe4PL1VXv9wJAKgRO+2Y0cIO08RU30rwKiyX1hvqqczCQ8RmEhKEy/GuWIk3igS0DHP9LYghMA2fWZgmbJGqH3UoPnXPknq7Ym74RPnbGIozYmcxCz+eKpKB5r36S3XIZahxpEKxL0IUR2XPXyNBU0nkTHrkg3Gp/Xms1KYnmYZojfZ2oIxN+ye3bfITY4CyYxKVMZcYZOdYlWGLrvW8XVA5Dr4jI4Z9yydFL/GlSjLMsTZsyr0fsF8ZAa6eu2p1rF24UFQlDGalNPzFOqxg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 08/31] hw/arm/smmuv3-accel: Wire CMDQV ops into accel lifecycle Date: Tue, 9 Jun 2026 12:25:29 +0100 Message-ID: <20260609112552.378999-9-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|CH3PR12MB8546:EE_ X-MS-Office365-Filtering-Correlation-Id: c63c1e07-0337-4bd5-e39f-08dec61a188c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700016|376014|1800799024|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: wv5+nQmDbY9HJK+KlyP6/jNoYQqK1U7Tk3mE1s4bJFlVokH4OV3vhcsD3MInQ/Ia4TkVKvP5yhiWW5BaTAw0CQAmxQXcEHWzuFJQlPlXkq0Hy5Cuyk8ysDTXupLkPlJE4y3tihOsycEMl7ysXlNCaMwYOTRpjMiJ7cauIeaRatXe6aR7M6lh+X6V8rAr0nAmz1Kslhagc8rjyWZnoBcnBbENEV02iKCxBkyO9xwhBSNuUEu0Egfg5u4lcOPbIlRj5C6KqQ0qT4O709DnVe0DPoQVZ0kwBjQHN4yJ0My3lmQIdugjab8G0y0O/1H76zWCOaPcjVBsYc3xH/bBFQGBzHlvh4D+JC2I/aUGY5jAap4pE1U9i5q4ff+IzdW1K059lVnE696BKnV6jRWGuB57LjdEbPLx86p9Z/knCe7bErKPVZJrRgsr8UY0LFHyRmkl+tFodWHKSseH70mx5IvWN1ybR+qmc1HYw+ly3jyNJd+jPyqSz4DLYDXhxAtn8D2TKBa6igtvucr+P8QQkKxsVA20HFbVlG1+KuDa5VgrosG/8/OntMnS6Ei3YEGnLTwIPAr0XRVuoGLWtgz1JVTiSg7TC6hnOuPW3GfopJaMCquuDp7ETpdApMnMIOjI19TRPLT0Fvwx9E/s7DQj+AuON3IpmG1rBprYStBYcx9VKtFF1avPvJptynJO4JjMYO0MSruaPLavCB5xyvCu/8edYUZXFHquOagkmqsbPOz1SpY= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(36860700016)(376014)(1800799024)(22082099003)(18002099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XMaom5POoalULzdXvnREDZKU0vG/jjHnwG9mQo5nG1/XLkGJA+zV6yPXHudA4s68kMGpMb1PpNd6zLgDBPjohSVDMWcM5DPmiz7KsPs86zeYeBrrLqcGvy6GpuEPekRi4qVigr9TikGoS1jJhA12wUFR0do078tme7CqJ1K6HLMeuiLSIG1VlviLpdRBoucJqresNkmEX10o8jXbpIJaTUR+iMQVCNmcODfDx/RwnZqIcpOG3Evt7EtRt9wy0+wpHTcjYBwmB5B2lmGOSzLU0OFcSBQMYKzciL8BQ46IjnLgvazYktGKWRdb/ZjK7xHma35BErjH9WdzCA0GB49zJXKTstLcf5HZza28NVuQ0s0nZp/pGV8eez1r9sB06lfPhekBHic7tzgjkdTVpVaakBq8at8HH9YejDbCX+CiOxIgKgcD6u6zfWx+yDp8lX3O X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:31.5133 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c63c1e07-0337-4bd5-e39f-08dec61a188c X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8546 Received-SPF: permerror client-ip=2a01:111:f403:c001::5; envelope-from=skolothumtho@nvidia.com; helo=BYAPR05CU005.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004543595154100 Content-Type: text/plain; charset="utf-8" Add support for selecting and initializing a CMDQV backend based on the cmdqv OnOffAuto property. If set to OFF, CMDQV is not used and the default IOMMUFD-backed allocation path is taken. If set to AUTO, QEMU attempts to probe a CMDQV backend during device setup. If probing succeeds, the selected ops are stored in the accelerated SMMUv3 state and used. If probing fails, QEMU silently falls back to the default path. If set to ON, QEMU requires CMDQV support. Probing is performed during setup and failure results in an error. When a CMDQV backend is active, its callbacks are used for vIOMMU allocation, free, and reset handling. Otherwise, the base implementation is used. The current implementation wires up the Tegra241 CMDQV backend through the generic ops interface. Functional CMDQV behaviour is added in subsequent patches. No functional change. Reviewed-by: Eric Auger Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/hw/arm/smmuv3.h | 2 + hw/arm/smmuv3-accel.c | 94 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 89 insertions(+), 7 deletions(-) diff --git a/include/hw/arm/smmuv3.h b/include/hw/arm/smmuv3.h index 85be3d7467..34d0f65eaa 100644 --- a/include/hw/arm/smmuv3.h +++ b/include/hw/arm/smmuv3.h @@ -75,6 +75,8 @@ struct SMMUv3State { OnOffAuto ats; OasMode oas; SsidSizeMode ssidsize; + /* SMMU CMDQV extension */ + OnOffAuto cmdqv; =20 Notifier machine_done; }; diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 70b2581c17..3ceca56a67 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -19,6 +19,7 @@ #include "smmuv3-internal.h" #include "smmuv3-accel.h" #include "system/system.h" +#include "tegra241-cmdqv.h" =20 /* * The root region aliases the global system memory, and shared_as_sysmem @@ -570,6 +571,7 @@ smmuv3_accel_alloc_viommu(SMMUv3State *s, HostIOMMUDevi= ceIOMMUFD *hiodi, Error **errp) { SMMUv3AccelState *accel =3D s->s_accel; + const SMMUv3AccelCmdqvOps *cmdqv_ops =3D accel->cmdqv_ops; struct iommu_hwpt_arm_smmuv3 bypass_data =3D { .ste =3D { SMMU_STE_CFG_BYPASS | SMMU_STE_VALID, 0x0ULL }, }; @@ -580,10 +582,17 @@ smmuv3_accel_alloc_viommu(SMMUv3State *s, HostIOMMUDe= viceIOMMUFD *hiodi, uint32_t viommu_id, hwpt_id; IOMMUFDViommu *viommu; =20 - if (!iommufd_backend_alloc_viommu(hiodi->iommufd, hiodi->devid, - IOMMU_VIOMMU_TYPE_ARM_SMMUV3, s2_hwp= t_id, - NULL, 0, &viommu_id, errp)) { - return false; + if (cmdqv_ops) { + if (!cmdqv_ops->alloc_viommu(s, hiodi, &viommu_id, errp)) { + return false; + } + } else { + if (!iommufd_backend_alloc_viommu(hiodi->iommufd, hiodi->devid, + IOMMU_VIOMMU_TYPE_ARM_SMMUV3, + s2_hwpt_id, NULL, 0, &viommu_id, + errp)) { + return false; + } } =20 viommu =3D g_new0(IOMMUFDViommu, 1); @@ -629,12 +638,70 @@ free_bypass_hwpt: free_abort_hwpt: iommufd_backend_free_id(hiodi->iommufd, accel->abort_hwpt_id); free_viommu: - iommufd_backend_free_id(hiodi->iommufd, viommu->viommu_id); + if (cmdqv_ops && cmdqv_ops->free_viommu) { + cmdqv_ops->free_viommu(s); + } else { + iommufd_backend_free_id(hiodi->iommufd, viommu->viommu_id); + } g_free(viommu); accel->viommu =3D NULL; return false; } =20 +static const SMMUv3AccelCmdqvOps * +smmuv3_accel_probe_cmdqv(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev, + Error **errp) +{ + const SMMUv3AccelCmdqvOps *ops =3D tegra241_cmdqv_get_ops(); + + if (!ops) { + error_setg(errp, "No CMDQV ops found"); + return NULL; + } + g_assert(ops->probe); + g_assert(ops->alloc_viommu); + + if (!ops->probe(s, idev, errp)) { + return NULL; + } + return ops; +} + +static bool +smmuv3_accel_select_cmdqv(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev, + Error **errp) +{ + const SMMUv3AccelCmdqvOps *ops =3D NULL; + + if (s->s_accel->cmdqv_ops) { + return true; + } + + switch (s->cmdqv) { + case ON_OFF_AUTO_OFF: + s->s_accel->cmdqv_ops =3D NULL; + return true; + case ON_OFF_AUTO_AUTO: + ops =3D smmuv3_accel_probe_cmdqv(s, idev, NULL); + break; + case ON_OFF_AUTO_ON: + ops =3D smmuv3_accel_probe_cmdqv(s, idev, errp); + if (!ops) { + error_append_hint(errp, "CMDQV requested but not supported"); + return false; + } + break; + default: + g_assert_not_reached(); + } + + if (ops && ops->init && !ops->init(s, errp)) { + return false; + } + s->s_accel->cmdqv_ops =3D ops; + return true; +} + static bool smmuv3_accel_set_iommu_device(PCIBus *bus, void *opaque, int d= evfn, HostIOMMUDevice *hiod, Error **e= rrp) { @@ -669,6 +736,10 @@ static bool smmuv3_accel_set_iommu_device(PCIBus *bus,= void *opaque, int devfn, goto done; } =20 + if (!smmuv3_accel_select_cmdqv(s, hiodi, errp)) { + return false; + } + if (!smmuv3_accel_alloc_viommu(s, hiodi, errp)) { error_append_hint(errp, "Unable to alloc vIOMMU: hiodi devid 0x%x:= ", hiodi->devid); @@ -946,8 +1017,17 @@ bool smmuv3_accel_attach_gbpa_hwpt(SMMUv3State *s, Er= ror **errp) =20 void smmuv3_accel_reset(SMMUv3State *s) { - /* Attach a HWPT based on GBPA reset value */ - smmuv3_accel_attach_gbpa_hwpt(s, NULL); + SMMUv3AccelState *accel =3D s->s_accel; + + if (!accel) { + return; + } + /* Attach a HWPT based on GBPA reset value */ + smmuv3_accel_attach_gbpa_hwpt(s, NULL); + + if (accel->cmdqv_ops && accel->cmdqv_ops->reset) { + accel->cmdqv_ops->reset(s); + } } =20 static void smmuv3_accel_as_init(SMMUv3State *s) --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004541; cv=pass; d=zohomail.com; s=zohoarc; b=IvcoCusEuxIWOZg1CtIdT7IyKXluvKhIoYij3kY8/2drERq1E8gkXB7sUHZRK2Mk4WzyJAUPboceezHmgjHkEz1sb0c6h1hP4r+p4D7uggq/7rR1DgsC9XJwkwyBYLpHnYirqxU8FHUGReoS7Q3HQjSeF2iKR46wkq17r1/X6Yc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004541; 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=k80w7UQyoMv64vWvVDlxwFl3VRXy5l4b42l02kfSCro=; b=hevxuSrrzd52oql9D1ozs2P0qyS9Jx95h1+ZIFZhFS/Ib01O+RN4WYA/jd2c5Lmbou49QOqhkl+htwm1p00E4ekmXEhNUXLcJXXcvMohl3TnfJy2O9cj4VANX88TUho/3zVdKEM7aN50HzN60E/9+7xRPmnd6r6gBSmp+0CbjB0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004541497516.8935357302234; Tue, 9 Jun 2026 04:29:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudJ-00081s-Vy; Tue, 09 Jun 2026 07:28:38 -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 1wWucV-0006TR-Gi; Tue, 09 Jun 2026 07:27:53 -0400 Received: from mail-centralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c111::5] helo=DM1PR04CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucT-0002zz-M6; Tue, 09 Jun 2026 07:27:47 -0400 Received: from BYAPR21CA0009.namprd21.prod.outlook.com (2603:10b6:a03:114::19) by BY5PR12MB4244.namprd12.prod.outlook.com (2603:10b6:a03:204::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Tue, 9 Jun 2026 11:27:33 +0000 Received: from MWH0EPF000A6730.namprd04.prod.outlook.com (2603:10b6:a03:114:cafe::6b) by BYAPR21CA0009.outlook.office365.com (2603:10b6:a03:114::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:33 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A6730.mail.protection.outlook.com (10.167.249.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:32 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:15 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:11 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZwJwC5Cbk7E98W/IIRz/shBVJa+rwox1mQFQrwzP6ZxZu5KbxvpvJ30nLsD+Dftww2jQBvA6U9npU6wM+J61IxkeGaHhOpMJHPFxh3WRa1IBDOuQygNDAjhx9PWMNT6ifrgF3GslKvIlwQi9u/ewYdz3VA5ou0L3nIANElAvcbB4esQm8INoE4ksC3a3rQ1jtpldQWV99u3qJRS/OFbsVKc6QtXzn72aL7j4I0utbDfNHly4AS7Gb7GMFbuuUaBSV/FELyfCy/U74trX/A0A4rk+aaMu/d9jOC6OJa+r/tsXIptz5pT7nA8v+7424Bj9NMC6bj/OTNEXni1ORDYjqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=k80w7UQyoMv64vWvVDlxwFl3VRXy5l4b42l02kfSCro=; b=dYIKhSDxGYQzEiUFd1B5GHICH4oQ6ou55deFsd4ipYNRf1MmK1ozHDGDComFpHONefzbM6Vm4KtRWhjYf0/4vSpv6EBcqnJOVa1SQAfpK4xmeuzNpuAkcDt2JZxl84FDvjyrQrv7aroafbhqibFi3bz6uuDf6fpyJnyWc0sTZ8+4ljTWUaa8toiDC3cnlg4lS1pzTEKvDmsuBlXuYNajk/YtOXh6/fzP7Lb9di7/uMZwuxoB6f/oZqdfwVVPSo1vWiXfpMr2gSoHQG68HOv75HPuhujt4Q1G5pM4QFNKhM8fJu/BSXfur+1OqP2suL2OP4HOiECAKseahefSagFaaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k80w7UQyoMv64vWvVDlxwFl3VRXy5l4b42l02kfSCro=; b=aNp2cm1F/PTYITR3o2A7Dfek/DJawLYbtY7I+BVQSfrcT9zCmXPzK2Pzj9zej/nS7k9tR1SLFUrSgv7U1J0XNLOkqB6bsFQQ+whXpNSdPWnW00ynsSSawlrcPllcXR8FNg+alG04Hou8PDhxP50aEyRWS4fWdvYrn101PFCsHanfV6XfSDcZoYjf1/KAn2EDEGLtbbesBh/xYmQ0eOhWSAV+ZNn1HgQo88ZOpeUt7zv/kldbPoWqZNdnq5GjPi4XA294/sM11KsRvSgonzr/Zx+ApsE6rwZJNIKNtOXBMfEG0bRkY4pK7mxspiNZ7oThhL4HHel0GnYpYBO5xRTCRw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 09/31] hw/arm/virt: Use stored SMMUv3 device list for IORT build Date: Tue, 9 Jun 2026 12:25:30 +0100 Message-ID: <20260609112552.378999-10-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A6730:EE_|BY5PR12MB4244:EE_ X-MS-Office365-Filtering-Correlation-Id: ecbc13f8-39cb-4227-fefc-08dec61a195a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700016|376014|1800799024|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: zOTKUbOLuWkcSACriUh9tejiY6u61Vzo3XbjM+DeKFan+mEqKYa26iLbZqmd1QBxk/rtYcAR7daGS2dsiJFLRjxonK1T/sk3HFT3uM4nemJ87s8zJnfO61ZItc/GxG8Nuza2agA2LaDrhGan8GZaB9qUxzmLf1kidjmsUsZ0hiAfjaqt7KsBMA1OytmmzdDG9Iof78VcRHF/3aYvtYGE1sQ7mz4vDggY+mav6IJcIVXe71WjTXsEs7Ek9aPE9mIL+oR1k8qo648IbNWaSItlRLTwEwnSdPGVzwG+AUZEgpBOwUCls2Y9HwLoG0zTXDoJ24NzrjSJPJTOfVDuYydQjSS6Z/FXgkHRpZRTKRVdWwEB1UDo8eRbOwvbR6V1nnscTL52Fa9l6BpmVes3ztP4TCOmJjzzK6T/TLRIUot7N0kJ0SKW7H+8RxMHX3ZGHxmRVh1zIbdZNFiJtWIRJ+0J9yXUmPgBd4TZ0Se2WBaPo0QaY0btFGYeIZXBpjNxDkzcDCzGn9DSqA89qfSQ8y3gb//yfBxK+CwHJx9paHFik4uvXtw9ACoESFzT+cJ+NU4lJy7UBZM6NT5sjGofLN8w3GOXYQQk3NZ/JNosjUQCrY1nB3tU88OHMM4RmCf6jpzWgKLmzi/0zzDgbGEcEnoEi2/4qhIE3V5+QtEryPcK2uRV/4vuz/vtrk9+Esa7cOHBf43biaQCLIMuFUgcXrhjbudxf3ndzxPVRCQlbb9VtTM= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(36860700016)(376014)(1800799024)(18002099003)(22082099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JHwaMj5KPkcCGDvQRUD5hiq2yOEJLZNJNNOxUjXEOoj5X9N4Tn6vF3VMzXR0YU7rVhXmxbiUz+tKpVYi8CrgdJO8GM69GgNWtk27nzRZlq8mjngo75WqMtnFodv/JI8GKXcA/ied73ex/remBKh56+O66dpaNkEXDIWIj7xd6erD2hMQw85qdJgLRW4STW/u7bFdOH4Vd91lYVDqx/Qe/N0mXCxkL3zPywWFeaGHTZnRIEoz21YTMEGqc+NmWlYQa64mG21OOya8UNk4o4v3dLpASaaOtoPs7iXuRAgr3ktl8kg57XGmxKS1o6YpboQOvKHhqA+kGqkGnxX9Q2Ua6dI1iSAHdmD1hyipjiulXxembtveSeJfgsmdnljK6dzPgtf8EMXW/lQwtZuQ4qX3gqmGSrpOt9kq64sAJwwcS6DkIfMrPjGJP+5L6vW4o+vX X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:32.8423 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ecbc13f8-39cb-4227-fefc-08dec61a195a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A6730.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4244 Received-SPF: permerror client-ip=2a01:111:f403:c111::5; envelope-from=skolothumtho@nvidia.com; helo=DM1PR04CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004543617158500 Content-Type: text/plain; charset="utf-8" Introduce a GPtrArray in VirtMachineState to track all SMMUv3 devices created on the virt machine, and use it when building the IORT table instead of relying on object_child_foreach_recursive() walks of the object tree. This avoids recursive object traversal and provides a foundation for subsequent patches that need direct access to SMMUv3 instances for CMDQV-related handling. No functional change. No bios-tables qtest failures observed. Reviewed-by: Eric Auger Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/hw/arm/virt.h | 1 + hw/arm/virt-acpi-build.c | 70 ++++++++++++++++++---------------------- hw/arm/virt.c | 3 ++ 3 files changed, 35 insertions(+), 39 deletions(-) diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 3ba33b4bd2..171d44c644 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -207,6 +207,7 @@ struct VirtMachineState { MemoryRegion *sysmem; MemoryRegion *secure_sysmem; bool pci_preserve_config; + GPtrArray *smmuv3_devices; }; =20 #define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM : VIRT_PCIE_ECAM) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 3f285ff6c7..b00f3477ca 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -392,49 +392,41 @@ static int smmuv3_dev_idmap_compare(gconstpointer a, = gconstpointer b) return map_a->input_base - map_b->input_base; } =20 -static int iort_smmuv3_devices(Object *obj, void *opaque) -{ - VirtMachineState *vms =3D VIRT_MACHINE(qdev_get_machine()); - AcpiIortSMMUv3Dev sdev =3D {0}; - GArray *sdev_blob =3D opaque; - AcpiIortIdMapping idmap; - PlatformBusDevice *pbus; - int min_bus, max_bus; - SysBusDevice *sbdev; - PCIBus *bus; - - if (!object_dynamic_cast(obj, TYPE_ARM_SMMUV3)) { - return 0; - } - - bus =3D PCI_BUS(object_property_get_link(obj, "primary-bus", &error_ab= ort)); - sdev.accel =3D object_property_get_bool(obj, "accel", &error_abort); - sdev.ats =3D smmuv3_ats_enabled(ARM_SMMUV3(obj)); - pbus =3D PLATFORM_BUS_DEVICE(vms->platform_bus_dev); - sbdev =3D SYS_BUS_DEVICE(obj); - sdev.base =3D platform_bus_get_mmio_addr(pbus, sbdev, 0); - sdev.base +=3D vms->memmap[VIRT_PLATFORM_BUS].base; - sdev.irq =3D platform_bus_get_irqn(pbus, sbdev, 0); - sdev.irq +=3D vms->irqmap[VIRT_PLATFORM_BUS]; - sdev.irq +=3D ARM_SPI_BASE; - - pci_bus_range(bus, &min_bus, &max_bus); - sdev.rc_smmu_idmaps =3D g_array_new(false, true, sizeof(AcpiIortIdMapp= ing)); - idmap.input_base =3D min_bus << 8, - idmap.id_count =3D (max_bus - min_bus + 1) << 8, - g_array_append_val(sdev.rc_smmu_idmaps, idmap); - g_array_append_val(sdev_blob, sdev); - return 0; -} - /* * Populate the struct AcpiIortSMMUv3Dev for all SMMUv3 devices and * return the total number of idmaps. */ -static int populate_smmuv3_dev(GArray *sdev_blob) +static int populate_smmuv3_dev(VirtMachineState *vms, GArray *sdev_blob) { - object_child_foreach_recursive(object_get_root(), - iort_smmuv3_devices, sdev_blob); + for (int i =3D 0; i < vms->smmuv3_devices->len; i++) { + Object *obj =3D OBJECT(g_ptr_array_index(vms->smmuv3_devices, i)); + AcpiIortSMMUv3Dev sdev =3D {0}; + AcpiIortIdMapping idmap; + PlatformBusDevice *pbus; + int min_bus, max_bus; + SysBusDevice *sbdev; + PCIBus *bus; + + bus =3D PCI_BUS(object_property_get_link(obj, "primary-bus", + &error_abort)); + sdev.accel =3D object_property_get_bool(obj, "accel", &error_abort= ); + sdev.ats =3D smmuv3_ats_enabled(ARM_SMMUV3(obj)); + pbus =3D PLATFORM_BUS_DEVICE(vms->platform_bus_dev); + sbdev =3D SYS_BUS_DEVICE(obj); + sdev.base =3D platform_bus_get_mmio_addr(pbus, sbdev, 0); + sdev.base +=3D vms->memmap[VIRT_PLATFORM_BUS].base; + sdev.irq =3D platform_bus_get_irqn(pbus, sbdev, 0); + sdev.irq +=3D vms->irqmap[VIRT_PLATFORM_BUS]; + sdev.irq +=3D ARM_SPI_BASE; + + pci_bus_range(bus, &min_bus, &max_bus); + sdev.rc_smmu_idmaps =3D g_array_new(false, true, + sizeof(AcpiIortIdMapping)); + idmap.input_base =3D min_bus << 8; + idmap.id_count =3D (max_bus - min_bus + 1) << 8; + g_array_append_val(sdev.rc_smmu_idmaps, idmap); + g_array_append_val(sdev_blob, sdev); + } /* Sort the smmuv3 devices(if any) by smmu idmap input_base */ g_array_sort(sdev_blob, smmuv3_dev_idmap_compare); /* @@ -568,7 +560,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) if (vms->legacy_smmuv3_present) { rc_smmu_idmaps_len =3D populate_smmuv3_legacy_dev(smmuv3_devs); } else { - rc_smmu_idmaps_len =3D populate_smmuv3_dev(smmuv3_devs); + rc_smmu_idmaps_len =3D populate_smmuv3_dev(vms, smmuv3_devs); } =20 num_smmus =3D smmuv3_devs->len; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index b090233893..ac0606fe87 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3865,6 +3865,7 @@ static void virt_machine_device_plug_cb(HotplugHandle= r *hotplug_dev, } =20 create_smmuv3_dev_dtb(vms, dev, bus, errp); + g_ptr_array_add(vms->smmuv3_devices, dev); } } =20 @@ -4319,6 +4320,8 @@ static void virt_instance_init(Object *obj) vms->oem_id =3D g_strndup(ACPI_BUILD_APPNAME6, 6); vms->oem_table_id =3D g_strndup(ACPI_BUILD_APPNAME8, 8); cxl_machine_init(obj, &vms->cxl_devices_state); + + vms->smmuv3_devices =3D g_ptr_array_new_with_free_func(NULL); } =20 static void virt_instance_finalize(Object *obj) --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004516; cv=pass; d=zohomail.com; s=zohoarc; b=AkzlUxsj/0hGtduxPFnzJQlWZuzy74ZfKvpr4OsTO2aV0KPVWTaaNCTCmDXHyuLF68OXXJDdETJz5Hx/FCPZkwVZ1qeUHSwURfrdj7NZhwhCuB6p6J5tXWKuwi5TIS0s11CJhjgxD/nOj12oRrokq1qgJJZnHQXZwtTA1NqTSaU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004516; 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=LeYnSC7To87fa9wOxXZfYFuwwozAACu/yKVaR8t2ZGI=; b=k1868OM01DwBuMmw7CusI3kxsmtTssHr+gAtnjN9qAeFzUsFj2aipKM/Ln9x8gSg2BUudgqr0Nq63aCoLQw/2SqGxK+tomdpjmFyjaxoFJHUSLFYKEhtAGP/W08wYTuZdPgLpsD7C//Oz+xtul4QkyTUW4LBP5Utq8gbityJdxw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004516550458.21807793986204; Tue, 9 Jun 2026 04:28:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudA-00076f-MF; Tue, 09 Jun 2026 07:28:29 -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 1wWucT-0006Sf-BT; Tue, 09 Jun 2026 07:27:51 -0400 Received: from mail-westcentralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c112::5] helo=CY7PR03CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucR-000302-Lg; Tue, 09 Jun 2026 07:27:44 -0400 Received: from SJ0PR03CA0249.namprd03.prod.outlook.com (2603:10b6:a03:3a0::14) by PH8PR12MB7206.namprd12.prod.outlook.com (2603:10b6:510:226::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.9; Tue, 9 Jun 2026 11:27:35 +0000 Received: from MWH0EPF000A6732.namprd04.prod.outlook.com (2603:10b6:a03:3a0:cafe::2c) by SJ0PR03CA0249.outlook.office365.com (2603:10b6:a03:3a0::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.92.14 via Frontend Transport; Tue, 9 Jun 2026 11:27:35 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A6732.mail.protection.outlook.com (10.167.249.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:35 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:19 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iKzV/Ka07y3rR8qCzZRWKfa0vlt+IiqPdD4kyL0YeijHDu2zcj9OAZ9Hlz2WMJ4iAHDdTdV0OefhAjfJH03c96RR60Itc/QRmbyJDYnhvrbMXEickYjUHIuh41xOnIbOg3VuZJGhWWzfr16/eO+e1OaaP3dG/qO2TM7ZUig9cLTbTsKm68VZr+QjhVNdpRg5ZpqYZZbkVaSUEbupwJlGsvjx9afnr/4W5EG93lhw0gjjN03uERAYJlWsAyF7RrArfVULo6IwLCwkWke/B+pQ8V9oSeRy7O1Y4o/9H+B6XMThxY85gGfz8e1PPU8a2Z6z+p4sAQvRelzN0wZ5idP8EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LeYnSC7To87fa9wOxXZfYFuwwozAACu/yKVaR8t2ZGI=; b=VYUAkncCxHnMMgrBu/q2Zozwf/c//yz2dPjuOm+CLBxu7X4PWWmaiw1WJ+1V5dErQJeaykCxmHT/6HhRVg5tgADOumIx6Hv3EgRAPUrUchAxRDQuFa+1CJwtddcTXkNDriXR6K2jumWQ9jLPJhAEoBm0BCGa986y/rCpjS2oWXif4jLUXdkxyC9PoG/bhx1rkYOCikft94/rqzWQhzEvneUBa8lSWIXTRUsPNuvYWNib+segVNfHjhIco8zH2X47KenralG9gMCL56B22+GUE9GoiWXh1/pUxUxoTFXEKs7Bm3UGX3liAuzL8Z2lgIMadEFO3BoSJzJKMJqcFSLQgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LeYnSC7To87fa9wOxXZfYFuwwozAACu/yKVaR8t2ZGI=; b=h6g3aVTSF8RNtjtkBAI8UR/f0m8MN85iHI++OwYTY1TwHyJPDyRzJPs9j5oBCvR05v32UjfwU9915ZhnN2nqfpu+GlRdaxnXn8PKKd8v89HGm+B2zyA4aU0hxQ2sYX2kde7WcY6sTWCpzOJlRg4ZgKYWhJ/jcgEExenEmNgfyGUjagNMo9qPod+aHzJQRrAUrKCNAs8dhPexNXF+/FYFvEZSjvf1EQTpdVWw4Onc67TGF5dALzMc9oPvhPKhghlP56NATathRTU1I6oD+MDur4QDKeoR3wslifcfp/OjU5FeoK0twUjiRVqskPk/eRBAi9dZZ7oRzujTMMiHx9SMRQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 10/31] hw/arm/tegra241-cmdqv: Probe host Tegra241 CMDQV support Date: Tue, 9 Jun 2026 12:25:31 +0100 Message-ID: <20260609112552.378999-11-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A6732:EE_|PH8PR12MB7206:EE_ X-MS-Office365-Filtering-Correlation-Id: 524c6fa2-170d-4a9d-c1bd-08dec61a1ab6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|36860700016|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: zln16sjDqPFug2uUMt0oK4ViHm1kdV5hLU8f/WuTwvEj58nUuEo6/sjxHTMxrwv6Q4nVrJPLntKu+nogeBmxfNKCP6Nzx9cAsObM8VSWYke5LUQ4kPP+byfaYoY+qMAfYaHigCYN4LF9pyDNWDtJXYmOQ161h08aTPFYASho/RUs2sYAEP4iXitB9pJ/TX0OwidfhDZFMwl6NfsilP/wC3KX4W7RyFyPeP0eAQ3p9dT4IG5RjnnnNDVmqkqNWNvEE6c8FuIIn5/WERUKM0Qx5kHaAzud2/68+n8TrkzHVxCMDWwWK9y9UBbnJmWm2aQbrlKxUhxenPpZ48xSu5I0WlA1uKAEMUb65X8mw+ofoTh0c6wWFmNo12al1FhE/PhrldUDqf1/vHpqmXfUB/ZLM+xTPyMD36ToOSu7et/7y2kCLHq6qJD8cZRbbfBl/ss6bSy+GG1Gl9WOXdIOFcwXk4fugCZvKLJ5jXA5/pfyQLu+Je0dlcR9nGKLWRx6S6ckO/VNGL9Z9HTdCtIfLn+LPgQZ/i3qVNIE82/yvTf7a2LHXIYsJqmEXiFyBRjYKfhTUzUTm54dwGEh8y3BkfjgtXyk1++QxLKylsF9VMQTKXQ6xg1OHRNIODF82wJex67aPE5Fvc+ENUTA7UaEhtr869jcmsgCLpDxGUPV6ijY4C1NS/0Q7kXl0+cFMqju6z7eVd5/jhw/KzC0yP2ZdeRNepS4VnY7EI76/wwJXKROQmo= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(36860700016)(22082099003)(18002099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZHqzrpzMi/xIofmVAWmUwnmMcQ2+p0NOo5kjweVpLA+DyifGaryrX2x6OuRvamgVdSj0GcmX5HJDI4TUDfq8CSJAtHfzMJxXjNajF6nEaJ85I6H9uN1qSEAVGowh8dDkbVjKIGB0QmyKOj1toVNdvNgIm+R4zXnJk/AB7k/dgajEYuuv4TeRcW99dDvlqB0XPuQI/+7irvGn9MHb1xMOJLOVX8N9FP3/wJK4bfPtJNUcZTukM49t5B7dYT6JX4g4uXRZRosAnREWi70OeMXNxfH51RQxq0l4ySs73fAqL3KRnv3zavBPX3bP/Olu2NFw/dpiddzof8CM9VJdiMXkxaU2JHj2hwzG7gKxVFv3DokWiUc8SqcjE4AIOfsFom/fI03tx7VKNzltke6upaB2inqmdcj6hn5kNyvgttcl+WlJ8QscFN7m6U2oUanepozx X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:35.1495 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 524c6fa2-170d-4a9d-c1bd-08dec61a1ab6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A6732.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7206 Received-SPF: permerror client-ip=2a01:111:f403:c112::5; envelope-from=skolothumtho@nvidia.com; helo=CY7PR03CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004519181154100 Content-Type: text/plain; charset="utf-8" Use IOMMU_GET_HW_INFO to query host support for Tegra241 CMDQV. Validate the returned data type, version, and minimum number of vCMDQs and SIDs per Tegra241 CMDQ Virtual Interface(VI). Fail the probe if the host does not meet these requirements. The QEMU model supports one Virtual Interface(VI) per VM with 2 vCMDQs and 16 SIDs per VI, so the probe ensures the host implementation is compatible with these limits. Reviewed-by: Eric Auger Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 4 ++++ hw/arm/tegra241-cmdqv.c | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index 74a6954017..38c8b27b4d 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -10,6 +10,10 @@ #ifndef HW_ARM_TEGRA241_CMDQV_H #define HW_ARM_TEGRA241_CMDQV_H =20 +#define CMDQV_VER 1 +#define CMDQV_NUM_CMDQ_LOG2 1 +#define CMDQV_NUM_SID_PER_VI_LOG2 4 + const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); =20 #endif /* HW_ARM_TEGRA241_CMDQV_H */ diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index ad5a0d4611..3a19a1af56 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -38,8 +38,36 @@ static bool tegra241_cmdqv_init(SMMUv3State *s, Error **= errp) static bool tegra241_cmdqv_probe(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *i= dev, Error **errp) { - error_setg(errp, "NVIDIA Tegra241 CMDQV is unsupported"); - return false; + uint32_t data_type =3D IOMMU_HW_INFO_TYPE_TEGRA241_CMDQV; + struct iommu_hw_info_tegra241_cmdqv cmdqv_info; + uint64_t caps; + + if (!iommufd_backend_get_device_info(idev->iommufd, idev->devid, &data= _type, + &cmdqv_info, sizeof(cmdqv_info), = &caps, + NULL, errp)) { + return false; + } + if (data_type !=3D IOMMU_HW_INFO_TYPE_TEGRA241_CMDQV) { + error_setg(errp, "Host CMDQV: unexpected data type %u (expected %u= )", + data_type, IOMMU_HW_INFO_TYPE_TEGRA241_CMDQV); + return false; + } + if (cmdqv_info.version !=3D CMDQV_VER) { + error_setg(errp, "Host CMDQV: unsupported version %u (expected %u)= ", + cmdqv_info.version, CMDQV_VER); + return false; + } + if (cmdqv_info.log2vcmdqs < CMDQV_NUM_CMDQ_LOG2) { + error_setg(errp, "Host CMDQV: insufficient vCMDQs log2=3D%u (need = >=3D %u)", + cmdqv_info.log2vcmdqs, CMDQV_NUM_CMDQ_LOG2); + return false; + } + if (cmdqv_info.log2vsids < CMDQV_NUM_SID_PER_VI_LOG2) { + error_setg(errp, "Host CMDQV: insufficient SIDs log2=3D%u (need >= =3D %u)", + cmdqv_info.log2vsids, CMDQV_NUM_SID_PER_VI_LOG2); + return false; + } + return true; } =20 static const SMMUv3AccelCmdqvOps tegra241_cmdqv_ops =3D { --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004525; cv=pass; d=zohomail.com; s=zohoarc; b=csyahnJlBk6vK4DD+IELn/4eBOI4RNhrHtnKtC8Xt0EIRdIo6C4WstlGPy//iHfdVivx/ASGeIwTquVtuvibHJcuoQVU9wqJkLXZHvPhgIekRldqYrwrve4w6hm8LS8Q5aVVb4tJVS+hdv0vGlqM4LVM+bbS21MZ6zbNhtjyaM4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004525; 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=79EJ96F8CfWOoJnElUdtMAUAKP5BvbxBgPqOUme6PZo=; b=HiYcMUcUcuC7eQnnTrMGvJIpwpjNIwL6pxqAQYsQEvq7KiO4TjCw97Rlb/ALiVBlYgODUsDfcy6ifd8SGo/VGW8RAgsGiBkho8VIodVfmbaWamGKxEen99EdQtxm0bi8MD9VAXRbqA5mSR+JHlA14uVeZWcCd/cSZCIdO4sS5ho= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004525262713.4684551044097; Tue, 9 Jun 2026 04:28:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudJ-00081G-Rj; Tue, 09 Jun 2026 07:28:37 -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 1wWucd-0006cK-DY; Tue, 09 Jun 2026 07:27:56 -0400 Received: from mail-westusazlp170120002.outbound.protection.outlook.com ([2a01:111:f403:c001::2] helo=SJ2PR03CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWuca-00031W-3W; Tue, 09 Jun 2026 07:27:53 -0400 Received: from BY1P220CA0019.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:5c3::15) by SA1PR12MB6728.namprd12.prod.outlook.com (2603:10b6:806:257::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:27:41 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:5c3:cafe::a1) by BY1P220CA0019.outlook.office365.com (2603:10b6:a03:5c3::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:41 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:41 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:24 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:20 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wdV0g6829REQEkRL2pxqxf95a8Ty1E3GZGXDLQi7SekeFkYqH6K0D/LqpX1VUt8p7Q8ER2Absd6zcucFd/eIxvqkiotNG8vUocH7ovDS7gE45fikFE1AT+5DuKgcP98D6JywVm+5XZJ+lceBI1AsYMBYCYkMDx1UcevZjsddHaqKpmaCMqkAmfOdQ01rzmIDdWqiamP82nOO67IhMxffE5b40u2P9TFY5piI89XBIoa4ZSXd/gfJpRrHX4ZUj9TefjWh9PwASmPHvPVROfXZ3PTWrvUxZy6nULOGSA8ysI+gosuD+Vy3LNq7RXIhDOY0YWvCdosWr1+KnWWc1hLnOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=79EJ96F8CfWOoJnElUdtMAUAKP5BvbxBgPqOUme6PZo=; b=rFjV1xpjUa6+PRFwkiGNHMu4lC4y9S0Nuf2JAQxv5iQBv6ys3Q2LQKnCjnvhzttROCMXSpkFUMm7LykxNiALoLSrM0dYUL1m4khZcwTgXdM+OGirZxG+klUySzk+7IGwWzYMsUtG3x60T75WSR/2+rVT0bQhhKA2zZ67wJjhvIwz+5WtWPU3cHkqt+MVgApYE4KMU2Si90YAUBOrMhuTKMldzHHA/drcUgzSliO1KzZE8TZko1O8f/0OBqkQV1WNYfg07XVYwnY+0kO9kdX9CoP7/l4SKUl8KqbjZiKxEocEAnJtFsWUAi+4Wf3HBohP5qQ7PoL/qDLX7BAWjxSG3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=79EJ96F8CfWOoJnElUdtMAUAKP5BvbxBgPqOUme6PZo=; b=Fv8IIRh27SZzUA6TvRTCSQTEic4kwU+sg7SRTfNz7fxKTfWxbQnBfAMZ9Y8H6nhdvTMQ4TCjFIAZstYVcRPunR9tZZg9kbcXZvazWZzhEKd1aHZh6xh65I2E/uzOv+mozpWOMSNTGEgud3rtoikDpnYgpknAf8Z0yOdaITJP/KZMfKvlH7o5k39CpQxTosdoyLsNVFa04cnbVaF/eDCzWh7fxmBZGei3nQXTH0h+CsEnf7VmgJ9ewHRD1maEzF0Zl8ot54g0y/ovIKnSJrQfRIPAHCZAOqBvyJWH2bfHM4Zb87J3xzjNyimobIqYRy3Q0m7niAcZ5TV49l3YQVdZog== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 11/31] hw/arm/tegra241-cmdqv: Implement CMDQV init Date: Tue, 9 Jun 2026 12:25:32 +0100 Message-ID: <20260609112552.378999-12-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|SA1PR12MB6728:EE_ X-MS-Office365-Filtering-Correlation-Id: e11cf676-91df-4b34-4c8e-08dec61a1e5e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|376014|1800799024|22082099003|18002099003|6133799003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: LmavQVC5B8tOZ9dxpUq3fCBSdB7aKuUjX7HwlQdzfa3An7Op8iTF1xm+Jo+9EULKW5eUByw9hLq/9HX1XJZM7z9bZbAfcH+1lRmgP+qZAUN8FvQ1GL3JypSx8PZMsRjn6KWTHmHRzv8YvLrBfXj9Z0UAa7rGEV+Wiz9duZFBpDYpJXgEG4ClKCQiIF3ivcG20JjrgJuSWaaq4DTFrWiYWfu4Mgfzcj5HTe9XFXdP/Qvhnker1339swRVSYhVbSqkLBkUXlBKu1dQe72b9uoAaJppHZVrCm3/SKuqOyN2OWgOVXfNIkujSoP8V/8UtVw9Mc07xXcwsVLhRZXX6dnuMt/hp49l08ITpkgjmY0YVr30eJvLpaTgbk/CpncJMcNaEvhU0YfRXQcRNj2DHAR3JCgN0rCLfBzb9kezBaujHzPmtmlbju5wrv5gdOECtfbemiaEotEF8Gk3VJokd200F35z94hMgN5dkyHdguedIFq7cHBtI5ZD47ueFo1esdJzyg/2aP6YlD6WyOX7ezck99/o+Al5kMlf5fHGm/wU2CE6i3imn22+DDHOF9SNKMe990zqe4xWlwTJd4awRUrDCFtd0dicdKoP5bacitrF8OyM/9UXOvYE9wFK58RVDsYOHLAzUXB7vfJQjQuJLv1H9L+hdCUEeJLk/oZ34fLT0WPJI1pO9oPeqX/KvqKFdfNDfMLQvfXxXphz8D768tvliKxR5j1nQHOxhcIOKEDmv6k= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(376014)(1800799024)(22082099003)(18002099003)(6133799003)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SMJoIpOZkVdtO8OPWlhdMY7TrDhr7FsmLEYu7wabMTeyxPZ1odUY7HBHrdD08QXEMv7emL92cmcOGYc9yENZkjuVb00zqCIrmuW8JqdkZTMsP+YYP5DztzJfESdAWnVTMJ67eZPlLDUSFInB/h/iEXtN99itz/73j1UYcY2KQBEzNebbwvkJmKu3e9Wk8j3ZG0PPmeGFs40Ge20UKGsvnRCqq+BaZQN31ZdwTKQD4TdQCFmVB3mYc67cMQVV7BOOmVFioXnXdqFPSB/WHFMPC3uQQmWWXiJoTduxxjXTkW1p3iS6UjkkZIXVMuShCjELiBinmgO8B40E2j9JqV8X+f90J7R+NAsmFbPS0pqduvZ+801SJz4o6YqYn6x/HhVVRA5mihYuc+fXnKk087PPSL6aywFJYRA1/wWESzM2PUOTw3+hjS2+ax0b1/ZcZbL5 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:41.2701 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e11cf676-91df-4b34-4c8e-08dec61a1e5e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6728 Received-SPF: permerror client-ip=2a01:111:f403:c001::2; envelope-from=skolothumtho@nvidia.com; helo=SJ2PR03CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004527514158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Tegra241 CMDQV extends SMMUv3 with support for virtual command queues (VCMDQs) exposed via a CMDQV MMIO region. The CMDQV MMIO space is split into 64KB pages: 0x00000 (CMDQ-V Config page) 0x10000 (CMDQ-V CMDQ Page0) 0x20000 (CMDQ-V CMDQ Page1) 0x30000 (Virtual Interface Page0) 0x40000 (Virtual Interface Page1) This patch wires up the Tegra241 CMDQV init callback and allocates vendor-specific CMDQV state. The state pointer is stored in SMMUv3AccelState for use by subsequent CMDQV operations. The CMDQV MMIO region and a dedicated IRQ line are registered with the SMMUv3 device. The MMIO read/write handlers are currently stubs and will be implemented in later patches. The CMDQV interrupt is edge-triggered and indicates VCMDQ or VINTF error conditions. This patch only registers the IRQ line. Interrupt generation and propagation to the guest will be added in a subsequent patch. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/smmuv3-accel.h | 1 + hw/arm/tegra241-cmdqv.h | 20 ++++++++++++++++++++ hw/arm/tegra241-cmdqv.c | 40 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h index b45f25ad03..e0bbec8581 100644 --- a/hw/arm/smmuv3-accel.h +++ b/hw/arm/smmuv3-accel.h @@ -61,6 +61,7 @@ typedef struct SMMUv3AccelState { bool auto_mode; bool auto_finalised; const SMMUv3AccelCmdqvOps *cmdqv_ops; + void *cmdqv; /* vendor specific CMDQV state */ } SMMUv3AccelState; =20 typedef struct SMMUS1Hwpt { diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index 38c8b27b4d..a5f65a8991 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -14,6 +14,26 @@ #define CMDQV_NUM_CMDQ_LOG2 1 #define CMDQV_NUM_SID_PER_VI_LOG2 4 =20 +/* + * Tegra241 CMDQV MMIO layout (64KB pages) + * + * 0x00000 (CMDQ-V Config page) + * 0x10000 (CMDQ-V CMDQ Page0) + * 0x20000 (CMDQ-V CMDQ Page1) + * 0x30000 (Virtual Interface Page0) + * 0x40000 (Virtual Interface Page1) + */ +#define TEGRA241_CMDQV_IO_LEN 0x50000 + +struct iommu_viommu_tegra241_cmdqv; + +typedef struct Tegra241CMDQV { + struct iommu_viommu_tegra241_cmdqv *cmdqv_data; + SMMUv3AccelState *s_accel; + MemoryRegion mmio_cmdqv; + qemu_irq irq; +} Tegra241CMDQV; + const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); =20 #endif /* HW_ARM_TEGRA241_CMDQV_H */ diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 3a19a1af56..2875affc8d 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -13,6 +13,17 @@ #include "smmuv3-accel.h" #include "tegra241-cmdqv.h" =20 +static uint64_t tegra241_cmdqv_read_mmio(void *opaque, hwaddr offset, + unsigned size) +{ + return 0; +} + +static void tegra241_cmdqv_write_mmio(void *opaque, hwaddr offset, + uint64_t value, unsigned size) +{ +} + static void tegra241_cmdqv_free_viommu(SMMUv3State *s) { } @@ -29,10 +40,35 @@ static void tegra241_cmdqv_reset(SMMUv3State *s) { } =20 +static const MemoryRegionOps mmio_cmdqv_ops =3D { + .read =3D tegra241_cmdqv_read_mmio, + .write =3D tegra241_cmdqv_write_mmio, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 8, + }, + .impl =3D { + .min_access_size =3D 4, + .max_access_size =3D 8, + }, +}; + static bool tegra241_cmdqv_init(SMMUv3State *s, Error **errp) { - error_setg(errp, "NVIDIA Tegra241 CMDQV is unsupported"); - return false; + SysBusDevice *sbd =3D SYS_BUS_DEVICE(OBJECT(s)); + SMMUv3AccelState *accel =3D s->s_accel; + Tegra241CMDQV *cmdqv; + + cmdqv =3D g_new0(Tegra241CMDQV, 1); + cmdqv->cmdqv_data =3D g_new0(struct iommu_viommu_tegra241_cmdqv, 1); + memory_region_init_io(&cmdqv->mmio_cmdqv, OBJECT(s), &mmio_cmdqv_ops, = cmdqv, + "tegra241-cmdqv", TEGRA241_CMDQV_IO_LEN); + sysbus_init_mmio(sbd, &cmdqv->mmio_cmdqv); + sysbus_init_irq(sbd, &cmdqv->irq); + cmdqv->s_accel =3D accel; + accel->cmdqv =3D cmdqv; + return true; } =20 static bool tegra241_cmdqv_probe(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *i= dev, --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004557; cv=pass; d=zohomail.com; s=zohoarc; b=PVIezkHexnjPg8LXvjocthBI9KOe40IDtADi5RdjgSqyORvxVjub34LDsq/7tul+v9E76mHXiOYHozGSjv4yDMyDsmrtBzwA0kiidM3epgpHDaOCHJ+8NBBjLJe8PZqNc7veLglnhKIe65cBsuVjdOw4QsOwZJRvEqJSdBT8GaE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004557; 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=a1/9638cUCwB3XKUK4Uxt2dROh8uiZfvCir66r/gde4=; b=O/hn2BW27bJ0jdl6Eilub7S7xbYFL3CbNDnkU/LKlVHs/oP+Im3j86IezrZEmOFpdHn7g7pKffxKlFdmJB1bvLs/pvzmmKT6zxr0r9sKp6csEywUqNoS0dtOjMKMMcYeX0yVKuxw0vTb6UdyuVg/RdXO5y37C8FxwvVe2H4sNvg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004557174493.8096631978418; Tue, 9 Jun 2026 04:29:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudF-0007aY-Ce; Tue, 09 Jun 2026 07:28:33 -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 1wWuci-0006eH-Th; Tue, 09 Jun 2026 07:28:02 -0400 Received: from mail-southcentralusazlp170120001.outbound.protection.outlook.com ([2a01:111:f403:c10d::1] helo=SN4PR2101CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucd-00031s-Gf; Tue, 09 Jun 2026 07:27:58 -0400 Received: from BY1P220CA0021.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:5c3::16) by DS0PR12MB8342.namprd12.prod.outlook.com (2603:10b6:8:f9::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Tue, 9 Jun 2026 11:27:45 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:5c3:cafe::94) by BY1P220CA0021.outlook.office365.com (2603:10b6:a03:5c3::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.11 via Frontend Transport; Tue, 9 Jun 2026 11:27:45 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:44 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:28 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:24 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r4QrEKm/xnDOhUezXQY8x6mfLTBKytafBA81yGZtza/wm9nNh/5UatVzwKrcWrc94YDhAO1Hv8SZt/QplJbhWl5WtrUjaUeygoGaeWxhI1G/fzw+gOual0Zdd3GP69jH72yEb9uPh4nTgxaSg015FG5dO+WQ4cVw++xqnxw8UOvQzP3kejQFAQoUkI0iDex2fmVs6aSmIqhWPF3G2HAvrFXP9KmlQl0FF6VbBgqG4CW2Fi+dSWf7ntUCvni+DdNs16QbOb9RATQsx1bFNwvWyncSan0dreMtwrU67XNNLhQ7f4tdrCeJ7W+R4ZLcfJsv1CdlDwpjg8u1oT+fdbTFkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=a1/9638cUCwB3XKUK4Uxt2dROh8uiZfvCir66r/gde4=; b=uGQV4KrYsdPVeZSvigebIEyFHATxmv4uQTEnFwrb2shh1HPK90I5hQbD4dM6bcq1i62sheB3yO/i4WFz/PwsrFD3fgFVamEJ2VI0LG8EXCmW4cvb3dGOnUs2KQpLci8yFLF68TdFe2U9FmolxSg24FNuvJNqA7p3YECVt7/e4XqBTQAJRIWqrKnxSVnWyjgf4YvCSHdFoaXn2/6+GnSUy9GjtvNHr3xaDw8b2YzQIbZlI/tolpxcP2qFqtyHXn7Jnp6hjbE4qmuBuxP9KuBkCZi8+eD6ROZ+wyaxC/y6VWafdyA3XaVSI/qM8lIKZhx8oBKa5cvnnWQ/6Af/cO2o2g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=a1/9638cUCwB3XKUK4Uxt2dROh8uiZfvCir66r/gde4=; b=rld98mnuY1INKWKfjANPqhXJcuqSInRnsopphzCax+QiE6Mc3KacK5m70ncDbKGVg1LtOLKtPoiW1RomwYvHaukVHe6w+UvLB1v5pnCDro9fzp7Qr9EnC5RwbxHBI1glU62+1hAW0KzttT9nOkaLBCubmLM9iCXSbeT+1wTSF4yLbl0rfeXc4ZlkBaUCZup7lK9eTanzBDZJAdA3Sw5uLiuF5qjLJ4N+VdqwsFpZ0La2VAKqZtM659Q1A0VcFHcjyHmwYfboCh2opB+pzH4anbwvNeKRhDmExqvEsQpSJZKoMjevkXgp9VsWDJM7NI0MsWuCv8DONiEu53ohNnldYQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 12/31] hw/arm/virt: Link SMMUv3 CMDQV resources to platform bus Date: Tue, 9 Jun 2026 12:25:33 +0100 Message-ID: <20260609112552.378999-13-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|DS0PR12MB8342:EE_ X-MS-Office365-Filtering-Correlation-Id: ae16c059-9b87-4406-55ff-08dec61a2084 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|36860700016|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: NcXnvO5nsQy6gPT0c2YY3ie0MfTEMaiZOWedHiPlHrqc/hE+EbH5VCNWExB4S6mVdiuERnhp/DeArh3PZzvqxOV+gfV0Ii8PrbgGzaexKDRDVWMC7eyhMMIZBzQSgUnnWeESkictXB9Vx56SvcPx8syAVusxGMDEovRiH4G7UsGBeQKRHdUT5roT30ZH0HNINYmfdA+H1pkWGzUISP3Cf/bslAmPzWfcLoHvMWu5A9Jn+k5zS34z8MDUZK186Q5OWtWwmxGDM+2EQ7vwtM3wyDj3F9I2ANOiGIBTnKoBcLtsJ/EY2FNiDsptTV1MeAbdSZbvORk6VDmriYMGElrBCN7s5tDE1Yf0VPwSoAJiwtzaNUA8rlDn67yqw5SYU2srajxhUOc3HDlaNxCHPJDQi7HKCaodLyUYn487EBMrEoscu3SozigGXgA8y/smPS++AD+mNJ4m6GyjZ0ioQ09PISoveB0xFdo6U3GamH6RFWD2oRcfhfJScNqU56Qk8l7UirffKHxGdju53JaPnLLLsRRWPvEV1NZIiRwl0fDG2NRuA+vd3ukuZvqwpjAKnDLSQoEDYYCCunLDy4o16ARrH7aX+MOddniHrh1qn8chUJkp8ihiX073sRa+MJ7zDITeSbEk7wS3y0DkPLfCPA8KmnH/z/1SPy6GiRmVv2jwBALWedcF1U80R69ibd/2/7G4ZyboztYwqJ78T0DDPk+IfmXPBj9nPfsrZcYHBQ5lFQ8= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(36860700016)(22082099003)(18002099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SUZM1XgAjUHnDJkwywdFL2z87Pj0m89QE+cG8iZ4IyXwKSe3kTDR20DtX3nCq4s+vfYbGl1/+3Hbl1uB88OMFlWRl5SPqyaWI6rQjNaA45ppu9bL/Obq082KTNIVRRU0lmvCAap3HESDyt8P0RevGg4YartZnvluc+UomgEqTqxeSknVGyloZ6RFkNP4YNyj3eBrS65M9wBKnpDN3wMxhU6rNhQuX5Wc/bo/9D0StLtse4M3vnf4zQkADDsyGRKdpgBxhMVzW8QYWRhpRgfiEJ3ihKNoTUYt8L/YpQBR0TsK6hDM8WV/8hb11UEMEIEX149WR4So6Rf/Sg7cy9VwER9m74WmiAbqsGbFc/rQsJp01SSxf1ui86V2EpXdHW643lmW85g3t2Ji1PgDRkc7Ag9Hxuc2ahopNRp31Mx99+3HkO+p+DtpB/zAvZTUjSAC X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:44.8588 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ae16c059-9b87-4406-55ff-08dec61a2084 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8342 Received-SPF: permerror client-ip=2a01:111:f403:c10d::1; envelope-from=skolothumtho@nvidia.com; helo=SN4PR2101CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004557693158500 Content-Type: text/plain; charset="utf-8" SMMUv3 devices with acceleration may enable CMDQV extensions after device realize. In that case, additional MMIO regions and IRQ lines may be registered but not yet mapped to the platform bus. Ensure SMMUv3 device resources are linked to the platform bus during machine_done(). This is safe to do unconditionally since the platform bus helpers skip resources that are already mapped. Reviewed-by: Eric Auger Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/virt.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ac0606fe87..2add7401a1 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2361,6 +2361,25 @@ static void virt_build_smbios(VirtMachineState *vms) } } =20 +/* + * SMMUv3 devices with acceleration may enable CMDQV extensions + * after device realize. In that case, additional MMIO regions and + * IRQ lines may be registered but not yet mapped to the platform bus. + * + * Ensure all resources are linked to the platform bus before final + * machine setup. + */ + +static void virt_smmuv3_dev_link_cmdqv(VirtMachineState *vms) +{ + for (int i =3D 0; i < vms->smmuv3_devices->len; i++) { + DeviceState *dev =3D g_ptr_array_index(vms->smmuv3_devices, i); + + platform_bus_link_device(PLATFORM_BUS_DEVICE(vms->platform_bus_dev= ), + SYS_BUS_DEVICE(dev)); + } +} + static void virt_machine_done(Notifier *notifier, void *data) { @@ -2377,6 +2396,9 @@ void virt_machine_done(Notifier *notifier, void *data) if (vms->cxl_devices_state.is_enabled) { cxl_fmws_link_targets(&error_fatal); } + + virt_smmuv3_dev_link_cmdqv(vms); + /* * If the user provided a dtb, we assume the dynamic sysbus nodes * already are integrated there. This corresponds to a use case where --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004552; cv=pass; d=zohomail.com; s=zohoarc; b=YYWdQD7eDVzOXVLwOk4WYOJzIeN1MA3tXOy0bv9/nqAZhgCqXwyz0lZlMoQ8lnhbChgw0oPcme/FbGiUWzFE2ZEG25tVDt6BGikngQuEvokQS/UqOuOaIWvi7fKHgQXELU+hBCY70ksi6Cr++wOcJPbbqV9gAXR2Mr0ZTH2nUA4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004552; 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=tNQdRYGPpkZKOFXFWOdwiXEnJJfBttvvAc3aVAO00qc=; b=WYdCob+Uvv/RmWYZsoUuvAcRMvsm5sFIkA8Z/8Vf2NhTP8/om02b9b3sdbz2z4bRjWcJf63UM/sFxHeviGFEU7dLruiy79jrPuwzWbxDwo2mrJ2gl5/nH4dv5FIZRq6LCoGzoYqaZAM8GANQHYs8DeK8VBykV7mSTyMw0e0tHVk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004552141908.886326995048; Tue, 9 Jun 2026 04:29:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudL-00089o-QR; Tue, 09 Jun 2026 07:28:39 -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 1wWuci-0006eG-TV; Tue, 09 Jun 2026 07:28:02 -0400 Received: from mail-eastus2azlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c110::3] helo=BN8PR05CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucd-00032C-HE; Tue, 09 Jun 2026 07:27:58 -0400 Received: from SJ0PR03CA0262.namprd03.prod.outlook.com (2603:10b6:a03:3a0::27) by MN0PR12MB6367.namprd12.prod.outlook.com (2603:10b6:208:3d3::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:27:49 +0000 Received: from MWH0EPF000A6732.namprd04.prod.outlook.com (2603:10b6:a03:3a0:cafe::4a) by SJ0PR03CA0262.outlook.office365.com (2603:10b6:a03:3a0::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:48 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A6732.mail.protection.outlook.com (10.167.249.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:48 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:32 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:29 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gzCioRQMbZVYdsnHNd4UBfk9yuuGJgMFac+FC9rVymq4pKOAG6TjmspTHQhH/qAlG6Eb6QMwCeSs1rW4D73yzgFBHDjjiPTwqfVCOXCyfuPrvBnEk2i809prNgMSNtgOsea13xlMQrVxwppx/Cp0m3cGtktXpDTXXFgshndUqkjI+pcVwf9fomCFNx2qQXGK5qPPzAQu0O2CJMnnGqWa9BNdsOaLakQFwiz66Hj8MRqblbLxvRG95hOUYh37CLc8gcNka4xU5QDcsIc+vVu8G4c0nWsvvAIDkPvLzXB1SIgMmLRTeKBDjm8ounoGxOUSgvz/6S1ymDowhEnhvgqqgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tNQdRYGPpkZKOFXFWOdwiXEnJJfBttvvAc3aVAO00qc=; b=ozpaL4ORm28zc+XyYe3TWCKbtorVpboN0H0ZXzhxlwFo/xSMESJ/tgjSRz/kwiS860RyUWJVZppenATb+G0rwkIkzTfrkNzAZoncCD9JhyvffiPqTPAVRkKHjERstce4QpCHnfdL4xaZZvvy4G6IT+k3185004xjscQkxLhr/msjJ7h8LobeZAxwifP/pCydts3bb2dlgWvcfWBd++AhOZps2zAMr+crJPaUrrBdLS0ofQoetrdSPyUXRqnl+eE4THLYZXRcm8waGVcYNaB+IPDMNbAudMQSgwc3YpjzGYbnmLM7OKi8t9i1XGkJtj2YOkv/Jv3Sd8LW37yssmSwsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tNQdRYGPpkZKOFXFWOdwiXEnJJfBttvvAc3aVAO00qc=; b=r683BRY1sJW3QroRCYKqpPjXempsI9OLLaCC6oGzdsp5EV/9FSl+SLGXoMDmLdWJcziPNpV53ss9f5/7NgdmdLUZKl+ZL/1ndx/AOmTDLA/41kPkl2IjhwHnMpi07dJ5PIxo2dLadotlJLPp7zDqop2PD+D+L2HvFECBYpCEXY+SiSGrTErfEVLeRgVhpUuKt8czECshTdWgPFL1d3GFJQEBnYf+QUaHZ0tJQV1sRe3M5bmrkIjPIbumi8rrENuFjRKmtXRP895QVLBjNFJwtagfAwVH0iXmTFs6XLu+Ov5UE77a203xkTx24T3bk24HbSwNrbdckg7NgVvgPuTIhg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 13/31] hw/arm/tegra241-cmdqv: Implement CMDQV vIOMMU alloc/free Date: Tue, 9 Jun 2026 12:25:34 +0100 Message-ID: <20260609112552.378999-14-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A6732:EE_|MN0PR12MB6367:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b384e6a-06d3-463a-07f8-08dec61a22aa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700016|376014|82310400026|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: zzn/WGQohhyhVhgxPlXOzXaQhCT7hrP7prG9b+Cd+Mvku2UiGIxEV5/e5IVGBAYqZ2X2M7jXutdU8eBbaIdvg++zU/AxR0iLxSGDyhU1PpuU3IYpTfkOA0a9L+TMj4VpDGdcckLb/NS3oZrFLQdJdyuJZ5k9CAy4VySpIH/SK0H64yfHnE7+NADmKjs4LT6uGpc9x3DPkAKutbHGtQQ2+EIt47maL9mODwDFIFx7w+we/KR+JsfFfRISvHBvXmHoo6+kyEIW3IXnRyKMdHXHgwc4E5/DvPly/LwiXCEftLK+w388R2fRJYYu3lNcObjoFVqFhCkKmA5yWSkNybSa5kHilOk9WCBgH4IJh6oiGJSFLdvUKjWRkdozxs9n+8/tEc7ct3pblr3T8nHOYKYaznqZ9VPkQ68EFR+V3EZiWum0lpnCBWSrXUI2feJEZzxt+fD00hDTFMo4R0lgyQiG+GT4ZakxdtvYAs3Bme5n58FGP07wwnXhPo9a2Bl4Fm7hQiQqkUw3IRufhYHAja9sEYULCKq+fH/yrUjPNnW1MkcxEBIdSf4Q07NBWdq1jFATVmO7lCcGzeeF6TT0i5HSYVB2YoslBXa7pqEBzWWdorXVwIBXmPqmDnaGwjfet6w9u0cPNQrgwfjoRNcvMlU3spfBkdKMYIu3JDXRhBYR8EnJqwxEsi8FSo1GMuXYctDE0V4umbSW3wdhCGHN5ZX/SpX/zwOD5jWNjIfwIq2VeDI= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(376014)(82310400026)(22082099003)(18002099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: K1+uPMH3g2GeKBfL6BoUGDXRnHzIug4vcPodGzuoQHwW0lue0d7tP7LG9t8j325M/c5hsZFOa1hMD4yNhbrJIEerRoEP+NBTlLdAtSadK2HS7tna8EhpDtsffrQiT+0KBKGXpMsRXF4Hpdt6WTK/K1o80K40fOwEQVXHNVAyETPI+QAteL1yHtxIJuwAoFj8xbq7M/YnlcZdJJxaGZ4FZwm/1f0dCMw4C/OYuTAaymVEdqkxheEDB8Wnfh/nXtVyiCGKnCR1r9jlGQkXbaeFkfNRg2Rm1KUjdiXggWsnVLuDeYhpMMNQpaNSYs+xhruDQHz93ApzcpUp+3eGkq1+ezXm8C0g9juheIVfQ2O8GNB7Ss4YDGe/74uBZLYwHjJ+bV7Ilg2nTU1I1nKDD3yaKYT1Ns7ErWdOgWTaQIFvT3DEx5p43Trmsvq2jmcwyo5Y X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:48.4615 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4b384e6a-06d3-463a-07f8-08dec61a22aa X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A6732.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB6367 Received-SPF: permerror client-ip=2a01:111:f403:c110::3; envelope-from=skolothumtho@nvidia.com; helo=BN8PR05CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004553586158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Replace the stub implementation with real vIOMMU allocation for Tegra241 CMDQV. Allocate a matching vEVENTQ together with the vIOMMU, since it is specific to the Tegra241 CMDQV vIOMMU and used to receive CMDQV events. Free both objects on teardown. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 1 + hw/arm/tegra241-cmdqv.c | 48 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index a5f65a8991..9fc720e96c 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -32,6 +32,7 @@ typedef struct Tegra241CMDQV { SMMUv3AccelState *s_accel; MemoryRegion mmio_cmdqv; qemu_irq irq; + IOMMUFDVeventq *veventq; } Tegra241CMDQV; =20 const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 2875affc8d..c1351c8519 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -10,6 +10,7 @@ #include "qemu/osdep.h" =20 #include "hw/arm/smmuv3.h" +#include "hw/arm/smmuv3-common.h" #include "smmuv3-accel.h" #include "tegra241-cmdqv.h" =20 @@ -26,13 +27,58 @@ static void tegra241_cmdqv_write_mmio(void *opaque, hwa= ddr offset, =20 static void tegra241_cmdqv_free_viommu(SMMUv3State *s) { + SMMUv3AccelState *accel =3D s->s_accel; + IOMMUFDViommu *viommu =3D accel->viommu; + Tegra241CMDQV *cmdqv =3D accel->cmdqv; + IOMMUFDVeventq *veventq =3D cmdqv->veventq; + + if (!viommu) { + return; + } + if (veventq) { + close(veventq->veventq_fd); + iommufd_backend_free_id(viommu->iommufd, veventq->veventq_id); + g_free(veventq); + cmdqv->veventq =3D NULL; + } + iommufd_backend_free_id(viommu->iommufd, viommu->viommu_id); } =20 static bool tegra241_cmdqv_alloc_viommu(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *idev, uint32_t *out_viommu_id, Error **errp) { - error_setg(errp, "NVIDIA Tegra241 CMDQV is unsupported"); + Tegra241CMDQV *cmdqv =3D s->s_accel->cmdqv; + uint32_t viommu_id, veventq_id, veventq_fd; + IOMMUFDVeventq *veventq; + + if (!iommufd_backend_alloc_viommu(idev->iommufd, idev->devid, + IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV, + idev->hwpt_id, cmdqv->cmdqv_data, + sizeof(*cmdqv->cmdqv_data), &viommu_= id, + errp)) { + return false; + } + + if (!iommufd_backend_alloc_veventq(idev->iommufd, viommu_id, + IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV, + 1 << SMMU_EVENTQS, &veventq_id, + &veventq_fd, + errp)) { + error_append_hint(errp, "Tegra241 CMDQV: failed to alloc veventq"); + goto free_viommu; + } + + veventq =3D g_new(IOMMUFDVeventq, 1); + veventq->veventq_id =3D veventq_id; + veventq->veventq_fd =3D veventq_fd; + cmdqv->veventq =3D veventq; + + *out_viommu_id =3D viommu_id; + return true; + +free_viommu: + iommufd_backend_free_id(idev->iommufd, viommu_id); return false; } =20 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004564; cv=pass; d=zohomail.com; s=zohoarc; b=S24QBidNRDnEwfu8SSW/nW6CTLeG7IVBiB97SlXQQs5EyO2VTskUQgwUCK/jMBLBhvjj74HbWEyHR3n4zTNkl1fjY47SLpFxLGS3EqsM+YCH47AZuQbBM8jUHCfiB9GWSDdnN8i51+pUGUxy1JkdwkMONzgrmV8JwTkO4ClQFCA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004564; 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=V1IGPLir0EEU+TKaOvGI8u6udx/FZiJVCXJ0ID1xFNA=; b=dcFBSl+y1vV0ZNBGlZsRihoO8IPe6bXvuLR9aRz2+rdMInVspLaEVn7AQPsum5lnNNb7wZgPdDcs4HdM0qmieP4jFAR8pm688pezqLFP945W921GSAs4aAA7Alcwzgh3TwUgJr58DoP5dTtUxBPyRBLUyatQmtBP8yUF5qjGCEU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004564008448.09458897793013; Tue, 9 Jun 2026 04:29:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudL-0008Aj-Sv; Tue, 09 Jun 2026 07:28:39 -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 1wWucm-0006nG-7l; Tue, 09 Jun 2026 07:28:04 -0400 Received: from mail-southcentralusazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c10d::3] helo=SN4PR0501CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucj-00032k-07; Tue, 09 Jun 2026 07:28:03 -0400 Received: from BY1P220CA0026.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:5c3::17) by BY5PR12MB4145.namprd12.prod.outlook.com (2603:10b6:a03:212::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Tue, 9 Jun 2026 11:27:53 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:5c3:cafe::8a) by BY1P220CA0026.outlook.office365.com (2603:10b6:a03:5c3::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.11 via Frontend Transport; Tue, 9 Jun 2026 11:27:53 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:53 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:37 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:33 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R1Bmfhd/Z/tiAkUYEIPk3ye0WRvB0MjZ0lJV96DcQmZmyjHHHdv1zsaPGS/C25b9tW+05RzJV31wLkNP32ddBVffdNGw+bv+WV4j9s1YeIL3pLV7/KmuBrqDyCuL/g36gjWnmbxm6kc6E9WLwi3Wvbr610EDvo7R/46NRquXRzoTp1O7aVGp8S7ahMQj3TBk25zoc8QU/HCyXE5JZ/0bYc1AGTiJKKGXz1mtmuF1fH4NC83MQCo42hzNorra+2n7hvse5DYMT5Mlh5BZCc/L8GXGfjFVkP/yPWyoQ0Kx+Lg6dRHsAKEjjG5zmqSfsJyUwwhPm6oHuxxoAV4SMlcJig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=V1IGPLir0EEU+TKaOvGI8u6udx/FZiJVCXJ0ID1xFNA=; b=mfhWWd6sDWQfXr5aLGW08P9YduMdlIvQTC1Hd3D2vOiOWHT0E8s2RFpMYpiWfbVW5ra2Vw6cD07kv06L+9Xw13ChITqbTYdogOBAJ4UbKs0aFApFV/3n0A93va8wYhAatJyzdN+r2QIGVduRzsXgjD9gSMISlEFoGZM8wPg5PjaLHTW/eMcE0BFl6ARFxjpGYGwsewFVCHYucBDWyA4b5gliLtdQ0iZILW3c0r+93/HHGKhuiRFisbNThK0D9/bpPQY09WEmscjW558c1UxPlTkAwf71z68th9/WI/MoQWimwJjRfoAyL+EMfnjyGtYj+KfWFqWuAEmboJcy9E5M/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V1IGPLir0EEU+TKaOvGI8u6udx/FZiJVCXJ0ID1xFNA=; b=bDE1T+cch5LeT3vkXvn062ThPhWLGOzofrAhebOSVPzFLswf873ffk3ZaZTznQrX7HYKAbFxW715iql88YJFXF6BopbceN8E81GVPphYFJmUY7u2Qij/OhKw53Wq/h4a0lWesww8sJQSimcAG7ZULee5x0GX3Tk0VIOGfeKUQfAIswNCcA6f7GV3wGjwcEaik6+MrDK6gKlxXWCAJ7e5INPUmmZnnNDVuCjZoPcIhskvMqHuLE4iggyhDTxwBZ5tijnOlNAyfCNZ0tNyVYG4jYG7fPxBbVMvbwTLNekMDbOGf1OhzMTzj2bUMI1QQewmLYxQ56ykINtQlhP8fc1Rsw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 14/31] hw/arm/tegra241-cmdqv: mmap host VINTF Page0 for CMDQV Date: Tue, 9 Jun 2026 12:25:35 +0100 Message-ID: <20260609112552.378999-15-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|BY5PR12MB4145:EE_ X-MS-Office365-Filtering-Correlation-Id: f5f7e975-95fe-4b18-d347-08dec61a2589 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|376014|1800799024|56012099006|11063799006|6133799003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: lOrJeDop+J3Km43Vw3OCPDwVYVZvZs6LPcgKNrySZfH/iaPyzl0NlV8jPXlWEMWgH4LRmcSdLh7nPC7RqdfkOqCwME/lpmjPjg9t/w5hxzS3KF9E1DlMqoO/zhxxKS3ivy/ASA2dhL4HpkAjvtrlJQ/vfVT/DuFjaGhxXwztFh/6m1piiQjNVlLmDxie6F7HgfaHRITEdVf+cDSVqkJ5g374wX2qbJxyFc2F6zMGTL1Ecn7TnBGhoD3us7wbAUt4mZdSYeZh5mpehwl/fX3nGiO1d+HO8ke9G9JOkRFiCRlf5EnbQ1WTjHtCc6q6Q8lOOOeOdqZfzO1E1VcuyfSwhhB/OjqWUrbNb1B0Yd1ynvUw3nJExiFD3Hl7RLVLhxk/nJeEZK1duco09HNw4+74pNdLNQzlijNTnK2fy6mKFDu8+HZNEIAc5Rsid+zy6xcNC3bBN2nz/DdbNQtNVIU/LosZf3hysDqj9y1CooWyci4JpUYPghYe+KRwdRkbFsU56lAsC95QI7AOTB/nMuZpegcO7VWo9oexdOti8o//oqq0k2OdDqjvSSa1nIWbnjr+IiVPaWRD3UuKr0xtx0+P8WonJ6sPyWn0vf0FZS1UCTE/olA2dL7lAWqVETYmXjGKoS0i+BlQuV6CDHRKx5aq2c8pvQVZ2HgBoUdFwxnzS6KeXBYtOzrlXlKirlykEm5H9IDyw6wLqQHBxGjFrnHMlmNxLbFT9M5B54r1xW8tAuw= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(376014)(1800799024)(56012099006)(11063799006)(6133799003)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jt8H893IKtThLdZmQOWiPt4SgaSk6ajkRGuYOBKlhapOHcxU8i8Jduvq0rq1PhvX7R6rURs5A3WnomYNH5KR1IaKG3LIiuZ6ShcBf43JheJMJlEISmZ/nesjMz9prJ2s0K2MILpjELUgHAS7EB3s+kbJBqCCao3jo1P27vNfCV1rgD0wYIcnvBEKhwvTQm4Kz9vA/fGxeGCnnWYOXgdZVCx+asdGrNZjxj8A1weEiNEVDtNRFfFqORcWQ/Rnwt5W4omZlWCn4mhtuizc5WretHVMAWN7vAMQDBggHh3JnbXSJXnUO4QkYO0rByrFea0F3TudeIle3Ub+pZOwpopsIAtCXdoL3gp4F+HA9Gdcq7qcrTqU1m7ce0dsUJvAalGpI3TtixiUZevYVYghBAnFpFijGvvtLgMUnRY6I+1bPxc1uZY2GHZahgQsx+wgn11I X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:53.3020 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f5f7e975-95fe-4b18-d347-08dec61a2589 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4145 Received-SPF: permerror client-ip=2a01:111:f403:c10d::3; envelope-from=skolothumtho@nvidia.com; helo=SN4PR0501CU005.outbound.protection.outlook.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=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 @Nvidia.com) X-ZM-MESSAGEID: 1781004565768154100 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen The kernel currently exposes a single VINTF per emulated SMMUv3 instance. IOMMU_VIOMMU_ALLOC returns an mmap offset for the host VINTF Page0 allocated for this SMMU. However, VCMDQs only become bound to that VINTF after IOMMU_HW_QUEUE_ALLOC, so until then the mapped Page0 does not back any real VCMDQ state. mmap the host VINTF Page0 right after IOMMU_VIOMMU_ALLOC, as the host VINTF is already enabled at that point, and unmap it when the vIOMMU is freed. The mapping shares the vIOMMU's lifetime. This prepares the VINTF mapping in advance of subsequent patches that add VCMDQ allocation. Signed-off-by: Nicolin Chen Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 3 +++ hw/arm/tegra241-cmdqv.c | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index 9fc720e96c..00c83b6186 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -25,6 +25,8 @@ */ #define TEGRA241_CMDQV_IO_LEN 0x50000 =20 +#define VINTF_PAGE_SIZE 0x10000 + struct iommu_viommu_tegra241_cmdqv; =20 typedef struct Tegra241CMDQV { @@ -33,6 +35,7 @@ typedef struct Tegra241CMDQV { MemoryRegion mmio_cmdqv; qemu_irq irq; IOMMUFDVeventq *veventq; + void *vintf_page0; } Tegra241CMDQV; =20 const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index c1351c8519..3eec6073a4 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -41,6 +41,10 @@ static void tegra241_cmdqv_free_viommu(SMMUv3State *s) g_free(veventq); cmdqv->veventq =3D NULL; } + if (cmdqv->vintf_page0) { + munmap(cmdqv->vintf_page0, VINTF_PAGE_SIZE); + cmdqv->vintf_page0 =3D NULL; + } iommufd_backend_free_id(viommu->iommufd, viommu->viommu_id); } =20 @@ -60,13 +64,20 @@ tegra241_cmdqv_alloc_viommu(SMMUv3State *s, HostIOMMUDe= viceIOMMUFD *idev, return false; } =20 + if (!iommufd_backend_viommu_mmap(idev->iommufd, viommu_id, VINTF_PAGE_= SIZE, + cmdqv->cmdqv_data->out_vintf_mmap_off= set, + &cmdqv->vintf_page0, errp)) { + error_append_hint(errp, "Tegra241 CMDQV: failed to mmap VINTF page= 0"); + goto free_viommu; + } + if (!iommufd_backend_alloc_veventq(idev->iommufd, viommu_id, IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV, 1 << SMMU_EVENTQS, &veventq_id, &veventq_fd, errp)) { error_append_hint(errp, "Tegra241 CMDQV: failed to alloc veventq"); - goto free_viommu; + goto munmap_page0; } =20 veventq =3D g_new(IOMMUFDVeventq, 1); @@ -77,6 +88,9 @@ tegra241_cmdqv_alloc_viommu(SMMUv3State *s, HostIOMMUDevi= ceIOMMUFD *idev, *out_viommu_id =3D viommu_id; return true; =20 +munmap_page0: + munmap(cmdqv->vintf_page0, VINTF_PAGE_SIZE); + cmdqv->vintf_page0 =3D NULL; free_viommu: iommufd_backend_free_id(idev->iommufd, viommu_id); return false; --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004627; cv=pass; d=zohomail.com; s=zohoarc; b=jG2ibv5yW74RXd9L3Sau4iD4HxmU1iJD/4skswbqyrkhm69F7tQLznWYI+toXF0IO1UQlReNdYGwZRIiFwwOOUenKG6T/OGWWYnY//IoQ5iYkdGe2wLLjbHSZk8rBglwU3V+5egnE045kxQoaidr4jmKd3DBNxLVQpMJIT7yglc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004627; 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=Tgs6qILLuY4iwQ0dGSeVJLovJn1Zz7wxKD1curHJ2yw=; b=ht22CUsuJzYUh4DWNULRK+ek1A/AiBEthdVk2jwHNgrEiLVgVI4euTmdUbDmmUeA9dFQTSjHJJqQ29h+eg+EiwbqNwrjDGzAKRVj1W+7wWOI/MluRRlzB4oglpDmJd2piNMV1ceHDestujv+pXIdkWQrYH/yooVPdxUeCXZmKag= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004627562205.96744457080194; Tue, 9 Jun 2026 04:30:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudY-0000sV-GF; Tue, 09 Jun 2026 07:28:53 -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 1wWucv-0006zW-BC; Tue, 09 Jun 2026 07:28:18 -0400 Received: from mail-westcentralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c112::5] helo=CY7PR03CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWucq-00034J-E0; Tue, 09 Jun 2026 07:28:10 -0400 Received: from MW4PR03CA0085.namprd03.prod.outlook.com (2603:10b6:303:b6::30) by CH1PR12MB9573.namprd12.prod.outlook.com (2603:10b6:610:2ae::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:27:59 +0000 Received: from MWH0EPF000A6731.namprd04.prod.outlook.com (2603:10b6:303:b6:cafe::4) by MW4PR03CA0085.outlook.office365.com (2603:10b6:303:b6::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:27:59 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A6731.mail.protection.outlook.com (10.167.249.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:27:58 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:41 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BO3fqvgjJQ2AG3HDCapDxIuXy9ZNC3iS9prl/+hkSXK7eAID/+W0sasyurk+wIUQy8RjN/w3VWD3StGyePICb5FVQO6svIiMzejWaiE0BQKCvOmhkZj9pjfeMIn0K+2gtILw8XH2+7dK3/IIzKpPKOOj9Js58+2RkKWySTncdrndw/QmARgN3eo+FVpgUR5wQoX5ZlCk0NULNqM5O/+81h621EC6gverdK9WNYQc88gmHzO4RD9Y08mO65Sg8m6wir7fsygX0F98fwgN3SwT4tEhfLHmA/zh1IbhPIXbqko7ZcToSiClVIPepPohcw98IB02ZQBjCefR7miM7zOAkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Tgs6qILLuY4iwQ0dGSeVJLovJn1Zz7wxKD1curHJ2yw=; b=jQp6xPJ5vqnbXI3U1bvR2PcRBK+w6o4qeQ0LWb1YtA/zL7uPF332W0pk9FwnY8XxO/CJxiP9nuaqYomy5PmbFbxcEjY5l1L4MaGE97oGSd2VIn+RNC1y/xGFIsdnyYvDdhKRg2nBdYEow/DavF8/Yd0l5Jjd5EPm+YSIk3NIq4UZqSzJ8CiJJKZpedmuKY4SUeGXnrDdcnhAuTpRUeLgWzZ3crQIj3awWxVbX+cS392izXHsGqNcsjI3jSAhVshsk+LSu5HYFLr4sTDw0OfZmxjH4YsqSZAgp6Es2fzRmaP3hejof2PmfzGL4zrcp74si2fvrDELWYLrdgEXMy/j7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Tgs6qILLuY4iwQ0dGSeVJLovJn1Zz7wxKD1curHJ2yw=; b=oJljeHsmCmeriAuK0z2CNbmLttQ8vh+OVE7/3a4cc8C02vnn3z2COlR2PjsimqAhdyY2FzZZ12jJmk+u88tNw6cKqZ5G6yMyupNCqTEjU17G9Px667EKtBBbY3czhTbKnZUMelbi3MGIEK1NybdSZcsBpDtKe2QLkD1lUQ0eDRgUW+SUg10+QHm8R1osiWRx4XpP7NsOQj/s4X0kbG+yj19qf2ZYeQvzY9R6h1d4iulknP8gJ7nxM7udLnC8abEjmko7vno5BCn9q2zcLCaMuQdamffm6v9fxDVA2B1UTKHTvSemSmsETj47ZHyJnvu3SlY6/UsGUWilgj12Qxggzw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 15/31] hw/arm/tegra241-cmdqv: Emulate CMDQ-V Config region Date: Tue, 9 Jun 2026 12:25:36 +0100 Message-ID: <20260609112552.378999-16-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A6731:EE_|CH1PR12MB9573:EE_ X-MS-Office365-Filtering-Correlation-Id: 82163e93-d818-45af-3ce5-08dec61a28b7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|376014|36860700016|6133799003|3023799007|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: oCIlHG5h63RVvN0/CGZzJcKa9pxNiI/UHa646cvOtIGbUabOU1deP83VHz0/4ekRW84UNWKc5JtZwtMwQIZDHu3nPDoJA9hDHI0jsuLwenFPWs4g+Ac5eTIWjJhPPkk7snn7tnaNOBX7NjeHVey9SkpFwRJ+k7mqrq11uC04+UEN72LlvkoiNQ5xYdMo8CkRqhiHOf/p2wqIk84m5UJj8iQFP7VmHzvxGC5Scndc13lIJujnm5wr9ZbYn5/gRlEeMp69sYLU1PbpQQmBoLMGnWJ/fkbqCo8mxpYnPaQN1SHeMwSxwB7fJltjlDdrQBxe2q+2M1fDAsMJ0Cv+mwLe0IuPtF1uc4G7Kpo2fSmG8FcS35/goQy2DgthSsawvPkaEHGgQsLL+s6YQLsAezD6CzEN0IFnUbpPGoLydlgBnON7OKH1Ly0Crf4LXUsrPe4iz7kX/MR7As0S+/FzQb6q376JXImAOp7xkZeEYYQaV6ZGVxqd/GNfkK/sm0h2Ga0ya9IUqhTbaPY7ydf6iFZ56R4DtbcsjJQ35vjVMatBulZgkoV+O/rMSCGDPClg+2A9EzIwvz8gNb4RcQ5jfXkHu7ESJxTwt+jX9cFoJ1bU9+6+4JKeejR2OfoUQlYwA/iDPT4gqOl6kY2VUG+d7Vcbicjd8ZihCBUaq4nE2dyTaaFr/x9dg9lFNEDuLR96mOfnUB7+fHYzehrR4Bhh4seBVpGu6bg390E/LGmmfJQN8nk= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(376014)(36860700016)(6133799003)(3023799007)(18002099003)(22082099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 09QYJapUPX8cBWm6M78r6estn3aScEslkLIoDb93heDjW4ErTqlDRniKNpU0txFhULj/f6Hp1b3D3WQsXuOfvTA4AWa/ZXMpJiyN9P/DLmZCRAavlG1+qSqRXVEQAveHNjRu/Y59Go9fe2J8Ub4lb8tTDGhFDK7ORr0LKaWbOwryMXfMnkDNRnl9u7OsnqT7AAm9dAVYgb3I1Lkvwu6abkD6h/7TVYy58+Qx40/wp8mEBpLceqiAiPcFGW+DcyUkIXpjPepRxUSpDpecaEuGJn+l1gEzaA40mg4erYK1SvNHcjNppDNFGPzjBRR6rpqB8krQlVBguegiTYPy6oS+xVATCvaO1b47qsoJVv7wuWVz6p/fJAK1CBi/QWfJ/g2SMe6nor46qCC17hjw7ZwPei1idUFBCo35Inoyjv2e0XmfkWMC+ogbltmMOpMjKZB1 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:27:58.6094 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 82163e93-d818-45af-3ce5-08dec61a28b7 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A6731.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9573 Received-SPF: permerror client-ip=2a01:111:f403:c112::5; envelope-from=skolothumtho@nvidia.com; helo=CY7PR03CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004628092158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Tegra241 CMDQV exposes control and status registers in the CMDQ-V Config page (offset [0x0, 0x10000)) used to configure virtual command queue allocation and interrupt behavior. Add read/write emulation for the CMDQ-V Config region ([CMDQV_BASE, CMDQV_CMDQ_BASE]), backed by a simple register cache. This includes CONFIG, PARAM, STATUS, VI error and interrupt maps, CMDQ allocation map and the VINTF0 related registers defined in the CMDQ-V Config space. Only VINTF0 is supported; VINTF1-63 are not. Dispatch writes on access size: Introduced writel_mmio for 4-byte and writell_mmio for 8-byte. Reads need no split as the MMIO framework masks the returned value to the access size. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 110 ++++++++++++++++++++++++ hw/arm/tegra241-cmdqv.c | 181 +++++++++++++++++++++++++++++++++++++++- hw/arm/trace-events | 4 + 3 files changed, 294 insertions(+), 1 deletion(-) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index 00c83b6186..d49fa42cd5 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -10,10 +10,15 @@ #ifndef HW_ARM_TEGRA241_CMDQV_H #define HW_ARM_TEGRA241_CMDQV_H =20 +#include "hw/core/registerfields.h" + #define CMDQV_VER 1 #define CMDQV_NUM_CMDQ_LOG2 1 #define CMDQV_NUM_SID_PER_VI_LOG2 4 =20 +#define TEGRA241_CMDQV_MAX_CMDQ (1U << CMDQV_NUM_CMDQ_LOG2) +#define TEGRA241_CMDQV_MAX_NUM_SID (1U << CMDQV_NUM_SID_PER_VI_LOG2) + /* * Tegra241 CMDQV MMIO layout (64KB pages) * @@ -36,8 +41,113 @@ typedef struct Tegra241CMDQV { qemu_irq irq; IOMMUFDVeventq *veventq; void *vintf_page0; + + /* CMDQ-V Config page register cache */ + uint32_t config; + uint32_t param; + uint32_t status; + uint32_t vi_err_map[2]; + uint32_t vi_int_mask[2]; + uint32_t cmdq_err_map[4]; + uint32_t cmdq_alloc_map[TEGRA241_CMDQV_MAX_CMDQ]; + + /* VINTF0 register cache (within CMDQ-V Config page) */ + uint32_t vintf_config; + uint32_t vintf_status; + uint32_t vintf_sid_match[TEGRA241_CMDQV_MAX_NUM_SID]; + uint32_t vintf_sid_replace[TEGRA241_CMDQV_MAX_NUM_SID]; + uint32_t vintf_cmdq_err_map[4]; } Tegra241CMDQV; =20 +/* CMDQ-V Config page registers (offset 0x00000) */ +REG32(CONFIG, 0x0) +FIELD(CONFIG, CMDQV_EN, 0, 1) +FIELD(CONFIG, CMDQV_PER_CMD_OFFSET, 1, 3) +FIELD(CONFIG, CMDQ_MAX_CLK_BATCH, 4, 8) +FIELD(CONFIG, CMDQ_MAX_CMD_BATCH, 12, 8) +FIELD(CONFIG, CONS_DRAM_EN, 20, 1) + +REG32(PARAM, 0x4) +FIELD(PARAM, CMDQV_VER, 0, 4) +FIELD(PARAM, CMDQV_NUM_CMDQ_LOG2, 4, 4) +FIELD(PARAM, CMDQV_NUM_VI_LOG2, 8, 4) +FIELD(PARAM, CMDQV_NUM_SID_PER_VI_LOG2, 12, 4) + +REG32(STATUS, 0x8) +FIELD(STATUS, CMDQV_ENABLED, 0, 1) + +/* SMMU_CMDQV_VI_ERR_MAP_0/1 definitions */ +#define A_VI_ERR_MAP_0 0x14 +#define A_VI_ERR_MAP_1 0x18 +#define V_VI_ERR_MAP_NO_ERROR (0) +#define V_VI_ERR_MAP_ERROR (1) + +/* SMMU_CMDQV_VI_INT_MASK_0/1 definitions */ +#define A_VI_INT_MASK_0 0x1c +#define A_VI_INT_MASK_1 0x20 +#define V_VI_INT_MASK_NOT_MASKED (0) +#define V_VI_INT_MASK_MASKED (1) + +/* SMMU_CMDQV_CMDQ_ERR_MAP_0-3 definitions */ +#define A_CMDQ_ERR_MAP_0 0x24 +#define A_CMDQ_ERR_MAP_1 0x28 +#define A_CMDQ_ERR_MAP_2 0x2c +#define A_CMDQ_ERR_MAP_3 0x30 + +/* + * CMDQ_ALLOC_MAP: one entry per physical VCMDQ. Hardware supports up to 1= 28 + * entries (CMDQV_NUM_CMDQ_LOG2=3D7), but QEMU only exposes + * TEGRA241_CMDQV_MAX_CMDQ (=3D2) VCMDQs per VM so only entries 0 and 1 are + * defined here. + */ +/* 2 identical register entries */ +#define SMMU_CMDQV_CMDQ_ALLOC_MAP_(i) \ + REG32(CMDQ_ALLOC_MAP_##i, 0x200 + i * 4) \ + FIELD(CMDQ_ALLOC_MAP_##i, ALLOC, 0, 1) \ + FIELD(CMDQ_ALLOC_MAP_##i, LVCMDQ, 1, 7) \ + FIELD(CMDQ_ALLOC_MAP_##i, VIRT_INTF_INDX, 15, 6) + +SMMU_CMDQV_CMDQ_ALLOC_MAP_(0) +SMMU_CMDQV_CMDQ_ALLOC_MAP_(1) + +/* SMMU_CMDQV_VINTF0 registers (only VINTF0 is exposed to the guest) */ +REG32(VINTF0_CONFIG, 0x1000) +FIELD(VINTF0_CONFIG, ENABLE, 0, 1) +FIELD(VINTF0_CONFIG, VMID, 1, 16) +FIELD(VINTF0_CONFIG, HYP_OWN, 17, 1) + +REG32(VINTF0_STATUS, 0x1004) +FIELD(VINTF0_STATUS, ENABLE_OK, 0, 1) +FIELD(VINTF0_STATUS, STATUS, 1, 3) +FIELD(VINTF0_STATUS, VI_NUM_LVCMDQ, 16, 8) + +#define V_VINTF_STATUS_NO_ERROR (0 << 1) +#define V_VINTF_STATUS_VCMDQ_ERROR (1 << 1) + +/* + * SMMU_CMDQV_VINTF0_SID_MATCH/_REPLACE: 16 entries per VINTF + * (CMDQV_NUM_SID_PER_VI_LOG2=3D4). Only _0 and _15 are defined, + * used as switch case range bounds. + */ +REG32(VINTF0_SID_MATCH_0, 0x1040) +FIELD(VINTF0_SID_MATCH_0, ENABLE, 0, 1) +FIELD(VINTF0_SID_MATCH_0, VIRT_SID, 1, 20) +#define A_VINTF0_SID_MATCH_15 (A_VINTF0_SID_MATCH_0 + 15 * 4) + +REG32(VINTF0_SID_REPLACE_0, 0x1080) +FIELD(VINTF0_SID_REPLACE_0, PHYS_SID, 0, 20) +#define A_VINTF0_SID_REPLACE_15 (A_VINTF0_SID_REPLACE_0 + 15 * 4) + +/* + * SMMU_CMDQV_VINTF0_LVCMDQ_ERR_MAP: 4 registers per VINTF covering 32 log= ical + * VCMDQs each. With TEGRA241_CMDQV_MAX_CMDQ=3D2, only MAP_0 bits [1:0] ca= rry + * error state. MAP_1..MAP_3 always read as 0. Only _0 and _3 are defined, + * used as switch case range bounds. + */ +REG32(VINTF0_LVCMDQ_ERR_MAP_0, 0x10c0) +FIELD(VINTF0_LVCMDQ_ERR_MAP_0, LVCMDQ_ERR_MAP, 0, 32) +#define A_VINTF0_LVCMDQ_ERR_MAP_3 (A_VINTF0_LVCMDQ_ERR_MAP_0 + 3 * 4) + const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); =20 #endif /* HW_ARM_TEGRA241_CMDQV_H */ diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 3eec6073a4..8950d5153b 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -8,21 +8,200 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/log.h" =20 #include "hw/arm/smmuv3.h" #include "hw/arm/smmuv3-common.h" #include "smmuv3-accel.h" #include "tegra241-cmdqv.h" +#include "trace.h" + +static uint64_t tegra241_cmdqv_config_vintf_read(Tegra241CMDQV *cmdqv, + hwaddr offset) +{ + int i; + + switch (offset) { + case A_VINTF0_CONFIG: + return cmdqv->vintf_config; + case A_VINTF0_STATUS: + return cmdqv->vintf_status; + case A_VINTF0_SID_MATCH_0 ... A_VINTF0_SID_MATCH_15: + i =3D (offset - A_VINTF0_SID_MATCH_0) / 4; + return cmdqv->vintf_sid_match[i]; + case A_VINTF0_SID_REPLACE_0 ... A_VINTF0_SID_REPLACE_15: + i =3D (offset - A_VINTF0_SID_REPLACE_0) / 4; + return cmdqv->vintf_sid_replace[i]; + case A_VINTF0_LVCMDQ_ERR_MAP_0 ... A_VINTF0_LVCMDQ_ERR_MAP_3: + i =3D (offset - A_VINTF0_LVCMDQ_ERR_MAP_0) / 4; + return cmdqv->vintf_cmdq_err_map[i]; + default: + /* + * GLB_FILT_CFG_0 (offset 0xC) and GLB_FILT_DATA_0 (offset 0x10) a= re + * filter config and filter data registers. They are not required = for + * normal VINTF operation and are not emulated. + */ + qemu_log_mask(LOG_UNIMP, "%s unhandled read access at 0x%" PRIx64 = "\n", + __func__, offset); + return 0; + } +} + +static void tegra241_cmdqv_config_vintf_write(Tegra241CMDQV *cmdqv, + hwaddr offset, uint64_t valu= e) +{ + int i; + + switch (offset) { + case A_VINTF0_CONFIG: + /* + * Mask out HYP_OWN on guest writes. This bit selects Hypervisor (= 1) vs + * Guest (0) ownership of the CMDQ. Force it to 0 so the VINTF alw= ays + * remains guest-owned. + */ + value &=3D ~R_VINTF0_CONFIG_HYP_OWN_MASK; + + cmdqv->vintf_config =3D value; + if (value & R_VINTF0_CONFIG_ENABLE_MASK) { + cmdqv->vintf_status |=3D R_VINTF0_STATUS_ENABLE_OK_MASK; + } else { + cmdqv->vintf_status &=3D ~R_VINTF0_STATUS_ENABLE_OK_MASK; + } + break; + case A_VINTF0_SID_MATCH_0 ... A_VINTF0_SID_MATCH_15: + i =3D (offset - A_VINTF0_SID_MATCH_0) / 4; + cmdqv->vintf_sid_match[i] =3D value; + break; + case A_VINTF0_SID_REPLACE_0 ... A_VINTF0_SID_REPLACE_15: + i =3D (offset - A_VINTF0_SID_REPLACE_0) / 4; + cmdqv->vintf_sid_replace[i] =3D value; + break; + default: + /* + * GLB_FILT_CFG_0 (offset 0xC) and GLB_FILT_DATA_0 (offset 0x10) a= re + * filter config and filter data registers. They are not required = for + * normal VINTF operation and are not emulated. + */ + qemu_log_mask(LOG_UNIMP, "%s unhandled write access at 0x%" PRIx64= "\n", + __func__, offset); + return; + } +} =20 static uint64_t tegra241_cmdqv_read_mmio(void *opaque, hwaddr offset, unsigned size) { - return 0; + Tegra241CMDQV *cmdqv =3D (Tegra241CMDQV *)opaque; + uint64_t val =3D 0; + + if (offset >=3D TEGRA241_CMDQV_IO_LEN) { + qemu_log_mask(LOG_UNIMP, + "%s offset 0x%" PRIx64 " off limit (0x%x)\n", __func= __, + offset, TEGRA241_CMDQV_IO_LEN); + goto out; + } + + switch (offset) { + case A_CONFIG: + val =3D cmdqv->config; + break; + case A_PARAM: + val =3D cmdqv->param; + break; + case A_STATUS: + val =3D cmdqv->status; + break; + case A_VI_ERR_MAP_0 ... A_VI_ERR_MAP_1: + val =3D cmdqv->vi_err_map[(offset - A_VI_ERR_MAP_0) / 4]; + break; + case A_VI_INT_MASK_0 ... A_VI_INT_MASK_1: + val =3D cmdqv->vi_int_mask[(offset - A_VI_INT_MASK_0) / 4]; + break; + case A_CMDQ_ERR_MAP_0 ... A_CMDQ_ERR_MAP_3: + val =3D cmdqv->cmdq_err_map[(offset - A_CMDQ_ERR_MAP_0) / 4]; + break; + case A_CMDQ_ALLOC_MAP_0 ... A_CMDQ_ALLOC_MAP_1: + val =3D cmdqv->cmdq_alloc_map[(offset - A_CMDQ_ALLOC_MAP_0) / 4]; + break; + case A_VINTF0_CONFIG ... A_VINTF0_LVCMDQ_ERR_MAP_3: + val =3D tegra241_cmdqv_config_vintf_read(cmdqv, offset); + break; + default: + qemu_log_mask(LOG_UNIMP, "%s unhandled read access at 0x%" PRIx64 = "\n", + __func__, offset); + } + +out: + trace_tegra241_cmdqv_read_mmio(offset, val, size); + return val; +} + +/* 4-byte MMIO write handler. */ +static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV *cmdqv, hwaddr offset, + uint32_t value) +{ + switch (offset) { + case A_CONFIG: + cmdqv->config =3D value; + if (value & R_CONFIG_CMDQV_EN_MASK) { + cmdqv->status |=3D R_STATUS_CMDQV_ENABLED_MASK; + } else { + cmdqv->status &=3D ~R_STATUS_CMDQV_ENABLED_MASK; + } + break; + case A_VI_INT_MASK_0 ... A_VI_INT_MASK_1: + cmdqv->vi_int_mask[(offset - A_VI_INT_MASK_0) / 4] =3D value; + break; + case A_CMDQ_ALLOC_MAP_0 ... A_CMDQ_ALLOC_MAP_1: + cmdqv->cmdq_alloc_map[(offset - A_CMDQ_ALLOC_MAP_0) / 4] =3D value; + break; + case A_VINTF0_CONFIG ... A_VINTF0_LVCMDQ_ERR_MAP_3: + tegra241_cmdqv_config_vintf_write(cmdqv, offset, value); + break; + default: + qemu_log_mask(LOG_UNIMP, "%s unhandled write access at 0x%" PRIx64= "\n", + __func__, offset); + } +} + +/* + * 8-byte MMIO write handler. + */ +static void tegra241_cmdqv_writell_mmio(Tegra241CMDQV *cmdqv, hwaddr offse= t, + uint64_t value) +{ + qemu_log_mask(LOG_UNIMP, + "%s unhandled 64-bit write at 0x%" PRIx64 " (WI)\n", + __func__, offset); } =20 static void tegra241_cmdqv_write_mmio(void *opaque, hwaddr offset, uint64_t value, unsigned size) { + Tegra241CMDQV *cmdqv =3D (Tegra241CMDQV *)opaque; + + if (offset >=3D TEGRA241_CMDQV_IO_LEN) { + qemu_log_mask(LOG_UNIMP, + "%s offset 0x%" PRIx64 " off limit (0x%x)\n", __func= __, + offset, TEGRA241_CMDQV_IO_LEN); + goto out; + } + + switch (size) { + case 4: + tegra241_cmdqv_writel_mmio(cmdqv, offset, value); + break; + case 8: + tegra241_cmdqv_writell_mmio(cmdqv, offset, value); + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s bad write size %u at 0x%" PRIx64 "\n", + __func__, size, offset); + } + +out: + trace_tegra241_cmdqv_write_mmio(offset, value, size); } =20 static void tegra241_cmdqv_free_viommu(SMMUv3State *s) diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 3457536fb0..8c61d66a26 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -72,6 +72,10 @@ smmuv3_accel_unset_iommu_device(int devfn, uint32_t devi= d) "devfn=3D0x%x (idev dev smmuv3_accel_translate_ste(uint32_t vsid, uint32_t hwpt_id, uint64_t ste_1= , uint64_t ste_0) "vSID=3D0x%x hwpt_id=3D0x%x ste=3D%"PRIx64":%"PRIx64 smmuv3_accel_install_ste(uint32_t vsid, const char * type, uint32_t hwpt_i= d) "vSID=3D0x%x ste type=3D%s hwpt_id=3D0x%x" =20 +# tegra241-cmdqv +tegra241_cmdqv_read_mmio(uint64_t offset, uint64_t val, unsigned size) "of= fset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" +tegra241_cmdqv_write_mmio(uint64_t offset, uint64_t val, unsigned size) "o= ffset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" + # strongarm.c strongarm_uart_update_parameters(const char *label, int speed, char parity= , int data_bits, int stop_bits) "%s speed=3D%d parity=3D%c data=3D%d stop= =3D%d" strongarm_ssp_read_underrun(void) "SSP rx underrun" --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004533; cv=pass; d=zohomail.com; s=zohoarc; b=X0cO+4ivxDOe4yCs4xDk7Hne+TKInomniWmC1y09zJZ9Zh7Ah/AmpeoBNYGxD8rhHB/Jf5nvTxWYOfrbx2kjEd/NNXTWZgignCbaa5usMP9lyLfbYcLsfJaeaOhh1rDfj7ZYWI1Jddp7iVGefR8UjcOHxkb/+znoqaV6cJJDzGg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004533; 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=72W5O7/JutUIYOfnZ5dCnRm5+8p+nPcow6dOgutpwJ0=; b=N0cAJcQr0gdxPzguAkgkMzg0gnHQfsbQX0DAgD+vnqXCBDg+eMsOkyCuVNwe5OtpoMHdXrB8X+oAnJMGji+7LLHAl2BKMNWCeryQaBcwi8Ftt5DJPYp6iRqo9Qkb20QmYvFm2VJBvGiZl9Q0Cu9fjAJNCAbNTNHJuHhp7ESgakc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004533709543.7609475174172; Tue, 9 Jun 2026 04:28:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudP-0008UF-Ui; Tue, 09 Jun 2026 07:28:44 -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 1wWud5-000775-Mi; Tue, 09 Jun 2026 07:28:27 -0400 Received: from mail-eastus2azlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c110::3] helo=BN8PR05CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWud2-000357-EL; Tue, 09 Jun 2026 07:28:23 -0400 Received: from BY3PR10CA0025.namprd10.prod.outlook.com (2603:10b6:a03:255::30) by DS0PR12MB7804.namprd12.prod.outlook.com (2603:10b6:8:142::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.12; Tue, 9 Jun 2026 11:28:08 +0000 Received: from MWH0EPF000C6188.namprd02.prod.outlook.com (2603:10b6:a03:255:cafe::7e) by BY3PR10CA0025.outlook.office365.com (2603:10b6:a03:255::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:07 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6188.mail.protection.outlook.com (10.167.249.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:07 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:46 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:42 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pTqjj6Svj2n1MRnlW0P8gl4uspe+KagP9Q5E7ExSvIVz7iMjvRJy7ny8zqZpq1sWkC6T8oC3l3I2S+35ErDlGVCqyEUu4Ue7dChfIye+ThUf6cdV6johe87qzM/J0U/YXSaIEMpOOjgRtE/ZFETIpem3N9X2xVI3YokwyF4zpTS1bqkJbMSlFPyUlteGBdKen1wQRlp9tUGAXox3LknafaKHQe6prJ+a1kHYKET9dAff45GAEB0Hx9VWjzXJJ5OZnaEBBRoaDEbXNFm55b312lI6WZN6HQ7U6MiJ+sCv8YlTVh/oDLVr8hVGPqW4XJlYsFhQAqN49/Y5ywWbNjXxqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=72W5O7/JutUIYOfnZ5dCnRm5+8p+nPcow6dOgutpwJ0=; b=WOkEAe4joV7A1VhcuAVz+JCq0F46181p03mRdahGGPFqTwxOF/jNeTFhNRUeO5pn//fqYYjw/X0XZgVdb/iJBeENMLkNK1Ya8kSIw5iI+vfdYIdD4xrMG+SFvN/OFFYaHPKVimadXafLzV0U7milA9+nUnHLixRhAjsLulkg2ML07doGUGmXOpUqooccTizMptJp5SgQzIth4FPYZQeeVmrwH0kyeVr3rtr5+TOAUb9BLD7zA1s07SQcuI2H/gBPZmWozhJVFLglLN1tXjKsR4bttvFpA6n4rBl0idlGqZzf/ji0O67tb4UMaaJhiE2iw+xg++UuTt3QYUXaxqnt0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=72W5O7/JutUIYOfnZ5dCnRm5+8p+nPcow6dOgutpwJ0=; b=sUWgvVUAYVnLJfTL4gHQDTq9P0IiufcJxn7T9QKxKyLZYjr3wLmq2/OSGP4ZprlxMn4TjvhehwxSAtH2rp/EK/lIebq1pAymAm9mI5wSSCcmsfd4fcie/uXWRwxuITEXyAZuBGFIrlKHccuDf9j+4y2MiN5/I0AfJsMNT2ZHa/aM0G8USIt4Y4chKSxDLq/QrVdrTT1/KT9F01gCeXYMeke9zWEh/IqcEC3aoa2CXjzkCF86aCGALeySrOFUnBhIwDz+5rAoyis9ASmRpAtQK60UNklLk9PceDjC9aA2m7yDzBaMIDIgctDlgywLRfw4GQIpNKgJ9d0nMEqFH7WcTg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 16/31] hw/arm/tegra241-cmdqv: Emulate VCMDQ register reads Date: Tue, 9 Jun 2026 12:25:37 +0100 Message-ID: <20260609112552.378999-17-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6188:EE_|DS0PR12MB7804:EE_ X-MS-Office365-Filtering-Correlation-Id: 44e70e95-7ebf-46ff-6480-08dec61a2dbb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|1800799024|376014|11063799006|3023799007|56012099006|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: KC8S/UMolJkeRcqWtUuyeqcJTzE7NJ5Su+opPzkP+sacA0ux+Ns7VZpdkBB6ji8naGRyVoj0RGO1HSSdlJbXMvbPOJM92afLxWgEkbUXZq59MpzeyfzkzhIWfOqwtt5FZVp9YwRyg+rTfT6s16mKlfHbv2gKE54y3PpUdp8MWfHQey3uvH/Z58xALWI5QH3uIwq7XNIM72/hSRIPbMDAr5xijVnK4HFib9haOotpKafCByK8v9CZzlgtgkVv556rUd4b/a0+b6Pe8BxyelCwmwUN4nqVv0cJOOFL30Ya0CmajNKcVTDHa8dT1cZByV1Ng1UhMBG/lX0fB8GXG78R0Jn3bipNJA95fDtophcMDl7JyTvVIzxqLyT7uFgJGKWa8nhGYC2K+JKn0BDCQk7I/JhJFL7i8WElWIgNM9nktpN+NQbuOVSKgcbvgZx52xGrfxhg89zYP2w9suJbAjEylDBkLBRtxkthbbOxmmE9DSumw2JrYdfjvIWjBVk2CKp337zQhXkYXr+sg9xz6VaCw5PuRE9k8cT4yFODhBhwia3gdX2ziqe5Y4nFjSWAsPOvG5dYeOzqQB3aJ2D0nHzF8LwFLoR/rmSY+ctxic3hV+3aOQXnpycsZgM+rvVBm7HQ2r0+ccm2aTUWl3+BuvQtU0WJc4IdH4P7fWnzjnFx/PbfU/VoAwEsfN8w9ge9+f339D2WtOAuFhkqvoS3hvF6t67jC9PVaml1pFkpdW83tlo= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(1800799024)(376014)(11063799006)(3023799007)(56012099006)(6133799003)(22082099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HoEsFlDE45uyQAVhdeWh3eTdOZh7F4ReWVrTC1/jBoNQlBtHeaHQhjtMcHsGbTi/9RAfDKYrHro16m40y6KWP/Tacgg61saHqP2GwNJikkKrIKeCNtAl1j3uGLVnLS0TxviBCHoJzUJ07G5RkFIfaan/xh1z2d1WXhMcDwacq6W24+LxGoaRhDBKOAboJ4lcmNrt0koI24LMHZy+VcNaQo8Ftq3crV0+ScepdMmrAgmb7zHCsrnmnBWdgIDqJSrEda3khy+1WSocvbTNo+o0fH+5NAXdVyOlWOhpbFknhqI/m41Vm7iI3I93CVgoE13a22d9Kf2gdAmIY8iv2S/XpFPiMPlWj/DdxeXjWIeto1Tvs3/JUbB6a28MQnf17glGdP4tETHJdZ+kukf8dJQCKQD0pQBp2gU2SYum62nhXdXyE2SuzbjE10oDnp7BvS3e X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:07.0430 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 44e70e95-7ebf-46ff-6480-08dec61a2dbb X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6188.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7804 Received-SPF: permerror client-ip=2a01:111:f403:c110::3; envelope-from=skolothumtho@nvidia.com; helo=BN8PR05CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004535349154100 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Tegra241 CMDQV exposes per-VCMDQ register windows through two MMIO apertures: Direct VCMDQ aperture (0x10000/0x20000): VCMDQ Page0/Page1 VINTF logical aperture (0x30000/0x40000): VINTF0 LVCMDQ Page0/Page1 Both apertures are hardware aliases of the same underlying registers: Page 0 (control/status): CONS_INDX, PROD_INDX, CONFIG, STATUS, GERROR, GERRORN Page 1 (base/DRAM): BASE_L/H, CONS_INDX_BASE_DRAM_L/H The direct aperture Page 0 is programmable at any time so long as CMDQV_EN is enabled. The VINTF (logical) aperture Page 0 is programmable only once SW has mapped a VCMDQ to a VINTF; the "logical" view is local to that VINTF. Add read emulation for both apertures, backed by a single per-VCMDQ register cache. VINTF aperture reads are translated to their equivalent direct-aperture offset and served from the same cached state. Per the CMDQV architecture, a VCMDQ must be allocated to a Virtual Interface before it is used to send commands to the SMMU. Until that allocation happens, reads return cached register state with no HW interaction. Subsequent patches wire up IOMMU_HW_QUEUE_ALLOC, mmap the host VINTF Page 0, and install it into guest MMIO; after that, Page 0 reads from either aperture are served from the hardware-backed mmap'd page instead of the cache. Page 1 is also a hardware alias, but the kernel only exposes mmap for Page 0, so Page 1 reads always trap to QEMU and are served from cache. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 216 ++++++++++++++++++++++++++++++++++++++++ hw/arm/tegra241-cmdqv.c | 103 +++++++++++++++++++ hw/arm/trace-events | 2 + 3 files changed, 321 insertions(+) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index d49fa42cd5..c4d327a9a5 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -30,6 +30,13 @@ */ #define TEGRA241_CMDQV_IO_LEN 0x50000 =20 +/* CMDQV MMIO aperture bases and VCMDQ stride */ +#define CMDQV_VCMDQ_PAGE0_BASE 0x10000 /* CMDQV_CMDQ_BASE */ +#define CMDQV_VCMDQ_PAGE1_BASE 0x20000 +#define CMDQV_VINTF_PAGE0_BASE 0x30000 /* CMDQV_VI_CMDQ_BASE */ +#define CMDQV_VINTF_PAGE1_BASE 0x40000 +#define CMDQV_VCMDQ_STRIDE 0x80 + #define VINTF_PAGE_SIZE 0x10000 =20 struct iommu_viommu_tegra241_cmdqv; @@ -57,6 +64,19 @@ typedef struct Tegra241CMDQV { uint32_t vintf_sid_match[TEGRA241_CMDQV_MAX_NUM_SID]; uint32_t vintf_sid_replace[TEGRA241_CMDQV_MAX_NUM_SID]; uint32_t vintf_cmdq_err_map[4]; + /* + * VCMDQ register cache. The direct (VCMDQ aperture) and logical + * (VINTF aperture) views are hardware aliases; both are served from + * this single cached copy. + */ + uint32_t vcmdq_cons_indx[TEGRA241_CMDQV_MAX_CMDQ]; + uint32_t vcmdq_prod_indx[TEGRA241_CMDQV_MAX_CMDQ]; + uint32_t vcmdq_config[TEGRA241_CMDQV_MAX_CMDQ]; + uint32_t vcmdq_status[TEGRA241_CMDQV_MAX_CMDQ]; + uint32_t vcmdq_gerror[TEGRA241_CMDQV_MAX_CMDQ]; + uint32_t vcmdq_gerrorn[TEGRA241_CMDQV_MAX_CMDQ]; + uint64_t vcmdq_base[TEGRA241_CMDQV_MAX_CMDQ]; + uint64_t vcmdq_cons_indx_base[TEGRA241_CMDQV_MAX_CMDQ]; } Tegra241CMDQV; =20 /* CMDQ-V Config page registers (offset 0x00000) */ @@ -148,6 +168,202 @@ REG32(VINTF0_LVCMDQ_ERR_MAP_0, 0x10c0) FIELD(VINTF0_LVCMDQ_ERR_MAP_0, LVCMDQ_ERR_MAP, 0, 32) #define A_VINTF0_LVCMDQ_ERR_MAP_3 (A_VINTF0_LVCMDQ_ERR_MAP_0 + 3 * 4) =20 +/* + * Direct VCMDQ aperture register windows. + * + * Page 0 @ CMDQV_VCMDQ_PAGE0_BASE: VCMDQ control and status registers. + * Page 1 @ CMDQV_VCMDQ_PAGE1_BASE: VCMDQ base and DRAM address registers. + * + * Each VCMDQ occupies a CMDQV_VCMDQ_STRIDE-byte slot within its page. + */ + +/* --- Page 0 register macros --- */ +#define SMMU_CMDQV_VCMDQi_CONS_INDX_(i) \ + REG32(VCMDQ##i##_CONS_INDX, \ + CMDQV_VCMDQ_PAGE0_BASE + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_CONS_INDX, RD, 0, 20) \ + FIELD(VCMDQ##i##_CONS_INDX, ERR, 24, 7) + +#define V_VCMDQ_CONS_INDX_ERR_CERROR_NONE 0 +#define V_VCMDQ_CONS_INDX_ERR_CERROR_ILL_OPCODE 1 +#define V_VCMDQ_CONS_INDX_ERR_CERROR_ABT 2 +#define V_VCMDQ_CONS_INDX_ERR_CERROR_ATC_INV_SYNC 3 +#define V_VCMDQ_CONS_INDX_ERR_CERROR_ILL_ACCESS 4 + +#define SMMU_CMDQV_VCMDQi_PROD_INDX_(i) \ + REG32(VCMDQ##i##_PROD_INDX, \ + CMDQV_VCMDQ_PAGE0_BASE + 0x4 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_PROD_INDX, WR, 0, 20) + +#define SMMU_CMDQV_VCMDQi_CONFIG_(i) \ + REG32(VCMDQ##i##_CONFIG, \ + CMDQV_VCMDQ_PAGE0_BASE + 0x8 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_CONFIG, CMDQ_EN, 0, 1) + +#define SMMU_CMDQV_VCMDQi_STATUS_(i) \ + REG32(VCMDQ##i##_STATUS, \ + CMDQV_VCMDQ_PAGE0_BASE + 0xc + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_STATUS, CMDQ_EN_OK, 0, 1) + +#define SMMU_CMDQV_VCMDQi_GERROR_(i) \ + REG32(VCMDQ##i##_GERROR, \ + CMDQV_VCMDQ_PAGE0_BASE + 0x10 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_GERROR, CMDQ_ERR, 0, 1) \ + FIELD(VCMDQ##i##_GERROR, CONS_DRAM_WR_ABT_ERR, 1, 1) \ + FIELD(VCMDQ##i##_GERROR, CMDQ_INIT_ERR, 2, 1) + +#define SMMU_CMDQV_VCMDQi_GERRORN_(i) \ + REG32(VCMDQ##i##_GERRORN, \ + CMDQV_VCMDQ_PAGE0_BASE + 0x14 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_GERRORN, CMDQ_ERR, 0, 1) \ + FIELD(VCMDQ##i##_GERRORN, CONS_DRAM_WR_ABT_ERR, 1, 1) \ + FIELD(VCMDQ##i##_GERRORN, CMDQ_INIT_ERR, 2, 1) + +/* Page 0 layout: VCMDQ0 */ +SMMU_CMDQV_VCMDQi_CONS_INDX_(0) +SMMU_CMDQV_VCMDQi_PROD_INDX_(0) +SMMU_CMDQV_VCMDQi_CONFIG_(0) +SMMU_CMDQV_VCMDQi_STATUS_(0) +SMMU_CMDQV_VCMDQi_GERROR_(0) +SMMU_CMDQV_VCMDQi_GERRORN_(0) + +/* Page 0 layout: VCMDQ1 */ +SMMU_CMDQV_VCMDQi_CONS_INDX_(1) +SMMU_CMDQV_VCMDQi_PROD_INDX_(1) +SMMU_CMDQV_VCMDQi_CONFIG_(1) +SMMU_CMDQV_VCMDQi_STATUS_(1) +SMMU_CMDQV_VCMDQi_GERROR_(1) +SMMU_CMDQV_VCMDQi_GERRORN_(1) + +/* --- Page 1 register macros --- */ +#define SMMU_CMDQV_VCMDQi_BASE_L_(i) = \ + REG32(VCMDQ##i##_BASE_L, CMDQV_VCMDQ_PAGE1_BASE + i * CMDQV_VCMDQ_STRI= DE) \ + FIELD(VCMDQ##i##_BASE_L, LOG2SIZE, 0, 5) = \ + FIELD(VCMDQ##i##_BASE_L, ADDR, 5, 27) + +#define SMMU_CMDQV_VCMDQi_BASE_H_(i) \ + REG32(VCMDQ##i##_BASE_H, \ + CMDQV_VCMDQ_PAGE1_BASE + 0x4 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_BASE_H, ADDR, 0, 16) + +#define SMMU_CMDQV_VCMDQi_CONS_INDX_BASE_DRAM_L_(i) \ + REG32(VCMDQ##i##_CONS_INDX_BASE_DRAM_L, \ + CMDQV_VCMDQ_PAGE1_BASE + 0x8 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_CONS_INDX_BASE_DRAM_L, ADDR, 0, 32) + +#define SMMU_CMDQV_VCMDQi_CONS_INDX_BASE_DRAM_H_(i) \ + REG32(VCMDQ##i##_CONS_INDX_BASE_DRAM_H, \ + CMDQV_VCMDQ_PAGE1_BASE + 0xc + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VCMDQ##i##_CONS_INDX_BASE_DRAM_H, ADDR, 0, 16) + +/* Page 1 layout: VCMDQ0 */ +SMMU_CMDQV_VCMDQi_BASE_L_(0) +SMMU_CMDQV_VCMDQi_BASE_H_(0) +SMMU_CMDQV_VCMDQi_CONS_INDX_BASE_DRAM_L_(0) +SMMU_CMDQV_VCMDQi_CONS_INDX_BASE_DRAM_H_(0) + +/* Page 1 layout: VCMDQ1 */ +SMMU_CMDQV_VCMDQi_BASE_L_(1) +SMMU_CMDQV_VCMDQi_BASE_H_(1) +SMMU_CMDQV_VCMDQi_CONS_INDX_BASE_DRAM_L_(1) +SMMU_CMDQV_VCMDQi_CONS_INDX_BASE_DRAM_H_(1) + +/* + * VINTF0 logical VCMDQ aperture register windows. + * + * Page 0 @ CMDQV_VINTF_PAGE0_BASE: VCMDQ control and status registers. + * Page 1 @ CMDQV_VINTF_PAGE1_BASE: VCMDQ base and DRAM address registers. + * + * VCMDQs mapped via VINTF are accessed through this aperture as + * hardware aliases of the direct VCMDQ aperture above. + */ + +/* --- Page 0 register macros --- */ +#define SMMU_CMDQV_VI_VCMDQi_CONS_INDX_(i) \ + REG32(VI_VCMDQ##i##_CONS_INDX, \ + CMDQV_VINTF_PAGE0_BASE + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_CONS_INDX, RD, 0, 20) \ + FIELD(VI_VCMDQ##i##_CONS_INDX, ERR, 24, 7) + +#define SMMU_CMDQV_VI_VCMDQi_PROD_INDX_(i) \ + REG32(VI_VCMDQ##i##_PROD_INDX, \ + CMDQV_VINTF_PAGE0_BASE + 0x4 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_PROD_INDX, WR, 0, 20) + +#define SMMU_CMDQV_VI_VCMDQi_CONFIG_(i) \ + REG32(VI_VCMDQ##i##_CONFIG, \ + CMDQV_VINTF_PAGE0_BASE + 0x8 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_CONFIG, CMDQ_EN, 0, 1) + +#define SMMU_CMDQV_VI_VCMDQi_STATUS_(i) \ + REG32(VI_VCMDQ##i##_STATUS, \ + CMDQV_VINTF_PAGE0_BASE + 0xc + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_STATUS, CMDQ_EN_OK, 0, 1) + +#define SMMU_CMDQV_VI_VCMDQi_GERROR_(i) \ + REG32(VI_VCMDQ##i##_GERROR, \ + CMDQV_VINTF_PAGE0_BASE + 0x10 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_GERROR, CMDQ_ERR, 0, 1) \ + FIELD(VI_VCMDQ##i##_GERROR, CONS_DRAM_WR_ABT_ERR, 1, 1) \ + FIELD(VI_VCMDQ##i##_GERROR, CMDQ_INIT_ERR, 2, 1) + +#define SMMU_CMDQV_VI_VCMDQi_GERRORN_(i) \ + REG32(VI_VCMDQ##i##_GERRORN, \ + CMDQV_VINTF_PAGE0_BASE + 0x14 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_GERRORN, CMDQ_ERR, 0, 1) \ + FIELD(VI_VCMDQ##i##_GERRORN, CONS_DRAM_WR_ABT_ERR, 1, 1) \ + FIELD(VI_VCMDQ##i##_GERRORN, CMDQ_INIT_ERR, 2, 1) + +/* Page 0 layout: VCMDQ0 */ +SMMU_CMDQV_VI_VCMDQi_CONS_INDX_(0) +SMMU_CMDQV_VI_VCMDQi_PROD_INDX_(0) +SMMU_CMDQV_VI_VCMDQi_CONFIG_(0) +SMMU_CMDQV_VI_VCMDQi_STATUS_(0) +SMMU_CMDQV_VI_VCMDQi_GERROR_(0) +SMMU_CMDQV_VI_VCMDQi_GERRORN_(0) + +/* Page 0 layout: VCMDQ1 */ +SMMU_CMDQV_VI_VCMDQi_CONS_INDX_(1) +SMMU_CMDQV_VI_VCMDQi_PROD_INDX_(1) +SMMU_CMDQV_VI_VCMDQi_CONFIG_(1) +SMMU_CMDQV_VI_VCMDQi_STATUS_(1) +SMMU_CMDQV_VI_VCMDQi_GERROR_(1) +SMMU_CMDQV_VI_VCMDQi_GERRORN_(1) + +/* --- Page 1 register macros --- */ +#define SMMU_CMDQV_VI_VCMDQi_BASE_L_(i) \ + REG32(VI_VCMDQ##i##_BASE_L, \ + CMDQV_VINTF_PAGE1_BASE + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_BASE_L, LOG2SIZE, 0, 5) \ + FIELD(VI_VCMDQ##i##_BASE_L, ADDR, 5, 27) + +#define SMMU_CMDQV_VI_VCMDQi_BASE_H_(i) \ + REG32(VI_VCMDQ##i##_BASE_H, \ + CMDQV_VINTF_PAGE1_BASE + 0x4 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_BASE_H, ADDR, 0, 16) + +#define SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_L_(i) \ + REG32(VI_VCMDQ##i##_CONS_INDX_BASE_DRAM_L, \ + CMDQV_VINTF_PAGE1_BASE + 0x8 + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_CONS_INDX_BASE_DRAM_L, ADDR, 0, 32) + +#define SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_H_(i) \ + REG32(VI_VCMDQ##i##_CONS_INDX_BASE_DRAM_H, \ + CMDQV_VINTF_PAGE1_BASE + 0xc + i * CMDQV_VCMDQ_STRIDE) \ + FIELD(VI_VCMDQ##i##_CONS_INDX_BASE_DRAM_H, ADDR, 0, 16) + +/* Page 1 layout: VCMDQ0 */ +SMMU_CMDQV_VI_VCMDQi_BASE_L_(0) +SMMU_CMDQV_VI_VCMDQi_BASE_H_(0) +SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_L_(0) +SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_H_(0) + +/* Page 1 layout: VCMDQ1 */ +SMMU_CMDQV_VI_VCMDQi_BASE_L_(1) +SMMU_CMDQV_VI_VCMDQi_BASE_H_(1) +SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_L_(1) +SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_H_(1) + const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); =20 #endif /* HW_ARM_TEGRA241_CMDQV_H */ diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 8950d5153b..2dfd377ee9 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -16,6 +16,79 @@ #include "tegra241-cmdqv.h" #include "trace.h" =20 +/* + * Read a VCMDQ Page 0 register (control/status) using VCMDQ0_* offsets. + * + * The caller normalizes the MMIO offset such that @offset0 always refers + * to a VCMDQ0_* register, while @index selects the VCMDQ instance. + */ +static uint64_t tegra241_cmdqv_read_vcmdq_page0(Tegra241CMDQV *cmdqv, + hwaddr offset0, int index, + bool direct) +{ + uint64_t val =3D 0; + + switch (offset0) { + case A_VCMDQ0_CONS_INDX: + val =3D cmdqv->vcmdq_cons_indx[index]; + break; + case A_VCMDQ0_PROD_INDX: + val =3D cmdqv->vcmdq_prod_indx[index]; + break; + case A_VCMDQ0_CONFIG: + val =3D cmdqv->vcmdq_config[index]; + break; + case A_VCMDQ0_STATUS: + val =3D cmdqv->vcmdq_status[index]; + break; + case A_VCMDQ0_GERROR: + val =3D cmdqv->vcmdq_gerror[index]; + break; + case A_VCMDQ0_GERRORN: + val =3D cmdqv->vcmdq_gerrorn[index]; + break; + default: + qemu_log_mask(LOG_UNIMP, + "%s unhandled read access at 0x%" PRIx64 "\n", + __func__, offset0); + } + trace_tegra241_cmdqv_read_vcmdq_page0(index, direct ? "direct" : "vi", + offset0, val); + return val; +} + +/* + * Read a VCMDQ Page 1 register (base / DRAM address) using VCMDQ0_* offse= ts. + */ +static uint64_t tegra241_cmdqv_read_vcmdq_page1(Tegra241CMDQV *cmdqv, + hwaddr offset0, int index, + bool direct) +{ + uint64_t val =3D 0; + + switch (offset0) { + case A_VCMDQ0_BASE_L: + val =3D cmdqv->vcmdq_base[index]; + break; + case A_VCMDQ0_BASE_H: + val =3D cmdqv->vcmdq_base[index] >> 32; + break; + case A_VCMDQ0_CONS_INDX_BASE_DRAM_L: + val =3D cmdqv->vcmdq_cons_indx_base[index]; + break; + case A_VCMDQ0_CONS_INDX_BASE_DRAM_H: + val =3D cmdqv->vcmdq_cons_indx_base[index] >> 32; + break; + default: + qemu_log_mask(LOG_UNIMP, + "%s unhandled read access at 0x%" PRIx64 "\n", + __func__, offset0); + } + trace_tegra241_cmdqv_read_vcmdq_page1(index, direct ? "direct" : "vi", + offset0, val); + return val; +} + static uint64_t tegra241_cmdqv_config_vintf_read(Tegra241CMDQV *cmdqv, hwaddr offset) { @@ -93,6 +166,7 @@ static uint64_t tegra241_cmdqv_read_mmio(void *opaque, h= waddr offset, { Tegra241CMDQV *cmdqv =3D (Tegra241CMDQV *)opaque; uint64_t val =3D 0; + int index; =20 if (offset >=3D TEGRA241_CMDQV_IO_LEN) { qemu_log_mask(LOG_UNIMP, @@ -126,6 +200,35 @@ static uint64_t tegra241_cmdqv_read_mmio(void *opaque,= hwaddr offset, case A_VINTF0_CONFIG ... A_VINTF0_LVCMDQ_ERR_MAP_3: val =3D tegra241_cmdqv_config_vintf_read(cmdqv, offset); break; + case A_VI_VCMDQ0_CONS_INDX ... A_VI_VCMDQ1_GERRORN: + /* + * VINTF Page0 registers are hardware aliases of VCMDQ Page0 regis= ters. + * Translate the VINTF aperture offset to its VCMDQ Page0 equivale= nt + * before dispatching to the Page 0 helper. + */ + offset -=3D CMDQV_VINTF_PAGE0_BASE - CMDQV_VCMDQ_PAGE0_BASE; + index =3D (offset - CMDQV_VCMDQ_PAGE0_BASE) / CMDQV_VCMDQ_STRIDE; + return tegra241_cmdqv_read_vcmdq_page0(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, false); + case A_VCMDQ0_CONS_INDX ... A_VCMDQ1_GERRORN: + /* + * Decode a per-VCMDQ Page 0 access. Each VCMDQ occupies a + * CMDQV_VCMDQ_STRIDE-byte window; extract the index and normalize + * to the VCMDQ0_* offset before calling the Page 0 helper. + */ + index =3D (offset - CMDQV_VCMDQ_PAGE0_BASE) / CMDQV_VCMDQ_STRIDE; + return tegra241_cmdqv_read_vcmdq_page0(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, true); + case A_VI_VCMDQ0_BASE_L ... A_VI_VCMDQ1_CONS_INDX_BASE_DRAM_H: + /* Same VINTF-to-VCMDQ translation as VINTF Page0 case above. */ + offset -=3D CMDQV_VINTF_PAGE1_BASE - CMDQV_VCMDQ_PAGE1_BASE; + index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; + return tegra241_cmdqv_read_vcmdq_page1(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, false); + case A_VCMDQ0_BASE_L ... A_VCMDQ1_CONS_INDX_BASE_DRAM_H: + index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; + return tegra241_cmdqv_read_vcmdq_page1(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, true); default: qemu_log_mask(LOG_UNIMP, "%s unhandled read access at 0x%" PRIx64 = "\n", __func__, offset); diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 8c61d66a26..5156604228 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -75,6 +75,8 @@ smmuv3_accel_install_ste(uint32_t vsid, const char * type= , uint32_t hwpt_id) "vS # tegra241-cmdqv tegra241_cmdqv_read_mmio(uint64_t offset, uint64_t val, unsigned size) "of= fset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" tegra241_cmdqv_write_mmio(uint64_t offset, uint64_t val, unsigned size) "o= ffset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" +tegra241_cmdqv_read_vcmdq_page0(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 +tegra241_cmdqv_read_vcmdq_page1(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 =20 # strongarm.c strongarm_uart_update_parameters(const char *label, int speed, char parity= , int data_bits, int stop_bits) "%s speed=3D%d parity=3D%c data=3D%d stop= =3D%d" --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004689; cv=pass; d=zohomail.com; s=zohoarc; b=VFgWOrA0pS+EbzoRma46gHkrnqvXMQcMXqLIarODjhp2HXAVPE/URjUWo2/4k6nAr8lyEhPSOgEFHK7UvpMesxfUztPvSj9CBm7W+uws+YtuFvr4JiucgmnTNRm0orIskX2U8p2wAV0gyKY16VG0t6t7F0NoKepsf1zSj+Q8s5c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004689; 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=OeHsCrLD9kEpqjKF7Mcr0MtSWbagKqAXRVoq3VIAqNQ=; b=RhVZ1Mhq0BtGgRaSdLZIzGMMQ8rb5q0V6/eGTbT2UUXSYBDLRw4RJAPRhyPGiO5sKwKQ4SfaAZWZgFKRGpHX+CIpYW2GPjy6GtNZuFjW07DVYKQ6GYVmMDml4uCcfaCWC7IMA9TxyUeZ2GQTkrz2U2WbdOh+ExEN6t7w4XdPXHA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004689462271.9081025656835; Tue, 9 Jun 2026 04:31:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudW-0000ac-Ca; Tue, 09 Jun 2026 07:28:50 -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 1wWud5-000776-NI; Tue, 09 Jun 2026 07:28:27 -0400 Received: from mail-centralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c111::5] helo=DM1PR04CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWud3-00035F-FA; Tue, 09 Jun 2026 07:28:23 -0400 Received: from BY3PR10CA0001.namprd10.prod.outlook.com (2603:10b6:a03:255::6) by IA0PR12MB7751.namprd12.prod.outlook.com (2603:10b6:208:430::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Tue, 9 Jun 2026 11:28:11 +0000 Received: from MWH0EPF000C618A.namprd02.prod.outlook.com (2603:10b6:a03:255:cafe::83) by BY3PR10CA0001.outlook.office365.com (2603:10b6:a03:255::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:11 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C618A.mail.protection.outlook.com (10.167.249.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:11 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:50 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:47 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zPAmgbHTdUJd2tB/BG5Zsn/3aSv5xv6ye54C2r2lYr/3Or0ynY1ZnNf7mL1slFDbhjsLW2s3G3FT9SYldfbnBaZxw4HatqQf7e7GlDgq0fmze9KdpFAjTdQiduqnF5bkT22MwOBuBjs4Ob7KtixvldM5MntCSXCMxTLgQcQrqoN/adAZTuGDPelXhL0HGNrdshHCxTBUuOgdOZ3NZ3w8zSR1kAfJPpx8bAMcf4Hpte/gm5gUAiHq9z1i/qt/PwqoCSXfOyfX8cI+urhh/Ma/TEIdqxmjV8P4fqPRHip41nPxvE7mWMk039mq8OXg1qX1SoOr2UChkL3Vd/jvWFHG/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OeHsCrLD9kEpqjKF7Mcr0MtSWbagKqAXRVoq3VIAqNQ=; b=MGcrR1iYvgm2tRUED86qnDtpDyuWrOzweVBIj7fSdHB9m7R1W1EueaupHjKfOuq1H5ApdXcSCKMNNUROlrmgBu5Zcs5LPT9IHZBqk1vcqV04UUuRKJ4SB0rQ5ttF6SpjQdIYzIP9FoX/fuGEbEgZ5PNFOsJN2taDJP31hfBbA0VVlNAAk4s9ur/RAAEa+wLwgzO3WxIV/HndAghAWkJB/MeEJzK0yIShWT4jeg/0YvnCL/AViGK5SNHeRlnLYj1vfoi25PvFzLhAVwukhXJxNVEQ2pOdFuy0RMtpJienkBUu2AettA89ms+Uw6KJ2HHwa9lP6m35/U2MbS21nHEymA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OeHsCrLD9kEpqjKF7Mcr0MtSWbagKqAXRVoq3VIAqNQ=; b=YRFwGCwcorKSVW9S5dWNvHH6EjJVBTzBfomkYQiJxcI4GkhoMq6pMfPrZMXoKNSQwfV73z6/FAYYZoJpsMq1ZJFIyqZzng46uBkL/paODy1wm7dn2gQ3TsD4za2/ANHsziB5QC0DNEgXYiX0340dz+oyhtcpc0q6KIyU3uLxBCZF7goe40C4w1VLV8co/hIphWHNONhjoadssKmwt498o0gvyo0RQqcK4vLy0PSgVpHlSjqYf2u15VczbRGa1QismgrwrDmR6e7uZ9e6g32XlR8mER22QPSBI2iMLcC/1RtiJcxDBG10SWbrhOBaOcR5n3JzQ2NEgQW9ujZFqEo1vw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 17/31] hw/arm/tegra241-cmdqv: Emulate VCMDQ register writes Date: Tue, 9 Jun 2026 12:25:38 +0100 Message-ID: <20260609112552.378999-18-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C618A:EE_|IA0PR12MB7751:EE_ X-MS-Office365-Filtering-Correlation-Id: 5966a275-c688-49a6-626e-08dec61a302d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|1800799024|82310400026|376014|11063799006|56012099006|3023799007|6133799003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: lEJicAN/03ScomF+OHYTn4Cj7A76bjne4naQ+A7C9Hfq3SAzkm2dpFTDJei7EYvrOiKpJgt/KacOrpXJSkHj/AfXOJs2vL21ZUnFkx4B4musDH/yxqBZFCdjhL/uUyuDv5c54c/YpSa2QHMdASfE80zGfoxmv6kfo/JVaqbiqoxP5VeQ/KGuh3BFCO6W5uVMQEkYb87mELj0mpjcYHkn2WRYDfHfDFN7vSaKe3zo8jWEL4SAayNKU80BvfSF/Ohxf8JNyorS/eNXzF88GufovcylrJ2vUKWKYnZtpFMG/lpOxWWvpFQkAqQhvM6j5llFlD+OxxFVhRwgyzsyyEZRoxeKcU1B264/LfPc/Mv/qe9Lo4AVNcV4nCgaim46SDcg2zhNkmCPUJxyk9Q9fDsXvipQxQPPut066KVcLF+FQILDYtmNhdtFhAhJrVIihaWl99L4qKORySJjGHNqB7ObmrOed05qjXAi9ZOZ4c2CkwzQXIv9WcMDcGgySCjAGDUPWWMBxjEI880Hw6+i8dePDuiX4+eEv5rCFSfiNLdOCXAbXNoMgs36uEjnencimrJsYxyTyXGwW+x+4lwLYVYTqyZxtH9q+WWHbDaE9gRfpGdHiNOV8P1+lSVWZIaKWuM939q8eMSPMSEjeujX/xHpWEkko1B53qOyxYaEZ2gelPC5UtDaOs/L/6QaJpesoxi/FD+TYJvUu1mcGjuBfr4LJmJRL563JISoL8REaWzwOY4= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(1800799024)(82310400026)(376014)(11063799006)(56012099006)(3023799007)(6133799003)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pwTFEbdPltcXP+7hdGdXLKCq67hyEKZghkgkUr5ulqjdvqf6caHan+z34EGf6bcf8QRdTbSjtvpqtY8jj1S1Uu1pAZVMLDCyCAsdWs6c6qogNenuFy0McsWuCHjAUwm2jykyqaA8lazRWffC2zjMa8XwU4DO454outOKQ3TxCnrI4HhQpyjUGx8v8/DlxOq5/1IhKGDj9acSwMmOuqE+/Qpy+doH6CiVxA9lUdzH+atnKKfB2s+9SQUaxHJYVnpCP6cZqx6466V+Psr9l6lXZIbBTs8q2FAOwWoXPhlQN9oIblvGpVkblXLbIZO0fpTJosZfnSZC1Cu0hGls+HLDkEvSPlft7QypcV6Y6PggF/CQOUlFquCA7pG5IDGPTHn10PAS1mJUsmi958TbWxzubuoOUrkWGvucoVam+q7JZogQP6JzHn2ZV3qNIfc8voVa X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:11.1410 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5966a275-c688-49a6-626e-08dec61a302d X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C618A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB7751 Received-SPF: permerror client-ip=2a01:111:f403:c111::5; envelope-from=skolothumtho@nvidia.com; helo=DM1PR04CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004690718158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen This is the write side counterpart of the VCMDQ read emulation. Add write handling for both the direct VCMDQ aperture and the VINTF logical aperture using the same index decoding and VINTF-to-VCMDQ translation logic as the read path. VINTF aperture writes are translated to their direct-aperture equivalent and update the same cached state. Page 1 registers (BASE, CONS_INDX_BASE) always update the cache. Per the CMDQV architecture, a VCMDQ must be allocated to a Virtual Interface before it is used to send commands to the SMMU. Until that allocation happens, MMIO writes only update cached register state - no command consumption, error handling, or interrupt activity is driven from these writes. Subsequent patches wire up IOMMU_HW_QUEUE_ALLOC, mmap the host VINTF Page 0, and install it into guest MMIO; after that, Page 0 writes from either aperture reach the hardware-backed mmap'd page instead of just the cache. Signed-off-by: Nicolin Chen Tested-by: Nicolin Chen Reviewed-by: Eric Auger Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.c | 159 +++++++++++++++++++++++++++++++++++++++- hw/arm/trace-events | 2 + 2 files changed, 159 insertions(+), 2 deletions(-) diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 2dfd377ee9..1f3d883cfe 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -120,6 +120,104 @@ static uint64_t tegra241_cmdqv_config_vintf_read(Tegr= a241CMDQV *cmdqv, } } =20 +/* + * Write a VCMDQ Page 0 register (control/status) using VCMDQ0_* offsets. + * + * The caller normalizes the MMIO offset such that @offset0 always refers + * to a VCMDQ0_* register, while @index selects the VCMDQ instance. + * + * Page 0 registers are all 32-bit; this helper is only called for 4-byte + * writes. + */ +static void tegra241_cmdqv_write_vcmdq_page0(Tegra241CMDQV *cmdqv, + hwaddr offset0, int index, + uint32_t value, bool direct) +{ + switch (offset0) { + case A_VCMDQ0_CONS_INDX: + cmdqv->vcmdq_cons_indx[index] =3D value; + break; + case A_VCMDQ0_PROD_INDX: + /* VCMDQ is functional only once allocated to a VINTF; cache only.= */ + cmdqv->vcmdq_prod_indx[index] =3D value; + break; + case A_VCMDQ0_CONFIG: + if (value & R_VCMDQ0_CONFIG_CMDQ_EN_MASK) { + cmdqv->vcmdq_status[index] |=3D R_VCMDQ0_STATUS_CMDQ_EN_OK_MAS= K; + } else { + cmdqv->vcmdq_status[index] &=3D ~R_VCMDQ0_STATUS_CMDQ_EN_OK_MA= SK; + } + cmdqv->vcmdq_config[index] =3D value; + break; + case A_VCMDQ0_GERRORN: + /* VCMDQ is functional only once allocated to a VINTF; cache only.= */ + cmdqv->vcmdq_gerrorn[index] =3D value; + break; + default: + qemu_log_mask(LOG_UNIMP, + "%s unhandled write access at 0x%" PRIx64 "\n", + __func__, offset0); + } + trace_tegra241_cmdqv_write_vcmdq_page0(index, direct ? "direct" : "vi", + offset0, value); +} + +/* + * Write a VCMDQ Page 1 register (base / DRAM address) - 4-byte access. + */ +static void tegra241_cmdqv_write_vcmdq_page1(Tegra241CMDQV *cmdqv, + hwaddr offset0, int index, + uint32_t value, bool direct) +{ + switch (offset0) { + case A_VCMDQ0_BASE_L: + cmdqv->vcmdq_base[index] =3D + deposit64(cmdqv->vcmdq_base[index], 0, 32, value); + break; + case A_VCMDQ0_BASE_H: + cmdqv->vcmdq_base[index] =3D + deposit64(cmdqv->vcmdq_base[index], 32, 32, value); + break; + case A_VCMDQ0_CONS_INDX_BASE_DRAM_L: + cmdqv->vcmdq_cons_indx_base[index] =3D + deposit64(cmdqv->vcmdq_cons_indx_base[index], 0, 32, value); + break; + case A_VCMDQ0_CONS_INDX_BASE_DRAM_H: + cmdqv->vcmdq_cons_indx_base[index] =3D + deposit64(cmdqv->vcmdq_cons_indx_base[index], 32, 32, value); + break; + default: + qemu_log_mask(LOG_UNIMP, + "%s unhandled write access at 0x%" PRIx64 "\n", + __func__, offset0); + } + trace_tegra241_cmdqv_write_vcmdq_page1(index, direct ? "direct" : "vi", + offset0, value); +} + +/* + * Write a VCMDQ Page 1 register - 8-byte access at BASE_L or DRAM_L. + */ +static void tegra241_cmdqv_write_vcmdq_page1_64(Tegra241CMDQV *cmdqv, + hwaddr offset0, int index, + uint64_t value, bool direc= t) +{ + switch (offset0) { + case A_VCMDQ0_BASE_L: + cmdqv->vcmdq_base[index] =3D value; + break; + case A_VCMDQ0_CONS_INDX_BASE_DRAM_L: + cmdqv->vcmdq_cons_indx_base[index] =3D value; + break; + default: + qemu_log_mask(LOG_UNIMP, + "%s unhandled 64-bit write at 0x%" PRIx64 "\n", + __func__, offset0); + } + trace_tegra241_cmdqv_write_vcmdq_page1(index, direct ? "direct" : "vi", + offset0, value); +} + static void tegra241_cmdqv_config_vintf_write(Tegra241CMDQV *cmdqv, hwaddr offset, uint64_t valu= e) { @@ -243,6 +341,8 @@ out: static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV *cmdqv, hwaddr offset, uint32_t value) { + int index; + switch (offset) { case A_CONFIG: cmdqv->config =3D value; @@ -261,6 +361,39 @@ static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV *= cmdqv, hwaddr offset, case A_VINTF0_CONFIG ... A_VINTF0_LVCMDQ_ERR_MAP_3: tegra241_cmdqv_config_vintf_write(cmdqv, offset, value); break; + case A_VI_VCMDQ0_CONS_INDX ... A_VI_VCMDQ1_GERRORN: + /* + * VINTF Page0 registers are hardware aliases of VCMDQ Page0 regis= ters. + * Translate the VINTF aperture offset to its VCMDQ Page0 equivale= nt + * before dispatching to the Page 0 helper. + */ + offset -=3D CMDQV_VINTF_PAGE0_BASE - CMDQV_VCMDQ_PAGE0_BASE; + index =3D (offset - CMDQV_VCMDQ_PAGE0_BASE) / CMDQV_VCMDQ_STRIDE; + tegra241_cmdqv_write_vcmdq_page0(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, value, false); + break; + case A_VCMDQ0_CONS_INDX ... A_VCMDQ1_GERRORN: + /* + * Decode a per-VCMDQ Page 0 access. Each VCMDQ occupies a + * CMDQV_VCMDQ_STRIDE-byte window; extract the index and normalize + * to the VCMDQ0_* offset before calling the Page 0 helper. + */ + index =3D (offset - CMDQV_VCMDQ_PAGE0_BASE) / CMDQV_VCMDQ_STRIDE; + tegra241_cmdqv_write_vcmdq_page0(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, value, true); + break; + case A_VI_VCMDQ0_BASE_L ... A_VI_VCMDQ1_CONS_INDX_BASE_DRAM_H: + /* Same VINTF-to-VCMDQ translation as VINTF Page0 case above. */ + offset -=3D CMDQV_VINTF_PAGE1_BASE - CMDQV_VCMDQ_PAGE1_BASE; + index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; + tegra241_cmdqv_write_vcmdq_page1(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, value, false); + break; + case A_VCMDQ0_BASE_L ... A_VCMDQ1_CONS_INDX_BASE_DRAM_H: + index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; + tegra241_cmdqv_write_vcmdq_page1(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, value, true); + break; default: qemu_log_mask(LOG_UNIMP, "%s unhandled write access at 0x%" PRIx64= "\n", __func__, offset); @@ -268,14 +401,36 @@ static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV = *cmdqv, hwaddr offset, } =20 /* - * 8-byte MMIO write handler. + * 8-byte MMIO write handler. Only Page 1 BASE / CONS_INDX_BASE_DRAM accept + * full 64-bit writes; other offsets are write-ignored. */ static void tegra241_cmdqv_writell_mmio(Tegra241CMDQV *cmdqv, hwaddr offse= t, uint64_t value) { - qemu_log_mask(LOG_UNIMP, + int index; + + switch (offset) { + case A_VI_VCMDQ0_BASE_L ... A_VI_VCMDQ1_CONS_INDX_BASE_DRAM_H: + /* + * VINTF Page1 registers are hardware aliases of VCMDQ Page1 regis= ters. + * Translate the VINTF aperture offset to its VCMDQ Page1 equivale= nt + * before dispatching to the Page 1 helper. + */ + offset -=3D CMDQV_VINTF_PAGE1_BASE - CMDQV_VCMDQ_PAGE1_BASE; + index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; + tegra241_cmdqv_write_vcmdq_page1_64(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, value, false); + break; + case A_VCMDQ0_BASE_L ... A_VCMDQ1_CONS_INDX_BASE_DRAM_H: + index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; + tegra241_cmdqv_write_vcmdq_page1_64(cmdqv, + offset - index * CMDQV_VCMDQ_STRIDE, index, value, true); + break; + default: + qemu_log_mask(LOG_UNIMP, "%s unhandled 64-bit write at 0x%" PRIx64 " (WI)\n", __func__, offset); + } } =20 static void tegra241_cmdqv_write_mmio(void *opaque, hwaddr offset, diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 5156604228..666967dc5e 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -77,6 +77,8 @@ tegra241_cmdqv_read_mmio(uint64_t offset, uint64_t val, u= nsigned size) "offset: tegra241_cmdqv_write_mmio(uint64_t offset, uint64_t val, unsigned size) "o= ffset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" tegra241_cmdqv_read_vcmdq_page0(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 tegra241_cmdqv_read_vcmdq_page1(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 +tegra241_cmdqv_write_vcmdq_page0(int index, const char *aperture, uint64_t= offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 +tegra241_cmdqv_write_vcmdq_page1(int index, const char *aperture, uint64_t= offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 =20 # strongarm.c strongarm_uart_update_parameters(const char *label, int speed, char parity= , int data_bits, int stop_bits) "%s speed=3D%d parity=3D%c data=3D%d stop= =3D%d" --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004590; cv=pass; d=zohomail.com; s=zohoarc; b=ikJguWHl/Hp5zdLK0iPSZPhtPySFwftzJW0Nlbvq4BKLe7n7zry1t8EKGRKA+iCBw6KgR5ESRzVxEo2JQM7zYdbydBjcYww2fOzMouxp8ItCj35hICIJa6TVgbMCqqpojV7F/Kybn4DRQ4BotQTyg7XoY4DfhnlMiJ+wjJAAAYo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004590; 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=SLj5kjilCJgNwoU6RYUcQwgSEKuTmIcUKfvk/FCFtmo=; b=aJjLwvNvtXWaa+QZvAdMHipiL3/6/8quSfQhlNMF3Xpjq9DskrQog8KjQlON7i/rsJRxfpKfn96wardrrmI+2wdB/8KmqqlVjw2q5SAl5MxAChhVSt+8k5YJyCy+OVBP/0P1gcI0Rk8XrmRwKDKgciuwohpukshXAE3GuvAXdPU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004590597818.409631614192; Tue, 9 Jun 2026 04:29:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudQ-0008Vg-Li; Tue, 09 Jun 2026 07:28:45 -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 1wWud8-000798-V5; Tue, 09 Jun 2026 07:28:27 -0400 Received: from mail-northcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c105::7] helo=CH4PR04CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWud5-00035h-SU; Tue, 09 Jun 2026 07:28:25 -0400 Received: from BY3PR10CA0009.namprd10.prod.outlook.com (2603:10b6:a03:255::14) by BY5PR12MB4162.namprd12.prod.outlook.com (2603:10b6:a03:201::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:15 +0000 Received: from MWH0EPF000C6188.namprd02.prod.outlook.com (2603:10b6:a03:255:cafe::98) by BY3PR10CA0009.outlook.office365.com (2603:10b6:a03:255::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:15 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6188.mail.protection.outlook.com (10.167.249.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:15 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:55 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:52 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dFSZYJRGS+pUYJAnJl1jEMRf5NK815vRs9qTRbLtKAFdyUhNNWcrmnC2x8W7kYKervaPP1MsCNrCcjiuwwg60DsOeFJ++snooBXTgmNZnzZtQ2COFFun7N8J6al6yF3ZL+i5mlQEKD/uO9nCJzKOslBghJfudm1ajEvEIVIFhl176HfKqF4Tk9W2t2SNtLBMAfGmNoZVOoKODs58/7Mq9yWDWOCpE5V8qkxwurz/qasYdzJSwlwUfdA+dA1D/qzYujeCscs2lCQ+Y2PZEgvuA3H7IPsvQKKXs7IfMBEC9RMBe3PvG2a/hSypwb9/e+TLjxdyqDKBeCY8QuRn6sMXcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=SLj5kjilCJgNwoU6RYUcQwgSEKuTmIcUKfvk/FCFtmo=; b=U/Q3fdGre9QLH8zcgZAFSmByFa6se9BN4QCYUlKpOwUfdvpg2t8mQrLa1cbxuZatZ0QlwC1nbdDnZs5eDOoMl7YLkTTHgOp+eDnfS5WlCnOYMtbLSebvJEXN758AI97JGXJVmpYmFy0QapsuTEHoNJTvpXUrTvxbzzU8ZsQpLnfgKECpW9XhAgEzQuPBM1lqTka7c4wXClulAmvE3X3DW0BtelHVU5+BEYxnqcYEmkxA6XuoEW/kzlX0XwctaIFZ44mrcQVs5U6e6nD17jis70hRV2BUtxWgJnW76Ysbs/7UAl4Or1SDjmCdR8zRijj546bHcisDdMrrulMYwzRHTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SLj5kjilCJgNwoU6RYUcQwgSEKuTmIcUKfvk/FCFtmo=; b=AaZZ+Qe03FbVNmWPZgltZqnRQPN67l8lOKBnkQR1eDUh+8b7tNjlji+Zs9G/x1KMNuno1Qi7gUtXjCAKKsqubFIV1XChVYXBcR5MI9KtnhJ37VNNEGKtGPCrYj++SFGdJXsIAeHQ20ZhH1El5x47psTa/LWbvxYRZHNntVkQByg+KAujbnYbIo4OSwiONyM1/egXdbn2NKDpYZx3Y6z+Jr9zjjRatgMkSHQcz8dAXNI2zKxYc0gJxjICJ6LLb+yr7egTqvQ/BZZYlYzlV+QiTHeb5J17wd51NvK0Az1XZamqIGSDTkDJldAXHiNg8LQvb3vBXkTUqFvgUkT1Vupxxg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 18/31] hw/arm/tegra241-cmdqv: Allocate HW VCMDQs once configured Date: Tue, 9 Jun 2026 12:25:39 +0100 Message-ID: <20260609112552.378999-19-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6188:EE_|BY5PR12MB4162:EE_ X-MS-Office365-Filtering-Correlation-Id: bca8fdb0-f6d4-4086-01f3-08dec61a3299 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700016|376014|82310400026|18002099003|22082099003|3023799007|56012099006|11063799006|5023799004; X-Microsoft-Antispam-Message-Info: pa5Eryz8Vq+QQHrwAmnIPG1iCGc916XMU/4MoKwgYyNcEoLro4pa3dGRHeRiTHF33p49rxVGbwCe9+uEkKOQIOvUSKaZgjfB190NfS6CpRHlzbSLJFEG7j3B3p2xK9M4Ufs3hGKVhgYcmLiPzElNx4Uk5oR38Bpm+uoBNEWG+QEtSQzr7yJw++xdX6ev0uCIJK9cby8CqO1zZUFlTT8tZ7c7BA8Y24OP80hEaZ9Kkh7ySzIdPdbW/uCBcIHpLkXV9mCbTo/vIXfFR5tBR85FBuK5wNz8msDpp8SxI4qN68iwqFWLZVHhArTELqFm3rVxZ6aOrZWzLfGd4pcbShw41LSmT35huuUWpuH4I3NBs2P5aPSUuJsI2icjsp2GEEc93INdPo0l++1jfD0jo+eQi+DUTDDGerNNg1eukF6enL4flFes/oLRde99pCzNMQe2O1nKFS5n8UR7bTQtLelObu/Wz+9Pl+DN04XkvLrZ/JbzKBmgD7JHnLDH0xHm735wfxfocRW0JTTWHXZFw4yvECHHtMRa2N/NBhQvDYQ+1c8DCwUI1vXBDowwOhRSsLeeuEMrq/OkSpLlrJ97jB/YLGXD+16AkMunALtpGkC92ddazxXx5eFKcvPieKOLG2EQGOIxYNPeA1BXHRkUqG7qTenUJgZ5J3eQL1rOVMODmdtupq4YsjrjNZ3Hd1EJ/PJtJQVq+QUqM8Ww8hI4AfOyKqdsQ59hY0mVp51koIieO0Q= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(376014)(82310400026)(18002099003)(22082099003)(3023799007)(56012099006)(11063799006)(5023799004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kOwaFplcxTxncfV11PCoVDAK0ziYQzHCCduxBVYG4EougcH/7O6LMi65HeojP1YS1K69soXbJSjtuoZmxtZPG/Uqe120l5vxOOJbaqZPPb04VZSZQ28ui+O84RxWoIAnDG5Vzkqrnf9LkSnWRjHed2LccgVVgHWCyOI0g8tlqZYs7KQZPMAuK7nxPaioIe2GsBuMmUN0A+MlfzVOG1oTTuI621nRnui8ynjt3RfYAMhobYIHx8IQmSYKpsTkU+WrF15rwktPBB8nPh6w0Ur+xS2XebYsaWqo06GUf6KfS0NUslUwrAbVcer+/i96U1eS3AfS5OzVQtWQnJCYUJfdiWPXs8+5EbZr072dzqnz+XvyZnKflmVM6MsMTXjV4/+ivU2tcSAHC0mrSgbfyXe18lvj2Spk7ZahUydneqytlGG934CdQHmESlm1TYjRpijp X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:15.2129 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bca8fdb0-f6d4-4086-01f3-08dec61a3299 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6188.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4162 Received-SPF: permerror client-ip=2a01:111:f403:c105::7; envelope-from=skolothumtho@nvidia.com; helo=CH4PR04CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004592306154101 From: Nicolin Chen Add support for allocating IOMMUFD hardware queues when the guest programs the VCMDQ BASE registers. VCMDQ_EN lives in VCMDQ_CONFIG, which is on the VINTF Page0 region that a later patch installs into guest MMIO =E2=80=94 so QEMU won't trap its writes. Allocate the hardware queue instead once all of these are set: BASE programmed, CMDQ_ALLOC_MAP.ALLOC, and CMDQV / VINTF enabled. Each precondition write retries the allocation, so the guest may program them in any order. iommufd_backend_alloc_hw_queue() needs the guest physical address of the VCMDQ ring buffer, so allocation is deferred until the guest has populated BASE. If a hardware queue was previously allocated for the same VCMDQ, free it before reallocation. All allocated VCMDQs are freed when CMDQV or VINTF is disabled, when the ALLOC bit is cleared, or on reset. On allocation failure, set CMDQ_INIT_ERR and clear CMDQ_EN_OK in the cache so trapped guest reads see the failure rather than a queue that looks live. Clear them on a later successful allocation. A guest CMDQ_EN write then sets CMDQ_EN_OK only if CMDQ_INIT_ERR is clear. Signed-off-by: Nicolin Chen Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 11 +++ hw/arm/tegra241-cmdqv.c | 171 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 171 insertions(+), 11 deletions(-) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index c4d327a9a5..84499b840d 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -47,6 +47,7 @@ typedef struct Tegra241CMDQV { MemoryRegion mmio_cmdqv; qemu_irq irq; IOMMUFDVeventq *veventq; + IOMMUFDHWqueue *vcmdq[TEGRA241_CMDQV_MAX_CMDQ]; void *vintf_page0; =20 /* CMDQ-V Config page register cache */ @@ -364,6 +365,16 @@ SMMU_CMDQV_VI_VCMDQi_BASE_H_(1) SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_L_(1) SMMU_CMDQV_VI_VCMDQi_CONS_INDX_BASE_DRAM_H_(1) =20 +static inline bool tegra241_cmdqv_enabled(Tegra241CMDQV *cmdqv) +{ + return cmdqv->status & R_STATUS_CMDQV_ENABLED_MASK; +} + +static inline bool tegra241_vintf_enabled(Tegra241CMDQV *cmdqv) +{ + return cmdqv->vintf_status & R_VINTF0_STATUS_ENABLE_OK_MASK; +} + const SMMUv3AccelCmdqvOps *tegra241_cmdqv_get_ops(void); =20 #endif /* HW_ARM_TEGRA241_CMDQV_H */ diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 1f3d883cfe..8cb39e87c4 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -16,6 +16,96 @@ #include "tegra241-cmdqv.h" #include "trace.h" =20 +static void tegra241_cmdqv_free_vcmdq(Tegra241CMDQV *cmdqv, int index) +{ + IOMMUFDViommu *viommu =3D cmdqv->s_accel->viommu; + IOMMUFDHWqueue *vcmdq =3D cmdqv->vcmdq[index]; + + if (!vcmdq) { + return; + } + iommufd_backend_free_id(viommu->iommufd, vcmdq->hw_queue_id); + g_free(vcmdq); + cmdqv->vcmdq[index] =3D NULL; +} + +/* + * A VCMDQ's HW queue can be allocated once the guest has programmed: + * - VCMDQ_BASE (ring buffer GPA and size). This only checks that BASE is + * non-zero, not that both the _L and _H halves have been written; a + * half-written BASE may pass here, but the write of the second half + * re-runs setup and reallocates with the complete address. + * - the VINTF mapping (CMDQ_ALLOC_MAP.ALLOC). + * - both the CMDQV global enable and the VINTF enable. + */ +static bool tegra241_cmdqv_vcmdq_ready_to_alloc(Tegra241CMDQV *cmdqv, int = index) +{ + return cmdqv->vcmdq_base[index] && + (cmdqv->cmdq_alloc_map[index] & R_CMDQ_ALLOC_MAP_0_ALLOC_MASK) = && + tegra241_cmdqv_enabled(cmdqv) && tegra241_vintf_enabled(cmdqv); +} + +/* + * Allocate a host HW VCMDQ from the current cached BASE / size for @index. + * No-op (returns true) until the VCMDQ is ready to be allocated. + */ +static bool tegra241_cmdqv_setup_vcmdq(Tegra241CMDQV *cmdqv, int index, + Error **errp) +{ + SMMUv3AccelState *accel =3D cmdqv->s_accel; + uint64_t base_mask =3D (uint64_t)R_VCMDQ0_BASE_L_ADDR_MASK | + (uint64_t)R_VCMDQ0_BASE_H_ADDR_MASK << 32; + uint64_t addr =3D cmdqv->vcmdq_base[index] & base_mask; + uint64_t log2 =3D cmdqv->vcmdq_base[index] & R_VCMDQ0_BASE_L_LOG2SIZE_= MASK; + uint64_t size =3D 1ULL << (log2 + 4); + IOMMUFDViommu *viommu =3D accel->viommu; + IOMMUFDHWqueue *hw_queue; + uint32_t hw_queue_id; + + if (!tegra241_cmdqv_vcmdq_ready_to_alloc(cmdqv, index)) { + return true; + } + + tegra241_cmdqv_free_vcmdq(cmdqv, index); + + if (!iommufd_backend_alloc_hw_queue(viommu->iommufd, viommu->viommu_id, + IOMMU_HW_QUEUE_TYPE_TEGRA241_CMDQV, + index, addr, size, &hw_queue_id, + errp)) { + /* Record the failure in the cache. */ + cmdqv->vcmdq_gerror[index] |=3D R_VCMDQ0_GERROR_CMDQ_INIT_ERR_MASK; + cmdqv->vcmdq_status[index] &=3D ~R_VCMDQ0_STATUS_CMDQ_EN_OK_MASK; + return false; + } + hw_queue =3D g_new(IOMMUFDHWqueue, 1); + hw_queue->hw_queue_id =3D hw_queue_id; + hw_queue->viommu =3D viommu; + cmdqv->vcmdq[index] =3D hw_queue; + + cmdqv->vcmdq_gerror[index] &=3D ~R_VCMDQ0_GERROR_CMDQ_INIT_ERR_MASK; + cmdqv->vcmdq_status[index] |=3D R_VCMDQ0_STATUS_CMDQ_EN_OK_MASK; + + return true; +} + +static void tegra241_cmdqv_free_all_vcmdq(Tegra241CMDQV *cmdqv) +{ + /* uapi/linux/iommufd.h: hw_queue destroy must be in descending @index= . */ + for (int i =3D (TEGRA241_CMDQV_MAX_CMDQ - 1); i >=3D 0; i--) { + tegra241_cmdqv_free_vcmdq(cmdqv, i); + } +} + +static void tegra241_cmdqv_setup_all_vcmdq(Tegra241CMDQV *cmdqv, + Error **errp) +{ + for (int i =3D 0; i < TEGRA241_CMDQV_MAX_CMDQ; i++) { + if (!tegra241_cmdqv_setup_vcmdq(cmdqv, i, errp)) { + return; + } + } +} + /* * Read a VCMDQ Page 0 register (control/status) using VCMDQ0_* offsets. * @@ -143,7 +233,12 @@ static void tegra241_cmdqv_write_vcmdq_page0(Tegra241C= MDQV *cmdqv, break; case A_VCMDQ0_CONFIG: if (value & R_VCMDQ0_CONFIG_CMDQ_EN_MASK) { - cmdqv->vcmdq_status[index] |=3D R_VCMDQ0_STATUS_CMDQ_EN_OK_MAS= K; + /* Report init error if any. */ + if (!(cmdqv->vcmdq_gerror[index] & + R_VCMDQ0_GERROR_CMDQ_INIT_ERR_MASK)) { + cmdqv->vcmdq_status[index] |=3D + R_VCMDQ0_STATUS_CMDQ_EN_OK_MASK; + } } else { cmdqv->vcmdq_status[index] &=3D ~R_VCMDQ0_STATUS_CMDQ_EN_OK_MA= SK; } @@ -167,16 +262,19 @@ static void tegra241_cmdqv_write_vcmdq_page0(Tegra241= CMDQV *cmdqv, */ static void tegra241_cmdqv_write_vcmdq_page1(Tegra241CMDQV *cmdqv, hwaddr offset0, int index, - uint32_t value, bool direct) + uint32_t value, bool direct, + Error **errp) { switch (offset0) { case A_VCMDQ0_BASE_L: cmdqv->vcmdq_base[index] =3D deposit64(cmdqv->vcmdq_base[index], 0, 32, value); + tegra241_cmdqv_setup_vcmdq(cmdqv, index, errp); break; case A_VCMDQ0_BASE_H: cmdqv->vcmdq_base[index] =3D deposit64(cmdqv->vcmdq_base[index], 32, 32, value); + tegra241_cmdqv_setup_vcmdq(cmdqv, index, errp); break; case A_VCMDQ0_CONS_INDX_BASE_DRAM_L: cmdqv->vcmdq_cons_indx_base[index] =3D @@ -200,11 +298,13 @@ static void tegra241_cmdqv_write_vcmdq_page1(Tegra241= CMDQV *cmdqv, */ static void tegra241_cmdqv_write_vcmdq_page1_64(Tegra241CMDQV *cmdqv, hwaddr offset0, int index, - uint64_t value, bool direc= t) + uint64_t value, bool direc= t, + Error **errp) { switch (offset0) { case A_VCMDQ0_BASE_L: cmdqv->vcmdq_base[index] =3D value; + tegra241_cmdqv_setup_vcmdq(cmdqv, index, errp); break; case A_VCMDQ0_CONS_INDX_BASE_DRAM_L: cmdqv->vcmdq_cons_indx_base[index] =3D value; @@ -219,7 +319,8 @@ static void tegra241_cmdqv_write_vcmdq_page1_64(Tegra24= 1CMDQV *cmdqv, } =20 static void tegra241_cmdqv_config_vintf_write(Tegra241CMDQV *cmdqv, - hwaddr offset, uint64_t valu= e) + hwaddr offset, uint64_t valu= e, + Error **errp) { int i; =20 @@ -235,7 +336,13 @@ static void tegra241_cmdqv_config_vintf_write(Tegra241= CMDQV *cmdqv, cmdqv->vintf_config =3D value; if (value & R_VINTF0_CONFIG_ENABLE_MASK) { cmdqv->vintf_status |=3D R_VINTF0_STATUS_ENABLE_OK_MASK; + /* + * VCMDQs whose BASE was programmed before VINTF was + * enabled need their hw_queue allocated now. + */ + tegra241_cmdqv_setup_all_vcmdq(cmdqv, errp); } else { + tegra241_cmdqv_free_all_vcmdq(cmdqv); cmdqv->vintf_status &=3D ~R_VINTF0_STATUS_ENABLE_OK_MASK; } break; @@ -341,6 +448,7 @@ out: static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV *cmdqv, hwaddr offset, uint32_t value) { + Error *local_err =3D NULL; int index; =20 switch (offset) { @@ -348,18 +456,39 @@ static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV = *cmdqv, hwaddr offset, cmdqv->config =3D value; if (value & R_CONFIG_CMDQV_EN_MASK) { cmdqv->status |=3D R_STATUS_CMDQV_ENABLED_MASK; + /* + * VCMDQs whose BASE was programmed before CMDQV was enabled + * need their hw_queue allocated now. + */ + tegra241_cmdqv_setup_all_vcmdq(cmdqv, &local_err); } else { + tegra241_cmdqv_free_all_vcmdq(cmdqv); cmdqv->status &=3D ~R_STATUS_CMDQV_ENABLED_MASK; } break; case A_VI_INT_MASK_0 ... A_VI_INT_MASK_1: cmdqv->vi_int_mask[(offset - A_VI_INT_MASK_0) / 4] =3D value; break; - case A_CMDQ_ALLOC_MAP_0 ... A_CMDQ_ALLOC_MAP_1: - cmdqv->cmdq_alloc_map[(offset - A_CMDQ_ALLOC_MAP_0) / 4] =3D value; + case A_CMDQ_ALLOC_MAP_0 ... A_CMDQ_ALLOC_MAP_1: { + int idx =3D (offset - A_CMDQ_ALLOC_MAP_0) / 4; + bool was_alloc =3D cmdqv->cmdq_alloc_map[idx] & + R_CMDQ_ALLOC_MAP_0_ALLOC_MASK; + bool now_alloc =3D value & R_CMDQ_ALLOC_MAP_0_ALLOC_MASK; + + cmdqv->cmdq_alloc_map[idx] =3D value; + /* + * If the VCMDQ was already programmed (BASE) before mapping, fire + * setup on the ALLOC 0->1 transition; tear down on 1->0. + */ + if (!was_alloc && now_alloc) { + tegra241_cmdqv_setup_vcmdq(cmdqv, idx, &local_err); + } else if (was_alloc && !now_alloc) { + tegra241_cmdqv_free_vcmdq(cmdqv, idx); + } break; + } case A_VINTF0_CONFIG ... A_VINTF0_LVCMDQ_ERR_MAP_3: - tegra241_cmdqv_config_vintf_write(cmdqv, offset, value); + tegra241_cmdqv_config_vintf_write(cmdqv, offset, value, &local_err= ); break; case A_VI_VCMDQ0_CONS_INDX ... A_VI_VCMDQ1_GERRORN: /* @@ -387,17 +516,23 @@ static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV = *cmdqv, hwaddr offset, offset -=3D CMDQV_VINTF_PAGE1_BASE - CMDQV_VCMDQ_PAGE1_BASE; index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; tegra241_cmdqv_write_vcmdq_page1(cmdqv, - offset - index * CMDQV_VCMDQ_STRIDE, index, value, false); + offset - index * CMDQV_VCMDQ_STRIDE, index, value, false, + &local_err); break; case A_VCMDQ0_BASE_L ... A_VCMDQ1_CONS_INDX_BASE_DRAM_H: index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; tegra241_cmdqv_write_vcmdq_page1(cmdqv, - offset - index * CMDQV_VCMDQ_STRIDE, index, value, true); + offset - index * CMDQV_VCMDQ_STRIDE, index, value, true, + &local_err); break; default: qemu_log_mask(LOG_UNIMP, "%s unhandled write access at 0x%" PRIx64= "\n", __func__, offset); } + + if (local_err) { + error_report_err(local_err); + } } =20 /* @@ -407,6 +542,7 @@ static void tegra241_cmdqv_writel_mmio(Tegra241CMDQV *c= mdqv, hwaddr offset, static void tegra241_cmdqv_writell_mmio(Tegra241CMDQV *cmdqv, hwaddr offse= t, uint64_t value) { + Error *local_err =3D NULL; int index; =20 switch (offset) { @@ -419,18 +555,24 @@ static void tegra241_cmdqv_writell_mmio(Tegra241CMDQV= *cmdqv, hwaddr offset, offset -=3D CMDQV_VINTF_PAGE1_BASE - CMDQV_VCMDQ_PAGE1_BASE; index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; tegra241_cmdqv_write_vcmdq_page1_64(cmdqv, - offset - index * CMDQV_VCMDQ_STRIDE, index, value, false); + offset - index * CMDQV_VCMDQ_STRIDE, index, value, false, + &local_err); break; case A_VCMDQ0_BASE_L ... A_VCMDQ1_CONS_INDX_BASE_DRAM_H: index =3D (offset - CMDQV_VCMDQ_PAGE1_BASE) / CMDQV_VCMDQ_STRIDE; tegra241_cmdqv_write_vcmdq_page1_64(cmdqv, - offset - index * CMDQV_VCMDQ_STRIDE, index, value, true); + offset - index * CMDQV_VCMDQ_STRIDE, index, value, true, + &local_err); break; default: qemu_log_mask(LOG_UNIMP, "%s unhandled 64-bit write at 0x%" PRIx64 " (WI)\n", __func__, offset); } + + if (local_err) { + error_report_err(local_err); + } } =20 static void tegra241_cmdqv_write_mmio(void *opaque, hwaddr offset, @@ -535,6 +677,13 @@ free_viommu: =20 static void tegra241_cmdqv_reset(SMMUv3State *s) { + Tegra241CMDQV *cmdqv =3D s->s_accel->cmdqv; + + if (!cmdqv) { + return; + } + + tegra241_cmdqv_free_all_vcmdq(cmdqv); } =20 static const MemoryRegionOps mmio_cmdqv_ops =3D { --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004563; cv=pass; d=zohomail.com; s=zohoarc; b=faGsJizk4sj8BoXIWTd1pj+LBO2aQZiHSeEnL++hGGsOT8GMKvDaFA0l/Cng9fuBYqq1m/xRvYiOjCqmeMWjxOFwOC7/PUcTbtLU1QSC7tDmjyW7xSnOzzH/Ncg+ickDRbHPWUdmgS8rkiMiJRz+0WJ5mCsBm1HEioaeiSlRm5Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004563; 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=MsxMyb9VyIvpgdwMWuYM8ziGy838HJaE6BWEjdXwPb0=; b=TqpV0w4fjrK8CJsMsTabWOU1elOFUVFMvtUv0p7IgqoUuEnGtddSqn9wjp8k+rgutmkko7E1Kxd0xrzgmNBSOgt5Z/H2vrnCs2dvRrD1cIRupvcE7qDZGhx3FV+S+NPiWD3ZMzt7NBaOilN8suWQqhDbKaNigKhpaHBK1z7CNaQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004563919188.77558174495834; Tue, 9 Jun 2026 04:29:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWuda-0000v6-Fz; Tue, 09 Jun 2026 07:28:54 -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 1wWudB-0007E7-At; Tue, 09 Jun 2026 07:28:29 -0400 Received: from mail-northcentralusazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c105::5] helo=CH5PR02CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWud9-00036I-6W; Tue, 09 Jun 2026 07:28:28 -0400 Received: from MW4PR03CA0134.namprd03.prod.outlook.com (2603:10b6:303:8c::19) by DM4PR12MB6472.namprd12.prod.outlook.com (2603:10b6:8:bc::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Tue, 9 Jun 2026 11:28:19 +0000 Received: from MWH0EPF000A672E.namprd04.prod.outlook.com (2603:10b6:303:8c:cafe::2b) by MW4PR03CA0134.outlook.office365.com (2603:10b6:303:8c::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:19 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672E.mail.protection.outlook.com (10.167.249.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:19 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:00 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:27:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yPEgHUzS5w5AaELVTJiinwFVm7GNGQ9V+kk/3d5hpGnarkHKlrpys3FdrDe65hXUCiB4P6OHNLiP8jOT3srp36OEDAV1WaZVVhupFMNYpRBo2WqEEY0VJd1slVkYz5GZdQJzs76ZPWOaD9nbIt0HWMca7UWYiXcNx7udR0G2yI3gaCBGvnOeRuKwyavM+8PKLOYsa1TeeCvi4wo9BQ03aXsIpNnjWSWRIYvWlZDflcfXkauWwhaAvSI7MmtVpgwzO5fGNfz4+t1Vjq9lQwUx/8WugMGmvqdauQeQSHyOTPy7TfEX+qdYTBpH5kdAC5YpYry4Jg+eXcP1dTVLHf2exQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MsxMyb9VyIvpgdwMWuYM8ziGy838HJaE6BWEjdXwPb0=; b=h20iInvmnfOCiPLJ9JhQxj7zLxT1/ezxuHUx+eui/kY33lJE9xuWuc0X1dfin3TXng+Y0+RQ8eA/6afPqPzS/QwXbFNzCePMW/rvk/cMegi3QEueI09fon2WlP60ZNRxGo/ajLs+dAFchlvWQ59NKshrhgDWV85eb+j+gX/JuQ2kQJ1wuuqMOXgpr6q3DvyJccRwC7XwchQre4zCY9kzlWcsctJ9DlJne4CB5rCfG58A8oy/ynjAxRgwlIWeq1sfvtxuidCFj4vUj1nkL7Anqj5h6pHa5KHO0vqMChaVDexdU8jOk4I4ZM29qhfklmGAgQX9b0CilIZRqnVTZLKsxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MsxMyb9VyIvpgdwMWuYM8ziGy838HJaE6BWEjdXwPb0=; b=dLxPE2VluOjgydMfsJYuahNgLVYXGDEnD9qwLkaQ7xAdmc9UsMoU6vTR5O6cceS6FfFSyb8bC+XVvcOh3YQ/hNBT1HudEGROqK97H726rT5HBxJqs5YfOHEZsVDHX1zd80S31AT9CRqr7y6qMYNlMdIBCzHG6QxNABVAY+Hp9U0jsP4XQ8ojSQZmZRwE/pSLfpZn5Lb2UUfQyMHqa65Sm023yIKZteAyjc25axVR/04jMzpGoJjAbOm5cCj7zyMQ1T4abM+ctsOwDplBNgAwKi3Q807uNa+KUGgAhoD2jBXoXacvVsooK1XM8gLsnBDzb625ZgfFRPdwncQY5BgsVA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 19/31] hw/arm/tegra241-cmdqv: Route allocated VCMDQ Page0 accesses to the mmap'd host VINTF page0 Date: Tue, 9 Jun 2026 12:25:40 +0100 Message-ID: <20260609112552.378999-20-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672E:EE_|DM4PR12MB6472:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ace2da6-572a-4762-73da-08dec61a34fa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|1800799024|376014|82310400026|18002099003|22082099003|56012099006|11063799006|3023799007; X-Microsoft-Antispam-Message-Info: vgeMOnzlgCAZ+7ZYCgds30b7FGF1AZt7aAo7MA/6RtA4KZgMbD9vcTCMpL88pX7zt0aFPTCObALL5Pw5pCwGNSVMskrWpqrZDTr+LlbRud6TAXDT+jST+0x6dXEG4mo3qitNOWJIDMLh+W18w967zRhcHd06BInAzsFJXfd25MSdPAMVoRUIWucDhivC399RRMp2H3nxiWXiFt0gRMSlY8IjjbJAQxz9BOr35rBzPyktOBqI/r/rGIVBF6ws3vD/N7EsdTcNKSQxAOGKCAZRaMkEJPILpkrl9ug0AWpEhIwYucxW7Mv7eJ5v+bJ5eRbfMz10Y7N1g5inxmc1kGliww1Dplol/jPw5RpZ2aMK4BllPlcJxgy8X4C5LYea9BRPs4dJRVFnL2x6c/Bk3Wixjhap+d9fvzhZDX/P/ndkDFSFsEQI0bZzJMBHq2IG53rnh8weZPSWoXdtPmcoYzX0BDKx6G8JSXJPYO34x5CO1JE28XRslNeQt2jsG7olR+TdfinnyTleOeId0D8cfoGZqS8cHrV90hsRnYXIkx43cGfp/BXX8sbsDFEvhWXrVB++XbjIucMFm7Wrb/0DVAOWc/SDCodJ26eYOcHs4Nat8Kk85cFvhoswIPpsKY/uz+mMPK62bK9YM5jv8rEFSNIc9qTxho6CIY6l6VIrFXYpvlvQlONINtxDE+IFpOMrnYPnudoCV/w+wMQtX3WjQkN36wZmejK9VmsZznJWOlBrHf0= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(1800799024)(376014)(82310400026)(18002099003)(22082099003)(56012099006)(11063799006)(3023799007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /lMXAKOjnRz/ltPhz6dxSPBn4bdeX9kIyIl9eGKTrzlm1TYU0e4YFb0YxM1fXAMkf8hg7TAdeVUyY4SzkkiTh5X4lH4BsvxSisZ0HDKubAuWesyhhRBLTSocjEnHbuBQYz3jWza8m34MfJuOcWjcMY35o/RZpXFiUdXGRlWUuT8K7jyzOz8TxNya8r+x6f/8oR35jQKFYkb+2f6shO9VDyXal1Pk5UCc3PzEVqPnhtBvA7Mqux3X0maL1tko2t8SkOSE+FORD6DXuXRyTFWKP99ljVoQMbgwGyW/ydZ4PvoqlO//x/taj1mL3LJPxvRKl3LSCcMks10XV5+z4nbSOd7CA50kUqZf8Zjz8IOvEmUCCIPEyGyb0pK7qmtTv0E2nDqqt6tnn8ZwIOwpKpDw5dNA8FvkNGI3DKtr/GL4dHSEnhXm/0HaSPCjo3VJobLi X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:19.2017 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9ace2da6-572a-4762-73da-08dec61a34fa X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6472 Received-SPF: permerror client-ip=2a01:111:f403:c105::5; envelope-from=skolothumtho@nvidia.com; helo=CH5PR02CU005.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004565796158500 Content-Type: text/plain; charset="utf-8" Introduce tegra241_cmdqv_vintf_lvcmdq_ptr() to route VCMDQ Page 0 register accesses through the mmap'd host VINTF Page 0 backing once a hardware queue has been allocated for the VCMDQ. The two QEMU-trapped Page 0 apertures (direct at 0x10000, VINTF at 0x30000) are hardware aliases of the same underlying registers. A subsequent patch installs the VINTF aperture as a RAM-device into guest MMIO; in this patch both remain QEMU-trapped. The direct VCMDQ aperture stays QEMU-trapped (rather than aliased to the VINTF mmap) so that writes to an unallocated VCMDQ remain well-defined. The CMDQV architecture allows software to program a VCMDQ through the direct aperture without first allocating it to a VINTF; aliasing to the VINTF mmap would route those writes into unallocated logical slots where the hardware silently drops them. A VCMDQ Page 0 access is served from one of two sources: - Cache-backed: no hw_queue is allocated for the VCMDQ (HW_QUEUE_ALLOC has not yet succeeded). Both apertures use QEMU's register cache. - HW-backed: HW_QUEUE_ALLOC has succeeded. Both apertures access the registers directly through the mmap'd host VINTF Page 0. tegra241_cmdqv_sync_vcmdq() copies any cached writes (CONS_INDX, PROD_INDX, CONFIG, GERRORN) into the mmap'd page on the cache-to-HW transition so the guest's earlier register state survives. Freeing a VCMDQ clears the cached Page0 registers. Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.c | 89 +++++++++++++++++++++++++++++++++++++++++ hw/arm/trace-events | 4 +- 2 files changed, 91 insertions(+), 2 deletions(-) diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 8cb39e87c4..63fe0ac681 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -16,6 +16,16 @@ #include "tegra241-cmdqv.h" #include "trace.h" =20 +static void tegra241_cmdqv_reset_vcmdq_cache(Tegra241CMDQV *cmdqv, int ind= ex) +{ + cmdqv->vcmdq_cons_indx[index] =3D 0; + cmdqv->vcmdq_prod_indx[index] =3D 0; + cmdqv->vcmdq_config[index] =3D 0; + cmdqv->vcmdq_status[index] =3D 0; + cmdqv->vcmdq_gerror[index] =3D 0; + cmdqv->vcmdq_gerrorn[index] =3D 0; +} + static void tegra241_cmdqv_free_vcmdq(Tegra241CMDQV *cmdqv, int index) { IOMMUFDViommu *viommu =3D cmdqv->s_accel->viommu; @@ -27,6 +37,7 @@ static void tegra241_cmdqv_free_vcmdq(Tegra241CMDQV *cmdq= v, int index) iommufd_backend_free_id(viommu->iommufd, vcmdq->hw_queue_id); g_free(vcmdq); cmdqv->vcmdq[index] =3D NULL; + tegra241_cmdqv_reset_vcmdq_cache(cmdqv, index); } =20 /* @@ -45,6 +56,47 @@ static bool tegra241_cmdqv_vcmdq_ready_to_alloc(Tegra241= CMDQV *cmdqv, int index) tegra241_cmdqv_enabled(cmdqv) && tegra241_vintf_enabled(cmdqv); } =20 +/* + * Return a pointer into the mmap'd VINTF page0 for the VCMDQ Page 0 + * register at @offset0 in VCMDQ slot @index, or NULL when the VCMDQ + * has no hw_queue allocated or the host VINTF page0 is not mmap'd. + */ +static inline uint32_t *tegra241_cmdqv_vintf_lvcmdq_ptr(Tegra241CMDQV *cmd= qv, + int index, hwaddr offset0) +{ + if (!cmdqv->vcmdq[index] || !cmdqv->vintf_page0) { + return NULL; + } + return (uint32_t *)(cmdqv->vintf_page0 + + (index * CMDQV_VCMDQ_STRIDE) + + (offset0 - CMDQV_VCMDQ_PAGE0_BASE)); +} + +/* + * Flush cached register writes into the mmap'd host VINTF page0 after a + * successful HW_QUEUE_ALLOC, so the guest's earlier writes survive + * the cache-to-hardware transition. + */ +static void tegra241_cmdqv_sync_vcmdq(Tegra241CMDQV *cmdqv, int index) +{ + uint32_t *ptr; + + ptr =3D tegra241_cmdqv_vintf_lvcmdq_ptr(cmdqv, index, A_VCMDQ0_CONS_IN= DX); + if (!ptr) { + return; + } + *ptr =3D cmdqv->vcmdq_cons_indx[index]; + + ptr =3D tegra241_cmdqv_vintf_lvcmdq_ptr(cmdqv, index, A_VCMDQ0_PROD_IN= DX); + *ptr =3D cmdqv->vcmdq_prod_indx[index]; + + ptr =3D tegra241_cmdqv_vintf_lvcmdq_ptr(cmdqv, index, A_VCMDQ0_CONFIG); + *ptr =3D cmdqv->vcmdq_config[index]; + + ptr =3D tegra241_cmdqv_vintf_lvcmdq_ptr(cmdqv, index, A_VCMDQ0_GERRORN= ); + *ptr =3D cmdqv->vcmdq_gerrorn[index]; +} + /* * Allocate a host HW VCMDQ from the current cached BASE / size for @index. * No-op (returns true) until the VCMDQ is ready to be allocated. @@ -85,6 +137,9 @@ static bool tegra241_cmdqv_setup_vcmdq(Tegra241CMDQV *cm= dqv, int index, cmdqv->vcmdq_gerror[index] &=3D ~R_VCMDQ0_GERROR_CMDQ_INIT_ERR_MASK; cmdqv->vcmdq_status[index] |=3D R_VCMDQ0_STATUS_CMDQ_EN_OK_MASK; =20 + /* Push cached writes to HW; freeing resets the cache. */ + tegra241_cmdqv_sync_vcmdq(cmdqv, index); + return true; } =20 @@ -111,13 +166,23 @@ static void tegra241_cmdqv_setup_all_vcmdq(Tegra241CM= DQV *cmdqv, * * The caller normalizes the MMIO offset such that @offset0 always refers * to a VCMDQ0_* register, while @index selects the VCMDQ instance. + * + * If the VCMDQ is allocated and the host VINTF page0 is mmap'd, read + * directly from the host VINTF page0 backing. Otherwise, fall back to + * the cache. */ static uint64_t tegra241_cmdqv_read_vcmdq_page0(Tegra241CMDQV *cmdqv, hwaddr offset0, int index, bool direct) { + uint32_t *ptr =3D tegra241_cmdqv_vintf_lvcmdq_ptr(cmdqv, index, offset= 0); uint64_t val =3D 0; =20 + if (ptr) { + val =3D *ptr; + goto out; + } + switch (offset0) { case A_VCMDQ0_CONS_INDX: val =3D cmdqv->vcmdq_cons_indx[index]; @@ -142,7 +207,9 @@ static uint64_t tegra241_cmdqv_read_vcmdq_page0(Tegra24= 1CMDQV *cmdqv, "%s unhandled read access at 0x%" PRIx64 "\n", __func__, offset0); } +out: trace_tegra241_cmdqv_read_vcmdq_page0(index, direct ? "direct" : "vi", + ptr ? "hw" : "cache", offset0, val); return val; } @@ -218,11 +285,31 @@ static uint64_t tegra241_cmdqv_config_vintf_read(Tegr= a241CMDQV *cmdqv, * * Page 0 registers are all 32-bit; this helper is only called for 4-byte * writes. + * + * If the VCMDQ is allocated and the host VINTF page0 is mmap'd, write + * directly to the VINTF page0 backing. Otherwise, update the cache. */ static void tegra241_cmdqv_write_vcmdq_page0(Tegra241CMDQV *cmdqv, hwaddr offset0, int index, uint32_t value, bool direct) { + uint32_t *ptr =3D tegra241_cmdqv_vintf_lvcmdq_ptr(cmdqv, index, offset= 0); + bool hw =3D false; + + if (ptr) { + switch (offset0) { + case A_VCMDQ0_CONS_INDX: + case A_VCMDQ0_PROD_INDX: + case A_VCMDQ0_CONFIG: + case A_VCMDQ0_GERRORN: + *ptr =3D value; + hw =3D true; + goto out; + default: + break; + } + } + switch (offset0) { case A_VCMDQ0_CONS_INDX: cmdqv->vcmdq_cons_indx[index] =3D value; @@ -253,7 +340,9 @@ static void tegra241_cmdqv_write_vcmdq_page0(Tegra241CM= DQV *cmdqv, "%s unhandled write access at 0x%" PRIx64 "\n", __func__, offset0); } +out: trace_tegra241_cmdqv_write_vcmdq_page0(index, direct ? "direct" : "vi", + hw ? "hw" : "cache", offset0, value); } =20 diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 666967dc5e..a8dcbc82db 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -75,9 +75,9 @@ smmuv3_accel_install_ste(uint32_t vsid, const char * type= , uint32_t hwpt_id) "vS # tegra241-cmdqv tegra241_cmdqv_read_mmio(uint64_t offset, uint64_t val, unsigned size) "of= fset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" tegra241_cmdqv_write_mmio(uint64_t offset, uint64_t val, unsigned size) "o= ffset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" -tegra241_cmdqv_read_vcmdq_page0(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 +tegra241_cmdqv_read_vcmdq_page0(int index, const char *aperture, const cha= r *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x%= "PRIx64" val: 0x%"PRIx64 tegra241_cmdqv_read_vcmdq_page1(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 -tegra241_cmdqv_write_vcmdq_page0(int index, const char *aperture, uint64_t= offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 +tegra241_cmdqv_write_vcmdq_page0(int index, const char *aperture, const ch= ar *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x= %"PRIx64" val: 0x%"PRIx64 tegra241_cmdqv_write_vcmdq_page1(int index, const char *aperture, uint64_t= offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 =20 # strongarm.c --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004597; cv=pass; d=zohomail.com; s=zohoarc; b=eWRiicADrZEbzhYV9jQFsFxw507BI772mDnE4jA5R2SPHhV16+nVW5Yf4YKSkS+oqGu1Z7iFtN7qh+IlkEBqn0z56EjZf5ktJZK05Am3XNSxQvMdROwoSBW/aZf0F9/jkq94kCKOLHy6qP6au26Gb8kgwgOtbaMR4ShH1aMs9Tc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004597; 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=YJaeNCWfThODwzfTWKBVNzNq25C7uJIW6QFidQ6NS+A=; b=Za/AfE5XKG5RABDQDPC/fJUjfunZ7tBN0R8MYLNo/gxzXTMZy8z5cdcTzyH6VnKmFzs+BIA8ZYSrwAMCVpQWXmvG5USPPDWyYZOzQ5U8LJR2y/ST/shFXMZonIKHp5wqo5ZMSS7DhucZA8Hg089If6rIypoK581gWL2gQ0xPcPI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004597046682.071360656898; Tue, 9 Jun 2026 04:29:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudf-0001SY-2h; Tue, 09 Jun 2026 07:28: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 1wWudE-0007Ww-MU; Tue, 09 Jun 2026 07:28:32 -0400 Received: from mail-westus3azlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c107::3] helo=PH0PR06CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudC-00037E-Dl; Tue, 09 Jun 2026 07:28:32 -0400 Received: from SJ0PR05CA0029.namprd05.prod.outlook.com (2603:10b6:a03:33b::34) by DS0PR12MB8526.namprd12.prod.outlook.com (2603:10b6:8:163::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:21 +0000 Received: from MWH0EPF000C6184.namprd02.prod.outlook.com (2603:10b6:a03:33b:cafe::7f) by SJ0PR05CA0029.outlook.office365.com (2603:10b6:a03:33b::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:21 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6184.mail.protection.outlook.com (10.167.249.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:20 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:04 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DP2tuwwKS80H8OQd0AthgSM3BMIRgB7K+iN+NDZAU4X53mh1ru0mKThN/wIPH+zVa2zQ2YCJysBbJrwD7LUTTenFUTQsmNlaFjKyXqxQpL/6OM3RJ4EtQ481azrq9OOBR4qV1Lit3KmI6yW+R+s0k5Oo9vGI7INFLAHzvKS9UOcv+USSZ2yLM2kICb+72NWD3LYqEPSJMOdK0QyUmiCtEQZ1WNZ2x7vAsDiFR+cL9mvzFp4wcUOtHAFQA5I62S55cSnuZSzKkS7e58GjAKgF6BOa42Hq1Jwk9Evht86eSU0UOS/cA/LTLEU59TXBV4ArL9rGSEvfmwUGDed32PaG5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YJaeNCWfThODwzfTWKBVNzNq25C7uJIW6QFidQ6NS+A=; b=MrunRUiMHxsLwo6Axy74gi+vuVVPxuWusBxEY0FMM4dof3vmvTOzkEzzzYa5oocEtcN32Tgs4nr+Uqi4LquR6PIZfsXYHWZUSKTtOyl6h4ssRxELSwYrw9UuKmcqHVVvFheJCT5Vnf9rK7qaL5kCZwRwtzCm6uN0QbR3dD3cWKAuT3j6tW/bs6eckrr4ij2E4pDprHPDHDAL5HuFlfQiINQQ4tqDY7QQJGnX7K17k5wTQiTtuxK+76Pe8M89WxfJBTI99Azgk/AS0KJydOvHqI8x91mFGLMNdtRxy+2edu5/bc6m0NuMSvAiY9u+HAI0J4xGrGBJ5W6FlMWxcs69qg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YJaeNCWfThODwzfTWKBVNzNq25C7uJIW6QFidQ6NS+A=; b=VfCUxwbmuVDv32PWhxqiEJVr5DE+pJ7JpsdkxiIVVG0ids+VMdtCmRm8r4R56snLSJqNCBqbaq+9Efb28MhcqHSS/7xs1UZMSHGraaaMKwQ2qVTx/0cKBndGqtux5hVEV4I0OW+6hKKtm/svYfHLKy5mXT2qal+KiUBH1ef4rGkV+0rm590F9u3aVfhrYzWmh5CflY8i6UEU9Py8mjcWFmqR3af26ki1o2sbbaKpE3FtgYJEZ7U9VdHP6bJrlcl5jDQvYgooDsI2HcVarXxFvni3f+Y89GL046ngW8UPaZSxSNL6Ug9r8+ldtZ1eC6dqKn4mW9jWKRurbA3GFYzV9w== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 20/31] memory: Allow RAM device regions to skip IOMMU mapping Date: Tue, 9 Jun 2026 12:25:41 +0100 Message-ID: <20260609112552.378999-21-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6184:EE_|DS0PR12MB8526:EE_ X-MS-Office365-Filtering-Correlation-Id: 38306dcd-0460-4027-c59b-08dec61a360d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|36860700016|18002099003|22082099003|56012099006|11063799006|5023799004; X-Microsoft-Antispam-Message-Info: zXYbT76fxWX7dKw9VXAO2ME8LCEyBZJoqUh0Izvo6H1bg9dZj3zcGkqUJKyGhqdg9Qpq9TASosfBoLsAZH5hmzqY9aD8rUwtsFNJDKIF7kpxveNCjACReQ5zaSXtfK59lV86wvORRjs1sVOoB/IeG80wzaEv9C7j5uVGcCecabpdtxYV9ZisrmIFzFYAMiSYrGLBSdWMwLlCvvITpITmn4pbncdtkKo1qOBX6FAZh7p5xwQDpExfc6mFLobxRB/mvH+VJ5YyyMkPdkMoonpqT4rLUyee0/H+hNjP0T0lRFKYUAOYtUbgV9pKylbOu3J72Da5ThyyfZQqxe1hL+whG7M0vAFOzFsYhNd/qEatdtkfFe9F2AwGpj9Du6VLx7AD4kpC/cRtf3TC68Hc0BKeQxfOKA2yceS//dBZq7+MMqd+I4CjoMjicsyG1yNEIr4v+lbZLU7L9RRtaXZpCVS02D4fZO8ezn4N3Bn/mRLiAsMloZ2q/3XNqJlYF8sbjVbFYWN/LqwstsnXq+tP5qp7JtrVyIMu5qbnkJc7gccXcoe8z2XzHQbQsct2v+rJSojHpq1szgHoppj1xk7N46KSyuXHR3Ff2/Gf02URykcPQM79bW3iiv+JGsGiysLWLDFuZ7Tn7pFZ+REVBe+ohK45J6BDizq4llNJt+q0G5NgMoEZwA7ALQQba3Y3lKUjaEAPDEXS1g1PzolZ9OXFerRK6D6gzX2UTOgAKazGCP/2Ftw= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(36860700016)(18002099003)(22082099003)(56012099006)(11063799006)(5023799004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0c/NoNO77tFnVLnN8IMNOA1Nk6lqR9GxHntZEj5yMXXvyVIFfnvIfgf7Iy+GpmMKlpQ9hOSPhzsVMC0mQ6lGl+vgUMy0L1niS50v2ron/84EROpJa4JuZtzH0eyxkviu7V9yVGXaKMlNgX96e1lp93MA0Id9adYjcnTVm4PEksWmWOVHgDnuBK1JDOZ/DSYrZs8EO3MpmIVMoMEPTvOWRrFKabvaKSimrbmknDJX3kz9ZjHQHpic1eCeq9YhcLR2HmO6GpHKj3iCUKRP0OX2lvx/NGFJF+jFsY3ERvzlFS06uIdnBWU6WEkuGeoqL8dH5W22rl1BJB0TrflulNo29bz2aWRW0luwARENd8XyKMtCNDzgPhbxDkDtap4jnmSeultL0kv3273BNwPUtNlZiFHcjNdEXYbFyQvyYo4b5MY5GdM3CIUI6XoTRA9rmtXO X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:20.9945 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 38306dcd-0460-4027-c59b-08dec61a360d X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6184.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8526 Received-SPF: permerror client-ip=2a01:111:f403:c107::3; envelope-from=skolothumtho@nvidia.com; helo=PH0PR06CU001.outbound.protection.outlook.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=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 @Nvidia.com) X-ZM-MESSAGEID: 1781004597948158500 Content-Type: text/plain; charset="utf-8" Some RAM device regions created with memory_region_init_ram_device_ptr() are not intended to be P2P DMA targets. The VFIO listener currently treats all RAM device regions as DMA capable and attempts to map them into the IOMMU. For regions without dma-buf backing this fails and prints warnings such as: IOMMU_IOAS_MAP failed: Bad address, PCI BAR? Introduce a MemoryRegion flag (ram_device_skip_iommu_map) to mark RAM device regions that should not be IOMMU mapped, paired with memory_region_skip_iommu_map() / memory_region_set_skip_iommu_map() accessors. When the flag is set, the VFIO listener skips DMA mapping for that region. Reviewed-by: Eric Auger Tested-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/system/memory.h | 21 +++++++++++++++++++++ hw/vfio/listener.c | 6 ++++++ system/memory.c | 10 ++++++++++ hw/vfio/trace-events | 1 + 4 files changed, 38 insertions(+) diff --git a/include/system/memory.h b/include/system/memory.h index 1417132f6d..4560809013 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -864,6 +864,8 @@ struct MemoryRegion { =20 /* For devices designed to perform re-entrant IO into their own IO MRs= */ bool disable_reentrancy_guard; + /* RAM device region that does not require IOMMU mapping for P2P */ + bool ram_device_skip_iommu_map; }; =20 struct IOMMUMemoryRegion { @@ -1743,6 +1745,25 @@ static inline bool memory_region_is_romd(const Memor= yRegion *mr) */ bool memory_region_is_protected(const MemoryRegion *mr); =20 +/** + * memory_region_skip_iommu_map: check whether a memory region is excluded + * from IOMMU mapping + * + * Returns %true if @mr is a RAM device region marked to skip IOMMU mappin= g. + * + * @mr: the memory region being queried + */ +bool memory_region_skip_iommu_map(const MemoryRegion *mr); + +/** + * memory_region_set_skip_iommu_map: mark a RAM device region to skip IOMMU + * mapping + * + * @mr: the memory region being modified + * @skip: %true to skip IOMMU mapping, %false to allow it + */ +void memory_region_set_skip_iommu_map(MemoryRegion *mr, bool skip); + /** * memory_region_has_guest_memfd: check whether a memory region has guest_= memfd * associated diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 0b72a2cf5e..14cca678ae 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -610,6 +610,12 @@ void vfio_container_region_add(VFIOContainer *bcontain= er, } } =20 + if (memory_region_skip_iommu_map(section->mr)) { + trace_vfio_listener_region_skip_dma_map(memory_region_name(section= ->mr), + iova, int128_get64(llsize)= ); + return; + } + ret =3D vfio_container_dma_map(bcontainer, iova, int128_get64(llsize), vaddr, section->readonly, section->mr); if (ret) { diff --git a/system/memory.c b/system/memory.c index 739ba11da6..48245fd01b 100644 --- a/system/memory.c +++ b/system/memory.c @@ -1814,6 +1814,16 @@ bool memory_region_is_protected(const MemoryRegion *= mr) return mr->ram && (mr->ram_block->flags & RAM_PROTECTED); } =20 +bool memory_region_skip_iommu_map(const MemoryRegion *mr) +{ + return memory_region_is_ram_device(mr) && mr->ram_device_skip_iommu_ma= p; +} + +void memory_region_set_skip_iommu_map(MemoryRegion *mr, bool skip) +{ + mr->ram_device_skip_iommu_map =3D skip; +} + bool memory_region_has_guest_memfd(const MemoryRegion *mr) { return mr->ram_block && mr->ram_block->guest_memfd >=3D 0; diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 2049159015..70c5aa1bcc 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -100,6 +100,7 @@ vfio_listener_region_del_iommu(const char *name) "regio= n_del [iommu] %s" vfio_listener_region_add_ram(uint64_t iova_start, uint64_t iova_end, void = *vaddr) "region_add [ram] 0x%"PRIx64" - 0x%"PRIx64" [%p]" vfio_known_safe_misalignment(const char *name, uint64_t iova, uint64_t off= set_within_region, uintptr_t page_size) "Region \"%s\" iova=3D0x%"PRIx64" o= ffset_within_region=3D0x%"PRIx64" qemu_real_host_page_size=3D0x%"PRIxPTR vfio_listener_region_add_no_dma_map(const char *name, uint64_t iova, uint6= 4_t size, uint64_t page_size) "Region \"%s\" 0x%"PRIx64" size=3D0x%"PRIx64"= is not aligned to 0x%"PRIx64" and cannot be mapped for DMA" +vfio_listener_region_skip_dma_map(const char *name, uint64_t iova, uint64_= t size) "Region \"%s\" 0x%"PRIx64" size=3D0x%"PRIx64" marked to skip IOMMU = mapping" vfio_listener_region_del(uint64_t start, uint64_t end) "region_del 0x%"PRI= x64" - 0x%"PRIx64 vfio_device_dirty_tracking_update(uint64_t start, uint64_t end, uint64_t m= in, uint64_t max) "section 0x%"PRIx64" - 0x%"PRIx64" -> update [0x%"PRIx64"= - 0x%"PRIx64"]" vfio_device_dirty_tracking_start(int nr_ranges, uint64_t min32, uint64_t m= ax32, uint64_t min64, uint64_t max64, uint64_t minpci, uint64_t maxpci) "nr= _ranges %d 32:[0x%"PRIx64" - 0x%"PRIx64"], 64:[0x%"PRIx64" - 0x%"PRIx64"], = pci64:[0x%"PRIx64" - 0x%"PRIx64"]" --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004555; cv=pass; d=zohomail.com; s=zohoarc; b=VHk9PxwuDJbEteNedPS0B6CxXWn+xzQVBZQBGTaY6TIPOBm9XXUAOzOHvnldVXnnhpiTz9vMXkI8mdbAN2dLkD3/BmTh6juDL4P2ODIqRG/w3IApwe+G3NfcSZx+MPS3vxol2ayosTU11qm38kdHjQsteqWnABTv1DbC5NheF1c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004555; 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=iFfzrXmFLrA5zY1lputO5Qf5dE1947TUGbkRzT0tHss=; b=ZaJAKOUCq7ifBG39jyBbIeF67iUDJxd9igI9GfjLL4nH/jgqsglwMpRc1H5PaQFojCHcBK3xOGSqAQzmrRcKE/bUoqlP5Rj1DmDuuU6FtV+lkK6lEd03/NsbUJjkY3zVDp6FDs+GcUUMYya5aSbzyYZ1GVPAfaRfcG1dWwHaX0E= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004555440516.950674484362; Tue, 9 Jun 2026 04:29:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudb-0001Bx-TU; Tue, 09 Jun 2026 07:28:56 -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 1wWudH-0007qG-02; Tue, 09 Jun 2026 07:28:35 -0400 Received: from mail-northcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c105::7] helo=CH4PR04CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudF-0003AM-2W; Tue, 09 Jun 2026 07:28:34 -0400 Received: from BY1P220CA0039.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:59e::7) by SJ2PR12MB8134.namprd12.prod.outlook.com (2603:10b6:a03:4fa::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:26 +0000 Received: from MWH0EPF000A6734.namprd04.prod.outlook.com (2603:10b6:a03:59e:cafe::3a) by BY1P220CA0039.outlook.office365.com (2603:10b6:a03:59e::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:26 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A6734.mail.protection.outlook.com (10.167.249.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:25 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:08 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:04 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AU6xGVoEZaXgLSiHi+5Tb5lt5hxq+mprZ9JL7nD01FgYgxSEOxSlxq3lIA8YPWOCxPfc7+tndYHXHy5Zqk8Vt1S8vhDZlDLWbGwK+3m0c+MpaL9h61fAVquCvg4PAL72F0ynIWAT1+52us4GG+UhAwId/Rc8YxnNd50m7ByOVV39e7BO3/rs499UK7G2+VqzFzsT8g4nX+cXBfhifMLnTiTCoGyy75HnUL2mGTp3IrOPFi6PXeloy/NlcGQgBNEqNfTekSM99fSYe4m1xRSSVLeUPxH1q2OvHyUlTKM/QYJrYvMcv2K15z7vkdVA0Ye8f5oTT2Wq2ZIAsh+FyJebww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iFfzrXmFLrA5zY1lputO5Qf5dE1947TUGbkRzT0tHss=; b=nz6wRuCsHZr2NX3VhUHdVzq8hkO0UX8rssPAtG5m3CuRmBRk3F1tMGizm8srBtAyNVXiBrjY6lxrL+17YLAFPl2BEgGCLdllJ6fS1Q9ai+E+X42dRs5dZJS43jWohHGDPq/HWpzvj8zeShNiqJrQyhsuD71BeIWOCOsNKVc7Rsl0tfTYzm2aF5Eu9MtoHNy1pElCRGz0GcqCTWR2kecDW5RIfm/E3Q6djO2lLbW4TpZYHlSlezTK+RPaYVYoMvkNJv5K8cy0okex6zonA7nApjXN/i+/N3aGQe4KpA4uRvs67JUPRvNLlwNpMYICKhv9CT0349+HYchCaOowdnBFAw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iFfzrXmFLrA5zY1lputO5Qf5dE1947TUGbkRzT0tHss=; b=rkugKyY2Mo53dRaQBWc4MYOU/NoKDbKrvHEO1sqYawf+mUl+UZ+KenbSXbXYz8SqLFEmcqoKSThhav99N1DtHScMXHYQZW0UgCwsBUA/WOV+trAuG+GAOcH1Ts+FsqtcqBYj8B5igM7/DFbdiqtawUdteMX/yaikTZDg9gVk/ug02ghoICRWEn8F95XLjcF4zrNjCs4xr+NiykukjQyO9xsmfL5CFETi++sQb4Y8z7Q5XGXQnbAQHKzC2iQhLfD5PFhwFWXd0pjEyY/mkC9uOljhDHXJPhBURxJ3AQkpu2sCCfCaZ0NP1xpssHF1iNZiSc9uuawRkvBlDtE3eKgO8A== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 21/31] hw/arm/tegra241-cmdqv: Use mmap'd host VINTF page0 for virtual VINTF page0 Date: Tue, 9 Jun 2026 12:25:42 +0100 Message-ID: <20260609112552.378999-22-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A6734:EE_|SJ2PR12MB8134:EE_ X-MS-Office365-Filtering-Correlation-Id: 67ceaa76-49cb-44fe-b121-08dec61a38c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|376014|36860700016|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: bjCV9ISvOc/36YYKiBJpJV+xMrTQivN4nphqM7rMWGf+SXGC0GB9Q5KVknOlIck40HZlCmclJoeaRgPJmlxKivEIayv4Vc5H7/yZ2Q+LD1xttfNX63ZEHUQ4Ys6cmbvWM90MvyE6zPMer0JgkqDefV/koEKmE9qUUCol9avGO6MeWq5uui223fwSjrGD/isq6p6NiFN3DeV5/5H3NMAKfEwAHAehmYfA1I9TR9mt953ISto9FCakQ7VWeiImvT2Lks6AFlu9tcdz3t8S2dIdP4AQEGMN3ogqiNDB0hcSo4tTXJqahWaEBYCRRCz2ryqcyNlJBl/rPNqmT7+JVGlpZwhBX7YyVmYjdrXjubA4aiW6GmsRiSt8YqWVIJLg7iwjDgfhNtqaitbDsGK8QcuukVx3qJJMtxbbs931kdoIrOy2ii7Ua5s9aZ+pjT/OTEzVNhtz8jx9DVYCvLARzDFwhr1KskilpPerB/lpcKOSIM9bkCRHzeNQsGwW8oSpKxJh3840EZBqTRPHO8trmx4E/gyq/aQAR+OGK0gDtEhTqFMd+BQX5w1EkXFb5sQrm+SPDwQLc/W7rwHgSsjq1Uorxz7hUQqEVFO9mQWcKKS1yzqGdoRFXewgskmiJx7W8DZ3Cmwd9a0gWKxSIi13porx4LAb6SBFHCDJmeYbyhiM0d8vOT6Z/V0CyvmLonILW5mr2T7SIJnwE1Cku+UGZThybjjd0BtTAObWp5LxtE60br8= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(376014)(36860700016)(18002099003)(22082099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HePLB46xIyyQ42VXoIVc6m9sp1j+WBsOuLqjtP3AjOxkr9MFsbqp/w0zMDhASnEcysu3f7BorTz8F1DkpFDLMVhSLoJDcupQcPzobCY/wT+xyDQZwowwsGlCjr6MZSM74dAtyoq4uaICwwGYI5tkcWoLGshwfDSjgwkDYGQQErKHzwTfsBJOSTXpLeEGUQmqY06sX89ep6Tz1au14Hnw7J3zFbc1OU/+eUYe2v9quMrqdRalB9qIaLNGikKtGBMrcCaFd249D5KQQkWSg8/xyj7766yI8JeMAZT2xq4kt/lZP8SJNbTGSffhERgMjBFxWK2qNMAkG9AN03Fzj7K5mMjpdC/jFV2fuUn2O3RDwawT7KPdqd1MJQgIygX4Ssvf5J9nvw1j8i9rcGQsRbWzBFd5OYvJ22lg8e+3wnFnzr5jpgwE7pEc+KeDUY2/Itd+ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:25.6002 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 67ceaa76-49cb-44fe-b121-08dec61a38c1 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A6734.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8134 Received-SPF: permerror client-ip=2a01:111:f403:c105::7; envelope-from=skolothumtho@nvidia.com; helo=CH4PR04CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004555683158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Install the mmap'd host VINTF page0 as a RAM-device MemoryRegion backing the guest's virtual VINTF Page 0 aperture (guest MMIO offset 0x30000) when VINTF is enabled, and remove it on VINTF disable or reset. This eliminates QEMU trapping for hot-path CONS/PROD index updates via that aperture. After this patch, the two VCMDQ Page 0 apertures use different access paths: the direct aperture (0x10000) remains QEMU-trapped, while the VINTF aperture (0x30000) is a guest-direct RAM mapping. The direct aperture is intentionally kept trapped (not aliased to the host VINTF mmap) so that writes to an unallocated VCMDQ remain well-defined. The CMDQV architecture allows software to program a VCMDQ through the direct aperture without first allocating it to a VINTF; aliasing would route those writes to unallocated logical slots in the VINTF page, where the hardware silently drops them. Signed-off-by: Nicolin Chen Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 1 + hw/arm/tegra241-cmdqv.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index 84499b840d..01cd6af97d 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -49,6 +49,7 @@ typedef struct Tegra241CMDQV { IOMMUFDVeventq *veventq; IOMMUFDHWqueue *vcmdq[TEGRA241_CMDQV_MAX_CMDQ]; void *vintf_page0; + MemoryRegion *mr_vintf_page0; =20 /* CMDQ-V Config page register cache */ uint32_t config; diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 63fe0ac681..7264b4bfa9 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -26,6 +26,40 @@ static void tegra241_cmdqv_reset_vcmdq_cache(Tegra241CMD= QV *cmdqv, int index) cmdqv->vcmdq_gerrorn[index] =3D 0; } =20 +static void tegra241_cmdqv_guest_unmap_vintf_page0(Tegra241CMDQV *cmdqv) +{ + if (!cmdqv->mr_vintf_page0) { + return; + } + + memory_region_del_subregion(&cmdqv->mmio_cmdqv, cmdqv->mr_vintf_page0); + object_unparent(OBJECT(cmdqv->mr_vintf_page0)); + g_free(cmdqv->mr_vintf_page0); + cmdqv->mr_vintf_page0 =3D NULL; +} + +static void tegra241_cmdqv_guest_map_vintf_page0(Tegra241CMDQV *cmdqv) +{ + char *name; + + if (cmdqv->mr_vintf_page0) { + return; + } + + name =3D g_strdup_printf("%s vintf-page0", + memory_region_name(&cmdqv->mmio_cmdqv)); + cmdqv->mr_vintf_page0 =3D g_malloc0(sizeof(*cmdqv->mr_vintf_page0)); + memory_region_init_ram_device_ptr(cmdqv->mr_vintf_page0, + memory_region_owner(&cmdqv->mmio_cmd= qv), + name, VINTF_PAGE_SIZE, + cmdqv->vintf_page0); + memory_region_set_skip_iommu_map(cmdqv->mr_vintf_page0, true); + memory_region_add_subregion_overlap(&cmdqv->mmio_cmdqv, + CMDQV_VINTF_PAGE0_BASE, + cmdqv->mr_vintf_page0, 1); + g_free(name); +} + static void tegra241_cmdqv_free_vcmdq(Tegra241CMDQV *cmdqv, int index) { IOMMUFDViommu *viommu =3D cmdqv->s_accel->viommu; @@ -430,7 +464,9 @@ static void tegra241_cmdqv_config_vintf_write(Tegra241C= MDQV *cmdqv, * enabled need their hw_queue allocated now. */ tegra241_cmdqv_setup_all_vcmdq(cmdqv, errp); + tegra241_cmdqv_guest_map_vintf_page0(cmdqv); } else { + tegra241_cmdqv_guest_unmap_vintf_page0(cmdqv); tegra241_cmdqv_free_all_vcmdq(cmdqv); cmdqv->vintf_status &=3D ~R_VINTF0_STATUS_ENABLE_OK_MASK; } @@ -772,6 +808,7 @@ static void tegra241_cmdqv_reset(SMMUv3State *s) return; } =20 + tegra241_cmdqv_guest_unmap_vintf_page0(cmdqv); tegra241_cmdqv_free_all_vcmdq(cmdqv); } =20 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004716; cv=pass; d=zohomail.com; s=zohoarc; b=hvWCX6tZvMK2EkdfDF9aFdNwGSQC9xmUdWKFHeLIJtroaFknZmjtLpt0IVGsrvcBPvvonlrJqUgMLDN9xP4GhJ2Y9Sm7oNn40BR6J6v8Kqte5c0kwkZhL9tELc3oA82ozUdgV1w+nIO3JN0GmLPCtbUztk7j3iQ/YcqQ/FKwMJU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004716; 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=v4Ku95of3RBe0bd+zXwmiemIgzFLvGCMocDpIu1FCUQ=; b=nlpMVtUIdLxhaCCvQqITIXUJQy0hOeOubgWqFNKus5hFXr6o+zbW9YDRc7h8TbkeOp8IJ5jP9mZynTqvVUlhJsYww0d1AfqxNd216/6mTSg55cAgV7nu9X9Ds9YatQUUPCpmeeUX3Kpp65CdwZZcS+QVcIoGHiK3gkiG8HjlECQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004716910556.6275335501981; Tue, 9 Jun 2026 04:31:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudj-0001vw-Pp; Tue, 09 Jun 2026 07:29: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 1wWudP-0008UL-QB; Tue, 09 Jun 2026 07:28:43 -0400 Received: from mail-westus3azlp170100009.outbound.protection.outlook.com ([2a01:111:f403:c107::9] helo=PH7PR06CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudN-0003LI-Tb; Tue, 09 Jun 2026 07:28:43 -0400 Received: from BY1P220CA0026.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:5c3::17) by SN7PR12MB6863.namprd12.prod.outlook.com (2603:10b6:806:264::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:33 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:5c3:cafe::95) by BY1P220CA0026.outlook.office365.com (2603:10b6:a03:5c3::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.11 via Frontend Transport; Tue, 9 Jun 2026 11:28:32 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:32 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:12 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r1kVAE/xjo1NPy3zjsfafs9CXTTl0zqgkCUGVowZoZO9PiIFYpWP4OWu/FdtSvwlCi9RgVTGvHHftJOtWrIyIn6athqIjLFLx6x/1YCYsw0V3QkBmEmUfSRiwHFqkdyGOsB2AvLHBokLEwddWxupgnhU4VPBXBoFLv5kHiVZIIxFUik+RBbxwg0ENSf3thDSQBXX1NMs0eDP4E6x9oT6HqzW+Rw7Ss8aIM+J74DJ8dM6HcHhesXCUBdfN2cOujXBA/NnGY95NaeO34zjZR0hnuwQNs2S12VTVe+hSM2o0Bfyvx+d1wXlof9e+RxHm2TxwPOCPPOE8wcpS8IwjtAIQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=v4Ku95of3RBe0bd+zXwmiemIgzFLvGCMocDpIu1FCUQ=; b=Y2zZGQrKn2RRZZOOIxOItAiKjKHoWYwv+yE7A3jCFHavcKbi/F623O9codoQ762/olo3UugArwnrVf/svLMT/h7VgA2xjJA6eQAQ+TMrsU+r4+YFdDVYQXCtS80plfxE3FuxxqqyzFvuY+G0VzHhNnOfQKg9mTn548tx4dq7WDq7g61CeiVCxlmm7Up14vgTZciTRjqyC4aXkuNnep6ZllChQgtd8x3R8qYOEl7yo4awUzKQavhGMkHAjf7J956MWRTiN2Wdd/pJ7ls8a6LpLiCxZdYBuqclrlgorHobeezgFaYae3R25scjICFD+qPsDiansVl22/SmaDdyOIEgnA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v4Ku95of3RBe0bd+zXwmiemIgzFLvGCMocDpIu1FCUQ=; b=YFyrfLCmOkvOfyTRwUlTENDiKDJvr/N71oQP3RcfhxBX72HmUx6YNjuCz4YWESaA7aYtX/YeqJqMXfAg2Td3Z2rKkYqWzSbeP/IaEHyKEX+gPFyXHb9mZUD7gkdt0Wnfti4F/Kqeql5fX1dTe2jlehk4UkLWAs4UBZzo4D+1CWFRxmgp82Y2BGd2Z4yLEdoPyTy4HXZw98CnzhU18CC9yiXh4pwWeObpiVjnA8r10iFqJCDATosytvfkwZUsux6lSi4tkJqDb9Cu2DPUGYSPX0DpFnXhAT9rzNeIrOuXpQ/3IFTr/v40vGAETNWD+Sm/0Qw8u+qlSLF8HwKfJuQs5Q== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 22/31] hw/arm/smmuv3-accel: Introduce common helper for veventq read Date: Tue, 9 Jun 2026 12:25:43 +0100 Message-ID: <20260609112552.378999-23-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|SN7PR12MB6863:EE_ X-MS-Office365-Filtering-Correlation-Id: 56b1d811-3c42-4a0f-18a1-08dec61a3cf4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|82310400026|36860700016|6133799003|22082099003|18002099003|3023799007|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: 2q3A7+9imoZrCMS7Ej+bDyYxpifzyvCGg6RV9zHQj8LcUghNJ5gwk8ACjfji8SeHgDeObw8TX0EkWMUE4uclOS88sQUpNtnDkmOZzEanc525YKkH9zRX86JqkQiNYgii4NWAeY8K50eX6p+OuXTtBv3r2fdJkLBVXRJIOdUif8qriIyPK/QL2g0qk3rzTqYy4P+IMNi1KLEZJG6ZYiG4AZL0sQqhhIayXiHLChc9GXQxEkHuHhfPccj632R7qwGMz+kVwOH4SZ7E6AgzacQTyXwcIP//KjTDPmzuReUuNfli1e6iRSI7nbWcR2KaQAqez2gFIPj+Q57mbUepjlQClI6piDKs34bROiX8BCkhrSnMjHAOuG9/TNZci+jq0vOYXtbaVHdYCQ/FptavAp1lQwX9DsgCilUc1gTz1Lqb4pkZWoT2Pm3oJbtN6wXDTagpHhGEplx9947GtCHEqE6WlnQW2QWfZZoU03NS9gs1Igw+8qr8XWjawdUpU4as0JY0XyJztnr+JJ6nGl1q7KFAF94CQ4vPwno4YsPwPuAW96rO8RGIZMAbQ7gEar9xmoXymhiicOdubTLpgpVUd5f85kMbUR8GFjxaVVo4ttv8EJeZHJhdUHmMwqIwiBJgVfrfhsUejmarM1qxZKQazH+CCDEeUNPDfZskO0oCnorTM7aCj2UaIL+uKQSze6WJ6fOYIq5XqxHQsC5jCXotuMc7OCijh+CRMiB1qgPcjUr7Arc= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(82310400026)(36860700016)(6133799003)(22082099003)(18002099003)(3023799007)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: rUHQFGxQPAA5+fhSzj0p33/J+4Ik0lYauhq3TFzerqR9APEuIdGn90+LjLLAf4ZhlK5dde0eYwd8Q8MFR6BUBNjpJHbm8z0nZI8teAijEPp0dHzEJgASXmIJhPy239HQPMnb/lza5dLddpqoTXxdg6z4MGS2KxlME3SnsHBUfknLMgmUP5BCbC9MSSsy6mdfH+Ha05HNCElr08QPHB70fDAb0HpxTVILR4uhQqO7cxzgP9/WAgXp5zHQvb7xA0ye6mfNwu9GN4zgo7mQBeQTFL3rVF7lzatqd6q/P2Gbf23dpeuy4hJaWkViUyiJV2ZFwtX1bYdryK7j2EqqYKdHtHBIEuRbf4OlkVGPNbJO4nI8THMDZIhcwspli9UZFPBCogwYvf7vMJvf8HIyZi2Nmaf5u5lU14a65V0F3GqGJr8TxkRiwM0kiJRSU+E1jCnb X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:32.5776 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 56b1d811-3c42-4a0f-18a1-08dec61a3cf4 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB6863 Received-SPF: permerror client-ip=2a01:111:f403:c107::9; envelope-from=skolothumtho@nvidia.com; helo=PH7PR06CU001.outbound.protection.outlook.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_NONE=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 @Nvidia.com) X-ZM-MESSAGEID: 1781004718829158500 Content-Type: text/plain; charset="utf-8" Move the vEVENTQ read and validation logic into a common helper smmuv3_accel_event_read_validate(). The helper performs the read(), checks for overflow and short reads, validates the sequence number, and updates the sequence state. This helper can be reused for Tegra241 CMDQV vEVENTQ support in a subsequent patch. Error handling is slightly adjusted: instead of reporting errors directly in the read handler, the helper now returns errors via Error **. Sequence gaps are reported as warnings. Reviewed-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/smmuv3-accel.h | 2 ++ hw/arm/smmuv3-accel-stubs.c | 7 ++++ hw/arm/smmuv3-accel.c | 67 ++++++++++++++++++++++--------------- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h index e0bbec8581..8d0f636338 100644 --- a/hw/arm/smmuv3-accel.h +++ b/hw/arm/smmuv3-accel.h @@ -87,6 +87,8 @@ bool smmuv3_accel_issue_inv_cmd(SMMUv3State *s, void *cmd= , SMMUDevice *sdev, Error **errp); void smmuv3_accel_idr_override(SMMUv3State *s); bool smmuv3_accel_alloc_veventq(SMMUv3State *s, Error **errp); +bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t ty= pe, + void *buf, size_t size, Error **errp= ); void smmuv3_accel_reset(SMMUv3State *s); =20 #endif /* HW_ARM_SMMUV3_ACCEL_H */ diff --git a/hw/arm/smmuv3-accel-stubs.c b/hw/arm/smmuv3-accel-stubs.c index 70cef66966..9e6c44a282 100644 --- a/hw/arm/smmuv3-accel-stubs.c +++ b/hw/arm/smmuv3-accel-stubs.c @@ -47,6 +47,13 @@ bool smmuv3_accel_alloc_veventq(SMMUv3State *s, Error **= errp) return true; } =20 +bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t ty= pe, + void *buf, size_t size, Error **errp) +{ + return true; +} + + void smmuv3_accel_reset(SMMUv3State *s) { } diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 3ceca56a67..c1c2a67c97 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -440,47 +440,60 @@ bool smmuv3_accel_issue_inv_cmd(SMMUv3State *bs, void= *cmd, SMMUDevice *sdev, sizeof(Cmd), &entry_num, cmd, errp); } =20 -static void smmuv3_accel_event_read(void *opaque) +bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t ty= pe, + void *buf, size_t size, Error **errp) { - SMMUv3State *s =3D opaque; - IOMMUFDVeventq *veventq =3D s->s_accel->veventq; - struct { - struct iommufd_vevent_header hdr; - struct iommu_vevent_arm_smmuv3 vevent; - } buf; - enum iommu_veventq_type type =3D IOMMU_VEVENTQ_TYPE_ARM_SMMUV3; - uint32_t id =3D veventq->veventq_id; uint32_t last_seq =3D veventq->last_event_seq; + uint32_t id =3D veventq->veventq_id; + struct iommufd_vevent_header *hdr; ssize_t bytes; =20 - bytes =3D read(veventq->veventq_fd, &buf, sizeof(buf)); + bytes =3D read(veventq->veventq_fd, buf, size); if (bytes <=3D 0) { if (errno =3D=3D EAGAIN || errno =3D=3D EINTR) { - return; + return true; } - error_report_once("vEVENTQ(type %u id %u): read failed (%m)", type= , id); - return; + error_setg(errp, "vEVENTQ(type %u id %u): read failed (%m)", type,= id); + return false; } - - if (bytes =3D=3D sizeof(buf.hdr) && - (buf.hdr.flags & IOMMU_VEVENTQ_FLAG_LOST_EVENTS)) { - error_report_once("vEVENTQ(type %u id %u): overflowed", type, id); + hdr =3D (struct iommufd_vevent_header *)buf; + if (bytes =3D=3D sizeof(*hdr) && + (hdr->flags & IOMMU_VEVENTQ_FLAG_LOST_EVENTS)) { + error_setg(errp, "vEVENTQ(type %u id %u): overflowed", type, id); veventq->event_start =3D false; - return; + return false; } - if (bytes < sizeof(buf)) { - error_report_once("vEVENTQ(type %u id %u): short read(%zd/%zd byte= s)", - type, id, bytes, sizeof(buf)); - return; + if (bytes < size) { + error_setg(errp, "vEVENTQ(type %u id %u): short read(%zd/%zd bytes= )", + type, id, bytes, size); + return false; } - /* Check sequence in hdr for lost events if any */ - if (veventq->event_start && (buf.hdr.sequence - last_seq !=3D 1)) { - error_report_once("vEVENTQ(type %u id %u): lost %u event(s)", - type, id, buf.hdr.sequence - last_seq - 1); + if (veventq->event_start && (hdr->sequence - last_seq !=3D 1)) { + warn_report("vEVENTQ(type %u id %u): lost %u event(s)", + type, id, hdr->sequence - last_seq - 1); } - veventq->last_event_seq =3D buf.hdr.sequence; + veventq->last_event_seq =3D hdr->sequence; veventq->event_start =3D true; + return true; +} + +static void smmuv3_accel_event_read(void *opaque) +{ + SMMUv3State *s =3D opaque; + IOMMUFDVeventq *veventq =3D s->s_accel->veventq; + struct { + struct iommufd_vevent_header hdr; + struct iommu_vevent_arm_smmuv3 vevent; + } buf; + Error *local_err =3D NULL; + + if (!smmuv3_accel_event_read_validate(veventq, + IOMMU_VEVENTQ_TYPE_ARM_SMMUV3, &= buf, + sizeof(buf), &local_err)) { + warn_report_err_once(local_err); + return; + } smmuv3_propagate_event(s, (Evt *)&buf.vevent); } =20 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004684; cv=pass; d=zohomail.com; s=zohoarc; b=WqhBrIkjaYdFtD397VINvjazVPfiJGHfmeP0aMXyJk7zrppUs7QT+sJapdAFKdJ0ANkzcnd0n6MJQfOamoN0CD3IstUNR/X5XdyrDaytgqMuoxOPtKLTxS4H4GVCjC6rmL0CSrQEfht8RfqkML02LtHpqc+4RD1+Vhnf8PtNLj4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004684; 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=LcujV4QVm67fxL6GgXbfiiDX4+9ZytIVT5IQyoKybBo=; b=Mih80c0vYfhn+cvmLApAeDy4gPQhaux94MdMqFE7UCJVMnEFI8F5+E+QeckIe/CfT8SComW0ejHm+ULsMgaWAgwAumbioAlENK0XRCvNWW1nTrft+NK6imxdIPsVsqZYCuyXsr1Hrbjau7MmABd6h7zMHMa8/p4aXMrthzSidiU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004684539934.5388960477168; Tue, 9 Jun 2026 04:31:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudh-0001gI-9J; Tue, 09 Jun 2026 07:29: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 1wWudP-0008TJ-Hx; Tue, 09 Jun 2026 07:28:43 -0400 Received: from mail-centralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c111::5] helo=DM1PR04CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudN-0003MC-OE; Tue, 09 Jun 2026 07:28:43 -0400 Received: from BY1P220CA0018.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:5c3::8) by LV0PR12MB999069.namprd12.prod.outlook.com (2603:10b6:408:32a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:36 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:5c3:cafe::a6) by BY1P220CA0018.outlook.office365.com (2603:10b6:a03:5c3::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:36 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:36 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:16 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:13 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mHtOMgRJ1i/L0KYREQGseFdpmaAm1rK6LhJk2y7Hkxkb64PuTVFEf3ewtN4W/zZ2cTgIH0NvYpGiHc9wenZfAkfqXAEE702r8xvPtk2KoQHL/Adn7Jen3koAweGRUbg1A7VujRXJOrfQTbLNuVdBFqKZpzXzGLYsReyRWfOyAGEnVYosrWp+KfXADEjrfS5Rw8+5DtizG3KOcuJupetlrYSyToJ0hywxqmKQOdebqGHDyS/tQvJitaMIW7P8wpUsANHA1j27zQpehRZSL3VxKOMenESjGD25VeuQElICPC+mEMXqM5Y1y6B4zVzCYCp2lISN1Ld63wQ49JlziI/4wA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LcujV4QVm67fxL6GgXbfiiDX4+9ZytIVT5IQyoKybBo=; b=VJuRqL4kG7r8c1GZyoJeVZQu5c8mFeSmhzpPuIgqu8JIttzkf2LJA7FUlQa9UJjlhrAmoHqknjG0apMx3d+eBjLVso86Ag3T8DxWlBuQcx8MD66lTY5/ULdGnDOEmeLQ8LhU+aXDz0yldjqT6YQniLicjSmfQgYnod/f3il5o2J7txeKHtqZ/0u1oPK+cDPEIrPHXQUvXXL7xxTjmnNPn1An0e+Xstah1k2DTHOx2Gwhxubml1zILzhqL+BXARV5vsAJp6w2/0XK0FBiZb9BW8EGFr7Gd4S+2jOiW947ivrY03r7DOj4gbV9Am8rky3Qfd+2J9V15wPjvyX+9/2Rsw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LcujV4QVm67fxL6GgXbfiiDX4+9ZytIVT5IQyoKybBo=; b=cdRyw6xsoJQ2y9ISAHSpFPxCzQuNh0R511JYottbovP7NuaE2I0O1HBxc6jUI10Mpk2sYhRpe5lcYGn5xR9d24fbDCdhIlPNhOJJZStKEAdUuID7jcTcMi7zIllwaSfwK+jMegyX/+UjIUeSdGuWS1nO5x2Rd0WL8W0frHTeemypAnpqtNMhclQwZvS7FQqqS4FX9RwVZVWC0Sl1ecW6dVKtFXDM0KNmYwaAvJAWlYN5P9hPcS87xDnpLxHu1w87mMVR+QwGPFiaQL65KP2Bfsqd+9q7g5P4scwH8HjQA1AnTbSBXFgLLWo2sF7WHE8sb6lieRPNjac9gD70Uc4FoA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 23/31] hw/arm/tegra241-cmdqv: Read and propagate Tegra241 CMDQV errors Date: Tue, 9 Jun 2026 12:25:44 +0100 Message-ID: <20260609112552.378999-24-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|LV0PR12MB999069:EE_ X-MS-Office365-Filtering-Correlation-Id: eeae847a-dd98-4a0e-9598-08dec61a3f08 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|1800799024|376014|6133799003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: uXG00VhN/YgNPhbAEefMwx26jBbJomDUQR2m/NZEQNrbGvRJlkIxg5hV+jocyPK2lJMkiIpk66PLxXEzvl7q+4t/si9xG/SEKehMs3RyDZ6eNPusfvd/eQme3vha4z3dNjNaDJb+S/OXw4yZKMyR0H6yA9emgorCt0/fRoI3YFXbKjPb6G13njx/4pqr4KKc+SMzCuAu9b2q2NLCih9u+5saynEDfxmcHo4vNPTIUzA+V5nxxKx0eEgR9jqk0L6Anfbf+RreHV5yR3CUojdpCXLnfvAojkqJq5sj485scQMFsCPWw6XMFgm/0bG2IFQp/wlclNHs6M1ZDKlJljmXk3F7VBr6h+0Tp6pymuvG+61+4yVEspz9tFScTz/ZIJta1C1Vxj8Xj/RUpshSeALL69WU4Esx1c9hPncmYK6TL3dNthPZHxE2ApVY79mW04wnIfbNdFyGIhdEHOJGLSl2QPDAQPdvVlysQJFcW+LmNI3mLgvYv68yEfq03O8tQZQJoVTajGfiZ3j3WoqCMQS0m0tmzMh5xsB6Fkx2zZj4HM35KNP9+CB9uN8X0ZlJCWpL6++dafh9NNg73CkCncGWqdXCgt/WGkFb2yJC7NLsncQeInTBnjKJp0Zb2kySFdzo/drpbfQo6/0k9zD5G1Rl7mlfn/G8J5THaIphsZmOIVAsTci/SXpjSs9AszfaXaoXM2HrLJPhhaMOhkHdg9Yzco3itfgp4K8ncJlM2RKCj24= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(1800799024)(376014)(6133799003)(18002099003)(22082099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uO5vi7W4kzMtx+y4yFNfAlRCrUBKQf1uuiJPLzUQeSu1XhRQzZCsrz3iprr7nIEqwMjJhvIOpOpNdEXpowTEcF7MqGnlB92dza+ttBJP/muiOu03b/883lmXDdegWEEIFV3LKmsLVNEjXfxBx0wPV1SIoSOkc984zOPBBmYnGnJLnviAerfLu984+X1AW+COy6vDfZd6G1TiA3vFvIkKuMh6CztxlhHSyeCNtgCcu6EugiYuEY7Tw8hkXXbPhaM0NStnNlo8oZXTjmKA002vrdLd2VKmyWpbhDwg7yzD3yapP69c/IV66mRlbf62N8iCffKPdg6XY6cgrNeKqEyxTnAfcmi+DOUOlRjTPj6Yl8OaGW2wDC+wphih4JPRu5NmmctWsSj73vtmQi3yQVIbCgRIDLioHuK1hXUbPnK8iYkG4vF0rqGu1qLL5pSZnwst X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:36.0267 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eeae847a-dd98-4a0e-9598-08dec61a3f08 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV0PR12MB999069 Received-SPF: permerror client-ip=2a01:111:f403:c111::5; envelope-from=skolothumtho@nvidia.com; helo=DM1PR04CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004686587158500 Content-Type: text/plain; charset="utf-8" Install an event handler on the CMDQV vEVENTQ fd to read and propagate host received CMDQV errors to the guest. The handler runs in QEMU's main loop, using a non-blocking fd registered via qemu_set_fd_handler(). Reviewed-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.c | 63 +++++++++++++++++++++++++++++++++++++++++ hw/arm/trace-events | 1 + 2 files changed, 64 insertions(+) diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 7264b4bfa9..ff0fcd1e66 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -12,6 +12,7 @@ =20 #include "hw/arm/smmuv3.h" #include "hw/arm/smmuv3-common.h" +#include "hw/core/irq.h" #include "smmuv3-accel.h" #include "tegra241-cmdqv.h" #include "trace.h" @@ -729,6 +730,51 @@ out: trace_tegra241_cmdqv_write_mmio(offset, value, size); } =20 +static void tegra241_cmdqv_event_read(void *opaque) +{ + Tegra241CMDQV *cmdqv =3D opaque; + IOMMUFDVeventq *veventq =3D cmdqv->veventq; + struct { + struct iommufd_vevent_header hdr; + struct iommu_vevent_tegra241_cmdqv vevent; + } buf; + Error *local_err =3D NULL; + + if (!smmuv3_accel_event_read_validate(veventq, + IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQ= V, + &buf, sizeof(buf), &local_err)) { + warn_report_err_once(local_err); + return; + } + + if (buf.vevent.lvcmdq_err_map[0] || buf.vevent.lvcmdq_err_map[1]) { + cmdqv->vintf_cmdq_err_map[0] =3D + extract64(buf.vevent.lvcmdq_err_map[0], 0, 32); + cmdqv->vintf_cmdq_err_map[1] =3D + extract64(buf.vevent.lvcmdq_err_map[0], 32, 32); + cmdqv->vintf_cmdq_err_map[2] =3D + extract64(buf.vevent.lvcmdq_err_map[1], 0, 32); + cmdqv->vintf_cmdq_err_map[3] =3D + extract64(buf.vevent.lvcmdq_err_map[1], 32, 32); + /* + * CMDQV_CMDQ_ERR_MAP and VINTF0_LVCMDQ_ERR_MAP are distinct + * registers (different MMIO offsets). With only VINTF0 exposed + * they carry the same data, so mirror. + */ + for (int i =3D 0; i < 4; i++) { + cmdqv->cmdq_err_map[i] =3D cmdqv->vintf_cmdq_err_map[i]; + } + /* Set the VINTF0 bit in VI_ERR_MAP_0 (only VINTF0 is exposed). */ + cmdqv->vi_err_map[0] |=3D BIT(0); + if (!(cmdqv->vi_int_mask[0] & BIT(0))) { + qemu_irq_pulse(cmdqv->irq); + } + trace_tegra241_cmdqv_err_map( + cmdqv->vintf_cmdq_err_map[3], cmdqv->vintf_cmdq_err_map[2], + cmdqv->vintf_cmdq_err_map[1], cmdqv->vintf_cmdq_err_map[0]); + } +} + static void tegra241_cmdqv_free_viommu(SMMUv3State *s) { SMMUv3AccelState *accel =3D s->s_accel; @@ -740,6 +786,7 @@ static void tegra241_cmdqv_free_viommu(SMMUv3State *s) return; } if (veventq) { + qemu_set_fd_handler(veventq->veventq_fd, NULL, NULL, NULL); close(veventq->veventq_fd); iommufd_backend_free_id(viommu->iommufd, veventq->veventq_id); g_free(veventq); @@ -759,6 +806,7 @@ tegra241_cmdqv_alloc_viommu(SMMUv3State *s, HostIOMMUDe= viceIOMMUFD *idev, Tegra241CMDQV *cmdqv =3D s->s_accel->cmdqv; uint32_t viommu_id, veventq_id, veventq_fd; IOMMUFDVeventq *veventq; + int flags; =20 if (!iommufd_backend_alloc_viommu(idev->iommufd, idev->devid, IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV, @@ -784,14 +832,29 @@ tegra241_cmdqv_alloc_viommu(SMMUv3State *s, HostIOMMU= DeviceIOMMUFD *idev, goto munmap_page0; } =20 + flags =3D fcntl(veventq_fd, F_GETFL); + if (flags < 0) { + error_setg(errp, "Failed to get flags for vEVENTQ fd"); + goto free_veventq; + } + if (fcntl(veventq_fd, F_SETFL, O_NONBLOCK | flags) < 0) { + error_setg(errp, "Failed to set O_NONBLOCK on vEVENTQ fd"); + goto free_veventq; + } + veventq =3D g_new(IOMMUFDVeventq, 1); veventq->veventq_id =3D veventq_id; veventq->veventq_fd =3D veventq_fd; cmdqv->veventq =3D veventq; =20 + /* Set up event handler for veventq fd */ + qemu_set_fd_handler(veventq_fd, tegra241_cmdqv_event_read, NULL, cmdqv= ); *out_viommu_id =3D viommu_id; return true; =20 +free_veventq: + close(veventq_fd); + iommufd_backend_free_id(idev->iommufd, veventq_id); munmap_page0: munmap(cmdqv->vintf_page0, VINTF_PAGE_SIZE); cmdqv->vintf_page0 =3D NULL; diff --git a/hw/arm/trace-events b/hw/arm/trace-events index a8dcbc82db..dbed00afbb 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -75,6 +75,7 @@ smmuv3_accel_install_ste(uint32_t vsid, const char * type= , uint32_t hwpt_id) "vS # tegra241-cmdqv tegra241_cmdqv_read_mmio(uint64_t offset, uint64_t val, unsigned size) "of= fset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" tegra241_cmdqv_write_mmio(uint64_t offset, uint64_t val, unsigned size) "o= ffset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" +tegra241_cmdqv_err_map(uint32_t map3, uint32_t map2, uint32_t map1, uint32= _t map0) "hw irq received. error (hex) maps: %04X:%04X:%04X:%04X" tegra241_cmdqv_read_vcmdq_page0(int index, const char *aperture, const cha= r *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x%= "PRIx64" val: 0x%"PRIx64 tegra241_cmdqv_read_vcmdq_page1(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 tegra241_cmdqv_write_vcmdq_page0(int index, const char *aperture, const ch= ar *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x= %"PRIx64" val: 0x%"PRIx64 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004551; cv=pass; d=zohomail.com; s=zohoarc; b=ERrEkDuKw6mrqtKVbPqQfXKnZb05pVJzG9bXnzIz1UXMd7bGdhHuuZQfzT8p4dEZk5CZM8pG3qo1njLv07X/jpH+Ufd9pmgd61h27BHvg80eD17zTaqSgg9MbJx1Sh6nHY0xYoEeWLnQ8DFr9zNNEQ60UiPPPeIVkqh/IVnodHs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004551; 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=8WJEGobeJ1DftWs8ZjQ3EUmlJzop89CqE/JmRcdkg4c=; b=V9dprYsHJoeXBdVXnhtO1mxqLjYNR/uiF/HQtgIy5F+7LgqWAqnnKC2VD2vMDnZ8lGkDcxC4YmvlM2hfvRM39bNDK4j1UHUzUISp0hN36iInBnvg7N0FplZIDcOWoABNAb2l/xBNRRdDd8uYKuZ4fWKPAOmA2OAB65Qn76jXBw0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004551347485.63681382068523; Tue, 9 Jun 2026 04:29:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudl-0002BT-FK; Tue, 09 Jun 2026 07:29:05 -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 1wWudV-0000aN-UK; Tue, 09 Jun 2026 07:28:50 -0400 Received: from mail-westus2azlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c005::5] helo=CO1PR03CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudT-0003Xw-7M; Tue, 09 Jun 2026 07:28:49 -0400 Received: from SJ0PR03CA0294.namprd03.prod.outlook.com (2603:10b6:a03:39e::29) by MW4PR12MB5601.namprd12.prod.outlook.com (2603:10b6:303:168::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:35 +0000 Received: from MWH0EPF000A672F.namprd04.prod.outlook.com (2603:10b6:a03:39e:cafe::9c) by SJ0PR03CA0294.outlook.office365.com (2603:10b6:a03:39e::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:35 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672F.mail.protection.outlook.com (10.167.249.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:35 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:20 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i1EAz56XIinRWQV2xvTYwkmDoCQ9yF8VXnLU/uJd902LYmw84qEQfw4xe2SHDD0ywM+xzzK5NyxykZrDxgoSKGHq/7uElhBVVLI0qcOpdaBXD3yUnid+7N3MrFzyi2SVB2kJ0uzXEjwogoJ9RNQ0vHAfB0DEylCMtwn/UEGvAUnG+igJAtIzi3cP1DI62QrtO2oA7qGx7E+YyAPMasnpLhsjhYPBy4ek1Sc646ifIhEHLub0YzzdBFCD9tY+0pqe4yP3zi76VZsKvk9dT28UDTin/BiXpiEPMWnCV+++bJoCkjyZqpXt+1b0wAukg94eCdhBSDFbgqfj5tvdQ0UXjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8WJEGobeJ1DftWs8ZjQ3EUmlJzop89CqE/JmRcdkg4c=; b=ID7DVcPv2LxptJU1fJeAmF0O8rRJQPBVdavmirw3dcuG1cnUVaNfu5H9q9eB53Q8Hl2JE3b2qagtVVBuAT7d+4Ni+q+E5uLLHW3p9SWBZ8KImNM8Kdh62LsvTfiHgyBrEP3eLtb/7kU7gh/V/SL7wuQ+jNmWi0RfgqbNDsmuF5KESOcwr55XQyKL/MUrti6UpZeJKkBznhnBHoaRjCJgT4yof4wNj9en8Kf4wtdnNOckuvcZ5pNI8hbjsq56B0zOW+QGsAwmwHjMDbga9ZiJazpMmwgzYAA/lw7VphtjboufR5HHG185J9CTuq3hNmd1FLfKzv2lcDjOT6+kciNl+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8WJEGobeJ1DftWs8ZjQ3EUmlJzop89CqE/JmRcdkg4c=; b=EPlkik+B/3SVYGaBDDjmcrAcOp1qz2AgX0HdPXD/Mpw+IyVHB1Wa4fIBII943hOaxnJDpPWD0aZ1ihFN7k5IZAVDRuoGr66Gh08W9kY1gNLD+3p4LbP27BnInJ2aaQthKqGQILy+l2YQLMhV/k6Rz7YSd08ie/rtv5loE3HTrLT96rvOZBNpwJjx+OCKPsUFozl/GN8BlVtMmaYjLBGuaD6QD1JI6Ye0H/iskacYIEWBC267lr7ObjMLQM2vE5aKLI34NIVGT8oGbs+kNDRTHYw7vMOV6331bW/c6NLjspDas658hlEGS+/Ctkie/GkJNtDiPsyLNR3H1sZ6TY4Zzg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 24/31] hw/arm/tegra241-cmdqv: Initialize register state on reset Date: Tue, 9 Jun 2026 12:25:45 +0100 Message-ID: <20260609112552.378999-25-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672F:EE_|MW4PR12MB5601:EE_ X-MS-Office365-Filtering-Correlation-Id: f58f4710-eef9-4aa5-d492-08dec61a3e7d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|82310400026|1800799024|376014|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: v2Q/N6xd1Jw8VYYakeDgkZA4LDE83pfRcVR7mcNDPg1Snn52WMzPuRL+yjUhOH1HdsJYigkD06BeNP+8/tBDIbEwspEJasskePwmsMpRvBvoZsM4ac75uM3Scx9AEEd3YB13WQ92opEWi40PfRyKiiwG7pAmB8EInzFr+woLv9Yr0g1OFsxrTor7swoZqG1eAi3c+ho0HrA3e1qJmMbb5LP4K2N4Z0KyoxRsFdu3MffmwDq5OVK3TuRV+OARBsaIHp4j4y1se8KBI+n5UYXyotHxYy1DzTUCNaon3J9gFon0W5GSXqIIEtbOKQ5AXVvHpxwTatvzVxBqZhfmnJE6exmPi0/wBgxRY0pOBv4A7Zn//9wbpNXXRAjLK6TkWVVLKJqPCQoly7ZGZXCOOBLv2WdeIDI419n3obb5RCm6kVrAWtFsq4SeJ9gnfJQc3g23gx173LElkYmYO+iSYESW7Z4XkuVs2mdQn3j2pG/m0F8SrObVX5ryyY5MyTAyqXQjVDqa272pJaIGfdCOphWIXxwMT16IRKHIq0zOPGxNGxCqsLh+cAY3MqDfhh47dwZXM1KWzE/KaKb7SNlIc7/bHiVIHbrrOmXkGnt5871QgjFotUBi6IJOjkGzwM1mCadKNfCns06oGVuXtI53UHILWzcjYH4J3wEhtvaTrEWsZOBbsDjs9e7vCWczHgeorZJx5tc7Dq36cKsl60qFRi3cruWuc+bSmK6qrImbG0y0NRo= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(82310400026)(1800799024)(376014)(18002099003)(22082099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NxNXebs5amJx11Zuw6s8oAY7BzRbM/z1RFu5WTirjaduxlnZZ7DeuNWdvfES8rE/toUalah4s40amlENpdhBtwqNd4ceoOB/mq+8Gd2e38r2E27aKdlRTfjFb94h92GHcuJ6YjX0s5YGbrfZKhnF8w5Fr/kv4hYgEV41Ph1clGeYmuabClD5iPT+GrIYMy7qHzG2wtvXCrgFI3JOpr2ESi1iAaDU1kQjdWouD4PXuHv8lJ+gSJhkGsR+7QdMkNLGhplq2VRvGBBvTlWMYsfqxAQutQd9keQ+y41SmVTeNNn6eTtN9MJB9ZaWYcg74NVmpb9PwB1SYeP7yWtp/euswHjv1ZtE9kFx8ifGQUy0/7BiqHMP1SsIci2r9fZkbasrR96gvRXaPA5fLo6JODxEz0DHVE9K/MDSuhaZqU2ElZj13s5fGcKMdcc0c1Od611b X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:35.1398 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f58f4710-eef9-4aa5-d492-08dec61a3e7d X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB5601 Received-SPF: permerror client-ip=2a01:111:f403:c005::5; envelope-from=skolothumtho@nvidia.com; helo=CO1PR03CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004551583158500 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Initialize the Tegra241 CMDQV register state in the reset handler. Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.h | 3 +++ hw/arm/tegra241-cmdqv.c | 38 ++++++++++++++++++++++++++++++++++++++ hw/arm/trace-events | 1 + 3 files changed, 42 insertions(+) diff --git a/hw/arm/tegra241-cmdqv.h b/hw/arm/tegra241-cmdqv.h index 01cd6af97d..de4c1e5335 100644 --- a/hw/arm/tegra241-cmdqv.h +++ b/hw/arm/tegra241-cmdqv.h @@ -89,6 +89,9 @@ FIELD(CONFIG, CMDQ_MAX_CLK_BATCH, 4, 8) FIELD(CONFIG, CMDQ_MAX_CMD_BATCH, 12, 8) FIELD(CONFIG, CONS_DRAM_EN, 20, 1) =20 +/* CMDQV_EN=3D1, PER_CMD_OFFSET=3D16B, CLK_BATCH=3D256, CMD_BATCH=3D32. */ +#define V_CONFIG_RESET 0x00020083 + REG32(PARAM, 0x4) FIELD(PARAM, CMDQV_VER, 0, 4) FIELD(PARAM, CMDQV_NUM_CMDQ_LOG2, 4, 4) diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index ff0fcd1e66..0ed2a03612 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -863,6 +863,42 @@ free_viommu: return false; } =20 +static void tegra241_cmdqv_init_regs(SMMUv3State *s, Tegra241CMDQV *cmdqv) +{ + int i; + + cmdqv->config =3D V_CONFIG_RESET; + cmdqv->param =3D FIELD_DP32(0, PARAM, CMDQV_VER, CMDQV_VER); + cmdqv->param =3D FIELD_DP32(cmdqv->param, PARAM, CMDQV_NUM_CMDQ_LOG2, + CMDQV_NUM_CMDQ_LOG2); + cmdqv->param =3D FIELD_DP32(cmdqv->param, PARAM, CMDQV_NUM_SID_PER_VI_= LOG2, + CMDQV_NUM_SID_PER_VI_LOG2); + trace_tegra241_cmdqv_init_regs(cmdqv->param); + cmdqv->status =3D R_STATUS_CMDQV_ENABLED_MASK; + + for (i =3D 0; i < 2; i++) { + cmdqv->vi_err_map[i] =3D 0; + cmdqv->vi_int_mask[i] =3D 0; + } + for (i =3D 0; i < 4; i++) { + cmdqv->cmdq_err_map[i] =3D 0; + cmdqv->vintf_cmdq_err_map[i] =3D 0; + } + cmdqv->vintf_config =3D 0; + cmdqv->vintf_status =3D 0; + for (i =3D 0; i < TEGRA241_CMDQV_MAX_CMDQ; i++) { + cmdqv->cmdq_alloc_map[i] =3D 0; + cmdqv->vcmdq_cons_indx[i] =3D 0; + cmdqv->vcmdq_prod_indx[i] =3D 0; + cmdqv->vcmdq_config[i] =3D 0; + cmdqv->vcmdq_status[i] =3D 0; + cmdqv->vcmdq_gerror[i] =3D 0; + cmdqv->vcmdq_gerrorn[i] =3D 0; + cmdqv->vcmdq_base[i] =3D 0; + cmdqv->vcmdq_cons_indx_base[i] =3D 0; + } +} + static void tegra241_cmdqv_reset(SMMUv3State *s) { Tegra241CMDQV *cmdqv =3D s->s_accel->cmdqv; @@ -873,6 +909,8 @@ static void tegra241_cmdqv_reset(SMMUv3State *s) =20 tegra241_cmdqv_guest_unmap_vintf_page0(cmdqv); tegra241_cmdqv_free_all_vcmdq(cmdqv); + + tegra241_cmdqv_init_regs(s, cmdqv); } =20 static const MemoryRegionOps mmio_cmdqv_ops =3D { diff --git a/hw/arm/trace-events b/hw/arm/trace-events index dbed00afbb..0bd718b1ab 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -76,6 +76,7 @@ smmuv3_accel_install_ste(uint32_t vsid, const char * type= , uint32_t hwpt_id) "vS tegra241_cmdqv_read_mmio(uint64_t offset, uint64_t val, unsigned size) "of= fset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" tegra241_cmdqv_write_mmio(uint64_t offset, uint64_t val, unsigned size) "o= ffset: 0x%"PRIx64" val: 0x%"PRIx64" size: 0x%x" tegra241_cmdqv_err_map(uint32_t map3, uint32_t map2, uint32_t map1, uint32= _t map0) "hw irq received. error (hex) maps: %04X:%04X:%04X:%04X" +tegra241_cmdqv_init_regs(uint32_t param) "register init, param=3D0x%08X" tegra241_cmdqv_read_vcmdq_page0(int index, const char *aperture, const cha= r *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x%= "PRIx64" val: 0x%"PRIx64 tegra241_cmdqv_read_vcmdq_page1(int index, const char *aperture, uint64_t = offset0, uint64_t val) "vcmdq[%d] %s offset0: 0x%"PRIx64" val: 0x%"PRIx64 tegra241_cmdqv_write_vcmdq_page0(int index, const char *aperture, const ch= ar *backing, uint64_t offset0, uint64_t val) "vcmdq[%d] %s (%s) offset0: 0x= %"PRIx64" val: 0x%"PRIx64 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004654; cv=pass; d=zohomail.com; s=zohoarc; b=kZVy/YlN55q8pDPZaJMB773NUUJmlM5HzAkZS3q4PfgRKfKKei78u8OgeNHeZMJnVBWz9hIFAWlAIxV2Sh2ERuJDcmy47lUZ2oUPFzht3DfbRO1p84KqsBWxd3zjHEgB071mYlSfJuVMsl4oGTwFDPgTPDDFZhXehhVegLXP5y8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004654; 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=JL+codZZFMg4vzL3FaI+pXKXBaHKVLtDIHRobM5HpFI=; b=kuRd9Rp8/iGXtkR1oK94eOUvxURqwTb3MBXUC2/h4Z2DpLu3xgxM3MbICuD8utP0N1vpvXV1yvlLFst17aUdkXwwnqndqVf3/P8K+HhJRLg/ALXVm20Twb+zT+QEd62Q88xQaRB7Fi9eJYj+WP0buFbJojo696aPu7sZJmjT9sA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004654825357.56660108088954; Tue, 9 Jun 2026 04:30:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudg-0001cC-H9; Tue, 09 Jun 2026 07:29: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 1wWuda-00010I-7V; Tue, 09 Jun 2026 07:28:54 -0400 Received: from mail-northcentralusazlp170120005.outbound.protection.outlook.com ([2a01:111:f403:c105::5] helo=CH5PR02CU005.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudY-0003fR-Fl; Tue, 09 Jun 2026 07:28:53 -0400 Received: from BY3PR10CA0002.namprd10.prod.outlook.com (2603:10b6:a03:255::7) by PH7PR12MB7259.namprd12.prod.outlook.com (2603:10b6:510:207::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:43 +0000 Received: from MWH0EPF000C618A.namprd02.prod.outlook.com (2603:10b6:a03:255:cafe::3e) by BY3PR10CA0002.outlook.office365.com (2603:10b6:a03:255::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:43 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C618A.mail.protection.outlook.com (10.167.249.122) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:43 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:24 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:21 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g8rgx1j23yJI0g09PJD1SGpzLYuSgnAuWCZjI8rZJf7HSFZHOFnAKSiYPtgD7SjbcfFPZv8rpRW1D9OgJg0J7Ouyc/zPnJyWJ66u57ebL32yVeN2mMmpHMPn87ELuqMBREt+eWVTnp/HpoxKbd4VoIo2sKPfwtjpddRCIgceDrpagLyrTnY8EWYovilVYIy49fkhAM2n3Lrab2DB7o6/JyHXzjuJ7qpD2QwIWf6/QAk0KDjZ0WvefgZYDohvbJnShHOPH1pEBbjjMoY/a4nwJfg+GLgrjkeXEPCoZ4nLWfukrOWoUs5x93SYX1RM3cdJ3RoDz3KkRwxlp1zrQAS8rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JL+codZZFMg4vzL3FaI+pXKXBaHKVLtDIHRobM5HpFI=; b=hYYgBuEaAHo1fISdT1JPaSCHNV4PyD5e2c9m84TrwLXrxRC3L6vaL5gO1NZb7VVJSiA74n499gttMZMkGBI0Kz4POakY2oqP+ntTQDOlQ91PoswjUywtX9trKKKI28XjS/5U1S24WjxnjQQpYJf4bGg/5k2AqQhStDsJJiZTQbogclk4hMe6+ooTTtJCK+sToa16dLAg/p33HLSIOfHT9WqBeJMOs7KJ6dZ1gDp1eWj1aBtkgrOmmbcL9dh4kV4k8s933U5/Hf/0BC+azDPSAyMq+7bOz0mmOCl64vAOvvzR1kkHpA0rxJ/RD6zay3pzt5FC8OUihKeRewogfLT0HA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JL+codZZFMg4vzL3FaI+pXKXBaHKVLtDIHRobM5HpFI=; b=ucpK7n8V5SLe5eiMOOF+pvJJUTvHpmyKtzJFMRB/phm/hQK6+pIOGGlFRIA9bQbkap7hw1I1rkfiOFFpbKmDDn+5ZAnTV70IjLr0lH6tDRHO5KEWf2dFF9Zh8zmP1OAyILgBeobEsoFI5L+in+f+FRvdYe4VutTvB7nJXs36/Elu2WOIzDye/d9EFaqA55Q8TSUxOUfz0X+216ZjhxiTFUSpSUSClvbRViXnDlieCyFY0Tfx1QQXq+EJo3KN4oZcmgYQO4zcFhNq/WgbevOiwGH5820P/BYxrpobdhYk73ZmQLhLGap9YjffUKvmSrMZ3h6DF0FjVZ+wwr/kURD8yA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 25/31] hw/arm/tegra241-cmdqv: Limit queue size based on backend page size Date: Tue, 9 Jun 2026 12:25:46 +0100 Message-ID: <20260609112552.378999-26-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C618A:EE_|PH7PR12MB7259:EE_ X-MS-Office365-Filtering-Correlation-Id: 1c91ef78-b520-4bbb-9b98-08dec61a4351 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|82310400026|36860700016|18002099003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: ZM9YpmUrQp6BXnrvf5NkliNXkPLX/2rbednO4pVT41XJI/GzYN8TolTUsKn0p6AoRRhZqe94DKYSYjHxZzLhsp4BBp8Pdqaq3p/xAmnsyy2EHP28rwcThxi1c120HlT8ceBQszxLMH27NZN+aVhVKqJKKT5y3fwh2JTH8nQcnZX+Rq/wvCpeztFehvmMnlfQzRdUrtcBH9nm6G1Ozku4YC7lbqOOlD7oF7ed+oDVhDT3VGkBtsHQzK93r202FGQraZBt8NdDEvDJ+yG4VZAR65Hq8gQPjtcNQoc8tnlDkd4dhIrlH+wHOHzQkA8pcx4R6WmmQqrI3lADi3V+5e8ibCD5oP6K6wtY6usgKVVXUwKN3tELSpo4jzkIHkdlkUitBqhmdDhxZcPE+0vTczab7PxppXzN1JSLkqcGd4X42yvOl841nEXG+7nsImdd8cTZgYLYhnfF4ONCSUOx4yCd+O5EeMEyxkaEIy4SP5X/CC6bxQCnwDhd4zBlhQdDtUiMBFiypBoXvEY7IgusFT7xllipfq53vYMpCAzfZEf84IzdGDgJNKzBkmClng2rjHOQtCpx+UOKeDa8tEFRbyGtSTPH07igOT/khbYeuYBBbHssDmD8kMHm7gyIV58GFSfADHuudL0X2FRsA770GRHee5Bu26qEYDAi6OK4+bK/ztHtNA2JW0r9C/4VpDx1c8lynwFpRaaOdozjrm5UmBsCPyHvpFReurMhXpIy7BWfdtA= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(82310400026)(36860700016)(18002099003)(22082099003)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vv7hDXA8IN4Zbp6Ds4km8CRHUvK9US7Yz7nuY4nLWFoiqLRj6FNo32O9Y/sPwkBtfvzArVf8qyLSGT0G4+POpsUwFlNny9FKoHUVbCFleWU1MTaT/ecxurIk8e3jYdDtZtia7IJRqwxH+RlQgIilhjEUDuglGrePUb8bGk3pTlpedZkpm1K7dugIjjyhTsdVWsx8H1aP9GEwoWofy1/GjX5cd1FvRClJOCYfZC+xx6wCsEomsrJlUGGvhGpCFfug7GrBMtTPWwb4edhs4kYm5iwKSBaUE/wyf2mZddOIGB7nDHFw+UvS7rfuF00Ptpj5EoFmZNZjK60aaAOgkbGP9BlK6ynPb6Nf+GIsAnzBStG4uSqRXpic7JC5q1xmBBeQDrCrDCxnxZP+A7HG2VObK/y5VSunjaXJ/rjlLBZYCUF4ziW/OyB1CeJUDUmXR9T1 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:43.2608 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1c91ef78-b520-4bbb-9b98-08dec61a4351 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C618A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7259 Received-SPF: permerror client-ip=2a01:111:f403:c105::5; envelope-from=skolothumtho@nvidia.com; helo=CH5PR02CU005.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004657302154100 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen CMDQV HW performs DMA accesses to guest queue memory by its host physical address set up via IOMMUFD. This requires the guest queue to be contiguous in both guest PA and host PA space. With Tegra241 CMDQV enabled, we must only advertise a command queue size (CMDQS) that the host can safely back with physically contiguous memory. Allowing a queue size larger than the host page size could cause the hardware to DMA across page boundaries, leading to faults. Use qemu_minrampagesize() to find the smallest memory-backend page size in use, then cap IDR1.CMDQS so the guest cannot configure a command queue that exceeds that contiguous backing. Note this is done at SMMUv3 init, before any guest queue GPA is known, so the cap is conservative. Maximum queue size is 8MiB; it is recommended to back the VM with hugepage sizes large enough so CMDQS stays at the HW maximum. Smaller backing pages reduce CMDQS accordingly. Signed-off-by: Nicolin Chen Tested-by: Nicolin Chen Reviewed-by: Eric Auger Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 0ed2a03612..4b8f8b15c7 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -14,6 +14,8 @@ #include "hw/arm/smmuv3-common.h" #include "hw/core/irq.h" #include "smmuv3-accel.h" +#include "smmuv3-internal.h" +#include "system/hostmem.h" #include "tegra241-cmdqv.h" #include "trace.h" =20 @@ -866,6 +868,8 @@ free_viommu: static void tegra241_cmdqv_init_regs(SMMUv3State *s, Tegra241CMDQV *cmdqv) { int i; + long pgsize; + uint32_t val; =20 cmdqv->config =3D V_CONFIG_RESET; cmdqv->param =3D FIELD_DP32(0, PARAM, CMDQV_VER, CMDQV_VER); @@ -897,6 +901,22 @@ static void tegra241_cmdqv_init_regs(SMMUv3State *s, T= egra241CMDQV *cmdqv) cmdqv->vcmdq_base[i] =3D 0; cmdqv->vcmdq_cons_indx_base[i] =3D 0; } + + /* + * CMDQ must not cross a physical RAM backend page. Adjust CMDQS so the + * queue fits entirely within the smallest backend page size, ensuring + * the command queue is physically contiguous in host memory. + * + * IDR1.CMDQS =3D log2(max_qsz) - entry_shift + * + * where entry_shift =3D 4 (each CMDQ entry is 16 bytes =3D 2^4). + */ + pgsize =3D qemu_minrampagesize(); + if (pgsize =3D=3D LONG_MAX) { + pgsize =3D qemu_real_host_page_size(); + } + val =3D FIELD_EX32(s->idr[1], IDR1, CMDQS); + s->idr[1] =3D FIELD_DP32(s->idr[1], IDR1, CMDQS, MIN(ctz64(pgsize) - 4= , val)); } =20 static void tegra241_cmdqv_reset(SMMUv3State *s) --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004716; cv=pass; d=zohomail.com; s=zohoarc; b=FjDRfaw/iZz38liIGflV2f/FJej7Rv5EU9lfkqSryx9uMkXMmIb5SvIlBC7L+52kUFYsMl7VwzYG6Rh6AMpbHF9erD/AL1EL9eDl1v+MQ6wu713nKCYSjagiQkGObLPjSW61dgLqsVu/OWCLqMLFlvPJn/99VWTg6AVlO8RYbHk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004716; 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=Wb/WypMQbdb8KtRoyLHakmlqnqlI9HpAU490gubGyJQ=; b=Vrrnv19OqFfD06mOXrOyA2aAdVkl4wzwPSbWie4+5X2ETE3kwDlcdA0YvIAPgIQMD4F0AdKgcfeg6zhq5WQXUZ/YhtWa6kTA3pJnJgyGmEpJ2bct3t5T+AtOKRxONx4fWJ8Q06cSvvRzGGgN+YgQcsc9w69crb+FNOk2jv0FPQA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004716363585.9818447416171; Tue, 9 Jun 2026 04:31:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudj-0001wz-Qa; Tue, 09 Jun 2026 07:29: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 1wWudf-0001XI-Bj; Tue, 09 Jun 2026 07:28:59 -0400 Received: from mail-westcentralusazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c112::7] helo=CY3PR05CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudc-0003qr-Qa; Tue, 09 Jun 2026 07:28:58 -0400 Received: from SJ0PR05CA0029.namprd05.prod.outlook.com (2603:10b6:a03:33b::34) by SN7PR12MB7418.namprd12.prod.outlook.com (2603:10b6:806:2a5::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.12; Tue, 9 Jun 2026 11:28:46 +0000 Received: from MWH0EPF000C6184.namprd02.prod.outlook.com (2603:10b6:a03:33b:cafe::1a) by SJ0PR05CA0029.outlook.office365.com (2603:10b6:a03:33b::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:46 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6184.mail.protection.outlook.com (10.167.249.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:46 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:28 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Tkq2pmRiugDQl4VsfPTvxv3D7oFebqxhsyoE18Por5JMF4T86+jyaZjXd3Vnjm9oo/ElX0goQCZYP6WZti6tlxElW5SLQZ5mHicdLVkjMfhD8A0njTwe77olUJ8RkfLxRoaWbsXhK6I+pZSzWBWZUUQFRIscFNApo1nmeWlHjOlJ0Fh9AARhpEOP+ZL3sOZjJKBRIkO02aoRamewhuOFkeHCzccMyeJSFQf3/k0m3avUJ1R0IYy70UbEe7NCavJFEbzrmD0R6/XEXIKswg8BiRbQKZh7IKNIRcVjgCAPb9/SJkoevikw1WN2uIWFDVJjaPeSVKWPQbamYyXUREHlCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Wb/WypMQbdb8KtRoyLHakmlqnqlI9HpAU490gubGyJQ=; b=K2agFdyH/gWQAGUpVmPLN/QaLVrQA+4dMiiuVv7qLuSH9uvL5jFU/ThiZNhVe/n4guYz1ctTnbm2LPfXfBlUrkTsLspLYefd4Pd5o4k+EDNFLBFdRNyYMOatl+G3kn/a7DV1B10ms1kk4yNmf2nIKJ2pntHYhRqmudJ0xzwuYkklgrc0wOSbMa66MsoW2vrihsS12aOpCz9FEsTZR+CE/2nZKDdTt7avsuJVm/X6hawSoupaBdupRfAmLjv0X2Mn2jByCegablNIDTuydEBS0vKujjxFS0XOWcTJu2qfmzc3Dt/X1IwRAbW2aUjbHycqXc9zn4M0NEFmZQ/+4p2/Sw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wb/WypMQbdb8KtRoyLHakmlqnqlI9HpAU490gubGyJQ=; b=ia2516eKMHxHSV9gB4x6zqdrlawK6ZY78aYtltKj03iX70hF6NbRXySsN34QFNUytBul4/oSmlT70OSwV92qcPHpzJezgA4zXQ8ioiD1snVEl6OLzgWHX73nvxu4R+QY6pPa48BZ0RiYAbrQvwyn9r8mZ7HmEh0mjvWjIPcmtcNJ6zBbyvIKS1PeihncxPJ2cWzCFhSDW83Hqf6Mk6tqUlnQ6eCI24/Hwhe3zU9bV0iTrDUQXQPImOl2EAQgks9BVJmh/qqzuuGd0wpDunEC20ZvzK22sSyzQbXMPK+yc5jLdN61xaG2VxMEj2vENgAT/gM39cygHjvV4HK97nZJwg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 26/31] hw/arm/smmuv3: Add per-device identifier property Date: Tue, 9 Jun 2026 12:25:47 +0100 Message-ID: <20260609112552.378999-27-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6184:EE_|SN7PR12MB7418:EE_ X-MS-Office365-Filtering-Correlation-Id: 713a8a12-c2fa-4c68-be02-08dec61a4523 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700016|376014|82310400026|1800799024|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: OfxcEbKqVfxdFCOdLUeaORCtEPsiBXzbRZZCzemTTLa9wWcro3ca944n97XhjbRD8xWWWNn/Qa3hFpsMwr6o2BBWtfB2jGFV3g9HekhRpDwXIocpcOcZJY4C3AyrW6/mAm8cMQW6BTbVFVFhX8/IcGhzHYN7jDimXh5E0xKdJ+hmpeKCcdKaH1++riXiQOv0qQBJ85nbDYMZ4SlgKyPT9mqxVZ6ivlcC+WitiFUkeXh3pNEdf9LYnXQDUTe9+Ceqra6lKJh2G2+L9RuXb6SroYeEL/OtheWSO8csHX58d0U72zn6VhK4Kkp4XNxi/MZlrTDFZy/KR1aV2pi3+kqhJKdMPZ2iop0Yh7HzdZSa4FosFcuQxLUATiJptGpd1XB7/f6XZ4FFwim9qug1mWrBysLPiFkbOHXVt1XRk8C7gXoMy9kTUS7gs+cMakOgKOL9EGtq8819tsLI/4gUNIJmfpEHBO91R71eI5MkbHR225ZvNM5QH0pilqlJ0drXo5lxpvjhLUlCtZmCXMDOlje5xiXScZAbJS5C4jl1NImo0e6+9krF6q+wbQWK6ICGe/9GNe/wYSQa69/ZALeRjbCUNoET5bJlLJUVcCRJYKkNaX/URL5r9IGUI4yuMSxBvcOA+I/SmQC9Ur6dgSB5P+0/rRc/NnMaKewwkeBeGNXiy+NqOvpJZD/57Lw2WxIaD4vS4/1ham5JzSvxIs/hUy2AN4CQ8cquKFcb08BGxQxkJ34= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700016)(376014)(82310400026)(1800799024)(56012099006)(11063799006)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0PasG4YOd+0+DpIe0nZvIy2a1ZIvN2qt+Cvev9sE0w5Jw7rovNkgylBYLvq++6KIArdKDRZL/LbV/9yS30F+lXUhziSv7kmQIdzWxr806DyJkz8RlV0X2RLkiVpVLjskGhHqOovTASI8ULPXP1ls/jqQxmoMWqjYFF+254hZ1IaPiW/v4YqgkYOadQuU+PWnAVpZyUTJaVTcRDvyDv6gmBGWsNgIsQKDgVtgJfkEzo8cSiiD+kXKgMoZCAoLD1DBT6PIz+kq0FqLw9a2mqZ3eCPyYJuSpYHQulDgusyTwx/3rzcMv2om8YP24sQQhm5RarvNzrZBG5qKvBohfIWJDOHx7TdCTvaApgnlUTs0I/Uxo9yNmHq9EAU2zojcAyJnpvxDWLUukNkz9s7gJVgGOISBD0jNHxwIbdu+oxxjyLkITVYfN9OZ01lMhMypziI2 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:46.3203 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 713a8a12-c2fa-4c68-be02-08dec61a4523 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6184.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7418 Received-SPF: permerror client-ip=2a01:111:f403:c112::7; envelope-from=skolothumtho@nvidia.com; helo=CY3PR05CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004716830158500 Content-Type: text/plain; charset="utf-8" Add an "identifier" property to the SMMUv3 device and use it when building the ACPI IORT SMMUv3 node Identifier field. This avoids relying on device enumeration order and provides a stable per-device identifier. A subsequent patch will use the same identifier when generating the DSDT description for Tegra241 CMDQV, ensuring that the IORT and DSDT entries refer to the same SMMUv3 instance. The identifier is assigned at pre-plug time, accounting for the ITS Group node that build_iort() places before SMMUv3 nodes in the IORT table, so that identifiers are globally unique across all IORT nodes. No functional change: IORT blob content for bios-tables qtest is identical to before. Reviewed-by: Eric Auger Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- include/hw/arm/smmuv3.h | 1 + hw/arm/smmuv3.c | 2 ++ hw/arm/virt-acpi-build.c | 5 ++++- hw/arm/virt.c | 12 ++++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/hw/arm/smmuv3.h b/include/hw/arm/smmuv3.h index 34d0f65eaa..d39fe8850b 100644 --- a/include/hw/arm/smmuv3.h +++ b/include/hw/arm/smmuv3.h @@ -65,6 +65,7 @@ struct SMMUv3State { qemu_irq irq[4]; QemuMutex mutex; char *stage; + uint8_t identifier; =20 /* SMMU has HW accelerator support for nested S1 + s2 */ bool accel; diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index 83fa6468fd..a8fb10e531 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -2126,6 +2126,8 @@ static const Property smmuv3_properties[] =3D { * Defaults to stage 1 */ DEFINE_PROP_STRING("stage", SMMUv3State, stage), + /* Identifier used for ACPI IORT SMMUv3 (and DSDT for CMDQV) generatio= n */ + DEFINE_PROP_UINT8("identifier", SMMUv3State, identifier, 0), DEFINE_PROP_BOOL("accel", SMMUv3State, accel, false), /* GPA of MSI doorbell, for SMMUv3 accel use. */ DEFINE_PROP_UINT64("msi-gpa", SMMUv3State, msi_gpa, 0), diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index b00f3477ca..9d05982137 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -349,6 +349,7 @@ static int iort_idmap_compare(gconstpointer a, gconstpo= inter b) typedef struct AcpiIortSMMUv3Dev { int irq; hwaddr base; + uint8_t id; GArray *rc_smmu_idmaps; /* Offset of the SMMUv3 IORT Node relative to the start of the IORT */ size_t offset; @@ -411,6 +412,7 @@ static int populate_smmuv3_dev(VirtMachineState *vms, G= Array *sdev_blob) &error_abort)); sdev.accel =3D object_property_get_bool(obj, "accel", &error_abort= ); sdev.ats =3D smmuv3_ats_enabled(ARM_SMMUV3(obj)); + sdev.id =3D object_property_get_uint(obj, "identifier", &error_abo= rt); pbus =3D PLATFORM_BUS_DEVICE(vms->platform_bus_dev); sbdev =3D SYS_BUS_DEVICE(obj); sdev.base =3D platform_bus_get_mmio_addr(pbus, sbdev, 0); @@ -637,7 +639,8 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) (ID_MAPPING_ENTRY_SIZE * smmu_mapping_count); build_append_int_noprefix(table_data, node_size, 2); /* Length */ build_append_int_noprefix(table_data, 4, 1); /* Revision */ - build_append_int_noprefix(table_data, id++, 4); /* Identifier */ + build_append_int_noprefix(table_data, sdev->id, 4); /* Identifier = */ + id++; /* advance shared counter for RC/RMR node uniqueness */ /* Number of ID mappings */ build_append_int_noprefix(table_data, smmu_mapping_count, 4); /* Reference to ID Array */ diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 2add7401a1..d8d27f2ef6 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -254,6 +254,9 @@ static MemMapEntry extended_memmap[] =3D { /* Any CXL Fixed memory windows come here */ }; =20 +/* Counts SMMUv3 devices plugged; used to assign stable IORT identifiers */ +static uint8_t smmuv3_dev_id; + static const int a15irqmap[] =3D { [VIRT_UART0] =3D 1, [VIRT_RTC] =3D 2, @@ -3830,6 +3833,15 @@ static void virt_machine_device_pre_plug_cb(HotplugH= andler *hotplug_dev, OBJECT(vms->sysmem), NULL); object_property_set_link(OBJECT(dev), "secure-memory", OBJECT(vms->secure_sysmem), NULL); + /* + * In build_iort(), the ITS node(id=3D0) precedes SMMUv3 nodes + * when present. Account for it so this SMMUv3's identifier + * is globally unique across all IORT nodes. + */ + uint8_t its_offset =3D (vms->msi_controller =3D=3D VIRT_MSI_CT= RL_ITS) + ? 1 : 0; + object_property_set_uint(OBJECT(dev), "identifier", + its_offset + smmuv3_dev_id++, NULL); } if (object_property_get_bool(OBJECT(dev), "accel", &error_abort)) { hwaddr db_start =3D 0; --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004559; cv=pass; d=zohomail.com; s=zohoarc; b=P8YASymCJHDpVxYhOWO+lWyWLtSRYSI3JTV33EKSHnaoDHpoTJVxsgouqe8/a90j03Myono1VGyBOm0jpYeGB2kQh5XF56XC0lGEHvppJVpvkr+N0W42fcMQo1osOT9IKblIbv6EO3PDaJNwSfQQBPDJkJAipvDc4TWGXamcgUc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004559; 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=jHln2u6H89/lhot0VcYgtLxC9Hbdtn6nOu1bVineaGU=; b=TW2jXMkdeNv2liy+dW+mX+LdwSbPvyMbetyc7Od2NpxDy0BxZDY8HjPZM7Ulzv0z1s+Eq5te8HeDHCa5KqjNT9IlputN3GORGV5muzG4er7eNM5ro5KJ92lxka6KzJ3fki4u45OhaP7v1FAuvH+A7lfizJZzd2LiNtUjgn5wKXw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004559488623.2109121669467; Tue, 9 Jun 2026 04:29:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudm-0002MT-N0; Tue, 09 Jun 2026 07:29:06 -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 1wWudf-0001XJ-CW; Tue, 09 Jun 2026 07:28:59 -0400 Received: from mail-westcentralusazlp170100005.outbound.protection.outlook.com ([2a01:111:f403:c112::5] helo=CY7PR03CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudd-0003s7-05; Tue, 09 Jun 2026 07:28:58 -0400 Received: from SJ0PR05CA0023.namprd05.prod.outlook.com (2603:10b6:a03:33b::28) by IA1PR12MB6307.namprd12.prod.outlook.com (2603:10b6:208:3e5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.11; Tue, 9 Jun 2026 11:28:49 +0000 Received: from MWH0EPF000C6184.namprd02.prod.outlook.com (2603:10b6:a03:33b:cafe::52) by SJ0PR05CA0023.outlook.office365.com (2603:10b6:a03:33b::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:49 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6184.mail.protection.outlook.com (10.167.249.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:49 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:32 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:29 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pUyYWCjXEQRBWpjY6UJSPD90uD/Ed5vNB3fZL91Y74sqauiKWptHQqkfLVtJLnvFle0HX1zXfOfELpQzLMTMu/okJsdhjelm1Nd8wKjVEKM9KHZYyXWXQ1oiNpE4wzvnZjfEfg0EF/YK/F9L+9G8m5Y6icGRotrRKsTl+o2qIYly5OAHEzBZdtSJOytfQGDz3ovoKM3lfFfCmzcR/mtjVExVkYyBnwqk7Eq9qiM8dSNan0b+h3MymDxgnEqGrZvl/hYzJufsA+khqO9G7oqk1WwYS4SwIkH7hawep/GnNvGgZffghseDJyWHOG7ZJbgh/fVfvoPXNlRpHyFNOY0f6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jHln2u6H89/lhot0VcYgtLxC9Hbdtn6nOu1bVineaGU=; b=udE0btSV6HHFRDPLnB7jaj9OmkMSefh4b9SbpuMsuEHGYz++tN+RCwYUAJP1fDRkjxHlich/jbocwb3hVmnrb6N6FxZVtJTZSTjA3RMpx1tytsa1Sqiz7SsATWwI3o8aRG7mbELzVlrBJu4lPh7FQxdItra/ewG0OFmAr7g+qai8CoUD28GH7vpmA0sVB4vs99ib4Qmp6ZTJ3Z5LICDz0P1zyEcF9vDRsu6noQtxIHmKjLfzA7+lN9rTPYxu7epSE40II8IuyUkH1OTjfUOu2JPhBckTYVMtfK8JI2fU8K4tMjHkmzntqOEC7AG+Ep6tsYs6CSOLCiXIKoGaBIUhsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jHln2u6H89/lhot0VcYgtLxC9Hbdtn6nOu1bVineaGU=; b=JQq7YVPs7KTZZTQT7yaMrcGBPb00yYb5nJQzX7bpVWmRXk7rzXXzFLXMG1toH/YeGQlOZV5BGuJLXapHYbdm6do2WgTLum8jzJIN4zYIWlXxtHWoP8tXh3573VE280+WHYOVBQcVjAbZJ/giPGJMWXR2nUO5/OYMbhiaQpY4bw/Vbd8AsIDIieW9oFPq3z4K+0NGIeakejeQoAlz+IzOGtIfnEaG1Y1AmDvtRux/I5NUhut1C43SQD5WBnVh4tTAgYOCbLjObmSdsyQcHtbIQndplrb1VS0os240IV5pXC9h8FhHYG5envgUUjv/oRoXljhNShvUNfeWzF0Y+xPHkg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 27/31] hw/arm/smmuv3-accel: Introduce helper to query CMDQV type Date: Tue, 9 Jun 2026 12:25:48 +0100 Message-ID: <20260609112552.378999-28-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6184:EE_|IA1PR12MB6307:EE_ X-MS-Office365-Filtering-Correlation-Id: 16763b6b-bcd2-424e-9afd-08dec61a46cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|36860700016|82310400026|11063799006|18002099003|22082099003|6133799003|56012099006; X-Microsoft-Antispam-Message-Info: AZo8kLhjrOlb5WAqbTiTE7soFgQ1ir8lReLoI+L6FWTi4u7eDEaslhmpcc4i+LXsNSwkQE3tJw3qYkNOAygmXDJheApKY1gUiPPCKgKR7RsQvNe3oEuI6nmXPp6TWQl+TwHTMmsiEl0p+E5iOi6tCXEJizPc6SyJx+teOqM58jmU9HQvEvny6WQmz6vI2+WJb/9cwmO3igAWBMCm9fHNQByB1GINys67QlNtPnp11RKfI8tUCE3EEhoQNOF+yRKL9VI/WjKGdPchz1O1wgZvHFdXM9F1UU2Kh11sULW0Qv6vEvG9wXXtIkg/LFnh30r/P7ZtwylgYp75ZQaeLL288iE0PYOlZa767J415UOuyRGYz2hUoyngf6qbwB5gIIjz99wAT77nYT9dmQynjgaLVimgzeOFizI8QYNPoDX4fW50+NTFBMUTjpMkwfrtWvPiL4wzHKqS3P4v4nDAOH6dww5lldch7x8AW1lbPd/fngqIOn+ljZv8nM7SQQr6r9NOEbaccwholSfTAupRB642Pwi9dyci0mJpLHCp67xGSSD6SK7h4BQVQGI7ETx15gsWpv0auXKGvIBPcpLY8ddZLthOq+zfl5zVcowmfnmB/RAdXRqHbKMCqkgjG6kVgYFRt+g62FaOVHDquV7idMHdhTansgpcJVpjMJ1KPvKGG12nw0vsK2n91oJO7uX1M1kafJ4x/BlER2tWwRoe7lmfSC+xvOqSTvDilLfRx2NlVRA= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(36860700016)(82310400026)(11063799006)(18002099003)(22082099003)(6133799003)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DAXWN3VO04qP4PcUkCOCNtSnFpL04JBGEJ1XLUITWN8MlYpyc4NODVYoOonQ2sXHKVEez2dJpWmhYd4se48iIsPV45MOu7ypwhc+YIPGzQeU26NQDN1kKysx5eJPBIiz98hDixwm8dBSrawq3R7DGPNd2Ap+gMXdbqCShkcHafA4HZTVBGqHai7hgivGY/AX9F0jxWUN1pILCHz7KsWafAetefWkNPpYnD/cFTD2+mxhws9ixhjXCxcdPNXJdN7hG2vdH887qI/drNvlmx8GKY1KPqwQZGeOkpTomKnqd/jQBlvc+T6sWIdpM+B1Uh29p6kvWU0BVSTnchj52LaNQYBYsxfQGQNd8yoionaIDMeD3GR1EhJlGmP/EWaqzWQgASKHObKFia9cdpfL4BbAUdbNobTF0jXALD/bhAcL0/5MwUscV2fW/WBNbqPZ3HNE X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:49.1032 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 16763b6b-bcd2-424e-9afd-08dec61a46cc X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6184.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6307 Received-SPF: permerror client-ip=2a01:111:f403:c112::5; envelope-from=skolothumtho@nvidia.com; helo=CY7PR03CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004561803154100 Content-Type: text/plain; charset="utf-8" Introduce a SMMUv3AccelCmdqvType enum and a helper to query the CMDQV implementation type associated with an accelerated SMMUv3 instance. A subsequent patch will use this helper when generating the Tegra241 CMDQV DSDT. Reviewed-by: Eric Auger Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/smmuv3-accel.h | 10 ++++++++++ hw/arm/smmuv3-accel-stubs.c | 5 +++++ hw/arm/smmuv3-accel.c | 12 ++++++++++++ hw/arm/tegra241-cmdqv.c | 6 ++++++ 4 files changed, 33 insertions(+) diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h index 8d0f636338..5fc85fb89d 100644 --- a/hw/arm/smmuv3-accel.h +++ b/hw/arm/smmuv3-accel.h @@ -16,6 +16,11 @@ #include #endif =20 +typedef enum SMMUv3AccelCmdqvType { + SMMUV3_CMDQV_NONE =3D 0, + SMMUV3_CMDQV_TEGRA241, +} SMMUv3AccelCmdqvType; + /* * CMDQ-Virtualization (CMDQV) hardware support, extends the SMMUv3 to * support multiple VCMDQs with virtualization capabilities. @@ -42,6 +47,10 @@ typedef struct SMMUv3AccelCmdqvOps { * If NULL, the viommu_id is freed directly via iommufd_backend_free_i= d(). */ void (*free_viommu)(SMMUv3State *s); + /** + * @get_type: Optional callback. Return the CMDQV implementation type. + */ + SMMUv3AccelCmdqvType (*get_type)(void); /** * @reset: Optional callback. Reset CMDQV state. */ @@ -90,5 +99,6 @@ bool smmuv3_accel_alloc_veventq(SMMUv3State *s, Error **e= rrp); bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *veventq, uint32_t ty= pe, void *buf, size_t size, Error **errp= ); void smmuv3_accel_reset(SMMUv3State *s); +SMMUv3AccelCmdqvType smmuv3_accel_cmdqv_type(Object *obj); =20 #endif /* HW_ARM_SMMUV3_ACCEL_H */ diff --git a/hw/arm/smmuv3-accel-stubs.c b/hw/arm/smmuv3-accel-stubs.c index 9e6c44a282..147ae06163 100644 --- a/hw/arm/smmuv3-accel-stubs.c +++ b/hw/arm/smmuv3-accel-stubs.c @@ -57,3 +57,8 @@ bool smmuv3_accel_event_read_validate(IOMMUFDVeventq *vev= entq, uint32_t type, void smmuv3_accel_reset(SMMUv3State *s) { } + +SMMUv3AccelCmdqvType smmuv3_accel_cmdqv_type(Object *obj) +{ + return SMMUV3_CMDQV_NONE; +} diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index c1c2a67c97..9c3bd4413d 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -1060,6 +1060,18 @@ static void smmuv3_accel_as_init(SMMUv3State *s) address_space_init(shared_as_sysmem, &root, "smmuv3-accel-as-sysmem"); } =20 +SMMUv3AccelCmdqvType smmuv3_accel_cmdqv_type(Object *obj) +{ + SMMUv3State *s =3D ARM_SMMUV3(obj); + SMMUv3AccelState *accel =3D s->s_accel; + + if (!accel || !accel->cmdqv_ops || !accel->cmdqv_ops->get_type) { + return SMMUV3_CMDQV_NONE; + } + + return accel->cmdqv_ops->get_type(); +} + static void smmuv3_accel_machine_done(Notifier *notifier, void *data) { SMMUv3State *s =3D container_of(notifier, SMMUv3State, machine_done); diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index 4b8f8b15c7..d821eafca1 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -964,6 +964,11 @@ static bool tegra241_cmdqv_init(SMMUv3State *s, Error = **errp) return true; } =20 +static SMMUv3AccelCmdqvType tegra241_cmdqv_get_type(void) +{ + return SMMUV3_CMDQV_TEGRA241; +} + static bool tegra241_cmdqv_probe(SMMUv3State *s, HostIOMMUDeviceIOMMUFD *i= dev, Error **errp) { @@ -1004,6 +1009,7 @@ static const SMMUv3AccelCmdqvOps tegra241_cmdqv_ops = =3D { .init =3D tegra241_cmdqv_init, .alloc_viommu =3D tegra241_cmdqv_alloc_viommu, .free_viommu =3D tegra241_cmdqv_free_viommu, + .get_type =3D tegra241_cmdqv_get_type, .reset =3D tegra241_cmdqv_reset, }; =20 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004636; cv=pass; d=zohomail.com; s=zohoarc; b=FoPSaCMtw0NScAI6DV5eNd5b0Yv9DJ70Tnvu6L28C1Nw1LKkkoK9lakUgGALljBY9DnFROPb/fq+lobPy21AU307Q+4dhbvlZgaYl4rZqSGHeD7jjQNVRr+4Q3b7Gr1o5JLLwajXksE5LAObvDmOfkbuE9LekE27AnHOICSO2As= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004636; 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=mEZljZCrRvxEYCBoTUjlZqJJ5VcgScpBkOMLPydnedI=; b=XwXe5p9U658xzBHY0mig3Jt3tsHNFUVuqr/xIJYGE1qTIEtCOBMyWa3hK+uih41VYTZQAQQlsPKoY1wddRkbg56Fv3yGOFGAnhPiMw7u/Rhs+0OwVEKj3LjY2BPF6jOEkPdjNQb7PwaIhAFj458V8upmkDq3uCkpinfTaMbJ9OQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004636871825.9446665706004; Tue, 9 Jun 2026 04:30:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudo-0002Uo-9R; Tue, 09 Jun 2026 07:29:08 -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 1wWudh-0001jN-41; Tue, 09 Jun 2026 07:29:01 -0400 Received: from mail-eastusazlp17011000f.outbound.protection.outlook.com ([2a01:111:f403:c100::f] helo=BL2PR02CU003.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWude-0003zC-S9; Tue, 09 Jun 2026 07:29:00 -0400 Received: from SJ0PR03CA0280.namprd03.prod.outlook.com (2603:10b6:a03:39e::15) by CH1PR12MB9575.namprd12.prod.outlook.com (2603:10b6:610:2ad::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:28:50 +0000 Received: from MWH0EPF000A672F.namprd04.prod.outlook.com (2603:10b6:a03:39e:cafe::5b) by SJ0PR03CA0280.outlook.office365.com (2603:10b6:a03:39e::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:50 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672F.mail.protection.outlook.com (10.167.249.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:50 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:37 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:33 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MKcit1OuyZtjg88f22fG9Zk6TUwnwZCCUPDuojTlosVfmB5DzieJmUxFbgsCj51hO3Niie5ueQ40f0bHN/bb+52w6cWMlMm5IBKJIM8aPVJ7O1TV0wNSjyRoRl1hObB/gEXKuJVF/RIv1tebMi7SI/h/d2XBuomBCE9dZXEmQpj2xnUIQgWzwpJed6liXaTPQuhOKtrlwpZi9BnB3Avr7iLrYv2VCgc1Xj7TCmFtWF53DjQsGxyGrg3LLwBdxMuiBHXchWzAIivCejY3g8Tb+LSXn44gg9x2w8ASzufKzGL2H0jMYq9b8RhR/PHm6NT2Wd5GQI5PN+P8ywLmWLpinA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mEZljZCrRvxEYCBoTUjlZqJJ5VcgScpBkOMLPydnedI=; b=Lewwhc+gxIFgZJZMxD63YNPmqD75lRfvP6KaOnjm1+yumBB5uI/IMZNECRjP6aMhNwKmcokElGX+sOHNnjQ/dE78ppQ99vqZy9Rm8Vu2+0DN582OAXlAiXkIfAzlZq1XfmJWBv2fl7+1p05FbQycgrGVjcbIec4SouzBEBmSOm68AXjNqt/AdYDoH2Z4eIygaOYXPOFRYHf/sveOAYhIwNf4zGw8X4ZwHht29pk7bNM6stMAVuy2G9auAgytBkBGDG7DL8YL4qpCfKa7+mNtO/URlv4zxZaeVuHpHUkde63EGmblQY4a3TsHul4saSZGiEf+N5dsCVphU3ncP4GJXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mEZljZCrRvxEYCBoTUjlZqJJ5VcgScpBkOMLPydnedI=; b=ZZ+LEl+nr7ma4vB8mvRCzpM6GeDXQdOHFebyrbBXxwcDN0tUx+0dtEyHXmDhffiknbWlsJ42Xc2m+zqHb0hof6DOeciMb3XZ7Jbgmpl2p3np81bNWn3Nlt5pGMDBrHPZ7CZ+JE6QCvph+w2Mol/KuWzR+o8dLOtJwrd10yB2hYfxtygxYgjwysm6WTkzjcDZkP4UJhCHo3UhNzoPr2wGDQqr6wZtzqd8G7JznUj4El9mtLgTeT+773hWqjl4fnKCyWRmgPoSpn8P/dTCjou9N7O/guAwximn1LHnhfKYU8Dlx13sNy0XgHC7ZXT/fi6w3rtJ6ezup/Y5rS37feyQFA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 28/31] hw/arm/virt-acpi: Advertise Tegra241 CMDQV nodes in DSDT Date: Tue, 9 Jun 2026 12:25:49 +0100 Message-ID: <20260609112552.378999-29-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672F:EE_|CH1PR12MB9575:EE_ X-MS-Office365-Filtering-Correlation-Id: c45550a3-2ba3-49cd-4490-08dec61a4776 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|376014|36860700016|6133799003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 2hp3uWEnp7iIGyZOFfkSPyZpU43ztsLx62YVK1gHxgIvYpNC//FzYfVCW54krs7iICjNLSG9ulfOCmxHMtdtYQTGJASsoAvlCEQfRzEl+T8o67BOpkHLVG+eGAIj1TsEooO85Qev2Q7JHA0TKMoHIKeHXtpfUms525ST1nPPQ2qn5Ii8cWPnuHbE8nUXoJ5sKpU8TbaKFNVPpbHVcKBiEugAlelzsFWhKMwgY8lHvFEUlAz0dyihGTv18YF1cjNo0z4eXV+XiEyALfbThgZricDA1P9rWU98gL+je/LLcOfmKVRXMfXnzrmARcEv5b2c/6No7muqWWaDYo1PrLQzbFDaQ4znZhAYuKUSq77foZ0aaTtjsCI/W4iKdPOz3EE4H9X/6YVLFiHGm8lbz9OIfHmkpGUKu0xKMWkieMKXDfi+y8RKK5FbVg/E7/FJQAK/fe8DydkTbwGeTaeYFAvUPRdnhZBQiYY8IhO2zt6uCpjnx8EF9NT37I41qq/M+J/zlWcX7pGHajX0feSP8foRKpsNhffCbcSuVW/qprLTpIYD+8r5yJvNlsOGSmiR0Wp9G8f3PbzRvcnRfvlYtnvJERnSMezIgecnQcC11Z9zOVtQjr3i93siZ4PJ9rd6NtyWiSeJiwcMuj+ZeuDP1jGr0hqq1P0nt6U4wHK5I4Z69qtrUPQ7/V6bC8TGnaAFsxdhF/COmGAywsjY3AdMo+GjZtmj6edjPoe1VdkJeBHvbss= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(376014)(36860700016)(6133799003)(18002099003)(22082099003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hwdS06LjoyMMcD0K/cqkx6txOikp6Am8x8Gj4eMNjL7kBvFguevrL1LQsYqlzVUUeJhTutM8NEvtiXNHB219NMZdY8SlRMB0SLkIB6vuZExk2zc7UxE578AQvGwM0rcQy7CGRUrFiHKfA5TJ9AGn0gZlcl2B4FBYgDCVqE1PuGj/6Qouf+5gWtDDyagXbzLSC6n6CDyEWnVDTCN80gG09V6ejLm4db/i/nmyNmaGU+j3bEwU1yex9zEUjOdGXv2ooe4TSw6RB5s+uwtADjWuXA9nFVvF761gRd/lXAM3EDDDGfqH5BM6G83L7Wx+zcoeJx0b4xo/1pWcj8cGBeHskGpfvk9Lz7zhCGfcH/uWqOIvqbXctq1ZJnd1NXwrFSZGPGSS43zeQAEtRVhbcAsE50qe8A0Nyk90TCclwznah/HJkOlHh1aBmnU9IbbWs65e X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:50.2807 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c45550a3-2ba3-49cd-4490-08dec61a4776 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9575 Received-SPF: permerror client-ip=2a01:111:f403:c100::f; envelope-from=skolothumtho@nvidia.com; helo=BL2PR02CU003.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004639086154100 Content-Type: text/plain; charset="utf-8" From: Nicolin Chen Add ACPI DSDT support for Tegra241 CMDQV when the SMMUv3 instance is created with tegra241-cmdqv. For each accelerated SMMUv3 instance, add a Tegra241 CMDQV device object under the DSDT \_SB namespace, with HID "NVDA200C" and a UID that matches the Identifier of the corresponding SMMUv3 IORT node, so the guest OS can associate the DSDT device with the right SMMU. The _CRS covers the CMDQV MMIO aperture plus its interrupt, and _CCA declares I/O cache coherency. See ACPI Specification 6.5, Section 6 (Device Configuration) for _HID/_UID/_CCA/_CRS. Generated DSDT entry for a CMDQV instance paired with SMMUv3 Identifier=3D1: ... Device (CV01) { Name (_HID, "NVDA200C") // _HID: Hardware ID Name (_UID, One) // _UID: Unique ID Name (_CCA, One) // _CCA: Cache Coherency Attribute Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cac= heable, ReadWrite, 0x0000000000000000, // Granularity 0x000000000C080000, // Range Minimum 0x000000000C0CFFFF, // Range Maximum 0x0000000000000000, // Translation Offset 0x0000000000050000, // Length ,, , AddressRangeMemory, TypeStatic) Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, ) { 0x00000094, } }) } ... Generated IORT SMMUv3 node (Identifier =3D 1): ... [048h 0072 001h] Type : 04 [049h 0073 002h] Length : 0058 [04Bh 0075 001h] Revision : 04 [04Ch 0076 004h] Identifier : 00000001 [050h 0080 004h] Mapping Count : 00000001 [054h 0084 004h] Mapping Offset : 00000044 ... Signed-off-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Co-developed-by: Shameer Kolothum Signed-off-by: Shameer Kolothum --- hw/arm/virt-acpi-build.c | 52 ++++++++++++++++++++++++++++++++++++++++ hw/arm/trace-events | 1 + 2 files changed, 53 insertions(+) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 9d05982137..99490aa7b1 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -65,6 +65,9 @@ #include "target/arm/cpu.h" #include "target/arm/multiprocessing.h" =20 +#include "smmuv3-accel.h" +#include "tegra241-cmdqv.h" + #define ARM_SPI_BASE 32 =20 #define ACPI_BUILD_TABLE_SIZE 0x20000 @@ -1121,6 +1124,51 @@ static void build_fadt_rev6(GArray *table_data, BIOS= Linker *linker, build_fadt(table_data, linker, &fadt, vms->oem_id, vms->oem_table_id); } =20 +static void acpi_dsdt_add_tegra241_cmdqv(Aml *scope, VirtMachineState *vms) +{ + for (int i =3D 0; i < vms->smmuv3_devices->len; i++) { + Object *obj =3D OBJECT(g_ptr_array_index(vms->smmuv3_devices, i)); + PlatformBusDevice *pbus; + Aml *dev, *crs, *addr; + SysBusDevice *sbdev; + hwaddr base; + uint32_t id; + int irq; + + if (smmuv3_accel_cmdqv_type(obj) !=3D SMMUV3_CMDQV_TEGRA241) { + continue; + } + id =3D object_property_get_uint(obj, "identifier", &error_abort); + pbus =3D PLATFORM_BUS_DEVICE(vms->platform_bus_dev); + sbdev =3D SYS_BUS_DEVICE(obj); + base =3D platform_bus_get_mmio_addr(pbus, sbdev, 1); + base +=3D vms->memmap[VIRT_PLATFORM_BUS].base; + irq =3D platform_bus_get_irqn(pbus, sbdev, NUM_SMMU_IRQS); + irq +=3D vms->irqmap[VIRT_PLATFORM_BUS]; + irq +=3D ARM_SPI_BASE; + + dev =3D aml_device("CV%.02u", id); + aml_append(dev, aml_name_decl("_HID", aml_string("NVDA200C"))); + aml_append(dev, aml_name_decl("_UID", aml_int(id))); + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); + + crs =3D aml_resource_template(); + addr =3D aml_qword_memory(AML_POS_DECODE, AML_MIN_FIXED, AML_MAX_F= IXED, + AML_CACHEABLE, AML_READ_WRITE, 0x0, base, + base + TEGRA241_CMDQV_IO_LEN - 0x1, 0x0, + TEGRA241_CMDQV_IO_LEN); + aml_append(crs, addr); + aml_append(crs, aml_interrupt(AML_CONSUMER, AML_EDGE, + AML_ACTIVE_HIGH, AML_EXCLUSIVE, + (uint32_t *)&irq, 1)); + aml_append(dev, aml_name_decl("_CRS", crs)); + + aml_append(scope, dev); + + trace_virt_acpi_dsdt_tegra241_cmdqv(id, base, irq); + } +} + /* DSDT */ static void build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) @@ -1185,6 +1233,10 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, V= irtMachineState *vms) acpi_dsdt_add_tpm(scope, vms); #endif =20 + if (!vms->legacy_smmuv3_present) { + acpi_dsdt_add_tegra241_cmdqv(scope, vms); + } + aml_append(dsdt, scope); =20 pci0_scope =3D aml_scope("\\_SB.PCI0"); diff --git a/hw/arm/trace-events b/hw/arm/trace-events index 0bd718b1ab..1b16f710fe 100644 --- a/hw/arm/trace-events +++ b/hw/arm/trace-events @@ -9,6 +9,7 @@ omap1_lpg_led(const char *onoff) "omap1 LPG: LED is %s" =20 # virt-acpi-build.c virt_acpi_setup(void) "No fw cfg or ACPI disabled. Bailing out." +virt_acpi_dsdt_tegra241_cmdqv(int smmu_id, uint64_t base, uint32_t irq) "D= SDT: add cmdqv node for (id=3D%d), base=3D0x%" PRIx64 ", irq=3D%d" =20 # smmu-common.c smmu_add_mr(const char *name) "%s" --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004684; cv=pass; d=zohomail.com; s=zohoarc; b=mhI0kpdlJEEqAMVtoj0+ecu3/JPCWbW5MIqNkOktiUObuAU0Xi9S/yx6W2LNkzLeenbdmidu/sRt7RBppAirapg2H36eMo4e+SepNaIWs/kbFfLpNd9/CQqd1XGd9upyjLUicJGQrdDjIkg2bXXIXuByCsjNWtoZ1ClgSnb1Vkw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004684; 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=Gc6XLx0I1jKe8N1XTxZKs3JzUpGhFvCBx7IjkO/V/xc=; b=eLRQwEPpSYWA3mbtJ599j1O1NLZKFQ9BzCCdf6PJMNdb23DPkYTq2prMDd+xkNoA/11uG3t4+LWVCJj7s2ve+FXhaz458QYGti/cy5Ewkyg1LNdBQc+49F7k596iuN2OTKO2qaqGqrIV76EumpkcnIz6JOtVrMzDFPRkKE6CGpo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004684558624.562072883353; Tue, 9 Jun 2026 04:31:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWue1-0003mN-AE; Tue, 09 Jun 2026 07:29:21 -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 1wWudx-0003S3-Gr; Tue, 09 Jun 2026 07:29:17 -0400 Received: from mail-eastusazlp170120007.outbound.protection.outlook.com ([2a01:111:f403:c101::7] helo=BL0PR03CU003.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudv-0004fx-HE; Tue, 09 Jun 2026 07:29:17 -0400 Received: from MW4PR03CA0125.namprd03.prod.outlook.com (2603:10b6:303:8c::10) by BY5PR12MB4257.namprd12.prod.outlook.com (2603:10b6:a03:20f::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Tue, 9 Jun 2026 11:28:55 +0000 Received: from MWH0EPF000A672E.namprd04.prod.outlook.com (2603:10b6:303:8c:cafe::54) by MW4PR03CA0125.outlook.office365.com (2603:10b6:303:8c::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:28:54 +0000 Received: from mail.nvidia.com (216.228.117.161) by MWH0EPF000A672E.mail.protection.outlook.com (10.167.249.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:28:54 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:41 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RX9OnOXwGYpYfQWy5vfXi9RSrbiASEDThwZ0GMJVqpk6mkfqINy+6aACHkjQf7b9ZhfYix8XOiAfsHmf9/7Qy8NfOOpbnAvydoHzEb9PNbILpb4A4PxP+SqLZ2nKLodhbH+pYsdZuPbU+WDZJby8fzU7EbClrDqpGAJ4G3BUSVjvaWJWwKD3UmNUhyZbgXdVQl2gyQv4cPhaFui751Q+CGCIxmZV2YQ/jOxRNuwsPutbUXZED2Z5hEYtcm9HxSaDh2AG0ssTtW8lMihDIsVImjLLzPUuAHowALWcskP7mmnrvaGu0l0n79wqTTBlxKuAg11jra1weU6XkWx1BocI/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Gc6XLx0I1jKe8N1XTxZKs3JzUpGhFvCBx7IjkO/V/xc=; b=PTVHk0OZQGV67Sg88F7ZFhOuR9lmnfkIHlbwzsimZUTQe1h2uJMsEsXYxNlRS7Vn5tfF9HmXm/dNvj2bOGssaa+vwGbowOvnppK8AvJT5Z36SCO1a5WtOiCijAlycGfS8DNdWwjGFUGVhBcrmNiTv2LXPJrazKHlhv4uUlpfgyEB1fp/Ohv2YmzMTqQGNNttVPtDdI/EeEKmUpI0n0/XeJ8SjCTwd3k0Cfk5FRjLgFtKhlzpuFL3R37raZpERtTeLRVhxiktSkWbdrytNRwuiDw+b6EwUY2Kk2TsdNJdmcJ0aml1wudktVNrzxs6MX8WwheJgrNd/ww+a70B5Vybiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gc6XLx0I1jKe8N1XTxZKs3JzUpGhFvCBx7IjkO/V/xc=; b=kJzYsTmySAercdUrmL79DvpSZy3jMPnekJhevuUwzFyZCLqpZJyz1U/9M03v1328ahfjsH59lOPt2Mr1RczxaLGLSQm+dlxdRJt+9EoFNHWzIjv8wUp+R2bzQY6PNnhLwl+XFR8HNhWMQ2GOECJ76OHGkAW3g2+qP2DX3n4q7iYvar+nSIT/PbG0D5nGT9tCU5460D3OOfH+Ow4ZXJb/e7OEBzonFTNb3CR+mRiAr5oHpzEeKSb0FXjzlY0MFc/FIC23POz9d8G6LHDCfI5xwUADXPnC980gQVOl4OxX2CTFuuui9LFLKbhb3kRddOxHTlpFvC1rfIJIQ+01FGZ5yg== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 29/31] hw/arm/smmuv3-accel: Enforce viommu association when CMDQV is active Date: Tue, 9 Jun 2026 12:25:50 +0100 Message-ID: <20260609112552.378999-30-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000A672E:EE_|BY5PR12MB4257:EE_ X-MS-Office365-Filtering-Correlation-Id: d00feefe-e7fe-4a25-1626-08dec61a4a30 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|1800799024|36860700016|3023799007|18002099003|22082099003|6133799003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: c2Oytbix7tCFI4AK2Kwv1RhT8EpliAvamuZ8OQZ1SWDXe59R9+rKGih0YgWiIp4xpBMdG9X7GzgArULHBztHwknmnE6pItlVTrL7QRRioMyi18xqrmytKCes1ZOiE4csQuXzaf7cZ1c+D6LOfpBM9cOq4pVZL6nhUhdNzS697vaY2R5CfkpqeFmFduvau6elqzultEL9UDZiaGZ9JN96uBAd4GQGxYK6RVN9AFnNwR4+3ZwsDXzWqZLGXvaO3KmguzI/ZORsbkU+HM4EyhkU+odkwLH5/SSk00Ib/aZtP5Y7yQGraMtonLG4pYltg4GwBHRLWVydZ0Fhi2Go9ExJSym03I9VKDQpMx8/K5UTLjyIPZmOnsIr8lHsl8hT94HwZqGGWcnJveTgEc+ulLrZzWmvg2qN7GrVB349v/q6EM7EXB5fOa3nqVkh3DDOsT3czR4dc2jjycf6C2wKDOE5faWJZzZD/sU/KePy16FSspHvDUyHnc0PmWbBSziwnOV8DGbYb+2g4JZGWEOldSHGVKYOvmageFYIV3a5cBnyKdnJAezV0Xd8lNpFhYoadZv5JpO9OOtxOv1sb5CvClxUSJptbdjm/B+V8YAaVvA3yXdTexM3gw/J3Ant0RZuaK5wikvSZisOfucT1K2Xtw40+xBazcm7GPgB5n04NmsWOUTXnR6YkCNlhFCvxbNG8WGWnPGCyuTZWE5qX2Poyp3YIxQvOLcFjxtNutqBMOZLXSc= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(376014)(1800799024)(36860700016)(3023799007)(18002099003)(22082099003)(6133799003)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +OnAsXXeUh7e7eqfXjB8xXCo38Qpj+b4WOGdGFuWxdQh5GgOdzbZkob98wTE9hNXPFdo3suUlGyFnZEFLobO6IoIX6cIhOkOXlL/hP7O/yU10MEyJWqejOvkCTDVChmgiv1msLFibknBA47S8NlIHnBNRyFuXpEc2iQu75Z8ZyEdIt75yDUQalmjYzh6W/Zhfe4p+ktwhJzenV60sszrO4wvZcF+m1dcul3Wryg7misRTnDyvoyv23UmMxiVk9bH8KANbCnkolI4Pd9GM3V3CM6E0PLc08psB09CICJT1r36RlAq7+xKS4FCXZFH95JaRPi0IWOeoghiZVvkvwKgXIV4vAIPV3hSRV0hYOqMHoEe7HJPLuSb15RVa0Sc113p6wM5HdOYAY4oUl51ZeB61xpjiBn/HYwnGSCLO73FouTIUwFatnF/lODi+9MWoPq6 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:28:54.7721 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d00feefe-e7fe-4a25-1626-08dec61a4a30 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000A672E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4257 Received-SPF: permerror client-ip=2a01:111:f403:c101::7; envelope-from=skolothumtho@nvidia.com; helo=BL0PR03CU003.outbound.protection.outlook.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, 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_NONE=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 @Nvidia.com) X-ZM-MESSAGEID: 1781004685786154100 Content-Type: text/plain; charset="utf-8" When CMDQV is active, the first cold-plugged VFIO device establishes the viommu to host SMMUv3 association, and the guest's boot-time CMDQV configuration (VINTFs, VCMDQs) is built on top of that association. Hot-unplugging that device would release the viommu and tear down all CMDQV state. Hot-plugging another device behind a different host SMMUv3+CMDQV would then re-bind the same vSMMUv3 to new host hardware, while the guest keeps using its boot-time configuration and ends up issuing commands to the wrong host. Block hot-unplug of the establishing device to avoid this; retaining the binding across unplug is non-trivial and not required by any current use case. Also abort at machine_done if cmdqv=3Don is requested but no cold-plugged VFIO device was present to initialize it. Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Reviewed-by: Eric Auger Signed-off-by: Shameer Kolothum --- hw/arm/smmuv3-accel.h | 1 + hw/arm/smmuv3-accel.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h index 5fc85fb89d..dd755c394d 100644 --- a/hw/arm/smmuv3-accel.h +++ b/hw/arm/smmuv3-accel.h @@ -84,6 +84,7 @@ typedef struct SMMUv3AccelDevice { IOMMUFDVdev *vdev; QLIST_ENTRY(SMMUv3AccelDevice) next; SMMUv3AccelState *s_accel; + Error *unplug_blocker; /* set when CMDQV is active to block hot-unplug= */ } SMMUv3AccelDevice; =20 bool smmuv3_accel_init(SMMUv3State *s, Error **errp); diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c index 9c3bd4413d..80900c2521 100644 --- a/hw/arm/smmuv3-accel.c +++ b/hw/arm/smmuv3-accel.c @@ -759,6 +759,18 @@ static bool smmuv3_accel_set_iommu_device(PCIBus *bus,= void *opaque, int devfn, return false; } =20 + /* + * CMDQV is active: block hot-unplug of the device that established the + * viommu association. Removing it would cause the vIOMMU to host SMMU= v3 + * association be changed via device hot-plug. + */ + if (s->s_accel->cmdqv_ops) { + PCIDevice *pdev =3D pci_find_device(bus, pci_bus_num(bus), devfn); + error_setg(&accel_dev->unplug_blocker, + "CMDQV is active: removing the device that established = the " + "viommu association would break the guest CMDQV"); + qdev_add_unplug_blocker(DEVICE(pdev), accel_dev->unplug_blocker); + } done: accel_dev->hiodi =3D hiodi; accel_dev->s_accel =3D s->s_accel; @@ -1082,6 +1094,12 @@ static void smmuv3_accel_machine_done(Notifier *noti= fier, void *data) "at least one cold-plugged VFIO device"); exit(1); } + + if (s->cmdqv =3D=3D ON_OFF_AUTO_ON && !accel->cmdqv) { + error_report("arm-smmuv3 cmdqv=3Don requires at least one cold-plu= gged " + "VFIO device"); + exit(1); + } } =20 bool smmuv3_accel_init(SMMUv3State *s, Error **errp) --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004729; cv=pass; d=zohomail.com; s=zohoarc; b=mk2d29UZeIGjWGTtC4dndELyZkPAu7R2T70XzO8JQ6BKYKUzDOKG87k80DZY2Umqq/IwUAsW/6Wr3u70u7lL8e4yF7Dqd7/uf7iLKFm2NSY74FQWBmVhMnC2KERMDB+MKqRegruzBXlboezlUqRTk5Z3tBPBEH+GV3w0gtiCZPs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004729; 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=F2Nc+Z54WA8oDnpDbBCI8A/dPTL8yyzuvr1Z0tMF4zY=; b=Z0r5t8dVlxStRX6GAAlc71HbTKrK6Qln40UdfXT49o+IEqvrQAvV3NdamBZeA1dfeOOqtMi31DHgXvSGxA0Dp5bjF4ps8os//FXv8d+gmeAD4hl9OCqTu3Yg3xiLS1A3C7Uwt7jlFhQhuuaJVBKNRDU21UiDqvBKcsRlj1GyFL0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004729799398.2884676235309; Tue, 9 Jun 2026 04:32:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudt-00032k-EE; Tue, 09 Jun 2026 07:29:13 -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 1wWudq-0002ix-AH; Tue, 09 Jun 2026 07:29:10 -0400 Received: from mail-eastus2azlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c110::1] helo=BN1PR04CU002.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWudo-0004Po-1i; Tue, 09 Jun 2026 07:29:09 -0400 Received: from BY3PR10CA0029.namprd10.prod.outlook.com (2603:10b6:a03:255::34) by PH7PR12MB5620.namprd12.prod.outlook.com (2603:10b6:510:137::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:29:01 +0000 Received: from MWH0EPF000C6188.namprd02.prod.outlook.com (2603:10b6:a03:255:cafe::94) by BY3PR10CA0029.outlook.office365.com (2603:10b6:a03:255::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:29:01 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6188.mail.protection.outlook.com (10.167.249.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:29:01 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:45 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:41 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oCI4PgPctTFTD18gHzVPW5acL/h8op7SW1dz3ewiKLitj3v7kkwUBxmvDNqCZLDv2Izby2lvXavZ1GOKclkRjkmEb0mZFW+AHyoXBTs9yN/aggJJERtvuygcplqJ5c4HiAfAJjKSQxRfc3Ms4j+gUQCRah1Relb2ju/1sPQIYDjJOo9j7lpFxB5f6p1MLVzMtkcCHae2u7IZGWStZciQQEhih3N22aIVemdCRDOPu81Fonm5xDyVWqR0RaSNMNHqYA2wbiD/qUk5Nq9dwUj6/hdmwZnuRcUR88FUTy6wuN2VTuvPra5A0eSYVT0hKkjBol53zCg/nvGa9Le7Pwl8vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=F2Nc+Z54WA8oDnpDbBCI8A/dPTL8yyzuvr1Z0tMF4zY=; b=Fh2Vp1MzqZ5S1XOQuqAUpARyfh0+HoXHJE5JPL3rVlOO2Fl5wcJ9cMuK1iNCwvmoDXaTRjvMraO+x7PK23FNDoa8/GOBrkasfKNI/hWsRgSChngvQGcWFpnPZixiwm1mR0Dk+D3OayQOdkHbIg1CB8uLlWGezu7cuykOgpXySSE7SwN3vTuMMvcT8Z1C1tfsm0tT87+vBv8FU1ru8rrO1QU12uVKS8Dq5ruwjTZHQjSUFCcvLb2unS5uDBeZ0Oxcm3TR9CfPjqrX27l8yFtCUJvFPw+imB8b9jbSaES/cWAc9fAQnh/PiAXtpu1ERf0PKIROiYtvsr5XXBjRDcrcsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F2Nc+Z54WA8oDnpDbBCI8A/dPTL8yyzuvr1Z0tMF4zY=; b=LT45ZrxvaRWdLgNmB1CqaIlQ8YVBUy0tXYJho3soO+rPPCLpVXWhGnX6oiovaMpTIyficba60Tno/6jAa2i9lFhK8Q4R+4sOL+ovvMSpOR7cDd0plvuuTXm6kvxFBXZt+pMDZl/FZ/W23n3Kv864Z99YwcRSh/ZYmSnw/X9PwGdBaY3ifwmk3aKe+wyebvRxljvFwgUwNqgMD+EGfghM55zjCO4Zyprxor52YAEAXXQJ/lT1g3GWUgoLN204gGBcDpKe+TFB9b26T53A+bIPtn3mSiVEwVaFdUKmTgsM5C7ykRx4ZVZUVw1EnCP96hpNktz8M/E5/Qwg6Cb+d5bM7Q== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 30/31] hw/arm/tegra241-cmdqv: Document the CMDQV design and lifecycle Date: Tue, 9 Jun 2026 12:25:51 +0100 Message-ID: <20260609112552.378999-31-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6188:EE_|PH7PR12MB5620:EE_ X-MS-Office365-Filtering-Correlation-Id: 02a2f7a5-ebc3-4f35-63b2-08dec61a4e22 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700016|376014|82310400026|18002099003|6133799003|22082099003|3023799007|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: appfKqIowVZQ+MHG5couOlkzPI+YXOS2bI56GnJASrY15CFJhrN13JNdlPGe3rumsHMnUfWsQKmIgWNg4CmBgKvMms1uYl6RshJp/I+K1isDVHG6wa43v7+P1uTVdBNOlYvCgTmSADSBhI/AgMjZ+wmXWBHJde81h2AzfmeWljmS9Ffm/xxOvMaopjJZ78A1yrbWnQmblVtdS/LCtvxE1vN02z0aRwVu3KRaMNCaOI9Zf2aVvcNtucMPqPF0gMQ4DeAITmX9l3iZJlhDJHEKrNbYKKt7tSMbb6nFF6ZIkX77LDIzdn6kyXEYpEx8OJX6B1EA8lLOcL4qZXFgs1r9pT9GoxeWlGPoCxuv46TLwuCsQcvX/o3xafxPWMRb6u4dMA8Vd3IAKfs3In/Ra1DTvCuyzOwG/HvZ8ksfmTA5lbg3VCMYBqZ6qjMJRMEm5/T/1ZlL3wtIzdwDb2tfSdxxgIf5mXcfjl6/vOUXxycrcTc6Oqrl/e63l9tln0P6FkEI/iCSQK3eXACQMLeXFdAscK//vlOq08ImQvLCLWZMhkjWFs8dpksKt/bqNPnfVjRuld5ovoeX50W2FHyOBjM6Tf8zlIhTqgmE7lT5uaTet5Lx3WZ+f+72+bJTxj2vv/JQyNszlgQNnm9rTcl0lDPAuUI5jnxCr8dhWIz2lMgyCx8/wvgt6IKoSoEsZu2HBtGkwBE6uiHw5E4d99R2zSefRArFtyx1bJ8gvmQiLWcw+cc= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(376014)(82310400026)(18002099003)(6133799003)(22082099003)(3023799007)(11063799006)(56012099006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kpD5wX4LDkJeP9AJjGp23V54YmyEL5SIgDP9ckNhtx8j+gg02T9vyheLIU68hFE58RrcEf/s0vaBFzQ9qyRdqMdsOjsfLKBRZBYb2ja9OSTA1v2Nax91ZepUKAn7Fg0imOvvxtVg0KOqyqzPO8g42h1GpVjUcgWCqfqk6t5NL9tckrmNdjcbDVwiCv2B1oG1vEZlRuSbi6Ttq0f8IY62iLXIFA4V1xApDPyCGzQHloEz78WDoCfxbFGgNcB4K1yazbxRVHi6RjaTS0UNRR1RsgSSxFEpJ2hy+gI/e4nvcyaQ/ML4P3+y6mqHGILwEr4qSdh0hfIN7IesIii8uTh69lSK0MvWRDzSdNMm+XmguxjaxUia9HQRYCeYwKzLizEXS4KXtjXbagnTmJk0tRRjtVEUIa8LgyEGtJ6TEldoDgmzIZ/ZjfZH0in0s/O6nZiT X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:29:01.3979 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 02a2f7a5-ebc3-4f35-63b2-08dec61a4e22 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6188.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB5620 Received-SPF: permerror client-ip=2a01:111:f403:c110::1; envelope-from=skolothumtho@nvidia.com; helo=BN1PR04CU002.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004732611154100 Content-Type: text/plain; charset="utf-8" Add an overview describing the Tegra241 CMDQV passthrough model, MMIO layout, guest-driven lifecycle, and per-VM isolation. Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/tegra241-cmdqv.c | 100 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/hw/arm/tegra241-cmdqv.c b/hw/arm/tegra241-cmdqv.c index d821eafca1..29c488e0e4 100644 --- a/hw/arm/tegra241-cmdqv.c +++ b/hw/arm/tegra241-cmdqv.c @@ -7,6 +7,106 @@ * SPDX-License-Identifier: GPL-2.0-or-later */ =20 +/* + * Tegra241 CMDQV - overview + * =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + * + * NVIDIA Tegra241 extends SMMUv3 with a Command Queue Virtualization (CMD= Q-V) + * block. It lets a guest issue SMMU invalidation commands directly to + * dedicated hardware queues (vCMDQs) without trapping into the hypervisor= on + * the fast path. vCMDQs are exclusively allocated to Virtual Interfaces + * (VINTFs); the host kernel allocates one VINTF per emulated SMMUv3 insta= nce + * via iommufd. QEMU emulates the CMDQV MMIO region and drives the host ke= rnel + * calls (VIOMMU_ALLOC, HW_QUEUE_ALLOC, mmap); the actual command processi= ng + * happens on real hardware. + * + * A vCMDQ becomes functional only once allocated to the host VINTF; until= then + * no command processing happens, and trapped register accesses fall back = to a + * QEMU-side cache. After allocation, the cached register state is migrate= d to + * the hardware and command processing runs on the host; guest accesses to= the + * live control/status registers then bypass QEMU and reach the host direc= tly. + * + * MMIO layout (64KB pages, total TEGRA241_CMDQV_IO_LEN) + * ----------------------------------------------------- + * 0x00000 CMDQV Config page: QEMU-trapped. + * 0x10000 Direct vCMDQ Page 0 (control/status): QEMU-trapped and routed + * to either the mmap'd host VINTF Page 0 (if the vCMDQ has been + * allocated to a VINTF) or a per-vCMDQ register cache (otherwi= se). + * 0x20000 Direct vCMDQ Page 1 (BASE / DRAM addresses): QEMU-trapped. + * 0x30000 VINTF Page 0 (per-VINTF control/status): the guest's virtual + * VINTF Page 0 aperture, backed by the host VINTF Page 0 (mmap= 'd + * via iommufd) and installed into guest MMIO as a RAM-device + * subregion when VINTF is enabled; subsequent accesses bypass = QEMU. + * 0x40000 VINTF Page 1 (per-VINTF BASE): QEMU-trapped. Although this is + * a HW alias of the direct Page 1, the kernel only exposes mmap + * for the host VINTF Page 0; the host VINTF Page 1 is not mmap= 'd + * and stays trapped. + * + * The direct vCMDQ apertures (0x10000/0x20000) are HW aliases of the VINTF + * apertures (0x30000/0x40000); they expose the same per-vCMDQ register sl= ots + * under different addressing. + * + * The direct vCMDQ Page 0 stays trapped rather than aliased to the host V= INTF + * Page 0 mmap. The CMDQV architecture allows software to program a vCMDQ + * through the direct aperture before allocating it to a VINTF; aliasing to + * the host VINTF Page 0 mmap would route those accesses into unallocated + * logical slots where the hardware silently drops them, so trapping keeps + * accesses well-defined for an unallocated vCMDQ. + * + * Lifecycle (driven by guest events) + * ---------------------------------- + * 1. First vfio-pci device attach (.set_iommu_device) triggers: + * - tegra241_cmdqv_probe(): IOMMU_GET_HW_INFO confirms host CMDQV supp= ort. + * - IOMMU_VIOMMU_ALLOC: the kernel allocates and enables a VINTF for t= his + * VM, configures the VM's VMID (from its stage-2 HWPT) in VINTF_CONF= IG, + * forces HYP_OWN=3D0, and returns the mmap offset/length for the host + * VINTF Page 0, which QEMU then mmap()s. + * + * 2. Guest writes VINTF_CONFIG.ENABLE =3D 1: + * QEMU installs the mmap'd host VINTF Page 0 into guest MMIO as the gu= est's + * virtual VINTF Page 0 aperture (a RAM-device subregion) and reports + * STATUS.ENABLE_OK =3D 1. The aperture is now a direct window onto the= host + * page, so accesses no longer trap into QEMU; a vCMDQ within it operat= es as + * a real command queue only once it has been allocated (step 3). + * + * 3. Guest completes vCMDQ setup (BASE, CMDQ_ALLOC_MAP.ALLOC, CMDQV_EN, + * VINTF.ENABLE, in any order; each precondition write retries the HW q= ueue + * allocation): + * IOMMU_HW_QUEUE_ALLOC grants the guest a new host vCMDQ in this VM's + * VINTF, binding the guest BASE GPA (translated through stage-2 and pi= nned + * by the kernel) to it. + * + * 4. Guest SMMU driver programs a Stream Table Entry for a passthrough + * device: IOMMU_VDEVICE_ALLOC programs SID_MATCH/SID_REPLACE in this V= M's + * VINTF so that the HW translates the device's guest vSID into its host + * pSID. Commands referencing unmapped SIDs are rejected by HW. + * + * This reflects the current accel SMMUv3 design, which allocates the + * vDEVICE when the guest programs the STE. + * + * Per-VM isolation + * ---------------- + * - Each VM has its own iommufd FD; all iommufd objects (VINTF, vdevices, + * hw_queues, mmap regions) belong to that FD. Cross-FD lookups fail, so + * one VM cannot reach another VM's IDs. + * - IOMMU_VIOMMU_ALLOC configures the VM's VMID in VINTF_CONFIG; the CMDQV + * hardware substitutes / checks VMID on every command the guest issues. + * - The kernel allocates the VINTF with HYP_OWN =3D 0, which restricts the + * guest to a safe subset of commands. + * - IOMMU_VDEVICE_ALLOC populates SID_MATCH/SID_REPLACE so invalidations + * only reach the host StreamIDs assigned to this VM (see step 4). + * - IOMMU_HW_QUEUE_ALLOC binds each vCMDQ to a single VINTF, so a guest + * cannot reach a vCMDQ that belongs to another VM. + * + * Limits exposed to the guest + * --------------------------- + * One VINTF per emulated SMMUv3 and two vCMDQs per VINTF. The HW maximum + * vCMDQ size is 8MiB, but the size QEMU exposes to the guest may be small= er. + * The queue must be physically contiguous in host memory, so QEMU caps the + * exposed size to the host memory-backend page size. Use hugepage backing= to + * reach the 8MiB maximum. + */ + #include "qemu/osdep.h" #include "qemu/log.h" =20 --=20 2.43.0 From nobody Tue Jun 9 23:18:09 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; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1781004590; cv=pass; d=zohomail.com; s=zohoarc; b=n7iPMDtSYY6TnL1XO1CauhVAii2Hch5NxEU58O++lL4I9B/8QQmNLrRgEu5rLOpk/RGRP21ZcOyC9429006NsnmuW86RnphrCE8P1rSuDnOQawUPw1L3V9ypRtJW7iIcxFbaC8qLHqaRofgvJjOguUk32df/YtA8Fw4CggZqQf0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781004590; 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=HPBsrcR3NF1oSbOhexmR4WkWa6SDtHlDExhNSz38gUE=; b=CEKZCjObnVQ9wW00z5WKO7huFWbcIRECVS55M3MTU6Te9aUSTHYyMFMP6yi4by5+sO/d4UlqBubN7nl8Y5tYIZItJoP0QdaRlULLqKREcKJnQFBzjZkzFkSxrNm1sc9AhtQR3wfOvbXe6JE/zWDCGPGxrdlckIyMx3z/N3CyCSE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); 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 1781004590325470.5026063294955; Tue, 9 Jun 2026 04:29:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWudx-0003ST-PI; Tue, 09 Jun 2026 07:29:17 -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 1wWudu-0003AM-HC; Tue, 09 Jun 2026 07:29:14 -0400 Received: from mail-centralusazlp170110009.outbound.protection.outlook.com ([2a01:111:f403:c111::9] helo=DM5PR21CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWuds-0004am-Lj; Tue, 09 Jun 2026 07:29:14 -0400 Received: from BY3PR10CA0007.namprd10.prod.outlook.com (2603:10b6:a03:255::12) by SA1PR12MB5657.namprd12.prod.outlook.com (2603:10b6:806:234::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.13; Tue, 9 Jun 2026 11:29:06 +0000 Received: from MWH0EPF000C6188.namprd02.prod.outlook.com (2603:10b6:a03:255:cafe::8c) by BY3PR10CA0007.outlook.office365.com (2603:10b6:a03:255::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.113.10 via Frontend Transport; Tue, 9 Jun 2026 11:29:05 +0000 Received: from mail.nvidia.com (216.228.117.160) by MWH0EPF000C6188.mail.protection.outlook.com (10.167.249.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.7 via Frontend Transport; Tue, 9 Jun 2026 11:29:05 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:49 -0700 Received: from NV-2Y5XW94.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 9 Jun 2026 04:28:46 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TeuLYBfaf8Xa4AVXb4Zbxr81xMQcmLHAHeEmijMoicLT8ZBN/lT4ZsCOmoqKDn0aciMULt/wYJxRUGYR6CojP1N+fdOfrm9+qLRO+PSxyWD8vQfHz8E3+tk7oxPOyT+pK/bAajHX+AZMcehb0KyVGGXJBF86UK9uePkhCOri6Rdy3gRwxcTKl8tTPavHVlxsWIe5C4Pv46CLqj5zgFimqYBMwvDWCKe0tNJMJ4OkrnyXX1FNggnM6hfWOYF+Xa2tPWxgR3S4Ea5BfCMvttbKERyiK0uToj4CYTO+69aFUZdfQzdvnDNtZEqrXYQWloEpKLuXiqpJa+WzZudIlV2FeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HPBsrcR3NF1oSbOhexmR4WkWa6SDtHlDExhNSz38gUE=; b=vEUmtgqnw2hdYRoi9F2JVTA81Y83S1y+UYZHpnZgyMJUmPxCDLS9b7YCWaB+EGp06vYBzorKwNAUsAkPyCXAUSPkyNckXUnD/3tVjVkMSk5Wkm2jmWuaLViWX3fDMjmdlyn4bvJctZwgNNVXo49iflPTY09L7IKgd01ZxPY8Z6p4x18KiQjAmDVJUGQd/8Cxc0m70xhuZcGOuAOfRxLCsolPAtSslnix2dOKQ3IMev72W5sL7Dh4N9ZtL9yvyRaquJ/ILDW5GuGoCD/f0t+mf7B3pdt58Z5p1GJJUdtCKopGetP4x6SlXtSlbyO9AgpohAu3nHghgotbbn2ZUlNFCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=nongnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HPBsrcR3NF1oSbOhexmR4WkWa6SDtHlDExhNSz38gUE=; b=faY1qrOe8F4vOmk8bjJa+OsH3ErGLHe3E4k4zgZ8A1lIIo4u5RWHJAr+8fSFabky6bYJh4Rvnl4HlbvJt4rdm4VOl6gtwMzRBFOpzbDvZ3DW1aZkog3F5jfSU6WoT+CxEH7mR9Fpsc9uQCPThpXjoWkB5IYiRlZ+VxLw8YgiN1C3ftX6pJqqj0waXVl5wnpf9qR6+N0zjfWPKu883S+Y2rgC10WuRnLo0kOg+Hg5b+KYMZGPa8UTGZscNGCUxwjoEcnToDWMXbQaV8j4NVZ0GDVbgoAv80JFPv0stlVDIMpppVat5+55ib9YgMvC/X4b/ZmWE1uO8gv9yGb27BRb+Q== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: Shameer Kolothum To: , CC: , , , , , , , , , , , , Subject: [PATCH v7 31/31] hw/arm/smmuv3: Add cmdqv property for SMMUv3 device Date: Tue, 9 Jun 2026 12:25:52 +0100 Message-ID: <20260609112552.378999-32-skolothumtho@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260609112552.378999-1-skolothumtho@nvidia.com> References: <20260609112552.378999-1-skolothumtho@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6188:EE_|SA1PR12MB5657:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b54923f-7a8f-4c1b-573b-08dec61a50a0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|82310400026|36860700016|18002099003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: mUd6gHk/chINTyKRvs5XYp7IE5fPQw43++0qwURAxjj0mVHBFkfnPGfutOXeTn1CWiu3nqjYtsFe4oGg2AhYSyBF6y4jDJqTYgk3nXnQ+CfkMWn5WcFLqF8dCsy1A2NRqoTmYdWCC5BzvBYmQlYPAmQev3PYGNt+YcQH4/X04oLwDxR+FSNzEih65rnFy7QV942o9E56ZUXsaNhtgIK4gpeNe4ep6CGehlHdLYgmYWE7NUrjWH07+bVaPrN93JvFUeF3D+m1WmsQmDVWrZRjTzDCJtsF34ms0vGE/XuHvG0sxumZMSj/Fa3Oyjrndodtf0L66NHQnLksucyQgeaNuhJvLG4npn1MAKEYHUHvPPeqYnd0PX6mU/pk5KyDUMpvF1yfBPCGLtTD56bcBHq+I/IGapyOewBtHehEjIMuQqvR4jI2Ydm4tyHdvPw1NA6QXOIEfn2DObfOS0UHy/kWi8CuXopZFjEiefIZGdtzJiPjInE83gQbFncSfbILtyfyao0XyOX60qrQXM8uvaJoU7RSRt+sp1uWipEpO3iGGeZK9p0qrhHp8W3wJFdBVUYAZxW2evIZCiwLngv8PHPLPmwsS7NSvVq8vN+7m5rRCcJK7wjWeo6GhT+A4XOvFu+q3ao/UlYhy3yongqZ3v8VKU08Cc/+SFz6d6tqq2/hqWgUlOCZoVio70zyvklmxknudSbQ0ebKPYfLeDlYr3wRXewND/qYb+FxVBIuRruDc9M= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(1800799024)(82310400026)(36860700016)(18002099003)(22082099003)(56012099006)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZjqJwgmtMVb0eHT2f/xhe6XItfAJbba0SGPN+CG7M6eqCd6ogawwzXwFFzkYmll0+t6fTrgw6Bd6cM/IP+HB3Zt+KmzZHldiLZX4au2z1Xdsfk5BJoFKxu/MQMLt9A4fCANH09s4FpJg2D4Gx53S4tGPRFR0/6+y4stQQjGsrhXGspn/4TB1BlGbvGF5+Q49UGuwRvyMesJwaUgZ9paDVdMXjtJTRxzSgfJqfKG6EK4mAu2YGlrEfDvuqHPNKuhuHL41W7fOmNs0o2xSDKcoI62BME+xbJjMgFowZZAVpeN6bc9kGGsrSiwn2eMJRzw0eTwv/9ud8m20fEimuCxzZFy/2wBeI5PzyLngpAgHwr0TzOATmSltjL37F71pZ3JJE+uSr1j/tfiGhQjED8rIOkj2Z5xTR8OkR1DwVphWElQKackiBen3EKs3Fh3/02IC X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2026 11:29:05.6449 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5b54923f-7a8f-4c1b-573b-08dec61a50a0 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6188.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB5657 Received-SPF: permerror client-ip=2a01:111:f403:c111::9; envelope-from=skolothumtho@nvidia.com; helo=DM5PR21CU001.outbound.protection.outlook.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no 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 @Nvidia.com) X-ZM-MESSAGEID: 1781004591896158500 Content-Type: text/plain; charset="utf-8" Introduce a "cmdqv" property to enable Tegra241 CMDQV support. This is only enabled for accelerated SMMUv3 devices. Reviewed-by: Nicolin Chen Reviewed-by: Eric Auger Tested-by: Nicolin Chen Signed-off-by: Shameer Kolothum --- hw/arm/smmuv3.c | 8 ++++++++ qemu-options.hx | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index a8fb10e531..5e5a6a960c 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -1994,6 +1994,10 @@ static bool smmu_validate_property(SMMUv3State *s, E= rror **errp) "bits if accel=3Don"); return false; } + if (s->cmdqv =3D=3D ON_OFF_AUTO_ON) { + error_setg(errp, "cmdqv can only be enabled if accel=3Don"); + return false; + } return true; } =20 @@ -2144,6 +2148,7 @@ static const Property smmuv3_properties[] =3D { DEFINE_PROP_OAS_MODE("oas", SMMUv3State, oas, OAS_MODE_AUTO), DEFINE_PROP_SSIDSIZE_MODE("ssidsize", SMMUv3State, ssidsize, SSID_SIZE_MODE_AUTO), + DEFINE_PROP_ON_OFF_AUTO("cmdqv", SMMUv3State, cmdqv, ON_OFF_AUTO_AUTO), }; =20 static void smmuv3_instance_init(Object *obj) @@ -2194,6 +2199,9 @@ static void smmuv3_class_init(ObjectClass *klass, con= st void *data) "than 0 is required to enable PASID support." "Please ensure the value does not exceed the maximum " "SubstreamID size supported by the host platform."); + object_class_property_set_description(klass, "cmdqv", + "Enable/disable CMDQV support (for accel=3Don). " + "Valid values are on, off, and auto. Defaults to auto."); } =20 static int smmuv3_notify_flag_changed(IOMMUMemoryRegion *iommu, diff --git a/qemu-options.hx b/qemu-options.hx index d7e48688b5..2eee466be7 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1329,6 +1329,14 @@ SRST =20 - With accel=3Doff, auto is resolved to 0. =20 + ``cmdqv=3Don|off|auto`` (default: auto) + Enable hardware Command Queue Virtualization (CMDQV) for the + SMMUv3 command queue. Currently only the NVIDIA Tegra241 CMDQV + implementation is supported. + + - With accel=3Don, auto means the value is automatically derived f= rom the host SMMU. + - With accel=3Doff, auto is resolved to 'off'. + ``-device amd-iommu[,option=3D...]`` Enables emulation of an AMD-Vi I/O Memory Management Unit (IOMMU). Only available with ``-machine q35``, it supports the following option= s: --=20 2.43.0