From nobody Mon Jun 8 08:54:32 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1780508112; cv=none; d=zohomail.com; s=zohoarc; b=fnZikBElXxTEqmpkgNTE+ai7uJS9u6tflRIK+bD6xvQYZqkoALen7f1bUkCMw7vqi4Xg+e6v5cY+gAo0KMW9IjEMG8SOTF+S5iv42TyYXoWI/uiJsohrcB2o/N8Ns5pxTpVW031YygnhsbQKrauYwf866FUuoDAC9E5FWME/t4U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780508112; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7DGOmpfUA+A9Y3gDGAaNhpfDu5+a0J7SrWtiweDYqsA=; b=Bdlz+PhkhqwCOPDAANVTss0rYL/nYytwWPigIWG77Wlf2KhwacAlptcDtQNrYr7shp2z5pPdzQsOyH8naLUVR1XwhuTcXDjcfIMkOmxKOGXxTbXuCmT5L7GZIwnLBgpqv5sD+jcYKcczMnYgEjh+5/psKKz2oPHOZxyRcatCCY0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780508112565197.722881659069; Wed, 3 Jun 2026 10:35:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUpTo-0003mu-BZ; Wed, 03 Jun 2026 13:34:12 -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 1wUpTm-0003me-GD for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:10 -0400 Received: from mail-dl1-x1241.google.com ([2607:f8b0:4864:20::1241]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wUpTk-0003GJ-Qf for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:10 -0400 Received: by mail-dl1-x1241.google.com with SMTP id a92af1059eb24-137dd51129bso98362c88.1 for ; Wed, 03 Jun 2026 10:34:07 -0700 (PDT) Received: from kotori-desktop ([2408:820c:8ffa:7da0:c45e:b5c8:d6e8:bd7e]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3074d9fde90sm4354810eec.0.2026.06.03.10.34.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 10:34:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780508046; x=1781112846; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7DGOmpfUA+A9Y3gDGAaNhpfDu5+a0J7SrWtiweDYqsA=; b=W8Yft3w9GELx93cfutKys39DZ5t/933XtvE/9I7csLjfp1a49Wz6CIvAMVA4+V7Ai0 NshGxoxc84OVehsQPq3VmSDhcm9BLrnlwy3dMB8Vc4bkIZyhSSk2un7eBpm/b0HZuHWp TcJjejcP3gyKNG03yA8LEvqybEhn6+6o4lo8YnUdvLK8cAxVRjTvzIsL2bhSsaJ5ShJM RViDhlIzN/mjzwRVM5wHwHtIbZYiorFm2wzKBqa9G1VVz8LYVYP1lfnOBEae/0ZmBRZ7 sE02lPi03w1IXUokbp/Y8Ge/zh0oktpkljOnTwNSHtSZAYCg2OHsP06Z/zhRGX4/8GNx /E+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780508046; x=1781112846; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=7DGOmpfUA+A9Y3gDGAaNhpfDu5+a0J7SrWtiweDYqsA=; b=BflUIXEB5PSNhg5XWXnLoBo80WgyIQ3noTFOEVXUUfEXDAVqmzIKMmH4bA+NhyYHb4 S6orLDDmMhNcPOCUGhNh6x5jeX0vb0jZc2M1ov49DFVpSfV5xqUPcOWNeJ7tNQxV0Ozy VGSFo8d7FhPMkSMJUFVx4Zu/K1MyScxQfLlw1LTktV913ozJIdhihqU6mcSCgwmkAnyK oYWZaVEHZobvsX1hiyDo+MNSTuls8wQelCejta1Q3Miw4kIHFCX50hQojtmwf8lj+xvC 0mQuf3NSlCRbStSyGx8af4CMWbcZU84gOk3H1IsaoO3zZz+ICL8glq2PMExLsaSHM5ds gr0Q== X-Gm-Message-State: AOJu0YykiBMUrqsRmY8W0zfJgG1O7N6ChZGDXJa6DGB1FGRw9qDLxn+A Ouch3KM/p0/n25TANonvrAC6uJCd2AL4q1rR6i2gBB5l75JeJKKQhhwzCdmhqW829Q== X-Gm-Gg: Acq92OGhGaxEiH407lKtQNa8AdlQCBHLZCC+idt7OmHXZCyE0XQQTFlgwRW65F46/Hw 2G85W2zGCNYnazqMxQIW2uA6pPlywXndpqUmN4n+ADbmp/Ahm+F5GBrii5rcRQoz6TdMrbAKKmI 0DkGHrIknCG4UuIBdweey0rWLeqJSkhVGxxG8PTtQ69DQmRfakB9XnBD14A+KJQxMlN3QY0c6jL Ch+/eqqOww0sdFzgtDLhEKchlbdwICyyW0b4bjCUYxh394sFFOSPGrzSYbxMwwqnzynjm+27Kbc T6L4p+9jufV85XFQTan+I0xSOwt6dT/uXiCxZO27t+WbJrZ9gAhzoGGbhr92D9RUKerW27rOP6K ggQZ4lR6IWNA51C152iEDQcyGDAX/u2CoR7KG6PWugW2qtHC2Eyi1qLoSOOH3bw6gCiFWViO416 U7lnrEAHw2EuCjv8UGkQrL/f+JD75/u/YNek3rsq1Fsw== X-Received: by 2002:a05:693c:3b02:b0:304:c01e:1cfa with SMTP id 5a478bee46e88-3074fb8261bmr2618403eec.16.1780508046454; Wed, 03 Jun 2026 10:34:06 -0700 (PDT) From: Tomita Moeko To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Tomita Moeko , K S Maan Subject: [PATCH 1/6] hw/pci: Recalculate option ROM checksum before patching ID Date: Thu, 4 Jun 2026 01:33:49 +0800 Message-ID: <20260603173355.36121-2-tomitamoeko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260603173355.36121-1-tomitamoeko@gmail.com> References: <20260603173355.36121-1-tomitamoeko@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1241; envelope-from=tomitamoeko@gmail.com; helo=mail-dl1-x1241.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @gmail.com) X-ZM-MESSAGEID: 1780508115411154100 Content-Type: text/plain; charset="utf-8" pci_patch_ids() only adjusts checksum based on the new IDs. For an option ROM with invalid checksum, the patched one will still have an invalid checksum. Always calculate the checksum and patch it if necessary to ensure the option ROM is valid. This is intended for fixing the romfile used in IGD passthrough as multiple IGD devices share the same rom with possible non-matching device ID, and its checksum is known to be bogus [1]. A helper function pci_rom_calculate_checksum() is added and exported for reusing in IGD-specific quirk later. [1] hw/vfio/pci.c:1090 Reported-by: K S Maan Signed-off-by: Tomita Moeko Tested-by: K S Maan --- hw/pci/pci.c | 22 +++++++++++++++++++++- include/hw/pci/pci.h | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 4298adf5a0..043fef1954 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2472,6 +2472,21 @@ static uint8_t pci_find_capability_at_offset(PCIDevi= ce *pdev, uint8_t offset) return found; } =20 +uint8_t pci_rom_calculate_checksum(uint8_t *ptr, uint32_t size) +{ + uint8_t checksum =3D 0; + uint8_t orig_checksum =3D ptr[6]; + uint32_t i; + + ptr[6] =3D 0; + for (i =3D 0; i < size; i++) { + checksum +=3D ptr[i]; + } + ptr[6] =3D orig_checksum; + + return -checksum; +} + /* Patch the PCI vendor and device ids in a PCI rom image if necessary. This is needed for an option rom which is used for more than one device= . */ static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, uint32_t size) @@ -2507,7 +2522,12 @@ static void pci_patch_ids(PCIDevice *pdev, uint8_t *= ptr, uint32_t size) trace_pci_rom_and_pci_ids(pdev->romfile, vendor_id, device_id, rom_vendor_id, rom_device_id); =20 - checksum =3D ptr[6]; + /* In case the checksum is bogus */ + checksum =3D pci_rom_calculate_checksum(ptr, size); + if (ptr[6] !=3D checksum) { + trace_pci_rom_checksum_change(ptr[6], checksum); + ptr[6] =3D checksum; + } =20 if (vendor_id !=3D rom_vendor_id) { /* Patch vendor id and checksum (at offset 6 for etherboot roms). = */ diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 5b179091de..551ab16139 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -1103,4 +1103,6 @@ void pci_set_enabled(PCIDevice *pci_dev, bool state); void pci_set_power(PCIDevice *pci_dev, bool state); int pci_pm_init(PCIDevice *pci_dev, uint8_t offset, Error **errp); =20 +uint8_t pci_rom_calculate_checksum(uint8_t *ptr, uint32_t size); + #endif --=20 2.53.0 From nobody Mon Jun 8 08:54:32 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1780508071; cv=none; d=zohomail.com; s=zohoarc; b=SELYbPFTtFhTN5g/BqG4vxSpR14EryYKWYjDCk4QaBHJdf3sMX9yXuReRAUXWV0msEo1x3ShXsFuX50Pqz0Fy/OhF7WQjLPJOL66ZJDtQTlwhWp/6kraBiFjqCoWCqBCItmEmUpobPHtMTgjozk5DIj7mJIQI5Jg2iHtq+sroQA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780508071; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2U2yBLgiE+5Vi7+fx1bfrmrTfGn8TlKVRJiOQP/25kM=; b=PHkJkBLm/bY6hO37LiuztLDHKZeX3j9PLR7IqrrOJZjaPtcUo6XHfP4ST0MSs21fzLSIsZ3X6BcMmABzQlhCPjM9Kj91QcFx6V+U1wzl1u0W65FebDh3ZuNCHEDLmZfhtzQ57P+XpIc6K4joVLh2DgYsMLMuS3JwzS/J8vrdF4Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780508071573282.2815825929441; Wed, 3 Jun 2026 10:34:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUpTp-0003nM-PS; Wed, 03 Jun 2026 13:34: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 1wUpTo-0003mw-JM for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:12 -0400 Received: from mail-dy1-x1344.google.com ([2607:f8b0:4864:20::1344]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wUpTm-0003H6-TS for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:12 -0400 Received: by mail-dy1-x1344.google.com with SMTP id 5a478bee46e88-304e83724bfso7874437eec.0 for ; Wed, 03 Jun 2026 10:34:10 -0700 (PDT) Received: from kotori-desktop ([2408:820c:8ffa:7da0:c45e:b5c8:d6e8:bd7e]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3074d9fde90sm4354810eec.0.2026.06.03.10.34.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 10:34:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780508049; x=1781112849; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2U2yBLgiE+5Vi7+fx1bfrmrTfGn8TlKVRJiOQP/25kM=; b=T36XUHkwj8D9cEdOiAdJt00sTgMoT56StCHcpPlfcmoacHnev4fURCVNO3wQTEJchz u8UOOGxHsJ3Bu4+V4g1rRfKe1tgUUEXUgiLh+SJvKGOgBL3yu1ZseMX4Kn6LPkKOnelb OfvEfNO6bryRHx91AjjHpVmG265NaTEJK5ZiFDoUxNLH3+zoSU/AdymnGJmIg/uinWMI FJCOKZcCLNiYTCe9EPKRIhaFUtIJLgSRIcjwD6ZjBKJqC9CCyRMedIksAlqV9N577e3V OP4/+6ESX86jJQSU5N+701mcUadlvB5cr7j4tjDPwltNX9IW6YhlA0fCwi10Eq875A/L TdVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780508049; x=1781112849; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=2U2yBLgiE+5Vi7+fx1bfrmrTfGn8TlKVRJiOQP/25kM=; b=irNkwF3aTbnCVFd/cArXqeYiN1Tkb8Yl2F6lcisOXuP/e13MiXT2VoLpU3j0FwiJjw kzEg2CT8J87SQxwz+OFntV4kunnG5Izvi23JN1KMGwg+JPHi0gy3g5rXZlxM/LTErZhC 2cL/k/3/cPLyVrJYeiErFOMDzAs0KFIbr622xehSUVKl7/1l+JmiMbYkOV26SpUYqtjw R6O5u0AaJ9ZY4cN5qMsW/dZB/L+oOeAfMcC3/g3pmzkrBAqZ22xkeuPGOAfcxBWfNDS5 kSm0xT30nSxPJZfSYhcFFmTZPihGC5Lq9sz6TFSmLqUaIXYrCaGSp+eTWrYWYnrZbWvV bUwQ== X-Gm-Message-State: AOJu0YzAacc7WRWoC7SiEHRUH35hRe90k9JS/JfbvOkBmokhurQHqn+y lOOmtrymoBVEPiNsazRAj0kzOkbgaGrl7uVw1+1icTOvFSJd1tY9uZi9rP955jlH/Q== X-Gm-Gg: Acq92OFTs9TdkREQLZm+uW0ROGY4vNw+pSsvBuaI/8sTrMAcwbprnQ3Am5RZS73+wqT +EAY4+O97l/MpkZbTgPkg1Qj2EofUw1wq1CTTEw6NO+V9T6mRlwV0Qg8w2ixK0jMc9/4aAzLWSF Ykz1rOknWF880gNpNEa5QczYsrtac0zPi1hxrTks9tTzo4TlcleICRLEuFFR/6AhkBKXzUlRN43 Z/KpBPltyInmqYM+Bk+inK0oehycF8BwLIibotXAVJcTIu4As5hOlTKSH6YF/4Sue8bXqrBpsMl WrS/shSFY1SWlOfFOz1pvv4D0JwTEU63YMxghg7xii2PIQHLHD2+lvMiNS3RvHDiEiMqKALL9Vz sKx8F1pDR2Z23BG3CWjvpmuuq9h7eB3xcNDPdclbzhDFw5zJszlSxfh71dexIoUSePMnXofJfdo sF3qTB6Tc6tEJmrhK63kCxAYde85ZVUTjo3pX+drCajg== X-Received: by 2002:a05:7300:2393:b0:304:cefc:5fd7 with SMTP id 5a478bee46e88-3074fc910bbmr2360716eec.32.1780508049269; Wed, 03 Jun 2026 10:34:09 -0700 (PDT) From: Tomita Moeko To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Tomita Moeko , K S Maan Subject: [PATCH 2/6] hw/pci: Introduce rom_need_patch_id flag in PCIDevice Date: Thu, 4 Jun 2026 01:33:50 +0800 Message-ID: <20260603173355.36121-3-tomitamoeko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260603173355.36121-1-tomitamoeko@gmail.com> References: <20260603173355.36121-1-tomitamoeko@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1344; envelope-from=tomitamoeko@gmail.com; helo=mail-dy1-x1344.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @gmail.com) X-ZM-MESSAGEID: 1780508073374158500 Content-Type: text/plain; charset="utf-8" Allow external code (e.g., VFIO IGD passthrough) to request PCI ID patching for a custom romfile, replacing the existing is_default_rom flag for this purpose. Reported-by: K S Maan Signed-off-by: Tomita Moeko Tested-by: K S Maan --- hw/pci/pci.c | 14 ++++++-------- include/hw/pci/pci_device.h | 1 + 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 043fef1954..17ce7d8394 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -345,7 +345,7 @@ static const TypeInfo cxl_bus_info =3D { =20 static void pci_update_mappings(PCIDevice *d); static void pci_irq_handler(void *opaque, int irq_num, int level); -static void pci_add_option_rom(PCIDevice *pdev, bool is_default_rom, Error= **); +static void pci_add_option_rom(PCIDevice *pdev, Error **); static void pci_del_option_rom(PCIDevice *pdev); =20 static uint16_t pci_default_sub_vendor_id =3D PCI_SUBVENDOR_ID_REDHAT_QUMR= ANET; @@ -2250,7 +2250,6 @@ static void pci_qdev_realize(DeviceState *qdev, Error= **errp) PCIDeviceClass *pc =3D PCI_DEVICE_GET_CLASS(pci_dev); ObjectClass *klass =3D OBJECT_CLASS(pc); Error *local_err =3D NULL; - bool is_default_rom; uint16_t class_id; =20 /* @@ -2363,13 +2362,13 @@ static void pci_qdev_realize(DeviceState *qdev, Err= or **errp) } =20 /* rom loading */ - is_default_rom =3D false; if (pci_dev->romfile =3D=3D NULL && pc->romfile !=3D NULL) { + /* using a built-in default rom */ pci_dev->romfile =3D g_strdup(pc->romfile); - is_default_rom =3D true; + pci_dev->rom_need_patch_id =3D true; } =20 - pci_add_option_rom(pci_dev, is_default_rom, &local_err); + pci_add_option_rom(pci_dev, &local_err); if (local_err) { error_propagate(errp, local_err); pci_qdev_unrealize(DEVICE(pci_dev)); @@ -2549,8 +2548,7 @@ static void pci_patch_ids(PCIDevice *pdev, uint8_t *p= tr, uint32_t size) } =20 /* Add an option rom for the device */ -static void pci_add_option_rom(PCIDevice *pdev, bool is_default_rom, - Error **errp) +static void pci_add_option_rom(PCIDevice *pdev, Error **errp) { int64_t size =3D 0; g_autofree char *path =3D NULL; @@ -2648,7 +2646,7 @@ static void pci_add_option_rom(PCIDevice *pdev, bool = is_default_rom, return; } =20 - if (is_default_rom) { + if (pdev->rom_need_patch_id) { /* Only the default rom images will be patched (if needed). */ pci_patch_ids(pdev, ptr, size); } diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h index 5cac6e1688..daa679b3f5 100644 --- a/include/hw/pci/pci_device.h +++ b/include/hw/pci/pci_device.h @@ -159,6 +159,7 @@ struct PCIDevice { bool has_rom; MemoryRegion rom; int32_t rom_bar; + bool rom_need_patch_id; =20 /* INTx routing notifier */ PCIINTxRoutingNotifier intx_routing_notifier; --=20 2.53.0 From nobody Mon Jun 8 08:54:32 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1780508101; cv=none; d=zohomail.com; s=zohoarc; b=MwzQ9v75n6WTal5CsftUl2wp/tnIWkEBn8pYyBFxwiocKkEhd1HOetE/8iPaJSs3zSoW2h/b7yOhSmwDUWXQzyc/QP1qgMoUJckoZfQgXvOYq9LtDpvIB2S1bL7PWoRAZ9JPvQwMaA8l3jk8Fv5yqCcChg8i//xYteLPfnraPTc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780508101; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KENayTV64ozrbrycI3tpvUimBTS8XEoQD01DiY02LlE=; b=luQKLQttCWEs/WYnsWqpozeuXak2vQqoJSUnB5hS0UnVMv2XXAmmV9FFxfC6e7joWRwHhyZ42yy1LqHPmdio+A1wS1jStFcT57NOEDa4Y7VhmJHDFfAfBRQv+IpfjskE62qLJNoB+/QeF0RF/aWeyCz+tKYPYQaClekEWJ+0Nrg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780508101424695.7801829382877; Wed, 3 Jun 2026 10:35:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUpTu-0003o4-Ds; Wed, 03 Jun 2026 13:34: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 1wUpTr-0003nm-Fx for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:15 -0400 Received: from mail-dy1-x1342.google.com ([2607:f8b0:4864:20::1342]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wUpTp-0003Hz-MO for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:15 -0400 Received: by mail-dy1-x1342.google.com with SMTP id 5a478bee46e88-304545f5206so17668997eec.0 for ; Wed, 03 Jun 2026 10:34:13 -0700 (PDT) Received: from kotori-desktop ([2408:820c:8ffa:7da0:c45e:b5c8:d6e8:bd7e]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3074d9fde90sm4354810eec.0.2026.06.03.10.34.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 10:34:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780508052; x=1781112852; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KENayTV64ozrbrycI3tpvUimBTS8XEoQD01DiY02LlE=; b=iMUmP0ZK7bJLGMZS+RdgSkTORVOI7I2pNL6DKnt3OrMHJ/uLQ6YsjOL25W97OvLrb6 qLGiRdR5RIB1QIyw2QlDeQ7hd0gH265kG7GcJ9cpz1pKyvmJFwCMjjSIBFuNccIOARQv DGVi0mUfcwARw1Wrk80W3b9xQ5Qdnbnv9sSeMOgN4a+dku7mOvN6N/Q7U80To8nBbjj5 bHDgX9JMiPMbw/7NB/5YPbAMeTIJXsTBs9vCqh9qetkOoCDjtGACAF+1Uvx+s29fVKVF FDkTnQjpqcK8W8D2VPgjqcVCfYpLrPgpUcTifQeQHtRSpLT4LMR+81pr8kLsrwwLE2Hc +4iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780508052; x=1781112852; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KENayTV64ozrbrycI3tpvUimBTS8XEoQD01DiY02LlE=; b=E2io98omnxBX75nRXPsJ5vPGE85zSVYMYiRqR1lIVDVnhkkdoAPOprUiIMcaW5ZMQj JeRfzZf0Rh9zAAeE11BC/6/wsly7Wnp8dGLi7Ak7AASFXYkkISuuxwlVKjYCjWT8b3gj aXOPiHSB/BQWPomxqbmOkCeWll6enZqqG4YO07y6PzfGHppRzGgx4N4PLSlmCWHNLVR7 cpJAkw/feYNnOO1zA+i/av0QVRkNbt4eYaGNZnHxP6+0TQziTdJ01Hr6ttY7+E7vRxBW 4lv4wfVAqgAMbg6BQLfBZj6mf5HHIy7lN1aeoEjk1R6MDKZnSypcOD8RKCFP1Uocy4kD X0nA== X-Gm-Message-State: AOJu0Yxwy5cE47gpAi1zzl+u8XjWvAnrIa9I8i4dOQ2iUvCN4hbEQRwB fH0ioTDATQ2xO0Vwhayo2okLc7vaKjYl4+aS838NAjywciYiHuoPc4glENJ1nyR5ng== X-Gm-Gg: Acq92OGiZ/0Y/XM4h0bSDqmFsdDl7XCnUcIhRrTTxV1I/+5kKzcV3MEyknO51VGssGZ 2wkY2N3fBFSjQ8UQ0sKEejpl35vQDU9lURVKpxSyvnbzRsR1kfUC5s9T+QJ6L4upheMsCShQ/pD OaWfbReFlN9JWrN4yYbLPwB2bymVZ3CbareJYxyziA9pMoTVLJ2OWkx6I4LkKgnFoQVCn4AmBe7 mfaM8pd5KHuqiIkYLqPnCGt7DgbTvarrSDzUYMNXDvnMbhKtlbr2drYE5ThR5PP1Qs8EL0EpSj2 IOPPH5ZkI2ezyJdDVIjmrXV/JwcPMP08WdypCpRRa0BrYrkKTDuJ+CmF4eVJpGE2ej3cw9HrBMH Z5BhC54D9nKtMpk3AZqcbE7UMNXzDYUw5fpbU/E0oj/GOlslcGpUAWvtAyBb0PG25HO6/kuUVPl kbg92nhXHL6xHZjlPJ38jI+CllJHD0UH230CzTSUgaqw== X-Received: by 2002:a05:7301:6787:b0:303:a1af:5042 with SMTP id 5a478bee46e88-3074f703362mr2795426eec.0.1780508052070; Wed, 03 Jun 2026 10:34:12 -0700 (PDT) From: Tomita Moeko To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Tomita Moeko , K S Maan Subject: [PATCH 3/6] hw/pci: Promote pci_patch_ids() to public pci_rom_patch_ids() Date: Thu, 4 Jun 2026 01:33:51 +0800 Message-ID: <20260603173355.36121-4-tomitamoeko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260603173355.36121-1-tomitamoeko@gmail.com> References: <20260603173355.36121-1-tomitamoeko@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1342; envelope-from=tomitamoeko@gmail.com; helo=mail-dy1-x1342.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @gmail.com) X-ZM-MESSAGEID: 1780508103447158500 Content-Type: text/plain; charset="utf-8" Remove the static qualifier from pci_patch_ids() and rename it to pci_rom_patch_ids(), adding a declaration in include/hw/pci/pci.h so external callers can reuse it. Reported-by: K S Maan Signed-off-by: Tomita Moeko Tested-by: K S Maan --- hw/pci/pci.c | 4 ++-- include/hw/pci/pci.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 17ce7d8394..f8a554654b 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2488,7 +2488,7 @@ uint8_t pci_rom_calculate_checksum(uint8_t *ptr, uint= 32_t size) =20 /* Patch the PCI vendor and device ids in a PCI rom image if necessary. This is needed for an option rom which is used for more than one device= . */ -static void pci_patch_ids(PCIDevice *pdev, uint8_t *ptr, uint32_t size) +void pci_rom_patch_ids(PCIDevice *pdev, uint8_t *ptr, uint32_t size) { uint16_t vendor_id; uint16_t device_id; @@ -2648,7 +2648,7 @@ static void pci_add_option_rom(PCIDevice *pdev, Error= **errp) =20 if (pdev->rom_need_patch_id) { /* Only the default rom images will be patched (if needed). */ - pci_patch_ids(pdev, ptr, size); + pci_rom_patch_ids(pdev, ptr, size); } } =20 diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 551ab16139..b52517d292 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -1104,5 +1104,6 @@ void pci_set_power(PCIDevice *pci_dev, bool state); int pci_pm_init(PCIDevice *pci_dev, uint8_t offset, Error **errp); =20 uint8_t pci_rom_calculate_checksum(uint8_t *ptr, uint32_t size); +void pci_rom_patch_ids(PCIDevice *pdev, uint8_t *ptr, uint32_t size); =20 #endif --=20 2.53.0 From nobody Mon Jun 8 08:54:32 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1780508094; cv=none; d=zohomail.com; s=zohoarc; b=lDLIaYlHvXYLw1oPQrByVxpDuTMfHxcZs54vFxcDPxE2FPZmGK02U5dmp2bXI3Gz/IKYdznV+Pif/IqkSPRtKdb3gwICg9cJTvulPqHLuTDVt+HB5NBuEbC6P8DMmRS9e6EbjcxnI2W2kxeLP3S2jy17sXIH0+CCQx6alIPLNyo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780508094; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KLWHhIjCClZhHeW5t05J2Skz379RjeVMn7jCEsP+p0c=; b=dCo+1KwvD5sYzTsoUc/LjU9tGNy3TFQynt0wU+isR9mR5eGWMsbzu8uAUyM8HlMD31elGSNlB2zAS1huVTqqifqZPaWgonJ7WBz/4xenzzGV3JHdsWC6pLhQsELbqGDBTgkOHzURv6dTJCTDIiXmwFk0/iixhn5bXMnOUz6Pdew= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780508094215226.91219043407648; Wed, 3 Jun 2026 10:34:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUpU0-0003pJ-9W; Wed, 03 Jun 2026 13:34:24 -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 1wUpTt-0003oE-TW for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:18 -0400 Received: from mail-dy1-x1342.google.com ([2607:f8b0:4864:20::1342]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wUpTs-0003Ip-DT for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:17 -0400 Received: by mail-dy1-x1342.google.com with SMTP id 5a478bee46e88-304d0ac5e3cso709217eec.0 for ; Wed, 03 Jun 2026 10:34:16 -0700 (PDT) Received: from kotori-desktop ([2408:820c:8ffa:7da0:c45e:b5c8:d6e8:bd7e]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3074d9fde90sm4354810eec.0.2026.06.03.10.34.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 10:34:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780508055; x=1781112855; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KLWHhIjCClZhHeW5t05J2Skz379RjeVMn7jCEsP+p0c=; b=dkyftZv0P9MEZg/VbP++wvwHyv69II6qg1z85eREn8zT6vICL0RIAojMV2G/ZIzjiJ 9w6RV8DVXyLsttO+B+DwboCZ/j08etPgooNjE1XsX4JikmuTWjY/4FSqBmlVsLdpXjZK Yi5RTxyPLe2SvD3ne1e+hoXtNYvmkc5R7d2rZB4MN9puYiedT8puqyqfE6wrtr2CoAd/ uxCQWCVBIrYbbvCWjsv57m+Xe1fGcOc8tGR8QolNT4CzRXeFjLKdbL3FTcgnTS6FnuV9 X3dpYHoRLdnte6ELFQQY80kQMoQLvaIVQ9sYgOPHANn/aloo8jQdnRRd6Ocedzvhf/FZ yeIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780508055; x=1781112855; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KLWHhIjCClZhHeW5t05J2Skz379RjeVMn7jCEsP+p0c=; b=sm7VGVRe8rk8x0fKZVNCR6qQIvkOPio7Yyb0gtPPufUUvCoYG6FG+AhFZq8vkiq5NQ htHWlCT46w2gpttEulI/1bktXiex6LVTf2QYMqBmOUgDsLow4vXtFOnsSoGcTw3gNTsO tIZtdL0Epdkxr1MDXbQ9Q0Gj7XPDy7jiV6+IuMy4SznIkYy9rDKzPpeVh4Ren4rO2omQ lPL7LMYjgTnapTZn+Rbqf+a6k0Glz62J/4ISzlXrOz2kwaEeHcJnKQKr2fEHDQahO4aK UTbeQCWnu8jSAkiql71bnno6PpxSjrQcz0+3J8eVBaOYZ3mqlC7fr+ziepOual/ahIXz kUog== X-Gm-Message-State: AOJu0Yx3fM9P8iHezWfvCYhtRgBXS1aJI8nmHbaWx8/nRthXOpKHKUHP +/ecX0WZ9iNWSvaL2DBvmbbbL0YmH4K/UEb0L//OekI7IfcuQHRPlvdF7zQEkBKl5Q== X-Gm-Gg: Acq92OG473T9tHFQR4UMbOVOEWrchHrii1oZYxAXbG8Hwbz/orikVYmZk0cM+oNlX+4 jlQxcnOg+LYo6ENUKHak6SdaCxRrV6je/sQ2WMBymNYdj9oXCjqFYOdYjVOUmFh6aUio971xI0S YD1Tf2tmHDvhpWaccEO7zwhg6Vs1gQrxQWldZ404ora3ATSh44DDRAg7lisczwL32Bmb99D2ZfD x++i3Ytjgg6UZ8Ui48cnuVHGlNE7h9YruW+cMJu3vVfF9hfw6KXA061qwZmMKmcWVLxMT+6kGWn jxgauS+5qjmgrI8/U0qt7JMaqICdBFjRjkCoCK+hN9fdnFMPO2nhXF7QRQca1/98iUW4nOFOb3L afti+1If6KirwIg3zNb0yx9HHTgftZuP73e+GqCHzD15fWnRU0dXYiIH8Q5d4R/CwX7/kROahdZ 24p3DXXw0e3KAqHlYL0VjTCoJRYKl8oKh7GqTBAyG57w== X-Received: by 2002:a05:7300:3c21:b0:304:d32e:65f9 with SMTP id 5a478bee46e88-3074fa65a72mr2317158eec.6.1780508054769; Wed, 03 Jun 2026 10:34:14 -0700 (PDT) From: Tomita Moeko To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Tomita Moeko , K S Maan Subject: [PATCH 4/6] vfio/pci: Use pci_rom_patch_ids() for IGD ROM ID patching Date: Thu, 4 Jun 2026 01:33:52 +0800 Message-ID: <20260603173355.36121-5-tomitamoeko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260603173355.36121-1-tomitamoeko@gmail.com> References: <20260603173355.36121-1-tomitamoeko@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1342; envelope-from=tomitamoeko@gmail.com; helo=mail-dy1-x1342.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @gmail.com) X-ZM-MESSAGEID: 1780508097006154100 Content-Type: text/plain; charset="utf-8" Remove the duplicate inline logic in vfio_pci_load_rom() that patched the device ID in an IGD option ROM and replace it with a call to pci_rom_patch_ids(), conditioned on the rom_need_patch_id flag. Reported-by: K S Maan Signed-off-by: Tomita Moeko Tested-by: K S Maan --- hw/vfio/pci.c | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 9c06b25e63..6cbd65126e 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -1029,6 +1029,7 @@ static void vfio_update_msi(VFIOPCIDevice *vdev) =20 static void vfio_pci_load_rom(VFIOPCIDevice *vdev) { + PCIDevice *pdev =3D PCI_DEVICE(vdev); VFIODevice *vbasedev =3D &vdev->vbasedev; struct vfio_region_info *reg_info =3D NULL; uint64_t size; @@ -1084,34 +1085,8 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) } } =20 - /* - * Test the ROM signature against our device, if the vendor is correct - * but the device ID doesn't match, store the correct device ID and - * recompute the checksum. Intel IGD devices need this and are known - * to have bogus checksums so we can't simply adjust the checksum. - */ - if (pci_get_word(vdev->rom) =3D=3D 0xaa55 && - pci_get_word(vdev->rom + 0x18) + 8 < vdev->rom_size && - !memcmp(vdev->rom + pci_get_word(vdev->rom + 0x18), "PCIR", 4)) { - uint16_t vid, did; - - vid =3D pci_get_word(vdev->rom + pci_get_word(vdev->rom + 0x18) + = 4); - did =3D pci_get_word(vdev->rom + pci_get_word(vdev->rom + 0x18) + = 6); - - if (vid =3D=3D vdev->vendor_id && did !=3D vdev->device_id) { - int i; - uint8_t csum, *data =3D vdev->rom; - - pci_set_word(vdev->rom + pci_get_word(vdev->rom + 0x18) + 6, - vdev->device_id); - data[6] =3D 0; - - for (csum =3D 0, i =3D 0; i < vdev->rom_size; i++) { - csum +=3D data[i]; - } - - data[6] =3D -csum; - } + if (pdev->rom_need_patch_id) { + pci_rom_patch_ids(pdev, vdev->rom, vdev->rom_size); } } =20 --=20 2.53.0 From nobody Mon Jun 8 08:54:32 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1780508089; cv=none; d=zohomail.com; s=zohoarc; b=bPtG5aXJ2r9wX5Lau5SzvSqSLtQFFCcquXznCdo/kmOww0InW6v8epaJprP5+1rFN+JE9Hm3MKyw6YwdMO/8IRw63ynW4oDiTr7/papeHZ5HQyClNG/jkcpCh3Xo5nNzb4mVNbcYOhUaiI+Pu/XMCfl6QD2iRjqlHelqCOFbfGM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780508089; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qy1UUF3hxI4Wh5XfXs+GeaEbG1d+3h7FaO5OzNWRyiE=; b=P7Nd3+W4c+Yg0Z7Y4nNkXNCt3o7E+xol+i/eOUR/e0oFzop5Yl9yCdS/laAfONTzH8n0yZFuog/HUWJTc3yOQJsiF7hJmnyxF28JTALJxX4whS1ed6p89MtGcZptZDlu1+glqC4gGMrAPJZ5WBmygbDYfY0IttIE1IM7ksAqzqA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780508089320790.0808572147674; Wed, 3 Jun 2026 10:34:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUpU1-0003qC-RH; Wed, 03 Jun 2026 13:34:25 -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 1wUpTx-0003ok-6C for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:22 -0400 Received: from mail-dl1-x1243.google.com ([2607:f8b0:4864:20::1243]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wUpTv-0003J6-7H for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:20 -0400 Received: by mail-dl1-x1243.google.com with SMTP id a92af1059eb24-137bd9ed2b1so4130859c88.1 for ; Wed, 03 Jun 2026 10:34:18 -0700 (PDT) Received: from kotori-desktop ([2408:820c:8ffa:7da0:c45e:b5c8:d6e8:bd7e]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3074d9fde90sm4354810eec.0.2026.06.03.10.34.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 10:34:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780508058; x=1781112858; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qy1UUF3hxI4Wh5XfXs+GeaEbG1d+3h7FaO5OzNWRyiE=; b=CZkk4xAzTpwr/cJR1G0dQg3CJ7PlivI2r2x1fNgqLyZtuZpuethI7Sp69Qwu3ZFNDk tNmC7ViQxYn18cfIwnp614F12KvuXmf2bbb33MRGsClb6dZn+duQOAk4c1nkiy60JnEy oB4NSyFngpDNILgd8EoIJUkWRE85c9+Ew3YT1DANwNw3EPekLdG0OjHegSOkB7aTZkoa vOPBVunFFRuI5C4wwFpBIvpbFqGySeQxdDMy+yy5LS9+3ylFTz22sGBzagkfO/Rh341Q f5kd//JIwKBeSglrw165sXpm6Cl8qgKSo5NzBrPd+1NFu91TpINDfsX1zqn/VPlJZZHW MqaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780508058; x=1781112858; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=qy1UUF3hxI4Wh5XfXs+GeaEbG1d+3h7FaO5OzNWRyiE=; b=tBSCO5pStdMLv8iTgqUKK29HaEJskVR9Ey4RAR9HTdfYbR1N4LwNeC5G3JWsAboaUb LdrVkd/RXhLIRM6FkfHf2SeOAXbKgyimiSBeZUB75Czr//1dFF/+VCPUGFoXQ4O6dvq1 quNBsd5UD0PpzIOB+z/P7MJoZo9d/7PPM5jFtuFLG0ATO4EcehcSW1Rrdmu1a/RwYolh uSNKMtBRQSG5DGoSnwd4P1cCvjAIi2jdtZg/E1o3V/vs76TKUT28jvSeIBLz4dEtjlxk szZWcONUMkVF2vMWf+sluwS9zrXZNChjy7hz2udRYGLLFyJ3kyoDjDp83jcs5AGhWL5R Vqzw== X-Gm-Message-State: AOJu0YxELAk3C/k3ucuFEi3AlhnC2PLhp4bCG7XYdVfbvk2vr+EX8bqW SBcwAbc5sDdqd/5p5FDd/ZQc7j9azlGu7LuZtsBvDh/D2Z3G4YBw9rY3S0fvqYJA3w== X-Gm-Gg: Acq92OEUPK4nNzSK/B95Gy/lMt40aPdMm6sop44+CYupr8/HTZ4VsYrZ/oh+ZAmaYqh 1Hkzfz2pz1HihhKvIxd2xOmxS00SSlWX1raJ1fI6TbNc3Zt/rjyU4tUR+JXQf/RFwb2bxJrVz1p e8GvxSDQ97/Vo1NZH0HbT6DRVwXQJyVneWXNofapT0X5Xusz1AqV+MyFzolUsDoQCuj4/DN7FUQ 7cBCgZscSoqXpBRDc3pWkRlLaC4s4K7AX5Fzwt+m0nyLBHgZwwM03NMGGR1cd6eLix2wqWPZZkq wnvBImq9ZdnZyJBF8LKf/+BMUiibi7TnpsYgCWUKp7AB2cxU6bFw4roiNmf7afghzvuXFuM3xYx rXl5Psra9JmzXkdKuQYFFl9Lu1X5vRQlDdZB7xMOSR0CFLfK+SCZm/3J4JPihle0qrmD5bdb3/X ZbdqaBcq1cCImnz5ps0nJwXa8rNAw7bGv0HwhUsXh7pg== X-Received: by 2002:a05:7300:dc8c:b0:2df:7fe3:96a with SMTP id 5a478bee46e88-3074f843547mr2218341eec.0.1780508057557; Wed, 03 Jun 2026 10:34:17 -0700 (PDT) From: Tomita Moeko To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Tomita Moeko , K S Maan Subject: [PATCH 5/6] vfio/igd: Toggle rom_need_patch_id flag on IGD devices Date: Thu, 4 Jun 2026 01:33:53 +0800 Message-ID: <20260603173355.36121-6-tomitamoeko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260603173355.36121-1-tomitamoeko@gmail.com> References: <20260603173355.36121-1-tomitamoeko@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1243; envelope-from=tomitamoeko@gmail.com; helo=mail-dl1-x1243.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @gmail.com) X-ZM-MESSAGEID: 1780508091558158500 Content-Type: text/plain; charset="utf-8" IGD ROMs are known to have wrong device IDs and bogus checksums. Toggle the rom_need_patch_id flag when the IGD has ROM BAR or custom romfile so that pci_rom_patch_ids() will correct the vendor/device IDs and checksum. The ROM BAR availability check is extracted into vfio_pci_igd_has_rom_bar() to avoid duplicating the region info lookup. Reported-by: K S Maan Signed-off-by: Tomita Moeko Tested-by: K S Maan --- hw/vfio/igd.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c index e091f21b6a..17437ae18d 100644 --- a/hw/vfio/igd.c +++ b/hw/vfio/igd.c @@ -509,11 +509,22 @@ void vfio_probe_igd_bar0_quirk(VFIOPCIDevice *vdev, i= nt nr) QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, bdsm_quirk, next); } =20 +static bool vfio_pci_igd_has_rom_bar(VFIOPCIDevice *vdev) +{ + struct vfio_region_info *rom =3D NULL; + int ret; + + ret =3D vfio_device_get_region_info(&vdev->vbasedev, + VFIO_PCI_ROM_REGION_INDEX, &rom); + + return !ret && rom->size; +} + static bool vfio_pci_igd_config_quirk(VFIOPCIDevice *vdev, Error **errp) { struct vfio_region_info *opregion =3D NULL; PCIDevice *pdev =3D PCI_DEVICE(vdev); - int ret, gen; + int gen; uint64_t gms_size =3D 0; uint64_t *bdsm_size; uint32_t gmch; @@ -556,8 +567,6 @@ static bool vfio_pci_igd_config_quirk(VFIOPCIDevice *vd= ev, Error **errp) * - OpRegion * - Same LPC bridge and Host bridge VID/DID/SVID/SSID as host */ - struct vfio_region_info *rom =3D NULL; - legacy_mode_enabled =3D true; info_report("IGD legacy mode enabled, " "use x-igd-legacy-mode=3Doff to disable it if unwanted= ."); @@ -567,9 +576,7 @@ static bool vfio_pci_igd_config_quirk(VFIOPCIDevice *vd= ev, Error **errp) * there's no ROM, there's no point in setting up this quirk. * NB. We only seem to get BIOS ROMs, so UEFI VM would need CSM su= pport. */ - ret =3D vfio_device_get_region_info(&vdev->vbasedev, - VFIO_PCI_ROM_REGION_INDEX, &rom); - if ((ret || !rom->size) && !pdev->romfile) { + if (!vfio_pci_igd_has_rom_bar(vdev) && !pdev->romfile) { error_setg(&err, "Device has no ROM"); goto error; } @@ -610,6 +617,14 @@ static bool vfio_pci_igd_config_quirk(VFIOPCIDevice *v= dev, Error **errp) goto error; } =20 + /* + * IGD are known to have bad checksums and wrong device ID in its rom, + * request to patch it. + */ + if (pdev->romfile || vfio_pci_igd_has_rom_bar(vdev)) { + pdev->rom_need_patch_id =3D true; + } + /* * ASLS (OpRegion address) is read-only, emulated * It contains HPA, guest firmware need to reprogram it with GPA. --=20 2.53.0 From nobody Mon Jun 8 08:54:32 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1780508075; cv=none; d=zohomail.com; s=zohoarc; b=SvyWg2JV9HzuU+asjNYfYvT5B8cmhWMfC4iGXwN1b+xpF1BjSwWgVtfEn29patltmQ/TEzSU0M6jPbV8QRhdnKWU9zJvXk/QYTcRotTiO9+7yEpfwwThGMjpNphuaTBn9Qm88GVg0hH9vIcPNxhpN+pJnSdnRvRVUw4iQ3GSXRg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780508075; 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=KCCp7hJjaFWhdypw9Vuzd37+kDa4/M5qst0FJOmaG18=; b=cGYUtb4OrrpCEKOMsrue1Md3rt46UAsoaB+xkbGD0tr/sREVN9/zcoI2VGFZFTP8CDfkhkwPNr8YwreCYWeisiCfFB8oC3eEDefsPmMjie38QXhGBX3YvagcsETWGq29cf3eAL4Q6DHw0ZMFF1OwUF0nERrtjjjNOGU+tqhCQbI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780508075702160.76977379050857; Wed, 3 Jun 2026 10:34:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wUpU1-0003qA-Ke; Wed, 03 Jun 2026 13:34:25 -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 1wUpU0-0003pV-A0 for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:24 -0400 Received: from mail-dy1-x1342.google.com ([2607:f8b0:4864:20::1342]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wUpTx-0003Kn-Td for qemu-devel@nongnu.org; Wed, 03 Jun 2026 13:34:23 -0400 Received: by mail-dy1-x1342.google.com with SMTP id 5a478bee46e88-304e83724bfso7874721eec.0 for ; Wed, 03 Jun 2026 10:34:21 -0700 (PDT) Received: from kotori-desktop ([2408:820c:8ffa:7da0:c45e:b5c8:d6e8:bd7e]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3074d9fde90sm4354810eec.0.2026.06.03.10.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 10:34:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780508060; x=1781112860; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KCCp7hJjaFWhdypw9Vuzd37+kDa4/M5qst0FJOmaG18=; b=ZO0TcwUffMaSQZAaQUdizhqsdBHWA3gYuJyw87mm+iZtE5NEEIjYg3xHF8/C4lCXG7 DgXNLbuIIdjfPrsbIaIRiby/2j30XKnHYzOvx5V/09qCzZWaFnjonoiAC5iROh8+sgnT D2fZXCRpRkdtritxm8xV12ipf8OweOnjTHAkkkp9Ka8+zX7BOkmieBvLHrPKhMESYEMd 75KZ8Ylpq+ylfGblM6Bfc4UR0N9dGLcwJufOTZzYyNiashHG7ndF3gcXN3ooWSFXtdk0 r63+mLNTV4WBwKlIq9uHQgHbqMyxEYD7YpBzNaBoDuq7IiOFgs03KwlSOMFgwYXarOfw Tk5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780508060; x=1781112860; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KCCp7hJjaFWhdypw9Vuzd37+kDa4/M5qst0FJOmaG18=; b=i3MOzJ40+oInFI+k6LfbVd/uA24b5K4EX1ixrg8IDxJ+tKbDX8RB0VbHZWudX/5GV5 aNQXc1xe0OXFrB4aKTR1KjAYC60Gbe67i2KaCaMZ+3rLPlOflkQbcYgBcoaIBPuBZi/I WogAYPe1isL5Nj1ZjdCRrVdjFKRpZlPWJWrvQKr789PiedMD2XQv1gok+cJDd0+xLxVB V1Lnxiptyn31FUFv7Goz3pDNs5ZkJedqvF2QrdlPxFn7izKC3j9WoMJY1oHVHq2p1/Ie UjueZBxg2oagMz2mgSqcLvwyuvP/rLcjqw0Noqb1fNXWIyHG8uLvBDnWeU92WqYImJnS BiQg== X-Gm-Message-State: AOJu0YyhULeATElkwGo7T9uB9dGr6pPN7xA0M/EvtrhYGaOQveVB7GwD 9/Wc21e8bU56qdgh0/Wkm3tGvhwBMC982j2mLpEK0t/6xovJPFTCG+V4W2ogw17Hew== X-Gm-Gg: Acq92OF2PiXeRVuBlXMzXZViKFva8nKnXO4LMthiOQ0ba2yObXua4TasFTLiWt9gckI MzUHOTGZ/5qadsRINkAWh/5xXhqFv4OkHs31mRgK801/fX/n1ZFDyQUjSdT9dhNiBWYkTYevu9D TktQ+0TawZ5UVAklw1biRuEYXkHE0OC85qMZ0eK6UZtezv4d+z5G4S9oU7Lfgpaz85T96ic52Ny AXffIjSfMP9wM1e+twuWxvXztW/0bFEaZsJIGDF9nlhg9B/wdCcTmIbn8saALA4A/Szp6cxIa/7 uhVXMfD3he0CWHo8zcEftyoHPMiq8Calz7RVaImI2FXfChKBtkLhH1ofShVhPP/L7VerPW4O06O xBu+l0gmKHl0D36v6XhSNfAK2NSWkg0348PUj3mWTKsQ+8lmlpwMC40wtPoImb/IUuFDKF2JF3i rQVCoId+E84e8W0OWNWYqynSYWkhrfgnW3CyxCjSq3lidjmmmYeA96 X-Received: by 2002:a05:7301:4592:b0:304:d788:ac5 with SMTP id 5a478bee46e88-3074fcb2470mr2236559eec.35.1780508060280; Wed, 03 Jun 2026 10:34:20 -0700 (PDT) From: Tomita Moeko To: qemu-devel@nongnu.org Cc: "Michael S. Tsirkin" , Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Tomita Moeko , K S Maan Subject: [PATCH 6/6] vfio/igd: Clear saved BDSM in legacy VBIOS ROM at load time Date: Thu, 4 Jun 2026 01:33:54 +0800 Message-ID: <20260603173355.36121-7-tomitamoeko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260603173355.36121-1-tomitamoeko@gmail.com> References: <20260603173355.36121-1-tomitamoeko@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1342; envelope-from=tomitamoeko@gmail.com; helo=mail-dy1-x1342.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @gmail.com) X-ZM-MESSAGEID: 1780508078945154100 IGD does not come with a ROM BAR [1], the ROM BAR read by default from kernel is actually the host VBIOS shadow RAM region that contains host modifications on boot. With AI-assisted reverse engineering on VBIOS binaries, it is observed that VBIOS saves BDSM register value on first access and uses saved value if present. When the image is executed in guest, since there is already a saved HPA in VBIOS, it keeps using that value instead of the GPA programmed by SeaBIOS in BDSM register in PCI config space, causing VBIOS to program GTT entries with wrong address, resulting in garbled output in BIOS POST and the error below detected by i915 driver. i915 0000:00:02.0: [drm] *ERROR* Initial plane programming using invalid ra= nge, dma_addr=3D0x00000000db200000 ((null) [0x00000000baf00000-0x00000000be= efffff]) The previous solution, c4c45e943e51 ("vfio/pci: Intel graphics legacy mode assignment"), adjusts GTT entry addresses to (addr - host BDSM + guest BDSM) to workaround that. But it is removed in 5aed8b0f0be2 ("vfio/igd: Remove GTT write quirk in IO BAR 4") due to inconsistent values in MMIO BAR0 and IO BAR4. Considering it's unsafe to expose HPA to guest, a ROM quirk clearing the saved value in VBIOS image is introduced. It searches the BDSM accessor routine by matching a 19-byte signature anchored on the unique `mov $0x105e,%ax` instruction, then locate the offset of saved BDSM and clears it. This makes the routine fall through to the PCI config read on the first call inside the guest. The quirk is invoked in vfio_pci_load_rom(), and is gated on Gen 6-9 IGD devices with VGA access enabled and legacy (non-UEFI) PCIR code type in the ROM header. A new trace event vfio_pci_igd_vbios_patched is also introduced. [1] 3.5.15, 4th Generation Intel Core Processor Family Datasheet Vol. 2 https://www.intel.com/content/dam/www/public/us/en/documents/datasheets= /4th-gen-core-family-desktop-vol-2-datasheet.pdf Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3093 Reported-by: K S Maan Signed-off-by: Tomita Moeko Tested-by: K S Maan --- hw/vfio/igd-stubs.c | 5 ++ hw/vfio/igd.c | 106 +++++++++++++++++++++++++++++++++++++++++++ hw/vfio/pci-quirks.c | 5 ++ hw/vfio/pci.c | 2 + hw/vfio/pci.h | 3 ++ hw/vfio/trace-events | 1 + 6 files changed, 122 insertions(+) diff --git a/hw/vfio/igd-stubs.c b/hw/vfio/igd-stubs.c index f7687d9091..879a8aff56 100644 --- a/hw/vfio/igd-stubs.c +++ b/hw/vfio/igd-stubs.c @@ -18,3 +18,8 @@ bool vfio_probe_igd_config_quirk(VFIOPCIDevice *vdev, Err= or **errp) { return true; } + +void vfio_probe_igd_legacy_rom_quirk(VFIOPCIDevice *vdev) +{ + return; +} diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c index 17437ae18d..e00f6f8315 100644 --- a/hw/vfio/igd.c +++ b/hw/vfio/igd.c @@ -739,3 +739,109 @@ bool vfio_probe_igd_config_quirk(VFIOPCIDevice *vdev,= Error **errp) =20 return vfio_pci_igd_config_quirk(vdev, errp); } + +/* + * IGD ROM BAR read from kernel is actually the host VBIOS shadow RAM regi= on, + * which contains host modifications. In Gen 6-9 VBIOS, the routine below = is + * used to get BDSM value when programming the initial GTT. + * xx xx xx xx v: .long ? # saved value + * 66 53 push %ebx + * 66 2e 83 3e xx xx 00 cmpl $0x0,%cs:v # is saved value em= pty? + * 74 07 je 1f # if zero, go compu= te + * 66 2e a1 xx xx mov %cs:v,%eax # else return saved= value + * eb 0f jmp 2f + * b8 5e 10 1: mov $0x105e,%ax # dev 00:02.0, offs= et 5E + * e8 xx xx call pci_read_cfg_word + * 66 c1 e0 10 shl $0x10,%eax # left shift 16 bits + * 66 2e a3 xx xx mov %eax,%cs:v # save the result + * 66 5b 2=EF=BC=9Apop %ebx + * c3 ret + * When running the VBIOS in guest, saved value still reflects the host st= olen + * memory base address, which is not correct in guest. So we need to patch= the + * VBIOS to clear the saved value. + * + * The unique 19-byte starts at `cmpl $0,%cs:v` and ends at `mov $0x105e,%= ax` + * anchors the match to the routine. Both `cs:` displacements must referen= ce + * the same offset. + */ +static int igd_vbios_find_saved_bdsm(const uint8_t *rom, size_t rom_size, + uint16_t *bdsm_offset) +{ + static const uint8_t start[] =3D { 0x66, 0x2e, 0x83, 0x3e }; + static const uint8_t middle[] =3D { 0x00, 0x74, 0x07, 0x66, 0x2e, 0xa1= }; + static const uint8_t end[] =3D { 0xeb, 0x0f, 0xb8, 0x5e, 0x10 }; + size_t i; + bool found =3D false; + + if (rom_size < 19) { + return -ENOENT; + } + + for (i =3D 0; i + 19 <=3D rom_size; i++) { + if (memcmp(rom + i, start, sizeof(start)) !=3D 0 || + memcmp(rom + i + 6, middle, sizeof(middle)) !=3D 0 || + memcmp(rom + i + 14, end, sizeof(end)) !=3D 0) { + continue; + } + + /* same saved value address? */ + if (rom[i + 4] !=3D rom[i + 12] || rom[i + 5] !=3D rom[i + 13]) { + continue; + } + + if (found) { + return -EEXIST; + } + + *bdsm_offset =3D rom[i + 4] | ((uint16_t)rom[i + 5] << 8); + found =3D true; + } + + if (!found) { + return -ENOENT; + } + + return 0; +} + +void vfio_probe_igd_legacy_rom_quirk(VFIOPCIDevice *vdev) +{ + int ret, gen; + uint16_t pcir_offset, bdsm_offset =3D 0; + uint8_t checksum; + + if (!vfio_pci_is(vdev, PCI_VENDOR_ID_INTEL, PCI_ANY_ID) || + !vfio_is_vga(vdev) || !vdev->vga) { + return; + } + + /* Only Gen 6~9 devices have legacy VBIOS as Option ROM */ + gen =3D igd_gen(vdev); + if (gen < 6 || gen > 9) { + return; + } + + if (pci_get_word(vdev->rom) !=3D 0xaa55) { + return; + } + + /* Must be a legacy ROM */ + pcir_offset =3D pci_get_word(vdev->rom + 0x18); + if (pcir_offset >=3D vdev->rom_size || + memcmp(vdev->rom + pcir_offset, "PCIR", 4) || + pci_get_byte(vdev->rom + pcir_offset + 0x14) !=3D 0x00) { + return; + } + + ret =3D igd_vbios_find_saved_bdsm(vdev->rom, vdev->rom_size, &bdsm_off= set); + if (ret < 0) { + return; + } + + memset(vdev->rom + bdsm_offset, 0, sizeof(uint32_t)); + + checksum =3D pci_rom_calculate_checksum(vdev->rom, vdev->rom_size); + ((uint8_t *)vdev->rom)[6] =3D checksum; + + trace_vfio_pci_igd_vbios_patched(vdev->vbasedev.name); +} diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c index bccf31751f..45db968681 100644 --- a/hw/vfio/pci-quirks.c +++ b/hw/vfio/pci-quirks.c @@ -1592,3 +1592,8 @@ bool vfio_add_virt_caps(VFIOPCIDevice *vdev, Error **= errp) =20 return true; } + +void vfio_rom_quirk_setup(VFIOPCIDevice *vdev) +{ + vfio_probe_igd_legacy_rom_quirk(vdev); +} diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 6cbd65126e..66d6315e6f 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -1088,6 +1088,8 @@ static void vfio_pci_load_rom(VFIOPCIDevice *vdev) if (pdev->rom_need_patch_id) { pci_rom_patch_ids(pdev, vdev->rom, vdev->rom_size); } + + vfio_rom_quirk_setup(vdev); } =20 /* "Raw" read of underlying config space. */ diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index c3a1f53d35..d8d6c09632 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -251,10 +251,13 @@ void vfio_bar_quirk_exit(VFIOPCIDevice *vdev, int nr); void vfio_bar_quirk_finalize(VFIOPCIDevice *vdev, int nr); void vfio_setup_resetfn_quirk(VFIOPCIDevice *vdev); bool vfio_add_virt_caps(VFIOPCIDevice *vdev, Error **errp); +void vfio_rom_quirk_setup(VFIOPCIDevice *vdev); void vfio_quirk_reset(VFIOPCIDevice *vdev); VFIOQuirk *vfio_quirk_alloc(int nr_mem); + void vfio_probe_igd_bar0_quirk(VFIOPCIDevice *vdev, int nr); bool vfio_probe_igd_config_quirk(VFIOPCIDevice *vdev, Error **errp); +void vfio_probe_igd_legacy_rom_quirk(VFIOPCIDevice *vdev); =20 extern const PropertyInfo qdev_prop_nv_gpudirect_clique; =20 diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 2049159015..7dc334ccb3 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -90,6 +90,7 @@ vfio_pci_igd_bar4_write(const char *name, uint32_t index,= uint32_t data, uint32_ vfio_pci_igd_bdsm_enabled(const char *name, int size) "%s %dMB" vfio_pci_igd_host_bridge_enabled(const char *name) "%s" vfio_pci_igd_lpc_bridge_enabled(const char *name) "%s" +vfio_pci_igd_vbios_patched(const char *name) "%s" =20 # listener.c vfio_iommu_map_notify(const char *op, uint64_t iova_start, uint64_t iova_e= nd) "iommu %s @ 0x%"PRIx64" - 0x%"PRIx64 --=20 2.53.0