get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/2235170/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2235170,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2235170/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260508183717.193630-9-tdave@nvidia.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260508183717.193630-9-tdave@nvidia.com>",
    "list_archive_url": null,
    "date": "2026-05-08T18:37:17",
    "name": "[RFC,8/8] hw/arm/virt: add pci-pre-enum machine property",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "bed6ae240ccad6723accba4e8fe01d44b69ecae1",
    "submitter": {
        "id": 89928,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/89928/?format=api",
        "name": "Tushar Dave",
        "email": "tdave@nvidia.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260508183717.193630-9-tdave@nvidia.com/mbox/",
    "series": [
        {
            "id": 503429,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/503429/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=503429",
            "date": "2026-05-08T18:37:09",
            "name": "hw/arm/virt, hw/pci: PCI pre-enumeration and fixed BAR allocation",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/503429/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2235170/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2235170/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=mQtH6eN9;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)",
            "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nvidia.com;"
        ],
        "Received": [
            "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gByZg2Z7nz1yCg\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 09 May 2026 04:39:23 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wLQ5e-0006lZ-9g; Fri, 08 May 2026 14:38:23 -0400",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <tdave@nvidia.com>)\n id 1wLQ5Y-0006jj-Nt; Fri, 08 May 2026 14:38:16 -0400",
            "from\n mail-northcentralusazlp170100001.outbound.protection.outlook.com\n ([2a01:111:f403:c105::1] helo=CH1PR05CU001.outbound.protection.outlook.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <tdave@nvidia.com>)\n id 1wLQ5T-0002b2-Kj; Fri, 08 May 2026 14:38:14 -0400",
            "from BY5PR12MB4179.namprd12.prod.outlook.com (2603:10b6:a03:211::8)\n by DM4PR12MB6205.namprd12.prod.outlook.com (2603:10b6:8:a8::19) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.15; Fri, 8 May\n 2026 18:37:59 +0000",
            "from BY5PR12MB4179.namprd12.prod.outlook.com\n ([fe80::2036:e8b:9b3:f325]) by BY5PR12MB4179.namprd12.prod.outlook.com\n ([fe80::2036:e8b:9b3:f325%4]) with mapi id 15.20.9891.019; Fri, 8 May 2026\n 18:37:58 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=eqZq4FdQOzqMOFoVmld+5x5yfQmATNoFIcvPuIxQDb0RXN6mL1oZnnuc5YSZ829B6CxqzQ14xVCPMmk4Eu5lZTQfXhsZ4uduVQwrnzACZIxCsEt+uKBz+nXZjkKYOI2TBHXGYgfDPVa6wBSlIXaMdSmX+XQOEpX7v0wiQ1f4hGBWvMzBij6lWqPyAjDFVLb8YSTO2i6c4Ie9/0uwOxRB0sxMeey5G/E5v5Bunqyd+41CyVGsUnRgMYR/8vhgahRqW/60w+QUCHAKQEPjFDSanK02l2h+mS+i/a8zSvmu1oXYRve3BXipYDoGVW+WNuNbUTAzncSka43FpbgJgpAbjQ==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=3BmZzqD5g0RjTtepjL+pk+Y22ANUW4q9Gg58vJr4ggA=;\n b=qF8FC3Y6navVIjEIw4rtZwYWnV1znESVZtk9hjzlreE9IBW1LT3QuhWw9SYoMarxXa+Frm8jUOUNkc0GEETKuPVa6GViBMeqpLzK7kAifrieFV7E6qba8sFnKMZ6YIS8hV9d22lRRMKaHSBYjUXhaKsNN1R1xiTiFvVbFYbo4coAdUyFomDz5CHzJfwopZLDgGdPXRxPjHRRKlmRinHvDCyu9wyw9vcq5t9LYXvh0ifruq6/UscZU0jEfKzVui1g+cncdBRRAxgNvYvjrNSSkRV8swNgL5y0a6XNUHMRE+XZQiy0WNvzpcwRC/9GI4gxCxGnyeZV1sS4lzoLepKUOQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com;\n dkim=pass header.d=nvidia.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=3BmZzqD5g0RjTtepjL+pk+Y22ANUW4q9Gg58vJr4ggA=;\n b=mQtH6eN9/dvf3QPdvkbqREk9lxTSD1Cv6Jk8HssoyOkiNNV7Cvxq3n+BFCz91lmEVkoSiKayLRlUQY0VDexDaDicFybNFxF5XsM83Gkvn8y0IqW8WFHfEU0dMHYOnF1NBwI23BIeNK6jyGDwBvrirGZngOQeIHmlTwESVPeejC39sVnWJr1PQNLv9Hvuy2ioWTerrKN/EeQjmLIc5tVm1rKvZIiRBe+weAbzo74y41gyX0ypgrhXkjv3pLEp921I3YFRot1BLDggjyeGs6xNIuw1H+eGx7OZBYiQ2G3cLIgu80LzKhBRabeT4TN+MgwTwrdtC0wuaj2hDeDvwDJgzA==",
        "From": "Tushar Dave <tdave@nvidia.com>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "alwilliamson@nvidia.com, jgg@nvidia.com, skolothumtho@nvidia.com,\n qemu-arm@nongnu.org, peter.maydell@linaro.org, mst@redhat.com,\n marcel.apfelbaum@gmail.com, devel@edk2.groups.io",
        "Subject": "[RFC PATCH 8/8] hw/arm/virt: add pci-pre-enum machine property",
        "Date": "Fri,  8 May 2026 13:37:17 -0500",
        "Message-Id": "<20260508183717.193630-9-tdave@nvidia.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20260508183717.193630-1-tdave@nvidia.com>",
        "References": "<20260508183717.193630-1-tdave@nvidia.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "MN0PR04CA0024.namprd04.prod.outlook.com\n (2603:10b6:208:52d::14) To BY5PR12MB4179.namprd12.prod.outlook.com\n (2603:10b6:a03:211::8)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "BY5PR12MB4179:EE_|DM4PR12MB6205:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "10276576-64e8-4e5f-0acc-08dead30ed16",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|366016|1800799024|376014|22082099003|18002099003|56012099003|3023799003;",
        "X-Microsoft-Antispam-Message-Info": "\n 1mbtS108Ad2Im9h41cs0MDVzTO84ku6mE+4M6jA03+Mzsl6vlSx5kDHb4QRMltoKeMCLDQcsf7pjtL/YUfSgcJ+x7hK9dcJSf6zmvQXsAq8nqUmeQ9nQPAEA1KFtG4wwKOPUwwz7P//biab/4qPGowJHmoc/19Oc06AqyyH5udUZiUvBs9G4/XVplddY8YxWPYrc3PnUUi9rtpvCtvDX+pSyDkD59g0T8ZdYV33LSk1/gmITQj2Z9bhLku1ww4qCbdmAEsAiLO7KZBKYfp1XhPZ+jnwUstB17yOJ21VCBGsZ7xlN31GtMIS9zlSQVvpTeywCYiq9HL/PfiHskl22/Sy0FfxVPYOA8RtdMV+6YuR45x37ldUzMUpKcjlXymTVyIl7YlO6aI93As9XtM9Miq1sKk4fay5ZkvCbLF018g6aKTAk9n3diYAsLkXQKqgxDipMcKE+C9o5WraIKr3jeVo8E6pzzJpOqZ5O/7FpnrNmvIAqYlpMTa8m6jweS+WjI19Q0vEpblOOk6N0OxUa5/PalxdJ17jdUp5jbXa3SBvx5GO4ieei6bRge71RjrIwowzYV+li0P66IFwFhKWdrq5ea2peWB1nY75hRpoQfmMnjGr55MTmT2ZN/WxJNiWb0iWpPopfcZjF8v90pgkip3T9LO4XAp97NjhiclS18+xq2M7A2QzydKXRVfOmmiZI",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:BY5PR12MB4179.namprd12.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(366016)(1800799024)(376014)(22082099003)(18002099003)(56012099003)(3023799003);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n wUdyKEgwyAvbMyuX2X1tp+MnZi0ajBKONOrzBRgrRSBgOSmWdn0LBaYHwYsx9MGteLvsqk0iOAf5skDadkfDtEXWF55FPKT3CtDsW5QRQaqZdUpT581ox+ZwxgLGdYK79rdafv/sLdnZUclV0GoHdfSGvdR1rMoEJpAtJ1C4qUPa52mqqvV1jofMQxUoQa0+JGdq24y5CPOSDk+RaY4EDXwt6Ipq482p5zgvELckA2dzou6NQAPLH73KzrUCh3mNdUYh3dRVps9O0fPRZcjLQ4Jr597jefzRg++iMVqvHXwMBAlvyLLY1l/JxqlGfn33qPpkcgr9bMcs0c3KAjArMjOtNDpAsU6+b/tdm2cMTXXGNsIUyYC8TMSYIa3WHJYjoKBG4FFNNWjnxcFU3GuNxVYycLjeExSbARATBYAF089Z7k40sKk4E3Le4z7QjVYFYXjyuOhdslbXr85K7qLBy+ftbTS2BIGK9bq1vn5T8qQHA3zyaPbKSiGEHEwah/y/GYHaE+KXpYZYesrrvlbCUBPHP6i5jimzLrlisVqnwysXR/PZOr+E/R+wvN4Kt4cAYn6+I247pK1I2717krXv4oQGYCNfG4ttdoFMRXdMNwsDPPVyaMlWkwDfGUpUAmXhOjPoHWCscreQ48FmOSEUrNGKMTc1zwQalvUF41FVp+tSIGPwn7MYuATVS3uG7xNZTtlYorzyeV6dC5oaxTLJDyshBqzNZekkQ/5oPSB5SIPLDOTzC+38mKKLh/x/iVZHvyLslrfqSt3UJuMJxeW4veQxxAhxzcKGiUza3WrGcmtD6SPsqPpitM71oLsB5BU4mwgkhCyYo1ERBhv87i/b1+YhNfjQ5WwFVER46pc2008Dbv+UfpAWWD2+zqc0FmzckMK+MnFjeUTNj0icSVM2ijZtrKYaH7zTNy+1MPCdkcchNs0BPSMslR1oUmtmfsUcnkr0lxNlFDARoflnHASyhq/3hioqMwwtn4amOlMuiuQmvZ8BSXsxbjYc386fMk+l4YuaOr8u/ixvgphDKvpiloLl2nfFBvLsfxD4bzB8tigkpxOYslUNvTj+sCWwCFME1nAnnr3FxNOGLyqV6XTATHpkQwK85bIFB4mpec0xdadhcEl3iySK8IETGbOlOce8Ph5IqYTjGGaVdoap3JTuQnWVmNLZ3Yr1HZxlmytrB98Gjo+wr7Va3x33mE2Sr+j7kqVOWVP0FkimzHIWLehVWfG4sqvAuNFWiyzHElOWaeOI/53TtFsO4zKTMrUDx2VVQULJhkwzOK9jtCQiq1bGuznMc7m8sUoGTvAIJz0OH2th12m9JhL8bXAQnJgebhNspWAVX5fmZc1hzlu/5E9sUU7LqObmSOXWO7+96z3UZ5wb4MxY7m3HdSh+WVQ193oYpviQ/JaYzeB5jLnK0uNUR0ULYXdiYtG3sf0thVwSAVkEnqqbF2RQRZx+mxYS+2me+nc+Hze90uQvrndHkdwKqZ2IAOmsnNEQCoZOtGo4stX6ZAlAxCSfXa46rsWHnoazATDyH4kejo/LGn49/fPsSqwAwODxJQSMDzUd1YHKjz4SK1Bew6RdKYjOjuxrimJUIbETxpicWIR1t8uZalFkPlHbnH1Vi31DwiXrF6j+LXuu6w/71Q0ZFlkaQwSigJHG5E1mb/n+2GYkCRlSsUB+DpyOAiUBSq8yeY/F6oF8M1xFgeyxqLMuR6FlGEb7IfZVpdmi+L68B2MuCPMWKeJTJA==",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 10276576-64e8-4e5f-0acc-08dead30ed16",
        "X-MS-Exchange-CrossTenant-AuthSource": "BY5PR12MB4179.namprd12.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "08 May 2026 18:37:58.2351 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n x79vPuThMU3c+/VYYEvq+Z3Xa++cVmi9yOjltDZ+Sj5Puyr/MlKfi7bpr6su/fn1YfN0dpxZTnrqLMTzztYuxg==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM4PR12MB6205",
        "Received-SPF": "permerror client-ip=2a01:111:f403:c105::1;\n envelope-from=tdave@nvidia.com;\n helo=CH1PR05CU001.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.44,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001,\n 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 <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "Add a \"pci-pre-enum\" option for the virt machine. When enabled, QEMU\nperforms PCI enumeration and programs BARs before handing control to\nfirmware.\n\nThis is intended for use with the \"fixed-bars\" property, where the\nuser assigns fixed BAR addresses and expects firmware to preserve the\nconfiguration.\n\npci-pre-enum is exposed as a separate machine property rather than\nbeing implied by the presence of fixed-bars. This allows QEMU's PCI\nenumeration path to be exercised independently (for example, to\nverify that QEMU produces the same device enumeration as EDK2)\nwithout requiring any device to specify fixed BARs.\n\nWhen enabled, a \"pci-enum-done\" property is added to the PCI node in\nthe device tree to indicate to firmware (e.g. EDK2) that PCI\nenumeration has already been performed.\n\nWhen disabled (default), behavior is unchanged.\n\nSigned-off-by: Tushar Dave <tdave@nvidia.com>\n---\n hw/arm/virt.c         | 70 +++++++++++++++++++++++++++++++++++++++++--\n include/hw/arm/virt.h |  1 +\n 2 files changed, 68 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/hw/arm/virt.c b/hw/arm/virt.c\nindex 55f41c7e46..7d41bfc457 100644\n--- a/hw/arm/virt.c\n+++ b/hw/arm/virt.c\n@@ -52,6 +52,7 @@\n #include \"system/whpx.h\"\n #include \"system/qtest.h\"\n #include \"system/system.h\"\n+#include \"system/reset.h\"\n #include \"hw/core/loader.h\"\n #include \"qapi/error.h\"\n #include \"qemu/bitops.h\"\n@@ -94,6 +95,8 @@\n #include \"hw/cxl/cxl.h\"\n #include \"hw/cxl/cxl_host.h\"\n #include \"qemu/guest-random.h\"\n+#include \"hw/pci/pci-resource.h\"\n+#include \"hw/pci/pci-enumerate.h\"\n \n static GlobalProperty arm_virt_compat_defaults[] = {\n     { TYPE_VIRTIO_IOMMU_PCI, \"aw-bits\", \"48\" },\n@@ -1697,6 +1700,10 @@ static void create_pcie(VirtMachineState *vms)\n     qemu_fdt_setprop_cell(ms->fdt, nodename, \"#interrupt-cells\", 1);\n     create_pcie_irq_map(ms, vms->gic_phandle, irq, nodename);\n \n+    if (vms->pci_pre_enum) {\n+        qemu_fdt_setprop_cell(ms->fdt, nodename, \"pci-enum-done\", 1);\n+    }\n+\n     if (vms->iommu) {\n         vms->iommu_phandle = qemu_fdt_alloc_phandle(ms->fdt);\n \n@@ -1832,6 +1839,20 @@ static void virt_build_smbios(VirtMachineState *vms)\n     }\n }\n \n+static void virt_pci_apply_fix_bar_after_reset(void *opaque)\n+{\n+    VirtMachineState *vms = opaque;\n+    PciFixedBarMmioParams mmio = {\n+      .mmio32_base = vms->memmap[VIRT_PCIE_MMIO].base,\n+      .mmio32_size = vms->memmap[VIRT_PCIE_MMIO].size,\n+      .mmio64_base = vms->memmap[VIRT_HIGH_PCIE_MMIO].base,\n+      .mmio64_size = vms->memmap[VIRT_HIGH_PCIE_MMIO].size,\n+    };\n+\n+    pci_enumerate_bus(vms->bus);\n+    pci_fixed_bar_allocator(vms->bus, &mmio);\n+}\n+\n static\n void virt_machine_done(Notifier *notifier, void *data)\n {\n@@ -1864,11 +1885,30 @@ void virt_machine_done(Notifier *notifier, void *data)\n     if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as, ms, cpu) < 0) {\n         exit(1);\n     }\n-\n-    pci_bus_add_fw_cfg_extra_pci_roots(vms->fw_cfg, vms->bus,\n-                                       &error_abort);\n+    /*\n+     * In pci-pre-enum mode, EDK2 does not perform PCI enumeration or\n+     * resource assignment (PcdPciDisableBusEnumeration = TRUE). All root\n+     * bridges are marked ResourceAssigned, meaning the topology and\n+     * MMIO/MMIO64 apertures provided by QEMU are treated as final.\n+     *\n+     * In this mode, each root bridge is consumed as an independent resource\n+     * domain. Exposing additional root bridges (e.g. PXB extra roots) that\n+     * share identical MMIO/MMIO64 apertures creates duplicate resource domains\n+     * with overlapping address spaces, which is invalid in this mode.\n+     *\n+     * Therefore, extra root bridges are not exposed in pre-enumeration mode.\n+     */\n+    if (!vms->pci_pre_enum) {\n+        pci_bus_add_fw_cfg_extra_pci_roots(vms->fw_cfg, vms->bus,\n+                                           &error_abort);\n+    }\n \n     virt_acpi_setup(vms);\n+\n+    if (vms->pci_pre_enum) {\n+        qemu_register_reset(virt_pci_apply_fix_bar_after_reset, vms);\n+    }\n+\n     virt_build_smbios(vms);\n }\n \n@@ -2988,6 +3028,20 @@ static void virt_set_mte(Object *obj, bool value, Error **errp)\n     vms->mte = value;\n }\n \n+static bool virt_get_pci_pre_enum(Object *obj, Error **errp)\n+{\n+    VirtMachineState *vms = VIRT_MACHINE(obj);\n+\n+    return vms->pci_pre_enum;\n+}\n+\n+static void virt_set_pci_pre_enum(Object *obj, bool value, Error **errp)\n+{\n+    VirtMachineState *vms = VIRT_MACHINE(obj);\n+\n+    vms->pci_pre_enum = value;\n+}\n+\n static char *virt_get_gic_version(Object *obj, Error **errp)\n {\n     VirtMachineState *vms = VIRT_MACHINE(obj);\n@@ -3726,6 +3780,13 @@ static void virt_machine_class_init(ObjectClass *oc, const void *data)\n                                           \"in ACPI table header.\"\n                                           \"The string may be up to 8 bytes in size\");\n \n+    object_class_property_add_bool(oc, \"pci-pre-enum\",\n+                                   virt_get_pci_pre_enum,\n+                                   virt_set_pci_pre_enum);\n+    object_class_property_set_description(oc, \"pci-pre-enum\",\n+                                          \"Set on/off to enable/disable PCI enumeration and resource assignment\"\n+                                          \" in QEMU. When enabled, QEMU programs BARs (including fixed-bars\"\n+                                          \" addresses) before handing control to firmware.\");\n }\n \n static void virt_instance_init(Object *obj)\n@@ -3768,6 +3829,9 @@ static void virt_instance_init(Object *obj)\n     /* MTE is disabled by default.  */\n     vms->mte = false;\n \n+    /* PCI pre-enumeration disabled by default */\n+    vms->pci_pre_enum = false;\n+\n     /* Supply kaslr-seed and rng-seed by default */\n     vms->dtb_randomness = true;\n \ndiff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h\nindex 410df857c7..0786f4a4fc 100644\n--- a/include/hw/arm/virt.h\n+++ b/include/hw/arm/virt.h\n@@ -187,6 +187,7 @@ struct VirtMachineState {\n     MemoryRegion *sysmem;\n     MemoryRegion *secure_sysmem;\n     bool pci_preserve_config;\n+    bool pci_pre_enum;\n     hwaddr override_pcie_mmio_base;\n     hwaddr override_pcie_mmio_size;\n };\n",
    "prefixes": [
        "RFC",
        "8/8"
    ]
}