From nobody Sat May 18 21:16:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1597787788; cv=none; d=zohomail.com; s=zohoarc; b=Cg4WHzjsNBI/DyDUKIi8eakrxS5RPeEW6H5xVQN57HujeP5/DPMcTj4DANZmqsyXTa9IAYXB/IOJr5LVgPxnwbkZ17BSt5JtQyUfnEdu2YrdFJepjMORJt1weIvxuJI8OxMnXKPcFByr715AtV6ViifV+JrBYuZU9AY7DKdd5Jk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597787788; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NfwKsgv1pr3VNv+KNxWVmDBJUEBXl7vg3Sao8TH9IOU=; b=T961vanNLCZocRLX4QMAkMpiRmZX2Z5I+6T2KIUNmbrWbPHTOxcdX5qEgGQLZj8Nsqddzwhr61gfhQfWvuV/slCz+tW0lptULtrGylnETpotJU5Ckdt9pCtFzwcp2LRawmyKnH9Qweg9Ega/cJz1bVgxGwmxLJ9S8HRAg7GKYsw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597787788271642.1434367087278; Tue, 18 Aug 2020 14:56:28 -0700 (PDT) Received: from localhost ([::1]:50036 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k89aj-0002at-Bs for importer@patchew.org; Tue, 18 Aug 2020 17:56:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48628) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k89ZU-00018W-3Y for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:08 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:30787 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k89ZS-0007fY-2Z for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:07 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-486-b_KLuUXPPaidj1KjHgclpg-1; Tue, 18 Aug 2020 17:55:02 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DEC02801AE7; Tue, 18 Aug 2020 21:55:01 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.43.2.201]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 87CDD101417D; Tue, 18 Aug 2020 21:55:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597787704; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NfwKsgv1pr3VNv+KNxWVmDBJUEBXl7vg3Sao8TH9IOU=; b=AB3sUqeEDsV6/uplMkl35euzVw5S/zAtJ0pUKqT49uEJT9I7YqbPj3KcExcI1znvShQFDe NdpflsI3E5XoAPihHdVnoTN/IdMGjYdUXhT9idSMyT4GOUuD0P/Xr0m+h3Lmio/TvcJp7D FqsmByUcYh0e2B0pHmVfemF1viKd6/g= X-MC-Unique: b_KLuUXPPaidj1KjHgclpg-1 From: Julia Suvorova To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 1/4] hw/acpi/ich9: Trace ich9_gpe_readb()/writeb() Date: Tue, 18 Aug 2020 23:52:24 +0200 Message-Id: <20200818215227.181654-2-jusual@redhat.com> In-Reply-To: <20200818215227.181654-1-jusual@redhat.com> References: <20200818215227.181654-1-jusual@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jusual@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.61; envelope-from=jusual@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 17:55:04 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Igor Mammedov , Julia Suvorova , Gerd Hoffmann , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add trace events similar to piix4_gpe_readb() to check gpe status. Signed-off-by: Julia Suvorova Reviewed-by: Igor Mammedov Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/acpi/ich9.c | 7 ++++++- hw/acpi/trace-events | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c index 6a19070cec..a2a1742aa6 100644 --- a/hw/acpi/ich9.c +++ b/hw/acpi/ich9.c @@ -36,6 +36,7 @@ #include "hw/acpi/acpi.h" #include "hw/acpi/tco.h" #include "exec/address-spaces.h" +#include "trace.h" =20 #include "hw/i386/ich9.h" #include "hw/mem/pc-dimm.h" @@ -59,13 +60,17 @@ static void ich9_pm_update_sci_fn(ACPIREGS *regs) static uint64_t ich9_gpe_readb(void *opaque, hwaddr addr, unsigned width) { ICH9LPCPMRegs *pm =3D opaque; - return acpi_gpe_ioport_readb(&pm->acpi_regs, addr); + uint64_t val =3D acpi_gpe_ioport_readb(&pm->acpi_regs, addr); + + trace_ich9_gpe_readb(addr, width, val); + return val; } =20 static void ich9_gpe_writeb(void *opaque, hwaddr addr, uint64_t val, unsigned width) { ICH9LPCPMRegs *pm =3D opaque; + trace_ich9_gpe_writeb(addr, width, val); acpi_gpe_ioport_writeb(&pm->acpi_regs, addr, val); acpi_update_sci(&pm->acpi_regs, pm->irq); } diff --git a/hw/acpi/trace-events b/hw/acpi/trace-events index afbc77de1c..b9f4827afc 100644 --- a/hw/acpi/trace-events +++ b/hw/acpi/trace-events @@ -32,6 +32,10 @@ cpuhp_acpi_ejecting_cpu(uint32_t idx) "0x%"PRIx32 cpuhp_acpi_write_ost_ev(uint32_t slot, uint32_t ev) "idx[0x%"PRIx32"] OST = EVENT: 0x%"PRIx32 cpuhp_acpi_write_ost_status(uint32_t slot, uint32_t st) "idx[0x%"PRIx32"] = OST STATUS: 0x%"PRIx32 =20 +# ich9.c +ich9_gpe_readb(uint64_t addr, unsigned width, uint64_t val) "addr: 0x%" PR= Ix64 " width: %d =3D=3D> 0x%" PRIx64 +ich9_gpe_writeb(uint64_t addr, unsigned width, uint64_t val) "addr: 0x%" P= RIx64 " width: %d <=3D=3D 0x%" PRIx64 + # pcihp.c acpi_pci_eject_slot(unsigned bsel, unsigned slot) "bsel: %u slot: %u" acpi_pci_unplug(int bsel, int slot) "bsel: %d slot: %d" --=20 2.25.4 From nobody Sat May 18 21:16:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1597787789; cv=none; d=zohomail.com; s=zohoarc; b=b9tI7c7yWNlo+rIO9CsqJbiaWEXR6LePccQxBE3mE++hHvB6S0S1SguqApmwfyNJe5DgzV4VQEbQCO7lToeljlUwl1ZL+2YbouK40Qn3lQCh+sqjwJnIkCuhioaZVL86wUpLsaDnTq23UqdDjXVj/HMNtpAAu2lkzt5BWQbPmXU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597787789; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zRkoBhPPk1tgK/aHWbcM7m+I8n/pyxfQdRuXyWBtaOA=; b=aleWnoybZhDBCIG+WVEYpkrYEwDWPsiNxcn4zpnHEuQNYYq6b2MmzZzB7M4jIpcSKa+U5eRZ2klIEu6N8G40MrM1CYTkb1kr3B/cOL6A17gW26NJ8yNNTXn5ldUm0nAVljDWiKVLi6DgZ33FZNHTG/DxxWgOvKGlVBUHrw3/3Rc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597787789486767.7409947600647; Tue, 18 Aug 2020 14:56:29 -0700 (PDT) Received: from localhost ([::1]:50310 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k89al-0002hY-Rs for importer@patchew.org; Tue, 18 Aug 2020 17:56:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48638) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k89ZV-00018h-5T for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:09 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:51181 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k89ZT-0007fd-C1 for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:08 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-280-ZrNY5CDePYquKKL-QovE3Q-1; Tue, 18 Aug 2020 17:55:05 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 52BF9425D2; Tue, 18 Aug 2020 21:55:04 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.43.2.201]) by smtp.corp.redhat.com (Postfix) with ESMTPS id ED99A1014182; Tue, 18 Aug 2020 21:55:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597787706; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zRkoBhPPk1tgK/aHWbcM7m+I8n/pyxfQdRuXyWBtaOA=; b=M0jnadWlq0gAXSWVKhBrauWAtGIvjDIHbPX24KWjMkQTKXN4E97yzcVDFycDZlOy6bBtAW PiK+aeLAJAVVCdYuZt/biDEFK68Fa1um+DPIm7ifpP2uzwtws6ahBHdMKDFg47JWpeSjUj jClbbnzB2UmoAZa3lNqFBiYOmIBNCYs= X-MC-Unique: ZrNY5CDePYquKKL-QovE3Q-1 From: Julia Suvorova To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 2/4] hw/i386/acpi-build: Add ACPI PCI hot-plug methods to q35 Date: Tue, 18 Aug 2020 23:52:25 +0200 Message-Id: <20200818215227.181654-3-jusual@redhat.com> In-Reply-To: <20200818215227.181654-1-jusual@redhat.com> References: <20200818215227.181654-1-jusual@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jusual@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.61; envelope-from=jusual@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 17:55:04 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Igor Mammedov , Julia Suvorova , Gerd Hoffmann , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Implement notifications and gpe to support q35 ACPI PCI hot-plug. Use 0xcc4 - 0xcd7 range for 'acpi-pci-hotplug' io ports. Signed-off-by: Julia Suvorova --- include/hw/acpi/pcihp.h | 3 ++- hw/acpi/pcihp.c | 10 ++++++---- hw/acpi/piix4.c | 2 +- hw/i386/acpi-build.c | 25 ++++++++++++++----------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/include/hw/acpi/pcihp.h b/include/hw/acpi/pcihp.h index 8bc4a4c01d..1e9d246f57 100644 --- a/include/hw/acpi/pcihp.h +++ b/include/hw/acpi/pcihp.h @@ -54,7 +54,8 @@ typedef struct AcpiPciHpState { } AcpiPciHpState; =20 void acpi_pcihp_init(Object *owner, AcpiPciHpState *, PCIBus *root, - MemoryRegion *address_space_io, bool bridges_enabled); + MemoryRegion *address_space_io, bool bridges_enabled, + bool is_piix4); =20 void acpi_pcihp_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, Error **errp); diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 9e31ab2da4..9a35ed6c83 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -38,7 +38,8 @@ #include "qom/qom-qobject.h" #include "trace.h" =20 -#define ACPI_PCIHP_ADDR 0xae00 +#define ACPI_PCIHP_ADDR_PIIX4 0xae00 +#define ACPI_PCIHP_ADDR_Q35 0x0cc4 #define ACPI_PCIHP_SIZE 0x0014 #define PCI_UP_BASE 0x0000 #define PCI_DOWN_BASE 0x0004 @@ -359,12 +360,13 @@ static const MemoryRegionOps acpi_pcihp_io_ops =3D { }; =20 void acpi_pcihp_init(Object *owner, AcpiPciHpState *s, PCIBus *root_bus, - MemoryRegion *address_space_io, bool bridges_enabled) + MemoryRegion *address_space_io, bool bridges_enabled, + bool is_piix4) { s->io_len =3D ACPI_PCIHP_SIZE; - s->io_base =3D ACPI_PCIHP_ADDR; + s->io_base =3D is_piix4 ? ACPI_PCIHP_ADDR_PIIX4 : ACPI_PCIHP_ADDR_Q35; =20 - s->root=3D root_bus; + s->root =3D root_bus; s->legacy_piix =3D !bridges_enabled; =20 memory_region_init_io(&s->io, owner, &acpi_pcihp_io_ops, s, diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index cdfa0e2998..1f27bfbd06 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -596,7 +596,7 @@ static void piix4_acpi_system_hot_add_init(MemoryRegion= *parent, memory_region_add_subregion(parent, GPE_BASE, &s->io_gpe); =20 acpi_pcihp_init(OBJECT(s), &s->acpi_pci_hotplug, bus, parent, - s->use_acpi_hotplug_bridge); + s->use_acpi_hotplug_bridge, true); =20 s->cpu_hotplug_legacy =3D true; object_property_add_bool(OBJECT(s), "cpu-hotplug-legacy", diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index b7bcbbbb2a..f3cd52bd06 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -201,10 +201,6 @@ static void acpi_get_pm_info(MachineState *machine, Ac= piPmInfo *pm) /* w2k requires FADT(rev1) or it won't boot, keep PC compatible */ pm->fadt.rev =3D 1; pm->cpu_hp_io_base =3D PIIX4_CPU_HOTPLUG_IO_BASE; - pm->pcihp_io_base =3D - object_property_get_uint(obj, ACPI_PCIHP_IO_BASE_PROP, NULL); - pm->pcihp_io_len =3D - object_property_get_uint(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); } if (lpc) { struct AcpiGenericAddress r =3D { .space_id =3D AML_AS_SYSTEM_IO, @@ -214,6 +210,10 @@ static void acpi_get_pm_info(MachineState *machine, Ac= piPmInfo *pm) pm->fadt.flags |=3D 1 << ACPI_FADT_F_RESET_REG_SUP; pm->cpu_hp_io_base =3D ICH9_CPU_HOTPLUG_IO_BASE; } + pm->pcihp_io_base =3D + object_property_get_uint(obj, ACPI_PCIHP_IO_BASE_PROP, NULL); + pm->pcihp_io_len =3D + object_property_get_uint(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); =20 /* The above need not be conditional on machine type because the reset= port * happens to be the same on PIIX (pc) and ICH9 (q35). */ @@ -472,7 +472,7 @@ static void build_append_pci_bus_devices(Aml *parent_sc= ope, PCIBus *bus, QLIST_FOREACH(sec, &bus->child, sibling) { int32_t devfn =3D sec->parent_dev->devfn; =20 - if (pci_bus_is_root(sec) || pci_bus_is_express(sec)) { + if (pci_bus_is_root(sec)) { continue; } =20 @@ -1368,7 +1368,7 @@ static void build_piix4_isa_bridge(Aml *table) aml_append(table, scope); } =20 -static void build_piix4_pci_hotplug(Aml *table) +static void build_i386_pci_hotplug(Aml *table, uint64_t pcihp_addr) { Aml *scope; Aml *field; @@ -1377,20 +1377,22 @@ static void build_piix4_pci_hotplug(Aml *table) scope =3D aml_scope("_SB.PCI0"); =20 aml_append(scope, - aml_operation_region("PCST", AML_SYSTEM_IO, aml_int(0xae00), 0x08)= ); + aml_operation_region("PCST", AML_SYSTEM_IO, aml_int(pcihp_addr), 0= x08)); field =3D aml_field("PCST", AML_DWORD_ACC, AML_NOLOCK, AML_WRITE_AS_ZE= ROS); aml_append(field, aml_named_field("PCIU", 32)); aml_append(field, aml_named_field("PCID", 32)); aml_append(scope, field); =20 aml_append(scope, - aml_operation_region("SEJ", AML_SYSTEM_IO, aml_int(0xae08), 0x04)); + aml_operation_region("SEJ", AML_SYSTEM_IO, + aml_int(pcihp_addr + 0x08), 0x04)); field =3D aml_field("SEJ", AML_DWORD_ACC, AML_NOLOCK, AML_WRITE_AS_ZER= OS); aml_append(field, aml_named_field("B0EJ", 32)); aml_append(scope, field); =20 aml_append(scope, - aml_operation_region("BNMR", AML_SYSTEM_IO, aml_int(0xae10), 0x04)= ); + aml_operation_region("BNMR", AML_SYSTEM_IO, + aml_int(pcihp_addr + 0x10), 0x04)); field =3D aml_field("BNMR", AML_DWORD_ACC, AML_NOLOCK, AML_WRITE_AS_ZE= ROS); aml_append(field, aml_named_field("BNUM", 32)); aml_append(scope, field); @@ -1504,7 +1506,6 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, build_hpet_aml(dsdt); build_piix4_isa_bridge(dsdt); build_isa_devices_aml(dsdt); - build_piix4_pci_hotplug(dsdt); build_piix4_pci0_int(dsdt); } else { sb_scope =3D aml_scope("_SB"); @@ -1526,6 +1527,8 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, } } =20 + build_i386_pci_hotplug(dsdt, pm->pcihp_io_base); + if (pcmc->legacy_cpu_hotplug) { build_legacy_cpu_hotplug_aml(dsdt, machine, pm->cpu_hp_io_base); } else { @@ -1546,7 +1549,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, { aml_append(scope, aml_name_decl("_HID", aml_string("ACPI0006"))); =20 - if (misc->is_piix4) { + if (misc->is_piix4 || pm->pcihp_bridge_en) { method =3D aml_method("_E01", 0, AML_NOTSERIALIZED); aml_append(method, aml_acquire(aml_name("\\_SB.PCI0.BLCK"), 0xFFFF)); --=20 2.25.4 From nobody Sat May 18 21:16:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1597787885; cv=none; d=zohomail.com; s=zohoarc; b=dtYVt1+X7GrroHxHF/lB3UxFMww6MA9+Oxk9aeb7T1yvLHgiFKapNzaIhy4La4bbnwso3JQqf/Lf/lbCyXQIUMHpAAX1NJx5SocdvyGLyAnA4Uzx34CKnbq4inOR/aY5TVegKA05tNt9+nLD9Tf+f/g6s+IvgceoEVJTNPgb6CE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597787885; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zz2tH4BT/ZCHpEwxA/sq/JDVNa6IRW375UQRDz8+Dvo=; b=kFFSRYzxMJuX8S205+AaGtFNee6eTUaVGKgwz7IEVCJrEcq54lvs6QFs5oyWuHSVpZBbIuSxVwpvMs70xNuvcfL4lRHFMu9DHgNx28N7AUePX5rpBr90mUnaCWUT00Ybx5H61NY8q/xf+segBUpe9tG822ufyYNyqhx1eK8h32w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597787885200636.8341742323869; Tue, 18 Aug 2020 14:58:05 -0700 (PDT) Received: from localhost ([::1]:56828 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k89cJ-0005LU-W6 for importer@patchew.org; Tue, 18 Aug 2020 17:58:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48660) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k89ZY-0001D4-NB for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:12 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:34770 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k89ZW-0007ft-V0 for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:12 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-516-wxT4Rjt0M-2F0NtlekFJlw-1; Tue, 18 Aug 2020 17:55:08 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 99815100746F; Tue, 18 Aug 2020 21:55:07 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.43.2.201]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 417751014171; Tue, 18 Aug 2020 21:55:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597787710; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zz2tH4BT/ZCHpEwxA/sq/JDVNa6IRW375UQRDz8+Dvo=; b=bc2kdDXVBCpZB/VLr9CAlpnoF8Hj5P20EKWBaa+xa08SpcxrCZTa7DyGAPW+8Yb8OLkpa9 ILPDDyJbm5HIxN0IfBRu/Vk5Jg+v2YUe89Gk5m3hZjOHRjQxd2BW3DcxdoAyp589rQzEWA 4l7G5jwH9HSdVIEPa2ymW2+0fkniiYc= X-MC-Unique: wxT4Rjt0M-2F0NtlekFJlw-1 From: Julia Suvorova To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 3/4] hw/i386/acpi-build: Turn off support of PCIe native hot-plug and SHPC in _OSC Date: Tue, 18 Aug 2020 23:52:26 +0200 Message-Id: <20200818215227.181654-4-jusual@redhat.com> In-Reply-To: <20200818215227.181654-1-jusual@redhat.com> References: <20200818215227.181654-1-jusual@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jusual@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.120; envelope-from=jusual@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 16:56:52 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Igor Mammedov , Julia Suvorova , Gerd Hoffmann , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Other methods may be used if the system is capable of this and the _OSC bit is set. Disable them explicitly to force ACPI PCI hot-plug use. The older versions will still use PCIe native. Signed-off-by: Julia Suvorova --- hw/i386/acpi-build.h | 11 +++++++++++ hw/i386/acpi-build.c | 21 +++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/hw/i386/acpi-build.h b/hw/i386/acpi-build.h index 74df5fc612..6f94312c39 100644 --- a/hw/i386/acpi-build.h +++ b/hw/i386/acpi-build.h @@ -5,6 +5,17 @@ =20 extern const struct AcpiGenericAddress x86_nvdimm_acpi_dsmio; =20 +/* PCI Firmware Specification 3.2, Table 4-5 */ +typedef enum { + ACPI_OSC_NATIVE_HP_EN =3D 0, + ACPI_OSC_SHPC_EN =3D 1, + ACPI_OSC_PME_EN =3D 2, + ACPI_OSC_AER_EN =3D 3, + ACPI_OSC_PCIE_CAP_EN =3D 4, + ACPI_OSC_LTR_EN =3D 5, + ACPI_OSC_ALLONES_INVALID =3D 6, +} AcpiOSCField; + void acpi_setup(void); =20 #endif diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index f3cd52bd06..c5f4802b8c 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1411,7 +1411,7 @@ static void build_i386_pci_hotplug(Aml *table, uint64= _t pcihp_addr) aml_append(table, scope); } =20 -static Aml *build_q35_osc_method(void) +static Aml *build_q35_osc_method(AcpiPmInfo *pm) { Aml *if_ctx; Aml *if_ctx2; @@ -1419,6 +1419,7 @@ static Aml *build_q35_osc_method(void) Aml *method; Aml *a_cwd1 =3D aml_name("CDW1"); Aml *a_ctrl =3D aml_local(0); + unsigned osc_ctrl; =20 method =3D aml_method("_OSC", 4, AML_NOTSERIALIZED); aml_append(method, aml_create_dword_field(aml_arg(3), aml_int(0), "CDW= 1")); @@ -1430,11 +1431,19 @@ static Aml *build_q35_osc_method(void) =20 aml_append(if_ctx, aml_store(aml_name("CDW3"), a_ctrl)); =20 + /* Always allow native PME, AER (depend on PCIE Capability Control) */ + osc_ctrl =3D BIT(ACPI_OSC_PME_EN) | BIT(ACPI_OSC_AER_EN) | + BIT(ACPI_OSC_PCIE_CAP_EN); + /* - * Always allow native PME, AER (no dependencies) - * Allow SHPC (PCI bridges can have SHPC controller) + * Guests seem to generally prefer native hot-plug control. + * Enable it only when we do not use ACPI hot-plug. */ - aml_append(if_ctx, aml_and(a_ctrl, aml_int(0x1F), a_ctrl)); + if (!pm->pcihp_bridge_en) { + osc_ctrl |=3D BIT(ACPI_OSC_NATIVE_HP_EN) | BIT(ACPI_OSC_SHPC_EN); + } + + aml_append(if_ctx, aml_and(a_ctrl, aml_int(osc_ctrl), a_ctrl)); =20 if_ctx2 =3D aml_if(aml_lnot(aml_equal(aml_arg(1), aml_int(1)))); /* Unknown revision */ @@ -1514,7 +1523,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, aml_append(dev, aml_name_decl("_CID", aml_eisaid("PNP0A03"))); aml_append(dev, aml_name_decl("_ADR", aml_int(0))); aml_append(dev, aml_name_decl("_UID", aml_int(1))); - aml_append(dev, build_q35_osc_method()); + aml_append(dev, build_q35_osc_method(pm)); aml_append(sb_scope, dev); aml_append(dsdt, sb_scope); =20 @@ -1590,7 +1599,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, if (pci_bus_is_express(bus)) { aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0A08"= ))); aml_append(dev, aml_name_decl("_CID", aml_eisaid("PNP0A03"= ))); - aml_append(dev, build_q35_osc_method()); + aml_append(dev, build_q35_osc_method(pm)); } else { aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0A03"= ))); } --=20 2.25.4 From nobody Sat May 18 21:16:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1597787890; cv=none; d=zohomail.com; s=zohoarc; b=e0B/vPOzGvpytKXpSkv2TmsSmWgfljEPq4CzqIQj7yyO59ab6j/zon8u2jyBXxmqqM8a/A73LH1Kaox7Lqy01w9eMnmMmhlktXmoXHd4WvU61p+QMdfY2fKOhmHSeAj9c62mFSVbVdvJghgIbTFW+Qk9fNfGzkTFyEGDSly425k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597787890; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1M8TxjZTYztegCAGyI75W0bUgq2oI1S09JtNB72RTDQ=; b=D5XML2FbjHaOAvFfGQ06TPly0lRO7orRPl7ANpI7neg/w6sft3Xt4AximOvCeawQYk0QFqMCWICCT3SL/ZiDsvP4IxPASiww8MKoyYk5YOD8pFtxxjLxhcfzP4IjIW+twyC+WECdaJ1iG1oCr6QZY5sW5IWTBXHpZ9XuGdLWra0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597787890909260.3551489010955; Tue, 18 Aug 2020 14:58:10 -0700 (PDT) Received: from localhost ([::1]:57032 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k89cP-0005QQ-JL for importer@patchew.org; Tue, 18 Aug 2020 17:58:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k89Zn-0001bN-4c for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:27 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:51570 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k89Zi-0007lP-Gx for qemu-devel@nongnu.org; Tue, 18 Aug 2020 17:55:26 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-186-AaMjjvVtPY2kJeeTmoU1YA-1; Tue, 18 Aug 2020 17:55:19 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 773BB186A560; Tue, 18 Aug 2020 21:55:18 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.43.2.201]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C6CC1101417D; Tue, 18 Aug 2020 21:55:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597787721; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1M8TxjZTYztegCAGyI75W0bUgq2oI1S09JtNB72RTDQ=; b=AJbtElNRBDnnkJr7n77fXMN9vUonnoB/RQx3fs6j+VWuYnYHf7avv9Pi6dPVF156lGCrmc izruxw37olOnrom2uSvzzbNuJg9JD4RXXhXyHvapQpeCONpeCoos9LIkMPbUcOD510YTYJ SNHl4PLkCepBunePofphDi8npFOpMhQ= X-MC-Unique: AaMjjvVtPY2kJeeTmoU1YA-1 From: Julia Suvorova To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 4/4] hw/acpi/ich9: Enable ACPI PCI hot-plug Date: Tue, 18 Aug 2020 23:52:27 +0200 Message-Id: <20200818215227.181654-5-jusual@redhat.com> In-Reply-To: <20200818215227.181654-1-jusual@redhat.com> References: <20200818215227.181654-1-jusual@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jusual@redhat.com X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.120; envelope-from=jusual@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/18 16:56:52 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Igor Mammedov , Julia Suvorova , Gerd Hoffmann , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Add acpi_pcihp to ich9_pm and use ACPI PCI hot-plug by default. Signed-off-by: Julia Suvorova --- Note: New pc_compats are usually added shortly after release. I will switch to pc_compat_5_1 when it becomes available. hw/i386/acpi-build.h | 1 + include/hw/acpi/ich9.h | 3 +++ hw/acpi/ich9.c | 45 ++++++++++++++++++++++++++++++++++++++++++ hw/acpi/pcihp.c | 5 ++++- hw/i386/acpi-build.c | 2 +- hw/i386/pc.c | 1 + 6 files changed, 55 insertions(+), 2 deletions(-) diff --git a/hw/i386/acpi-build.h b/hw/i386/acpi-build.h index 6f94312c39..f0bb080018 100644 --- a/hw/i386/acpi-build.h +++ b/hw/i386/acpi-build.h @@ -17,5 +17,6 @@ typedef enum { } AcpiOSCField; =20 void acpi_setup(void); +Object *acpi_get_i386_pci_host(void); =20 #endif diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h index 28a53181cb..9947085e9c 100644 --- a/include/hw/acpi/ich9.h +++ b/include/hw/acpi/ich9.h @@ -24,6 +24,7 @@ #include "hw/acpi/acpi.h" #include "hw/acpi/cpu_hotplug.h" #include "hw/acpi/cpu.h" +#include "hw/acpi/pcihp.h" #include "hw/acpi/memory_hotplug.h" #include "hw/acpi/acpi_dev_interface.h" #include "hw/acpi/tco.h" @@ -53,6 +54,8 @@ typedef struct ICH9LPCPMRegs { AcpiCpuHotplug gpe_cpu; CPUHotplugState cpuhp_state; =20 + bool use_acpi_hotplug_bridge; + AcpiPciHpState acpi_pci_hotplug; MemHotplugState acpi_memory_hotplug; =20 uint8_t disable_s3; diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c index a2a1742aa6..fde86d12ae 100644 --- a/hw/acpi/ich9.c +++ b/hw/acpi/ich9.c @@ -265,6 +265,7 @@ static void pm_reset(void *opaque) } pm->smi_en_wmask =3D ~0; =20 + acpi_pcihp_reset(&pm->acpi_pci_hotplug); acpi_update_sci(&pm->acpi_regs, pm->irq); } =20 @@ -303,6 +304,17 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *p= m, pm->enable_tco =3D true; acpi_pm_tco_init(&pm->tco_regs, &pm->io); =20 + if (pm->use_acpi_hotplug_bridge) { + acpi_pcihp_init(OBJECT(lpc_pci), + &pm->acpi_pci_hotplug, + pci_get_bus(lpc_pci), + pci_address_space_io(lpc_pci), + true, false); + + qbus_set_hotplug_handler(BUS(pci_get_bus(lpc_pci)), + OBJECT(lpc_pci)); + } + pm->irq =3D sci_irq; qemu_register_reset(pm_reset, pm); pm->powerdown_notifier.notify =3D pm_powerdown_req; @@ -374,6 +386,20 @@ static void ich9_pm_set_enable_tco(Object *obj, bool v= alue, Error **errp) s->pm.enable_tco =3D value; } =20 +static bool ich9_pm_get_acpi_pci_hotplug(Object *obj, Error **errp) +{ + ICH9LPCState *s =3D ICH9_LPC_DEVICE(obj); + + return s->pm.use_acpi_hotplug_bridge; +} + +static void ich9_pm_set_acpi_pci_hotplug(Object *obj, bool value, + Error **errp) +{ + ICH9LPCState *s =3D ICH9_LPC_DEVICE(obj); + + s->pm.use_acpi_hotplug_bridge =3D value; +} void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm) { static const uint32_t gpe0_len =3D ICH9_PMIO_GPE0_LEN; @@ -382,6 +408,7 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs = *pm) pm->disable_s3 =3D 0; pm->disable_s4 =3D 0; pm->s4_val =3D 2; + pm->use_acpi_hotplug_bridge =3D true; =20 object_property_add_uint32_ptr(obj, ACPI_PM_PROP_PM_IO_BASE, &pm->pm_io_base, OBJ_PROP_FLAG_READ); @@ -405,6 +432,9 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs = *pm) object_property_add_bool(obj, ACPI_PM_PROP_TCO_ENABLED, ich9_pm_get_enable_tco, ich9_pm_set_enable_tco); + object_property_add_bool(obj, "acpi-pci-hotplug-with-bridge-support", + ich9_pm_get_acpi_pci_hotplug, + ich9_pm_set_acpi_pci_hotplug); } =20 void ich9_pm_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *= dev, @@ -412,6 +442,11 @@ void ich9_pm_device_pre_plug_cb(HotplugHandler *hotplu= g_dev, DeviceState *dev, { ICH9LPCState *lpc =3D ICH9_LPC_DEVICE(hotplug_dev); =20 + if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { + acpi_pcihp_device_pre_plug_cb(hotplug_dev, dev, errp); + return; + } + if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) && !lpc->pm.acpi_memory_hotplug.is_enabled) error_setg(errp, @@ -437,6 +472,9 @@ void ich9_pm_device_plug_cb(HotplugHandler *hotplug_dev= , DeviceState *dev, } else { acpi_cpu_plug_cb(hotplug_dev, &lpc->pm.cpuhp_state, dev, errp); } + } else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { + acpi_pcihp_device_plug_cb(hotplug_dev, &lpc->pm.acpi_pci_hotplug, + dev, errp); } else { error_setg(errp, "acpi: device plug request for not supported devi= ce" " type: %s", object_get_typename(OBJECT(dev))); @@ -457,6 +495,10 @@ void ich9_pm_device_unplug_request_cb(HotplugHandler *= hotplug_dev, !lpc->pm.cpu_hotplug_legacy) { acpi_cpu_unplug_request_cb(hotplug_dev, &lpc->pm.cpuhp_state, dev, errp); + } else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { + acpi_pcihp_device_unplug_request_cb(hotplug_dev, + &lpc->pm.acpi_pci_hotplug, + dev, errp); } else { error_setg(errp, "acpi: device unplug request for not supported de= vice" " type: %s", object_get_typename(OBJECT(dev))); @@ -474,6 +516,9 @@ void ich9_pm_device_unplug_cb(HotplugHandler *hotplug_d= ev, DeviceState *dev, } else if (object_dynamic_cast(OBJECT(dev), TYPE_CPU) && !lpc->pm.cpu_hotplug_legacy) { acpi_cpu_unplug_cb(&lpc->pm.cpuhp_state, dev, errp); + } else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) { + acpi_pcihp_device_unplug_cb(hotplug_dev, &lpc->pm.acpi_pci_hotplug, + dev, errp); } else { error_setg(errp, "acpi: device unplug for not supported device" " type: %s", object_get_typename(OBJECT(dev))); diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 9a35ed6c83..46ebd1bb15 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -30,6 +30,8 @@ #include "hw/pci-host/i440fx.h" #include "hw/pci/pci.h" #include "hw/pci/pci_bridge.h" +#include "hw/pci/pci_host.h" +#include "hw/i386/acpi-build.h" #include "hw/acpi/acpi.h" #include "exec/address-spaces.h" #include "hw/pci/pci_bus.h" @@ -90,6 +92,7 @@ static void *acpi_set_bsel(PCIBus *bus, void *opaque) static void acpi_set_pci_info(void) { static bool bsel_is_set; + Object *host =3D acpi_get_i386_pci_host(); PCIBus *bus; unsigned bsel_alloc =3D ACPI_PCIHP_BSEL_DEFAULT; =20 @@ -98,7 +101,7 @@ static void acpi_set_pci_info(void) } bsel_is_set =3D true; =20 - bus =3D find_i440fx(); /* TODO: Q35 support */ + bus =3D PCI_HOST_BRIDGE(host)->bus; if (bus) { /* Scan all PCI buses. Set property to enable acpi based hotplug. = */ pci_for_each_bus_depth_first(bus, acpi_set_bsel, NULL, &bsel_alloc= ); diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index c5f4802b8c..8cecdf722f 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -270,7 +270,7 @@ static void acpi_get_misc_info(AcpiMiscInfo *info) * Because of the PXB hosts we cannot simply query TYPE_PCI_HOST_BRIDGE. * On i386 arch we only have two pci hosts, so we can look only for them. */ -static Object *acpi_get_i386_pci_host(void) +Object *acpi_get_i386_pci_host(void) { PCIHostState *host; =20 diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 47c5ca3e34..175e6911a1 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -98,6 +98,7 @@ #include "trace.h" =20 GlobalProperty pc_compat_5_0[] =3D { + { "ICH9-LPC", "acpi-pci-hotplug-with-bridge-support", "off" }, }; const size_t pc_compat_5_0_len =3D G_N_ELEMENTS(pc_compat_5_0); =20 --=20 2.25.4