From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828059977926.521764199541; Wed, 28 Feb 2018 06:27:39 -0800 (PST) Received: from localhost ([::1]:44621 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2hj-00068d-FG for importer@patchew.org; Wed, 28 Feb 2018 09:27:35 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33563) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fl-0004lD-27 for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2ff-0001uT-2C for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:33 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:37534 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fa-0001sR-Td; Wed, 28 Feb 2018 09:25:23 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7EF8840FB647; Wed, 28 Feb 2018 14:25:22 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id A20C2946B7; Wed, 28 Feb 2018 14:25:21 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:46 +0100 Message-Id: <1519827835-239519-2-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:22 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:22 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 01/10] acpi: remove unused acpi-dsdt.aml X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" SeaBIOS blob which is currently shipped with QEMU doesn't need acpi-dsdt.aml nor is able to use it and code that loaded it in QEMU was removed by (commit 9fb7aaaf4c "pc: drop external DSDT loading") in 2013. Signed-off-by: Igor Mammedov Reviewed-by: Gerd Hoffmann Reviewed-by: Eric Auger Tested-by: Eric Auger --- Makefile | 1 - pc-bios/acpi-dsdt.aml | Bin 4405 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 pc-bios/acpi-dsdt.aml diff --git a/Makefile b/Makefile index 90e05ac..f3a4cf9 100644 --- a/Makefile +++ b/Makefile @@ -648,7 +648,6 @@ bepo cz ifdef INSTALL_BLOBS BLOBS=3Dbios.bin bios-256k.bin sgabios.bin vgabios.bin vgabios-cirrus.bin \ vgabios-stdvga.bin vgabios-vmware.bin vgabios-qxl.bin vgabios-virtio.bin \ -acpi-dsdt.aml \ ppc_rom.bin openbios-sparc32 openbios-sparc64 openbios-ppc QEMU,tcx.bin QE= MU,cgthree.bin \ pxe-e1000.rom pxe-eepro100.rom pxe-ne2k_pci.rom \ pxe-pcnet.rom pxe-rtl8139.rom pxe-virtio.rom \ diff --git a/pc-bios/acpi-dsdt.aml b/pc-bios/acpi-dsdt.aml deleted file mode 100644 index 558c10f51ccbbf9ec2f47a4a998a7055059a8963..000000000000000000000000000= 0000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4405 zcmb7{O>f)C8OI;KNTx=3D#Ov$uk$9XY?b_=3DxIjb0q@_EJP5WkrsxFrpHqP*76NE}&CE zqzSOzpn&5RO*WTe*G|Kam8znLL9 zdJ#bTx_LkF0GjuGY(WhGo!+3koGWcQ9rFPU5B+94((<~g4WH$C9dAv`{m^gT zZEJrW$A5|A$IoMJl)(Ns&a3@V^7|L@K9JFq{e&^9IOQm8M#H0x!0S}3=3Dw`>a8*i9l zMGe0XR&=3D-HYff+FBQoL^UcVI@%=3D&fLZ0Lo8-=3D z2|2%0`vJHO7J2;;UQ)-|gCMNeL^TdtX>}ZQ>$N1Pgb_W)N-Ls=3D$)m@-itRY~WHYgk zgX+BqrWEW?)FoC3!tE_lT@6}k^@E_hy_E!2ipVPzkypAAJ^BL$Apdw8JA0Oxf|hkN zXbsXi&~OfL^l_GN27^7ov3&C`59aWhLwfmMtLJY9eLvcCx1(^-fP`A&gqlWQ#LS5& z_E*O-9LM?DYzmXYSH~mx^T>vO|2H#*DO<8=3DSc*kf_+yTS?9DqcX}p{p+4*D-kG#yi zb|d180Xv{$XK)dCIxy@PNAErQ+8n3KJVco~H$7En{Z-6#s#%p5=3D&X1+| z>%skMU4%Dqj4^z*PT^@ zyarVauZe}VjsYb+#sOA%+7j58pBiUkMT(uE)EZc=3DI=3Dhhhb|Mzl_$me4&!?nw8e> zrn?k)tz9iS(8fRw?snkyc5t5KZ$5k#v#U?yN%1MgInZJNd^U)+Nr_tgvleDJyAxVO zPWv%F!Kn)RgVL?v9+vVZzHHF#-SR=3DyHLN$FWK%oSQ8ZIwpzxryXxg(Ge)CX;b46Zg zSP;*+ADX6;JTX4^)VU|xo+|Q8P4P9NjA+U|QIaS2hTGy7TG*Z{@=3DQ$);fbc)6D4`3 zS@1IOvr*fi{Ihn%A6i%jcqLexDH;OrNO!%zi z70$fMiBjgo54$voXZO5vdW24=3D5!TK zSK)M3PLwj|io&^~aIUDFC}qx7g>zNmTva(y%AB|xl-BJ9h4X^SiBjfVQ#jWY&NY=3D2 zrOdgmaIPzy>nbNone(E;c~RlKsB)r|IX4te+zyF%j(;^bR8EvK=3DOu;nlEQgO_^uO`jgU*EWn+e7WD5_ zEWB0eR-;?pa+f=3DI@RvWyJ!OYu+`;CiEbnf2?s)wi8uTm00?U7yg&aRY9KcIzV;Q`6 zCiz!mc9@K*KBea2QFnpf=3DyXS7<8GMt+Vm$6i>qw;%L3#K{9WM*1%OT{c#v2UJ3ZpXq^ zT>AQZ($|Maw@suE&!;y<`g94=3DkqD@_qz zV0*#s-WcMfm}eH?9)hk>GJY{)I`G1PBt~VzbmU(20$kE(UXx6W8+$q?xy%b%yZW%q z{)wleKHuy9jcpE}*<9c)y5YFHS*&<~ODl{%!&5$OWOp*J;^)+h)37m&ChTd<7T}A0 zZU426&7a``5jTMQ$ Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828674509239.25583628492484; Wed, 28 Feb 2018 06:37:54 -0800 (PST) Received: from localhost ([::1]:44676 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2rg-0005s9-6C for importer@patchew.org; Wed, 28 Feb 2018 09:37:52 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33565) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fl-0004lV-DB for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fe-0001u3-Kp for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:33 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:35394 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fc-0001sv-0e; Wed, 28 Feb 2018 09:25:24 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 956834015184; Wed, 28 Feb 2018 14:25:23 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id B3827946B7; Wed, 28 Feb 2018 14:25:22 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:47 +0100 Message-Id: <1519827835-239519-3-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:23 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:23 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 02/10] pc: replace pm object initialization with one-liner in acpi_get_pm_info() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" next patch will need it before it gets to piix4/lpc branches that initializes 'obj' now. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Eric Auger --- hw/i386/acpi-build.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index deb440f..b85fefe 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -128,7 +128,7 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) { Object *piix =3D piix4_pm_find(); Object *lpc =3D ich9_lpc_find(); - Object *obj =3D NULL; + Object *obj =3D piix ? piix : lpc; QObject *o; =20 pm->force_rev1_fadt =3D false; @@ -138,7 +138,6 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) if (piix) { /* w2k requires FADT(rev1) or it won't boot, keep PC compatible */ pm->force_rev1_fadt =3D true; - obj =3D piix; 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); @@ -146,7 +145,6 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) object_property_get_uint(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); } if (lpc) { - obj =3D lpc; pm->cpu_hp_io_base =3D ICH9_CPU_HOTPLUG_IO_BASE; } assert(obj); --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828384451157.06613882465638; Wed, 28 Feb 2018 06:33:04 -0800 (PST) Received: from localhost ([::1]:44654 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2n0-0002Vm-AQ for importer@patchew.org; Wed, 28 Feb 2018 09:33:02 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33628) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fn-0004oG-SX for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fm-0001yx-NG for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:35 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:37540 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fd-0001tH-28; Wed, 28 Feb 2018 09:25:25 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A7F3640FB650; Wed, 28 Feb 2018 14:25:24 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id CA1709C04E; Wed, 28 Feb 2018 14:25:23 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:48 +0100 Message-Id: <1519827835-239519-4-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:24 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:24 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 03/10] acpi: reuse AcpiGenericAddress instead of Acpi20GenericAddress X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Drop duplicate in form of Acpi20GenericAddress and reuse AcpiGenericAddress. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- include/hw/acpi/acpi-defs.h | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h index 80c8099..9942bc5 100644 --- a/include/hw/acpi/acpi-defs.h +++ b/include/hw/acpi/acpi-defs.h @@ -40,18 +40,6 @@ enum { ACPI_FADT_F_LOW_POWER_S0_IDLE_CAPABLE, }; =20 -/* - * ACPI 2.0 Generic Address Space definition. - */ -struct Acpi20GenericAddress { - uint8_t address_space_id; - uint8_t register_bit_width; - uint8_t register_bit_offset; - uint8_t reserved; - uint64_t address; -} QEMU_PACKED; -typedef struct Acpi20GenericAddress Acpi20GenericAddress; - struct AcpiRsdpDescriptor { /* Root System Descriptor Pointer */ uint64_t signature; /* ACPI signature, contains "RSD PTR = " */ uint8_t checksum; /* To make sum of struct =3D=3D 0 */ @@ -167,7 +155,8 @@ struct AcpiGenericAddress { uint8_t space_id; /* Address space where struct or register exi= sts */ uint8_t bit_width; /* Size in bits of given register */ uint8_t bit_offset; /* Bit offset within the register */ - uint8_t access_width; /* Minimum Access size (ACPI 3.0) */ + uint8_t access_width; /* ACPI 3.0: Minimum Access size (ACPI 3.0), + ACPI 2.0: Reserved, Table 5-1 */ uint64_t address; /* 64-bit address of struct or register */ } QEMU_PACKED; =20 @@ -456,7 +445,7 @@ typedef struct AcpiGenericTimerTable AcpiGenericTimerTa= ble; struct Acpi20Hpet { ACPI_TABLE_HEADER_DEF /* ACPI common table header */ uint32_t timer_block_id; - Acpi20GenericAddress addr; + struct AcpiGenericAddress addr; uint8_t hpet_number; uint16_t min_tick; uint8_t page_protect; --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828499616722.8436026940709; Wed, 28 Feb 2018 06:34:59 -0800 (PST) Received: from localhost ([::1]:44663 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2os-0003sO-G4 for importer@patchew.org; Wed, 28 Feb 2018 09:34:58 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33634) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fo-0004om-6f for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fk-0001xC-4S for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:36 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:35398 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fe-0001tk-4E; Wed, 28 Feb 2018 09:25:26 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BAB57400ADC3; Wed, 28 Feb 2018 14:25:25 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id DC8BA9C04A; Wed, 28 Feb 2018 14:25:24 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:49 +0100 Message-Id: <1519827835-239519-5-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:25 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:25 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 04/10] acpi: add build_append_gas() helper for Generic Address Structure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" it will help to add Generic Address Structure to ACPI tables without using packed C structures and avoid endianness issues as API doesn't need an explicit conversion. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- include/hw/acpi/aml-build.h | 20 ++++++++++++++++++++ hw/acpi/aml-build.c | 16 ++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h index 88d0738..8692ccc 100644 --- a/include/hw/acpi/aml-build.h +++ b/include/hw/acpi/aml-build.h @@ -78,6 +78,15 @@ typedef enum { } AmlUpdateRule; =20 typedef enum { + AML_AS_SYSTEM_MEMORY =3D 0X00, + AML_AS_SYSTEM_IO =3D 0X01, + AML_AS_PCI_CONFIG =3D 0X02, + AML_AS_EMBEDDED_CTRL =3D 0X03, + AML_AS_SMBUS =3D 0X04, + AML_AS_FFH =3D 0X7F, +} AmlAddressSpace; + +typedef enum { AML_SYSTEM_MEMORY =3D 0X00, AML_SYSTEM_IO =3D 0X01, AML_PCI_CONFIG =3D 0X02, @@ -389,6 +398,17 @@ int build_append_named_dword(GArray *array, const char *name_format, ...) GCC_FMT_ATTR(2, 3); =20 +void build_append_gas(GArray *table, AmlAddressSpace as, + uint8_t bit_width, uint8_t bit_offset, + uint8_t access_width, uint64_t address); + +static inline void +build_append_gas_from_struct(GArray *table, const struct AcpiGenericAddres= s *s) +{ + build_append_gas(table, s->space_id, s->bit_width, s->bit_offset, + s->access_width, s->address); +} + void build_srat_memory(AcpiSratMemoryAffinity *numamem, uint64_t base, uint64_t len, int node, MemoryAffinityFlags flags); =20 diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c index 36a6cc4..3fef5f6 100644 --- a/hw/acpi/aml-build.c +++ b/hw/acpi/aml-build.c @@ -258,6 +258,22 @@ static void build_append_int(GArray *table, uint64_t v= alue) } } =20 +/* Generic Address Structure (GAS) + * ACPI 2.0/3.0: 5.2.3.1 Generic Address Structure + * 2.0 compat note: + * @access_width must be 0, see ACPI 2.0:Table 5-1 + */ +void build_append_gas(GArray *table, AmlAddressSpace as, + uint8_t bit_width, uint8_t bit_offset, + uint8_t access_width, uint64_t address) +{ + build_append_int_noprefix(table, as, 1); + build_append_int_noprefix(table, bit_width, 1); + build_append_int_noprefix(table, bit_offset, 1); + build_append_int_noprefix(table, access_width, 1); + build_append_int_noprefix(table, address, 8); +} + /* * Build NAME(XXXX, 0x00000000) where 0x00000000 is encoded as a dword, * and return the offset to 0x00000000 for runtime patching. --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828240836897.2976108702965; Wed, 28 Feb 2018 06:30:40 -0800 (PST) Received: from localhost ([::1]:44639 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2kh-0000Pf-Hz for importer@patchew.org; Wed, 28 Feb 2018 09:30:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33523) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fj-0004jM-79 for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fi-0001w7-Ak for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:31 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:37544 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2ff-0001uH-DV; Wed, 28 Feb 2018 09:25:27 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CF6EC40FB657; Wed, 28 Feb 2018 14:25:26 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id EECEA946B7; Wed, 28 Feb 2018 14:25:25 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:50 +0100 Message-Id: <1519827835-239519-6-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:26 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:26 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 05/10] acpi: move ACPI_PORT_SMI_CMD define to header it belongs to X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" ACPI_PORT_SMI_CMD is alias for APM_CNT_IOPORT, so make it really one instead of duplicating its value. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- include/hw/isa/apm.h | 3 +++ hw/i386/acpi-build.c | 2 -- hw/isa/apm.c | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/hw/isa/apm.h b/include/hw/isa/apm.h index 4839ff1..b7098bf 100644 --- a/include/hw/isa/apm.h +++ b/include/hw/isa/apm.h @@ -5,6 +5,9 @@ #include "hw/hw.h" #include "exec/memory.h" =20 +#define APM_CNT_IOPORT 0xb2 +#define ACPI_PORT_SMI_CMD APM_CNT_IOPORT + typedef void (*apm_ctrl_changed_t)(uint32_t val, void *arg); =20 typedef struct APMState { diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index b85fefe..699f3a0 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -255,8 +255,6 @@ static void acpi_get_pci_holes(Range *hole, Range *hole= 64) NULL)); } =20 -#define ACPI_PORT_SMI_CMD 0x00b2 /* TODO: this is APM_CNT_IOPORT= */ - static void acpi_align_size(GArray *blob, unsigned align) { /* Align size to multiple of given size. This reduces the chance diff --git a/hw/isa/apm.c b/hw/isa/apm.c index e232b0d..c3101ef 100644 --- a/hw/isa/apm.c +++ b/hw/isa/apm.c @@ -34,7 +34,6 @@ #endif =20 /* fixed I/O location */ -#define APM_CNT_IOPORT 0xb2 #define APM_STS_IOPORT 0xb3 =20 static void apm_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828239189584.5151690465192; Wed, 28 Feb 2018 06:30:39 -0800 (PST) Received: from localhost ([::1]:44638 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2kf-0000P4-Oq for importer@patchew.org; Wed, 28 Feb 2018 09:30:37 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33748) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fw-0004yR-3i for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2ft-00021d-56 for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:44 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:37546 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fg-0001v2-9Y; Wed, 28 Feb 2018 09:25:28 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E0A0C40FB647; Wed, 28 Feb 2018 14:25:27 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0FEF3946B7; Wed, 28 Feb 2018 14:25:26 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:51 +0100 Message-Id: <1519827835-239519-7-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:27 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 28 Feb 2018 14:25:27 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 06/10] pc: acpi: isolate FADT specific data into AcpiFadtData structure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" move FADT data initialization out of fadt_setup() into dedicated init_fadt_data() that will set common for pc/q35 values in AcpiFadtData structure and acpi_get_pm_info() will complement it with pc/q35 specific values initialization. That will allow to get rid of fadt_setup() and generalize build_fadt() so it could be easily extended for rev5 and reused by ARM target. While at it also move facs/dsdt/xdsdt offsets from build_fadt() arg list into AcpiFadtData, as they belong to the same dataset. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- v2: changes requested by Auger Eric - s/pm1_/pm1a_/ - s/c2_latency/plvl2_lat/ - s/c3_latency/plvl3_lat/ - cleanup ACPI_PORT_SMI_CMD TODO, move it to hw/isa/apm.h - move if (f->facs_tbl_offset) / if (f->dsdt_tbl_offset) bios_linker_loader_add_pointer(...) into the patch that makes build_fadt() generic --- include/hw/acpi/acpi-defs.h | 28 +++++++ hw/i386/acpi-build.c | 190 ++++++++++++++++++++++++----------------= ---- 2 files changed, 130 insertions(+), 88 deletions(-) diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h index 9942bc5..3fb0ace 100644 --- a/include/hw/acpi/acpi-defs.h +++ b/include/hw/acpi/acpi-defs.h @@ -175,6 +175,34 @@ struct AcpiFadtDescriptorRev5_1 { =20 typedef struct AcpiFadtDescriptorRev5_1 AcpiFadtDescriptorRev5_1; =20 +typedef struct AcpiFadtData { + struct AcpiGenericAddress pm1a_cnt; /* PM1a_CNT_BLK */ + struct AcpiGenericAddress pm1a_evt; /* PM1a_EVT_BLK */ + struct AcpiGenericAddress pm_tmr; /* PM_TMR_BLK */ + struct AcpiGenericAddress gpe0_blk; /* GPE0_BLK */ + struct AcpiGenericAddress reset_reg; /* RESET_REG */ + uint8_t reset_val; /* RESET_VALUE */ + uint8_t rev; /* Revision */ + uint32_t flags; /* Flags */ + uint32_t smi_cmd; /* SMI_CMD */ + uint16_t sci_int; /* SCI_INT */ + uint8_t int_model; /* INT_MODEL */ + uint8_t acpi_enable_cmd; /* ACPI_ENABLE */ + uint8_t acpi_disable_cmd; /* ACPI_DISABLE */ + uint8_t rtc_century; /* CENTURY */ + uint16_t plvl2_lat; /* P_LVL2_LAT */ + uint16_t plvl3_lat; /* P_LVL3_LAT */ + + /* + * respective tables offsets within ACPI_BUILD_TABLE_FILE, + * NULL if table doesn't exist (in that case field's value + * won't be patched by linker and will be kept set to 0) + */ + unsigned *facs_tbl_offset; /* FACS offset in */ + unsigned *dsdt_tbl_offset; + unsigned *xdsdt_tbl_offset; +} AcpiFadtData; + #define ACPI_FADT_ARM_PSCI_COMPLIANT (1 << 0) #define ACPI_FADT_ARM_PSCI_USE_HVC (1 << 1) =20 diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 699f3a0..1f88ed1 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -91,17 +91,11 @@ typedef struct AcpiMcfgInfo { } AcpiMcfgInfo; =20 typedef struct AcpiPmInfo { - bool force_rev1_fadt; bool s3_disabled; bool s4_disabled; bool pcihp_bridge_en; uint8_t s4_val; - uint16_t sci_int; - uint8_t acpi_enable_cmd; - uint8_t acpi_disable_cmd; - uint32_t gpe0_blk; - uint32_t gpe0_blk_len; - uint32_t io_base; + AcpiFadtData fadt; uint16_t cpu_hp_io_base; uint16_t pcihp_io_base; uint16_t pcihp_io_len; @@ -124,20 +118,59 @@ typedef struct AcpiBuildPciBusHotplugState { bool pcihp_bridge_en; } AcpiBuildPciBusHotplugState; =20 +static void init_common_fadt_data(Object *o, AcpiFadtData *data) +{ + uint32_t io =3D object_property_get_uint(o, ACPI_PM_PROP_PM_IO_BASE, N= ULL); + AmlAddressSpace as =3D AML_AS_SYSTEM_IO; + AcpiFadtData fadt =3D { + .rev =3D 3, + .flags =3D + (1 << ACPI_FADT_F_WBINVD) | + (1 << ACPI_FADT_F_PROC_C1) | + (1 << ACPI_FADT_F_SLP_BUTTON) | + (1 << ACPI_FADT_F_RTC_S4) | + (1 << ACPI_FADT_F_USE_PLATFORM_CLOCK) | + /* APIC destination mode ("Flat Logical") has an upper limit o= f 8 + * CPUs for more than 8 CPUs, "Clustered Logical" mode has to = be + * used + */ + ((max_cpus > 8) ? (1 << ACPI_FADT_F_FORCE_APIC_CLUSTER_MODEL) = : 0), + .int_model =3D 1 /* Multiple APIC */, + .rtc_century =3D RTC_CENTURY, + .plvl2_lat =3D 0xfff /* C2 state not supported */, + .plvl3_lat =3D 0xfff /* C3 state not supported */, + .smi_cmd =3D ACPI_PORT_SMI_CMD, + .sci_int =3D object_property_get_uint(o, ACPI_PM_PROP_SCI_INT, NUL= L), + .acpi_enable_cmd =3D + object_property_get_uint(o, ACPI_PM_PROP_ACPI_ENABLE_CMD, NULL= ), + .acpi_disable_cmd =3D + object_property_get_uint(o, ACPI_PM_PROP_ACPI_DISABLE_CMD, NUL= L), + .pm1a_evt =3D { .space_id =3D as, .bit_width =3D 4 * 8, .address = =3D io }, + .pm1a_cnt =3D { .space_id =3D as, .bit_width =3D 2 * 8, + .address =3D io + 0x04 }, + .pm_tmr =3D { .space_id =3D as, .bit_width =3D 4 * 8, .address =3D= io + 0x08 }, + .gpe0_blk =3D { .space_id =3D as, .bit_width =3D + object_property_get_uint(o, ACPI_PM_PROP_GPE0_BLK_LEN, NULL) *= 8, + .address =3D object_property_get_uint(o, ACPI_PM_PROP_GPE0_BLK= , NULL) + }, + }; + *data =3D fadt; +} + static void acpi_get_pm_info(AcpiPmInfo *pm) { Object *piix =3D piix4_pm_find(); Object *lpc =3D ich9_lpc_find(); Object *obj =3D piix ? piix : lpc; QObject *o; - - pm->force_rev1_fadt =3D false; pm->cpu_hp_io_base =3D 0; pm->pcihp_io_base =3D 0; pm->pcihp_io_len =3D 0; + + init_common_fadt_data(obj, &pm->fadt); if (piix) { /* w2k requires FADT(rev1) or it won't boot, keep PC compatible */ - pm->force_rev1_fadt =3D true; + 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); @@ -145,10 +178,19 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) object_property_get_uint(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); } if (lpc) { + struct AcpiGenericAddress r =3D { .space_id =3D AML_AS_SYSTEM_IO, + .bit_width =3D 8, .address =3D ICH9_RST_CNT_IOPORT }; + pm->fadt.reset_reg =3D r; + pm->fadt.reset_val =3D 0xf; + pm->fadt.flags |=3D 1 << ACPI_FADT_F_RESET_REG_SUP; pm->cpu_hp_io_base =3D ICH9_CPU_HOTPLUG_IO_BASE; } assert(obj); =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). */ + QEMU_BUILD_BUG_ON(ICH9_RST_CNT_IOPORT !=3D RCR_IOPORT); + /* Fill in optional s3/s4 related properties */ o =3D object_property_get_qobject(obj, ACPI_PM_PROP_S3_DISABLED, NULL); if (o) { @@ -172,22 +214,6 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) } qobject_decref(o); =20 - /* Fill in mandatory properties */ - pm->sci_int =3D object_property_get_uint(obj, ACPI_PM_PROP_SCI_INT, NU= LL); - - pm->acpi_enable_cmd =3D object_property_get_uint(obj, - ACPI_PM_PROP_ACPI_ENABL= E_CMD, - NULL); - pm->acpi_disable_cmd =3D - object_property_get_uint(obj, - ACPI_PM_PROP_ACPI_DISABLE_CMD, - NULL); - pm->io_base =3D object_property_get_uint(obj, ACPI_PM_PROP_PM_IO_BASE, - NULL); - pm->gpe0_blk =3D object_property_get_uint(obj, ACPI_PM_PROP_GPE0_BLK, - NULL); - pm->gpe0_blk_len =3D object_property_get_uint(obj, ACPI_PM_PROP_GPE0_B= LK_LEN, - NULL); pm->pcihp_bridge_en =3D object_property_get_bool(obj, "acpi-pci-hotplug-with-bridge-suppor= t", NULL); @@ -273,73 +299,53 @@ build_facs(GArray *table_data, BIOSLinker *linker) } =20 /* Load chipset information in FADT */ -static void fadt_setup(AcpiFadtDescriptorRev3 *fadt, AcpiPmInfo *pm) +static void fadt_setup(AcpiFadtDescriptorRev3 *fadt, AcpiFadtData f) { - fadt->model =3D 1; + fadt->model =3D f.int_model; fadt->reserved1 =3D 0; - fadt->sci_int =3D cpu_to_le16(pm->sci_int); - fadt->smi_cmd =3D cpu_to_le32(ACPI_PORT_SMI_CMD); - fadt->acpi_enable =3D pm->acpi_enable_cmd; - fadt->acpi_disable =3D pm->acpi_disable_cmd; + fadt->sci_int =3D cpu_to_le16(f.sci_int); + fadt->smi_cmd =3D cpu_to_le32(f.smi_cmd); + fadt->acpi_enable =3D f.acpi_enable_cmd; + fadt->acpi_disable =3D f.acpi_disable_cmd; /* EVT, CNT, TMR offset matches hw/acpi/core.c */ - fadt->pm1a_evt_blk =3D cpu_to_le32(pm->io_base); - fadt->pm1a_cnt_blk =3D cpu_to_le32(pm->io_base + 0x04); - fadt->pm_tmr_blk =3D cpu_to_le32(pm->io_base + 0x08); - fadt->gpe0_blk =3D cpu_to_le32(pm->gpe0_blk); + fadt->pm1a_evt_blk =3D cpu_to_le32(f.pm1a_evt.address); + fadt->pm1a_cnt_blk =3D cpu_to_le32(f.pm1a_cnt.address); + fadt->pm_tmr_blk =3D cpu_to_le32(f.pm_tmr.address); + fadt->gpe0_blk =3D cpu_to_le32(f.gpe0_blk.address); /* EVT, CNT, TMR length matches hw/acpi/core.c */ - fadt->pm1_evt_len =3D 4; - fadt->pm1_cnt_len =3D 2; - fadt->pm_tmr_len =3D 4; - fadt->gpe0_blk_len =3D pm->gpe0_blk_len; - fadt->plvl2_lat =3D cpu_to_le16(0xfff); /* C2 state not supported */ - fadt->plvl3_lat =3D cpu_to_le16(0xfff); /* C3 state not supported */ - fadt->flags =3D cpu_to_le32((1 << ACPI_FADT_F_WBINVD) | - (1 << ACPI_FADT_F_PROC_C1) | - (1 << ACPI_FADT_F_SLP_BUTTON) | - (1 << ACPI_FADT_F_RTC_S4)); - fadt->flags |=3D cpu_to_le32(1 << ACPI_FADT_F_USE_PLATFORM_CLOCK); - /* APIC destination mode ("Flat Logical") has an upper limit of 8 CPUs - * For more than 8 CPUs, "Clustered Logical" mode has to be used - */ - if (max_cpus > 8) { - fadt->flags |=3D cpu_to_le32(1 << ACPI_FADT_F_FORCE_APIC_CLUSTER_M= ODEL); - } - fadt->century =3D RTC_CENTURY; - if (pm->force_rev1_fadt) { + fadt->pm1_evt_len =3D f.pm1a_evt.bit_width / 8; + fadt->pm1_cnt_len =3D f.pm1a_cnt.bit_width / 8; + fadt->pm_tmr_len =3D f.pm_tmr.bit_width / 8; + fadt->gpe0_blk_len =3D f.gpe0_blk.bit_width / 8; + fadt->plvl2_lat =3D cpu_to_le16(f.plvl2_lat); + fadt->plvl3_lat =3D cpu_to_le16(f.plvl3_lat); + fadt->flags =3D cpu_to_le32(f.flags); + fadt->century =3D f.rtc_century; + if (f.rev =3D=3D 1) { return; } =20 - fadt->flags |=3D cpu_to_le32(1 << ACPI_FADT_F_RESET_REG_SUP); - fadt->reset_value =3D 0xf; - fadt->reset_register.space_id =3D AML_SYSTEM_IO; - fadt->reset_register.bit_width =3D 8; - fadt->reset_register.address =3D cpu_to_le64(ICH9_RST_CNT_IOPORT); - /* The above need not be conditional on machine type because the reset= port - * happens to be the same on PIIX (pc) and ICH9 (q35). */ - QEMU_BUILD_BUG_ON(ICH9_RST_CNT_IOPORT !=3D RCR_IOPORT); + fadt->reset_value =3D f.reset_val; + fadt->reset_register =3D f.reset_reg; + fadt->reset_register.address =3D cpu_to_le64(f.reset_reg.address); =20 - fadt->xpm1a_event_block.space_id =3D AML_SYSTEM_IO; - fadt->xpm1a_event_block.bit_width =3D fadt->pm1_evt_len * 8; - fadt->xpm1a_event_block.address =3D cpu_to_le64(pm->io_base); + fadt->xpm1a_event_block =3D f.pm1a_evt; + fadt->xpm1a_event_block.address =3D cpu_to_le64(f.pm1a_evt.address); =20 - fadt->xpm1a_control_block.space_id =3D AML_SYSTEM_IO; - fadt->xpm1a_control_block.bit_width =3D fadt->pm1_cnt_len * 8; - fadt->xpm1a_control_block.address =3D cpu_to_le64(pm->io_base + 0x4); + fadt->xpm1a_control_block =3D f.pm1a_cnt; + fadt->xpm1a_control_block.address =3D cpu_to_le64(f.pm1a_cnt.address); =20 - fadt->xpm_timer_block.space_id =3D AML_SYSTEM_IO; - fadt->xpm_timer_block.bit_width =3D fadt->pm_tmr_len * 8; - fadt->xpm_timer_block.address =3D cpu_to_le64(pm->io_base + 0x8); + fadt->xpm_timer_block =3D f.pm_tmr; + fadt->xpm_timer_block.address =3D cpu_to_le64(f.pm_tmr.address); =20 - fadt->xgpe0_block.space_id =3D AML_SYSTEM_IO; - fadt->xgpe0_block.bit_width =3D pm->gpe0_blk_len * 8; - fadt->xgpe0_block.address =3D cpu_to_le64(pm->gpe0_blk); + fadt->xgpe0_block =3D f.gpe0_blk; + fadt->xgpe0_block.address =3D cpu_to_le64(f.gpe0_blk.address); } =20 =20 /* FADT */ static void -build_fadt(GArray *table_data, BIOSLinker *linker, AcpiPmInfo *pm, - unsigned facs_tbl_offset, unsigned dsdt_tbl_offset, +build_fadt(GArray *table_data, BIOSLinker *linker, AcpiFadtData *f, const char *oem_id, const char *oem_table_id) { AcpiFadtDescriptorRev3 *fadt =3D acpi_data_push(table_data, sizeof(*fa= dt)); @@ -347,29 +353,29 @@ build_fadt(GArray *table_data, BIOSLinker *linker, Ac= piPmInfo *pm, unsigned dsdt_entry_offset =3D (char *)&fadt->dsdt - table_data->data; unsigned xdsdt_entry_offset =3D (char *)&fadt->x_dsdt - table_data->da= ta; int fadt_size =3D sizeof(*fadt); - int rev =3D 3; =20 /* FACS address to be filled by Guest linker */ bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, fw_ctrl_offset, sizeof(fadt->firmware_ctrl), - ACPI_BUILD_TABLE_FILE, facs_tbl_offset); + ACPI_BUILD_TABLE_FILE, *f->facs_tbl_offset); =20 /* DSDT address to be filled by Guest linker */ - fadt_setup(fadt, pm); + fadt_setup(fadt, *f); bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, dsdt_entry_offset, sizeof(fadt->dsdt), - ACPI_BUILD_TABLE_FILE, dsdt_tbl_offset); - if (pm->force_rev1_fadt) { - rev =3D 1; + ACPI_BUILD_TABLE_FILE, *f->dsdt_tbl_offset); + + if (f->rev =3D=3D 1) { fadt_size =3D offsetof(typeof(*fadt), reset_register); - } else { + } else if (f->xdsdt_tbl_offset) { bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE, xdsdt_entry_offset, sizeof(fadt->x_dsdt= ), - ACPI_BUILD_TABLE_FILE, dsdt_tbl_offset); + ACPI_BUILD_TABLE_FILE, *f->xdsdt_tbl_offset); } =20 build_header(linker, table_data, - (void *)fadt, "FACP", fadt_size, rev, oem_id, oem_table_i= d); + (void *)fadt, "FACP", fadt_size, f->rev, + oem_id, oem_table_id); } =20 void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, @@ -2049,7 +2055,12 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, aml_append(dev, aml_name_decl("_STA", aml_int(0xB))); crs =3D aml_resource_template(); aml_append(crs, - aml_io(AML_DECODE16, pm->gpe0_blk, pm->gpe0_blk, 1, pm->gpe0_blk_l= en) + aml_io( + AML_DECODE16, + pm->fadt.gpe0_blk.address, + pm->fadt.gpe0_blk.address, + 1, + pm->fadt.gpe0_blk.bit_width / 8) ); aml_append(dev, aml_name_decl("_CRS", crs)); aml_append(scope, dev); @@ -2696,7 +2707,10 @@ void acpi_build(AcpiBuildTables *tables, MachineStat= e *machine) /* ACPI tables pointed to by RSDT */ fadt =3D tables_blob->len; acpi_add_table(table_offsets, tables_blob); - build_fadt(tables_blob, tables->linker, &pm, facs, dsdt, + pm.fadt.facs_tbl_offset =3D &facs; + pm.fadt.dsdt_tbl_offset =3D &dsdt; + pm.fadt.xdsdt_tbl_offset =3D &dsdt; + build_fadt(tables_blob, tables->linker, &pm.fadt, slic_oem.id, slic_oem.table_id); aml_len +=3D tables_blob->len - fadt; =20 --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828376389335.8141731758261; Wed, 28 Feb 2018 06:32:56 -0800 (PST) Received: from localhost ([::1]:44653 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2ml-0002LE-5w for importer@patchew.org; Wed, 28 Feb 2018 09:32:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33713) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fs-0004ug-Nr for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fo-0001za-86 for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:40 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:35404 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fh-0001ve-CM; Wed, 28 Feb 2018 09:25:29 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0221D402677D; Wed, 28 Feb 2018 14:25:29 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id 212E59C04E; Wed, 28 Feb 2018 14:25:28 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:52 +0100 Message-Id: <1519827835-239519-8-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:29 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:29 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 07/10] pc: acpi: use build_append_foo() API to construct FADT X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" build_append_foo() API doesn't need explicit endianness conversions which eliminates a source of errors and it makes build_fadt() look like declarative definition of FADT table in ACPI spec, which makes it easy to review. Also it allows easily extending FADT to support other revisions which will be used by follow up patches where build_fadt() will be reused for ARM target. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- hw/i386/acpi-build.c | 146 +++++++++++++++++++++++++++++------------------= ---- 1 file changed, 84 insertions(+), 62 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 1f88ed1..d1b387e 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -298,84 +298,106 @@ build_facs(GArray *table_data, BIOSLinker *linker) facs->length =3D cpu_to_le32(sizeof(*facs)); } =20 -/* Load chipset information in FADT */ -static void fadt_setup(AcpiFadtDescriptorRev3 *fadt, AcpiFadtData f) -{ - fadt->model =3D f.int_model; - fadt->reserved1 =3D 0; - fadt->sci_int =3D cpu_to_le16(f.sci_int); - fadt->smi_cmd =3D cpu_to_le32(f.smi_cmd); - fadt->acpi_enable =3D f.acpi_enable_cmd; - fadt->acpi_disable =3D f.acpi_disable_cmd; - /* EVT, CNT, TMR offset matches hw/acpi/core.c */ - fadt->pm1a_evt_blk =3D cpu_to_le32(f.pm1a_evt.address); - fadt->pm1a_cnt_blk =3D cpu_to_le32(f.pm1a_cnt.address); - fadt->pm_tmr_blk =3D cpu_to_le32(f.pm_tmr.address); - fadt->gpe0_blk =3D cpu_to_le32(f.gpe0_blk.address); - /* EVT, CNT, TMR length matches hw/acpi/core.c */ - fadt->pm1_evt_len =3D f.pm1a_evt.bit_width / 8; - fadt->pm1_cnt_len =3D f.pm1a_cnt.bit_width / 8; - fadt->pm_tmr_len =3D f.pm_tmr.bit_width / 8; - fadt->gpe0_blk_len =3D f.gpe0_blk.bit_width / 8; - fadt->plvl2_lat =3D cpu_to_le16(f.plvl2_lat); - fadt->plvl3_lat =3D cpu_to_le16(f.plvl3_lat); - fadt->flags =3D cpu_to_le32(f.flags); - fadt->century =3D f.rtc_century; - if (f.rev =3D=3D 1) { - return; - } - - fadt->reset_value =3D f.reset_val; - fadt->reset_register =3D f.reset_reg; - fadt->reset_register.address =3D cpu_to_le64(f.reset_reg.address); - - fadt->xpm1a_event_block =3D f.pm1a_evt; - fadt->xpm1a_event_block.address =3D cpu_to_le64(f.pm1a_evt.address); - - fadt->xpm1a_control_block =3D f.pm1a_cnt; - fadt->xpm1a_control_block.address =3D cpu_to_le64(f.pm1a_cnt.address); - - fadt->xpm_timer_block =3D f.pm_tmr; - fadt->xpm_timer_block.address =3D cpu_to_le64(f.pm_tmr.address); - - fadt->xgpe0_block =3D f.gpe0_blk; - fadt->xgpe0_block.address =3D cpu_to_le64(f.gpe0_blk.address); -} - - /* FADT */ static void -build_fadt(GArray *table_data, BIOSLinker *linker, AcpiFadtData *f, +build_fadt(GArray *tbl, BIOSLinker *linker, AcpiFadtData *f, const char *oem_id, const char *oem_table_id) { - AcpiFadtDescriptorRev3 *fadt =3D acpi_data_push(table_data, sizeof(*fa= dt)); - unsigned fw_ctrl_offset =3D (char *)&fadt->firmware_ctrl - table_data-= >data; - unsigned dsdt_entry_offset =3D (char *)&fadt->dsdt - table_data->data; - unsigned xdsdt_entry_offset =3D (char *)&fadt->x_dsdt - table_data->da= ta; - int fadt_size =3D sizeof(*fadt); + int off; + int fadt_start =3D tbl->len; =20 - /* FACS address to be filled by Guest linker */ + acpi_data_push(tbl, sizeof(AcpiTableHeader)); + + /* FACS address to be filled by Guest linker at runtime */ + off =3D tbl->len; + build_append_int_noprefix(tbl, 0, 4); /* FIRMWARE_CTRL */ bios_linker_loader_add_pointer(linker, - ACPI_BUILD_TABLE_FILE, fw_ctrl_offset, sizeof(fadt->firmware_ctrl), + ACPI_BUILD_TABLE_FILE, off, 4, ACPI_BUILD_TABLE_FILE, *f->facs_tbl_offset); =20 - /* DSDT address to be filled by Guest linker */ - fadt_setup(fadt, *f); + /* DSDT address to be filled by Guest linker at runtime */ + off =3D tbl->len; + build_append_int_noprefix(tbl, 0, 4); /* DSDT */ bios_linker_loader_add_pointer(linker, - ACPI_BUILD_TABLE_FILE, dsdt_entry_offset, sizeof(fadt->dsdt), + ACPI_BUILD_TABLE_FILE, off, 4, ACPI_BUILD_TABLE_FILE, *f->dsdt_tbl_offset); =20 + /* ACPI1.0: INT_MODEL, ACPI2.0+: Reserved */ + build_append_int_noprefix(tbl, f->int_model /* Multiple APIC */, 1); + /* Preferred_PM_Profile */ + build_append_int_noprefix(tbl, 0 /* Unspecified */, 1); + build_append_int_noprefix(tbl, f->sci_int, 2); /* SCI_INT */ + build_append_int_noprefix(tbl, f->smi_cmd, 4); /* SMI_CMD */ + build_append_int_noprefix(tbl, f->acpi_enable_cmd, 1); /* ACPI_ENABLE = */ + build_append_int_noprefix(tbl, f->acpi_disable_cmd, 1); /* ACPI_DISABL= E */ + build_append_int_noprefix(tbl, 0 /* not supported */, 1); /* S4BIOS_RE= Q */ + /* ACPI1.0: Reserved, ACPI2.0+: PSTATE_CNT */ + build_append_int_noprefix(tbl, 0, 1); + build_append_int_noprefix(tbl, f->pm1a_evt.address, 4); /* PM1a_EVT_BL= K */ + build_append_int_noprefix(tbl, 0, 4); /* PM1b_EVT_BLK */ + build_append_int_noprefix(tbl, f->pm1a_cnt.address, 4); /* PM1a_CNT_BL= K */ + build_append_int_noprefix(tbl, 0, 4); /* PM1b_CNT_BLK */ + build_append_int_noprefix(tbl, 0, 4); /* PM2_CNT_BLK */ + build_append_int_noprefix(tbl, f->pm_tmr.address, 4); /* PM_TMR_BLK */ + build_append_int_noprefix(tbl, f->gpe0_blk.address, 4); /* GPE0_BLK */ + build_append_int_noprefix(tbl, 0, 4); /* GPE1_BLK */ + /* PM1_EVT_LEN */ + build_append_int_noprefix(tbl, f->pm1a_evt.bit_width / 8, 1); + /* PM1_CNT_LEN */ + build_append_int_noprefix(tbl, f->pm1a_cnt.bit_width / 8, 1); + build_append_int_noprefix(tbl, 0, 1); /* PM2_CNT_LEN */ + build_append_int_noprefix(tbl, f->pm_tmr.bit_width / 8, 1); /* PM_TMR_= LEN */ + /* GPE0_BLK_LEN */ + build_append_int_noprefix(tbl, f->gpe0_blk.bit_width / 8, 1); + build_append_int_noprefix(tbl, 0, 1); /* GPE1_BLK_LEN */ + build_append_int_noprefix(tbl, 0, 1); /* GPE1_BASE */ + build_append_int_noprefix(tbl, 0, 1); /* CST_CNT */ + build_append_int_noprefix(tbl, f->plvl2_lat, 2); /* P_LVL2_LAT */ + build_append_int_noprefix(tbl, f->plvl3_lat, 2); /* P_LVL3_LAT */ + build_append_int_noprefix(tbl, 0, 2); /* FLUSH_SIZE */ + build_append_int_noprefix(tbl, 0, 2); /* FLUSH_STRIDE */ + build_append_int_noprefix(tbl, 0, 1); /* DUTY_OFFSET */ + build_append_int_noprefix(tbl, 0, 1); /* DUTY_WIDTH */ + build_append_int_noprefix(tbl, 0, 1); /* DAY_ALRM */ + build_append_int_noprefix(tbl, 0, 1); /* MON_ALRM */ + build_append_int_noprefix(tbl, f->rtc_century, 1); /* CENTURY */ + build_append_int_noprefix(tbl, 0, 2); /* IAPC_BOOT_ARCH */ + build_append_int_noprefix(tbl, 0, 1); /* Reserved */ + build_append_int_noprefix(tbl, f->flags, 4); /* Flags */ + if (f->rev =3D=3D 1) { - fadt_size =3D offsetof(typeof(*fadt), reset_register); - } else if (f->xdsdt_tbl_offset) { + goto build_hdr; + } + + build_append_gas_from_struct(tbl, &f->reset_reg); /* RESET_REG */ + build_append_int_noprefix(tbl, f->reset_val, 1); /* RESET_VALUE */ + build_append_int_noprefix(tbl, 0, 3); /* Reserved, ACPI 3.0 */ + build_append_int_noprefix(tbl, 0, 8); /* X_FIRMWARE_CTRL */ + + /* XDSDT address to be filled by Guest linker at runtime */ + off =3D tbl->len; + build_append_int_noprefix(tbl, 0, 8); /* X_DSDT */ + if (f->xdsdt_tbl_offset) { bios_linker_loader_add_pointer(linker, - ACPI_BUILD_TABLE_FILE, xdsdt_entry_offset, sizeof(fadt->x_dsdt= ), + ACPI_BUILD_TABLE_FILE, off, 8, ACPI_BUILD_TABLE_FILE, *f->xdsdt_tbl_offset); } =20 - build_header(linker, table_data, - (void *)fadt, "FACP", fadt_size, f->rev, - oem_id, oem_table_id); + build_append_gas_from_struct(tbl, &f->pm1a_evt); /* X_PM1a_EVT_BLK */ + /* X_PM1b_EVT_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + build_append_gas_from_struct(tbl, &f->pm1a_cnt); /* X_PM1a_CNT_BLK */ + /* X_PM1b_CNT_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + /* X_PM2_CNT_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + build_append_gas_from_struct(tbl, &f->pm_tmr); /* X_PM_TMR_BLK */ + build_append_gas_from_struct(tbl, &f->gpe0_blk); /* X_GPE0_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); /* X_GPE1_BL= K */ + +build_hdr: + build_header(linker, tbl, (void *)(tbl->data + fadt_start), + "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_= id); } =20 void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828076283171.4422008322614; Wed, 28 Feb 2018 06:27:56 -0800 (PST) Received: from localhost ([::1]:44623 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2i3-0006PM-2S for importer@patchew.org; Wed, 28 Feb 2018 09:27:55 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33709) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fr-0004tS-Im for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fp-00020J-LG for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:39 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:35410 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fi-0001w0-F2; Wed, 28 Feb 2018 09:25:30 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 123564026780; Wed, 28 Feb 2018 14:25:30 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3333F946B7; Wed, 28 Feb 2018 14:25:29 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:53 +0100 Message-Id: <1519827835-239519-9-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:30 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:30 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 08/10] acpi: move build_fadt() from i386 specific to generic ACPI source X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It will be extended and reused by follow up patch for ARM target. PS: Since it's generic function now, don't patch FIRMWARE_CTRL, DSDT fields if they don't point to tables since platform might not provide them and use X_ variants instead if applicable. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- v2: - conditional FIRMWARE_CTRL, DSDT patching is introduced in this patch instead of earlier "pc: acpi: isolate FADT specific data into AcpiFadtD= ata structure" as it better fits generalizing nature of this patch. (Auger Eric ) --- include/hw/acpi/aml-build.h | 3 ++ hw/acpi/aml-build.c | 105 ++++++++++++++++++++++++++++++++++++++++= ++++ hw/arm/virt-acpi-build.c | 6 +-- hw/i386/acpi-build.c | 102 ----------------------------------------= -- 4 files changed, 111 insertions(+), 105 deletions(-) diff --git a/include/hw/acpi/aml-build.h b/include/hw/acpi/aml-build.h index 8692ccc..6c36903 100644 --- a/include/hw/acpi/aml-build.h +++ b/include/hw/acpi/aml-build.h @@ -413,4 +413,7 @@ void build_srat_memory(AcpiSratMemoryAffinity *numamem,= uint64_t base, uint64_t len, int node, MemoryAffinityFlags flags); =20 void build_slit(GArray *table_data, BIOSLinker *linker); + +void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f, + const char *oem_id, const char *oem_table_id); #endif diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c index 3fef5f6..8f45298 100644 --- a/hw/acpi/aml-build.c +++ b/hw/acpi/aml-build.c @@ -1678,3 +1678,108 @@ void build_slit(GArray *table_data, BIOSLinker *lin= ker) "SLIT", table_data->len - slit_start, 1, NULL, NULL); } + +/* build rev1/rev3 FADT */ +void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f, + const char *oem_id, const char *oem_table_id) +{ + int off; + int fadt_start =3D tbl->len; + + acpi_data_push(tbl, sizeof(AcpiTableHeader)); + + /* FACS address to be filled by Guest linker at runtime */ + off =3D tbl->len; + build_append_int_noprefix(tbl, 0, 4); /* FIRMWARE_CTRL */ + if (f->facs_tbl_offset) { /* don't patch if not supported by platform = */ + bios_linker_loader_add_pointer(linker, + ACPI_BUILD_TABLE_FILE, off, 4, + ACPI_BUILD_TABLE_FILE, *f->facs_tbl_offset); + } + + /* DSDT address to be filled by Guest linker at runtime */ + off =3D tbl->len; + build_append_int_noprefix(tbl, 0, 4); /* DSDT */ + if (f->dsdt_tbl_offset) { /* don't patch if not supported by platform = */ + bios_linker_loader_add_pointer(linker, + ACPI_BUILD_TABLE_FILE, off, 4, + ACPI_BUILD_TABLE_FILE, *f->dsdt_tbl_offset); + } + + /* ACPI1.0: INT_MODEL, ACPI2.0+: Reserved */ + build_append_int_noprefix(tbl, f->int_model /* Multiple APIC */, 1); + /* Preferred_PM_Profile */ + build_append_int_noprefix(tbl, 0 /* Unspecified */, 1); + build_append_int_noprefix(tbl, f->sci_int, 2); /* SCI_INT */ + build_append_int_noprefix(tbl, f->smi_cmd, 4); /* SMI_CMD */ + build_append_int_noprefix(tbl, f->acpi_enable_cmd, 1); /* ACPI_ENABLE = */ + build_append_int_noprefix(tbl, f->acpi_disable_cmd, 1); /* ACPI_DISABL= E */ + build_append_int_noprefix(tbl, 0 /* not supported */, 1); /* S4BIOS_RE= Q */ + /* ACPI1.0: Reserved, ACPI2.0+: PSTATE_CNT */ + build_append_int_noprefix(tbl, 0, 1); + build_append_int_noprefix(tbl, f->pm1a_evt.address, 4); /* PM1a_EVT_BL= K */ + build_append_int_noprefix(tbl, 0, 4); /* PM1b_EVT_BLK */ + build_append_int_noprefix(tbl, f->pm1a_cnt.address, 4); /* PM1a_CNT_BL= K */ + build_append_int_noprefix(tbl, 0, 4); /* PM1b_CNT_BLK */ + build_append_int_noprefix(tbl, 0, 4); /* PM2_CNT_BLK */ + build_append_int_noprefix(tbl, f->pm_tmr.address, 4); /* PM_TMR_BLK */ + build_append_int_noprefix(tbl, f->gpe0_blk.address, 4); /* GPE0_BLK */ + build_append_int_noprefix(tbl, 0, 4); /* GPE1_BLK */ + /* PM1_EVT_LEN */ + build_append_int_noprefix(tbl, f->pm1a_evt.bit_width / 8, 1); + /* PM1_CNT_LEN */ + build_append_int_noprefix(tbl, f->pm1a_cnt.bit_width / 8, 1); + build_append_int_noprefix(tbl, 0, 1); /* PM2_CNT_LEN */ + build_append_int_noprefix(tbl, f->pm_tmr.bit_width / 8, 1); /* PM_TMR_= LEN */ + /* GPE0_BLK_LEN */ + build_append_int_noprefix(tbl, f->gpe0_blk.bit_width / 8, 1); + build_append_int_noprefix(tbl, 0, 1); /* GPE1_BLK_LEN */ + build_append_int_noprefix(tbl, 0, 1); /* GPE1_BASE */ + build_append_int_noprefix(tbl, 0, 1); /* CST_CNT */ + build_append_int_noprefix(tbl, f->plvl2_lat, 2); /* P_LVL2_LAT */ + build_append_int_noprefix(tbl, f->plvl3_lat, 2); /* P_LVL3_LAT */ + build_append_int_noprefix(tbl, 0, 2); /* FLUSH_SIZE */ + build_append_int_noprefix(tbl, 0, 2); /* FLUSH_STRIDE */ + build_append_int_noprefix(tbl, 0, 1); /* DUTY_OFFSET */ + build_append_int_noprefix(tbl, 0, 1); /* DUTY_WIDTH */ + build_append_int_noprefix(tbl, 0, 1); /* DAY_ALRM */ + build_append_int_noprefix(tbl, 0, 1); /* MON_ALRM */ + build_append_int_noprefix(tbl, f->rtc_century, 1); /* CENTURY */ + build_append_int_noprefix(tbl, 0, 2); /* IAPC_BOOT_ARCH */ + build_append_int_noprefix(tbl, 0, 1); /* Reserved */ + build_append_int_noprefix(tbl, f->flags, 4); /* Flags */ + + if (f->rev =3D=3D 1) { + goto build_hdr; + } + + build_append_gas_from_struct(tbl, &f->reset_reg); /* RESET_REG */ + build_append_int_noprefix(tbl, f->reset_val, 1); /* RESET_VALUE */ + build_append_int_noprefix(tbl, 0, 3); /* Reserved, ACPI 3.0 */ + build_append_int_noprefix(tbl, 0, 8); /* X_FIRMWARE_CTRL */ + + /* XDSDT address to be filled by Guest linker at runtime */ + off =3D tbl->len; + build_append_int_noprefix(tbl, 0, 8); /* X_DSDT */ + if (f->xdsdt_tbl_offset) { + bios_linker_loader_add_pointer(linker, + ACPI_BUILD_TABLE_FILE, off, 8, + ACPI_BUILD_TABLE_FILE, *f->xdsdt_tbl_offset); + } + + build_append_gas_from_struct(tbl, &f->pm1a_evt); /* X_PM1a_EVT_BLK */ + /* X_PM1b_EVT_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + build_append_gas_from_struct(tbl, &f->pm1a_cnt); /* X_PM1a_CNT_BLK */ + /* X_PM1b_CNT_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + /* X_PM2_CNT_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + build_append_gas_from_struct(tbl, &f->pm_tmr); /* X_PM_TMR_BLK */ + build_append_gas_from_struct(tbl, &f->gpe0_blk); /* X_GPE0_BLK */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); /* X_GPE1_BL= K */ + +build_hdr: + build_header(linker, tbl, (void *)(tbl->data + fadt_start), + "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_= id); +} diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index f7fa795..b644da9 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -651,8 +651,8 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } =20 /* FADT */ -static void build_fadt(GArray *table_data, BIOSLinker *linker, - VirtMachineState *vms, unsigned dsdt_tbl_offset) +static void build_fadt_rev5(GArray *table_data, BIOSLinker *linker, + VirtMachineState *vms, unsigned dsdt_tbl_offse= t) { int fadt_start =3D table_data->len; AcpiFadtDescriptorRev5_1 *fadt =3D acpi_data_push(table_data, sizeof(*= fadt)); @@ -761,7 +761,7 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTa= bles *tables) =20 /* FADT MADT GTDT MCFG SPCR pointed to by RSDT */ acpi_add_table(table_offsets, tables_blob); - build_fadt(tables_blob, tables->linker, vms, dsdt); + build_fadt_rev5(tables_blob, tables->linker, vms, dsdt); =20 acpi_add_table(table_offsets, tables_blob); build_madt(tables_blob, tables->linker, vms); diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index d1b387e..ebde2cd 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -298,108 +298,6 @@ build_facs(GArray *table_data, BIOSLinker *linker) facs->length =3D cpu_to_le32(sizeof(*facs)); } =20 -/* FADT */ -static void -build_fadt(GArray *tbl, BIOSLinker *linker, AcpiFadtData *f, - const char *oem_id, const char *oem_table_id) -{ - int off; - int fadt_start =3D tbl->len; - - acpi_data_push(tbl, sizeof(AcpiTableHeader)); - - /* FACS address to be filled by Guest linker at runtime */ - off =3D tbl->len; - build_append_int_noprefix(tbl, 0, 4); /* FIRMWARE_CTRL */ - bios_linker_loader_add_pointer(linker, - ACPI_BUILD_TABLE_FILE, off, 4, - ACPI_BUILD_TABLE_FILE, *f->facs_tbl_offset); - - /* DSDT address to be filled by Guest linker at runtime */ - off =3D tbl->len; - build_append_int_noprefix(tbl, 0, 4); /* DSDT */ - bios_linker_loader_add_pointer(linker, - ACPI_BUILD_TABLE_FILE, off, 4, - ACPI_BUILD_TABLE_FILE, *f->dsdt_tbl_offset); - - /* ACPI1.0: INT_MODEL, ACPI2.0+: Reserved */ - build_append_int_noprefix(tbl, f->int_model /* Multiple APIC */, 1); - /* Preferred_PM_Profile */ - build_append_int_noprefix(tbl, 0 /* Unspecified */, 1); - build_append_int_noprefix(tbl, f->sci_int, 2); /* SCI_INT */ - build_append_int_noprefix(tbl, f->smi_cmd, 4); /* SMI_CMD */ - build_append_int_noprefix(tbl, f->acpi_enable_cmd, 1); /* ACPI_ENABLE = */ - build_append_int_noprefix(tbl, f->acpi_disable_cmd, 1); /* ACPI_DISABL= E */ - build_append_int_noprefix(tbl, 0 /* not supported */, 1); /* S4BIOS_RE= Q */ - /* ACPI1.0: Reserved, ACPI2.0+: PSTATE_CNT */ - build_append_int_noprefix(tbl, 0, 1); - build_append_int_noprefix(tbl, f->pm1a_evt.address, 4); /* PM1a_EVT_BL= K */ - build_append_int_noprefix(tbl, 0, 4); /* PM1b_EVT_BLK */ - build_append_int_noprefix(tbl, f->pm1a_cnt.address, 4); /* PM1a_CNT_BL= K */ - build_append_int_noprefix(tbl, 0, 4); /* PM1b_CNT_BLK */ - build_append_int_noprefix(tbl, 0, 4); /* PM2_CNT_BLK */ - build_append_int_noprefix(tbl, f->pm_tmr.address, 4); /* PM_TMR_BLK */ - build_append_int_noprefix(tbl, f->gpe0_blk.address, 4); /* GPE0_BLK */ - build_append_int_noprefix(tbl, 0, 4); /* GPE1_BLK */ - /* PM1_EVT_LEN */ - build_append_int_noprefix(tbl, f->pm1a_evt.bit_width / 8, 1); - /* PM1_CNT_LEN */ - build_append_int_noprefix(tbl, f->pm1a_cnt.bit_width / 8, 1); - build_append_int_noprefix(tbl, 0, 1); /* PM2_CNT_LEN */ - build_append_int_noprefix(tbl, f->pm_tmr.bit_width / 8, 1); /* PM_TMR_= LEN */ - /* GPE0_BLK_LEN */ - build_append_int_noprefix(tbl, f->gpe0_blk.bit_width / 8, 1); - build_append_int_noprefix(tbl, 0, 1); /* GPE1_BLK_LEN */ - build_append_int_noprefix(tbl, 0, 1); /* GPE1_BASE */ - build_append_int_noprefix(tbl, 0, 1); /* CST_CNT */ - build_append_int_noprefix(tbl, f->plvl2_lat, 2); /* P_LVL2_LAT */ - build_append_int_noprefix(tbl, f->plvl3_lat, 2); /* P_LVL3_LAT */ - build_append_int_noprefix(tbl, 0, 2); /* FLUSH_SIZE */ - build_append_int_noprefix(tbl, 0, 2); /* FLUSH_STRIDE */ - build_append_int_noprefix(tbl, 0, 1); /* DUTY_OFFSET */ - build_append_int_noprefix(tbl, 0, 1); /* DUTY_WIDTH */ - build_append_int_noprefix(tbl, 0, 1); /* DAY_ALRM */ - build_append_int_noprefix(tbl, 0, 1); /* MON_ALRM */ - build_append_int_noprefix(tbl, f->rtc_century, 1); /* CENTURY */ - build_append_int_noprefix(tbl, 0, 2); /* IAPC_BOOT_ARCH */ - build_append_int_noprefix(tbl, 0, 1); /* Reserved */ - build_append_int_noprefix(tbl, f->flags, 4); /* Flags */ - - if (f->rev =3D=3D 1) { - goto build_hdr; - } - - build_append_gas_from_struct(tbl, &f->reset_reg); /* RESET_REG */ - build_append_int_noprefix(tbl, f->reset_val, 1); /* RESET_VALUE */ - build_append_int_noprefix(tbl, 0, 3); /* Reserved, ACPI 3.0 */ - build_append_int_noprefix(tbl, 0, 8); /* X_FIRMWARE_CTRL */ - - /* XDSDT address to be filled by Guest linker at runtime */ - off =3D tbl->len; - build_append_int_noprefix(tbl, 0, 8); /* X_DSDT */ - if (f->xdsdt_tbl_offset) { - bios_linker_loader_add_pointer(linker, - ACPI_BUILD_TABLE_FILE, off, 8, - ACPI_BUILD_TABLE_FILE, *f->xdsdt_tbl_offset); - } - - build_append_gas_from_struct(tbl, &f->pm1a_evt); /* X_PM1a_EVT_BLK */ - /* X_PM1b_EVT_BLK */ - build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); - build_append_gas_from_struct(tbl, &f->pm1a_cnt); /* X_PM1a_CNT_BLK */ - /* X_PM1b_CNT_BLK */ - build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); - /* X_PM2_CNT_BLK */ - build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); - build_append_gas_from_struct(tbl, &f->pm_tmr); /* X_PM_TMR_BLK */ - build_append_gas_from_struct(tbl, &f->gpe0_blk); /* X_GPE0_BLK */ - build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); /* X_GPE1_BL= K */ - -build_hdr: - build_header(linker, tbl, (void *)(tbl->data + fadt_start), - "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_= id); -} - void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, const CPUArchIdList *apic_ids, GArray *entry) { --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 151982859996079.84742858166965; Wed, 28 Feb 2018 06:36:39 -0800 (PST) Received: from localhost ([::1]:44673 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2qU-0005DR-KL for importer@patchew.org; Wed, 28 Feb 2018 09:36:38 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33663) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fp-0004qJ-C2 for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fo-0001zU-7k for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:37 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:40658 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fj-0001wb-Gu; Wed, 28 Feb 2018 09:25:31 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 237EB818B10B; Wed, 28 Feb 2018 14:25:31 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id 46BCE9C048; Wed, 28 Feb 2018 14:25:30 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:54 +0100 Message-Id: <1519827835-239519-10-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Wed, 28 Feb 2018 14:25:31 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Wed, 28 Feb 2018 14:25:31 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 09/10] virt_arm: acpi: reuse common build_fadt() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Extend generic build_fadt() to support rev5.1 FADT and reuse it for 'virt' board, it would allow to phase out usage of AcpiFadtDescriptorRev5_1 and later ACPI_FADT_COMMON_DEF. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- v2: - update comment to mention that build_fadt() supports 5.1 revision --- include/hw/acpi/acpi-defs.h | 12 ++---------- hw/acpi/aml-build.c | 23 +++++++++++++++++++++-- hw/arm/virt-acpi-build.c | 33 ++++++++++++--------------------- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h index 3fb0ace..fe15e95 100644 --- a/include/hw/acpi/acpi-defs.h +++ b/include/hw/acpi/acpi-defs.h @@ -165,16 +165,6 @@ struct AcpiFadtDescriptorRev3 { } QEMU_PACKED; typedef struct AcpiFadtDescriptorRev3 AcpiFadtDescriptorRev3; =20 -struct AcpiFadtDescriptorRev5_1 { - ACPI_FADT_COMMON_DEF - /* 64-bit Sleep Control register (ACPI 5.0) */ - struct AcpiGenericAddress sleep_control; - /* 64-bit Sleep Status register (ACPI 5.0) */ - struct AcpiGenericAddress sleep_status; -} QEMU_PACKED; - -typedef struct AcpiFadtDescriptorRev5_1 AcpiFadtDescriptorRev5_1; - typedef struct AcpiFadtData { struct AcpiGenericAddress pm1a_cnt; /* PM1a_CNT_BLK */ struct AcpiGenericAddress pm1a_evt; /* PM1a_EVT_BLK */ @@ -192,6 +182,8 @@ typedef struct AcpiFadtData { uint8_t rtc_century; /* CENTURY */ uint16_t plvl2_lat; /* P_LVL2_LAT */ uint16_t plvl3_lat; /* P_LVL3_LAT */ + uint16_t arm_boot_arch; /* ARM_BOOT_ARCH */ + uint8_t minor_ver; /* FADT Minor Version */ =20 /* * respective tables offsets within ACPI_BUILD_TABLE_FILE, diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c index 8f45298..3fa557c 100644 --- a/hw/acpi/aml-build.c +++ b/hw/acpi/aml-build.c @@ -1679,7 +1679,7 @@ void build_slit(GArray *table_data, BIOSLinker *linke= r) table_data->len - slit_start, 1, NULL, NULL); } =20 -/* build rev1/rev3 FADT */ +/* build rev1/rev3/rev5.1 FADT */ void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f, const char *oem_id, const char *oem_table_id) { @@ -1755,7 +1755,14 @@ void build_fadt(GArray *tbl, BIOSLinker *linker, con= st AcpiFadtData *f, =20 build_append_gas_from_struct(tbl, &f->reset_reg); /* RESET_REG */ build_append_int_noprefix(tbl, f->reset_val, 1); /* RESET_VALUE */ - build_append_int_noprefix(tbl, 0, 3); /* Reserved, ACPI 3.0 */ + /* Since ACPI 5.1 */ + if ((f->rev >=3D 6) || ((f->rev =3D=3D 5) && f->minor_ver > 0)) { + build_append_int_noprefix(tbl, f->arm_boot_arch, 2); /* ARM_BOOT_A= RCH */ + /* FADT Minor Version */ + build_append_int_noprefix(tbl, f->minor_ver, 1); + } else { + build_append_int_noprefix(tbl, 0, 3); /* Reserved upto ACPI 5.0 */ + } build_append_int_noprefix(tbl, 0, 8); /* X_FIRMWARE_CTRL */ =20 /* XDSDT address to be filled by Guest linker at runtime */ @@ -1779,6 +1786,18 @@ void build_fadt(GArray *tbl, BIOSLinker *linker, con= st AcpiFadtData *f, build_append_gas_from_struct(tbl, &f->gpe0_blk); /* X_GPE0_BLK */ build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); /* X_GPE1_BL= K */ =20 + if (f->rev <=3D 4) { + goto build_hdr; + } + + /* SLEEP_CONTROL_REG */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + /* SLEEP_STATUS_REG */ + build_append_gas(tbl, AML_AS_SYSTEM_MEMORY, 0 , 0, 0, 0); + + /* TODO: extra fields need to be added to support revisions above rev5= */ + assert(f->rev =3D=3D 5); + build_hdr: build_header(linker, tbl, (void *)(tbl->data + fadt_start), "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_= id); diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index b644da9..c7c6a57 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -654,39 +654,30 @@ build_madt(GArray *table_data, BIOSLinker *linker, Vi= rtMachineState *vms) static void build_fadt_rev5(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms, unsigned dsdt_tbl_offse= t) { - int fadt_start =3D table_data->len; - AcpiFadtDescriptorRev5_1 *fadt =3D acpi_data_push(table_data, sizeof(*= fadt)); - unsigned xdsdt_entry_offset =3D (char *)&fadt->x_dsdt - table_data->da= ta; - uint16_t bootflags; + /* ACPI v5.1 */ + AcpiFadtData fadt =3D { + .rev =3D 5, + .minor_ver =3D 1, + .flags =3D 1 << ACPI_FADT_F_HW_REDUCED_ACPI, + .xdsdt_tbl_offset =3D &dsdt_tbl_offset, + }; =20 switch (vms->psci_conduit) { case QEMU_PSCI_CONDUIT_DISABLED: - bootflags =3D 0; + fadt.arm_boot_arch =3D 0; break; case QEMU_PSCI_CONDUIT_HVC: - bootflags =3D ACPI_FADT_ARM_PSCI_COMPLIANT | ACPI_FADT_ARM_PSCI_US= E_HVC; + fadt.arm_boot_arch =3D ACPI_FADT_ARM_PSCI_COMPLIANT | + ACPI_FADT_ARM_PSCI_USE_HVC; break; case QEMU_PSCI_CONDUIT_SMC: - bootflags =3D ACPI_FADT_ARM_PSCI_COMPLIANT; + fadt.arm_boot_arch =3D ACPI_FADT_ARM_PSCI_COMPLIANT; break; default: g_assert_not_reached(); } =20 - /* Hardware Reduced =3D 1 and use PSCI 0.2+ */ - fadt->flags =3D cpu_to_le32(1 << ACPI_FADT_F_HW_REDUCED_ACPI); - fadt->arm_boot_flags =3D cpu_to_le16(bootflags); - - /* ACPI v5.1 (fadt->revision.fadt->minor_revision) */ - fadt->minor_revision =3D 0x1; - - /* DSDT address to be filled by Guest linker */ - bios_linker_loader_add_pointer(linker, - ACPI_BUILD_TABLE_FILE, xdsdt_entry_offset, sizeof(fadt->x_dsdt), - ACPI_BUILD_TABLE_FILE, dsdt_tbl_offset); - - build_header(linker, table_data, (void *)(table_data->data + fadt_star= t), - "FACP", table_data->len - fadt_start, 5, NULL, NULL); + build_fadt(table_data, linker, &fadt, NULL, NULL); } =20 /* DSDT */ --=20 2.7.4 From nobody Wed Oct 22 04:17:09 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519828219567405.35179640411; Wed, 28 Feb 2018 06:30:19 -0800 (PST) Received: from localhost ([::1]:44636 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2kM-0008WL-7f for importer@patchew.org; Wed, 28 Feb 2018 09:30:18 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33684) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1er2fq-0004rm-Bs for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1er2fo-0001zj-Dj for qemu-devel@nongnu.org; Wed, 28 Feb 2018 09:25:38 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:35416 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1er2fk-0001xR-KJ; Wed, 28 Feb 2018 09:25:32 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 367E1402677E; Wed, 28 Feb 2018 14:25:32 +0000 (UTC) Received: from dell-r430-03.lab.eng.brq.redhat.com (dell-r430-03.lab.eng.brq.redhat.com [10.37.153.18]) by smtp.corp.redhat.com (Postfix) with ESMTP id 586E6946B7; Wed, 28 Feb 2018 14:25:31 +0000 (UTC) From: Igor Mammedov To: qemu-devel@nongnu.org Date: Wed, 28 Feb 2018 15:23:55 +0100 Message-Id: <1519827835-239519-11-git-send-email-imammedo@redhat.com> In-Reply-To: <1519827835-239519-1-git-send-email-imammedo@redhat.com> References: <1519827835-239519-1-git-send-email-imammedo@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:32 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 28 Feb 2018 14:25:32 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'imammedo@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v2 10/10] tests: acpi: don't read all fields in test_acpi_fadt_table() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Auger Eric , Shannon Zhao , qemu-arm@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" there is no point to read fields here but not actually checking them so drop it and read only header + dsdt/facs addresses since it's needed later to fetch that tables. With this cleanup we can get rid of AcpiFadtDescriptorRev3/ ACPI_FADT_COMMON_DEF which have no users left. Signed-off-by: Igor Mammedov Reviewed-by: Eric Auger Tested-by: Eric Auger --- include/hw/acpi/acpi-defs.h | 81 -----------------------------------------= --- tests/bios-tables-test.c | 82 ++++++++++-------------------------------= ---- 2 files changed, 18 insertions(+), 145 deletions(-) diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h index fe15e95..5955eb4 100644 --- a/include/hw/acpi/acpi-defs.h +++ b/include/hw/acpi/acpi-defs.h @@ -75,82 +75,6 @@ struct AcpiTableHeader { } QEMU_PACKED; typedef struct AcpiTableHeader AcpiTableHeader; =20 -/* - * ACPI Fixed ACPI Description Table (FADT) - */ -#define ACPI_FADT_COMMON_DEF /* FADT common definition */ \ - ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \ - uint32_t firmware_ctrl; /* Physical address of FACS */ \ - uint32_t dsdt; /* Physical address of DSDT */ \ - uint8_t model; /* System Interrupt Model */ \ - uint8_t reserved1; /* Reserved */ \ - uint16_t sci_int; /* System vector of SCI interrupt */ \ - uint32_t smi_cmd; /* Port address of SMI command port */ \ - uint8_t acpi_enable; /* Value to write to smi_cmd to enable ACPI */ \ - uint8_t acpi_disable; /* Value to write to smi_cmd to disable ACPI */= \ - /* Value to write to SMI CMD to enter S4BIOS state */ \ - uint8_t S4bios_req; \ - uint8_t reserved2; /* Reserved - must be zero */ \ - /* Port address of Power Mgt 1a acpi_event Reg Blk */ \ - uint32_t pm1a_evt_blk; \ - /* Port address of Power Mgt 1b acpi_event Reg Blk */ \ - uint32_t pm1b_evt_blk; \ - uint32_t pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk= */ \ - uint32_t pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk= */ \ - uint32_t pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk = */ \ - uint32_t pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk= */ \ - /* Port addr of General Purpose acpi_event 0 Reg Blk */ \ - uint32_t gpe0_blk; \ - /* Port addr of General Purpose acpi_event 1 Reg Blk */ \ - uint32_t gpe1_blk; \ - uint8_t pm1_evt_len; /* Byte length of ports at pm1_x_evt_blk */ \ - uint8_t pm1_cnt_len; /* Byte length of ports at pm1_x_cnt_blk */ \ - uint8_t pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ \ - uint8_t pm_tmr_len; /* Byte Length of ports at pm_tm_blk */ \ - uint8_t gpe0_blk_len; /* Byte Length of ports at gpe0_blk */ \ - uint8_t gpe1_blk_len; /* Byte Length of ports at gpe1_blk */ \ - uint8_t gpe1_base; /* Offset in gpe model where gpe1 events start = */ \ - uint8_t reserved3; /* Reserved */ \ - uint16_t plvl2_lat; /* Worst case HW latency to enter/exit C2 state= */ \ - uint16_t plvl3_lat; /* Worst case HW latency to enter/exit C3 state= */ \ - uint16_t flush_size; /* Size of area read to flush caches */ \ - uint16_t flush_stride; /* Stride used in flushing caches */ \ - uint8_t duty_offset; /* Bit location of duty cycle field in p_cnt re= g */ \ - uint8_t duty_width; /* Bit width of duty cycle field in p_cnt reg *= / \ - uint8_t day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM = */ \ - uint8_t mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM= */ \ - uint8_t century; /* Index to century in RTC CMOS RAM */ \ - /* IA-PC Boot Architecture Flags (see below for individual flags) */ \ - uint16_t boot_flags; \ - uint8_t reserved; /* Reserved, must be zero */ \ - /* Miscellaneous flag bits (see below for individual flags) */ \ - uint32_t flags; \ - /* 64-bit address of the Reset register */ \ - struct AcpiGenericAddress reset_register; \ - /* Value to write to the reset_register port to reset the system */ \ - uint8_t reset_value; \ - /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1)= */ \ - uint16_t arm_boot_flags; \ - uint8_t minor_revision; /* FADT Minor Revision (ACPI 5.1) */ \ - uint64_t x_facs; /* 64-bit physical address of FACS */ \ - uint64_t x_dsdt; /* 64-bit physical address of DSDT */ \ - /* 64-bit Extended Power Mgt 1a Event Reg Blk address */ \ - struct AcpiGenericAddress xpm1a_event_block; \ - /* 64-bit Extended Power Mgt 1b Event Reg Blk address */ \ - struct AcpiGenericAddress xpm1b_event_block; \ - /* 64-bit Extended Power Mgt 1a Control Reg Blk address */ \ - struct AcpiGenericAddress xpm1a_control_block; \ - /* 64-bit Extended Power Mgt 1b Control Reg Blk address */ \ - struct AcpiGenericAddress xpm1b_control_block; \ - /* 64-bit Extended Power Mgt 2 Control Reg Blk address */ \ - struct AcpiGenericAddress xpm2_control_block; \ - /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */ \ - struct AcpiGenericAddress xpm_timer_block; \ - /* 64-bit Extended General Purpose Event 0 Reg Blk address */ \ - struct AcpiGenericAddress xgpe0_block; \ - /* 64-bit Extended General Purpose Event 1 Reg Blk address */ \ - struct AcpiGenericAddress xgpe1_block; \ - struct AcpiGenericAddress { uint8_t space_id; /* Address space where struct or register exi= sts */ uint8_t bit_width; /* Size in bits of given register */ @@ -160,11 +84,6 @@ struct AcpiGenericAddress { uint64_t address; /* 64-bit address of struct or register */ } QEMU_PACKED; =20 -struct AcpiFadtDescriptorRev3 { - ACPI_FADT_COMMON_DEF -} QEMU_PACKED; -typedef struct AcpiFadtDescriptorRev3 AcpiFadtDescriptorRev3; - typedef struct AcpiFadtData { struct AcpiGenericAddress pm1a_cnt; /* PM1a_CNT_BLK */ struct AcpiGenericAddress pm1a_evt; /* PM1a_EVT_BLK */ diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c index 65b271a..cd753ff 100644 --- a/tests/bios-tables-test.c +++ b/tests/bios-tables-test.c @@ -29,7 +29,8 @@ typedef struct { uint32_t rsdp_addr; AcpiRsdpDescriptor rsdp_table; AcpiRsdtDescriptorRev1 rsdt_table; - AcpiFadtDescriptorRev3 fadt_table; + uint32_t dsdt_addr; + uint32_t facs_addr; AcpiFacsDescriptorRev1 facs_table; uint32_t *rsdt_tables_addr; int rsdt_tables_nr; @@ -127,71 +128,18 @@ static void test_acpi_rsdt_table(test_data *data) data->rsdt_tables_nr =3D tables_nr; } =20 -static void test_acpi_fadt_table(test_data *data) +static void fadt_fetch_facs_and_dsdt_ptrs(test_data *data) { - AcpiFadtDescriptorRev3 *fadt_table =3D &data->fadt_table; uint32_t addr; + AcpiTableHeader hdr; =20 /* FADT table comes first */ addr =3D le32_to_cpu(data->rsdt_tables_addr[0]); - ACPI_READ_TABLE_HEADER(fadt_table, addr); - - ACPI_READ_FIELD(fadt_table->firmware_ctrl, addr); - ACPI_READ_FIELD(fadt_table->dsdt, addr); - ACPI_READ_FIELD(fadt_table->model, addr); - ACPI_READ_FIELD(fadt_table->reserved1, addr); - ACPI_READ_FIELD(fadt_table->sci_int, addr); - ACPI_READ_FIELD(fadt_table->smi_cmd, addr); - ACPI_READ_FIELD(fadt_table->acpi_enable, addr); - ACPI_READ_FIELD(fadt_table->acpi_disable, addr); - ACPI_READ_FIELD(fadt_table->S4bios_req, addr); - ACPI_READ_FIELD(fadt_table->reserved2, addr); - ACPI_READ_FIELD(fadt_table->pm1a_evt_blk, addr); - ACPI_READ_FIELD(fadt_table->pm1b_evt_blk, addr); - ACPI_READ_FIELD(fadt_table->pm1a_cnt_blk, addr); - ACPI_READ_FIELD(fadt_table->pm1b_cnt_blk, addr); - ACPI_READ_FIELD(fadt_table->pm2_cnt_blk, addr); - ACPI_READ_FIELD(fadt_table->pm_tmr_blk, addr); - ACPI_READ_FIELD(fadt_table->gpe0_blk, addr); - ACPI_READ_FIELD(fadt_table->gpe1_blk, addr); - ACPI_READ_FIELD(fadt_table->pm1_evt_len, addr); - ACPI_READ_FIELD(fadt_table->pm1_cnt_len, addr); - ACPI_READ_FIELD(fadt_table->pm2_cnt_len, addr); - ACPI_READ_FIELD(fadt_table->pm_tmr_len, addr); - ACPI_READ_FIELD(fadt_table->gpe0_blk_len, addr); - ACPI_READ_FIELD(fadt_table->gpe1_blk_len, addr); - ACPI_READ_FIELD(fadt_table->gpe1_base, addr); - ACPI_READ_FIELD(fadt_table->reserved3, addr); - ACPI_READ_FIELD(fadt_table->plvl2_lat, addr); - ACPI_READ_FIELD(fadt_table->plvl3_lat, addr); - ACPI_READ_FIELD(fadt_table->flush_size, addr); - ACPI_READ_FIELD(fadt_table->flush_stride, addr); - ACPI_READ_FIELD(fadt_table->duty_offset, addr); - ACPI_READ_FIELD(fadt_table->duty_width, addr); - ACPI_READ_FIELD(fadt_table->day_alrm, addr); - ACPI_READ_FIELD(fadt_table->mon_alrm, addr); - ACPI_READ_FIELD(fadt_table->century, addr); - ACPI_READ_FIELD(fadt_table->boot_flags, addr); - ACPI_READ_FIELD(fadt_table->reserved, addr); - ACPI_READ_FIELD(fadt_table->flags, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->reset_register, addr); - ACPI_READ_FIELD(fadt_table->reset_value, addr); - ACPI_READ_FIELD(fadt_table->arm_boot_flags, addr); - ACPI_READ_FIELD(fadt_table->minor_revision, addr); - ACPI_READ_FIELD(fadt_table->x_facs, addr); - ACPI_READ_FIELD(fadt_table->x_dsdt, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xpm1a_event_block, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xpm1b_event_block, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xpm1a_control_block, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xpm1b_control_block, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xpm2_control_block, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xpm_timer_block, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xgpe0_block, addr); - ACPI_READ_GENERIC_ADDRESS(fadt_table->xgpe1_block, addr); - - ACPI_ASSERT_CMP(fadt_table->signature, "FACP"); - g_assert(!acpi_calc_checksum((uint8_t *)fadt_table, - le32_to_cpu(fadt_table->length))); + ACPI_READ_TABLE_HEADER(&hdr, addr); + ACPI_ASSERT_CMP(hdr.signature, "FACP"); + + ACPI_READ_FIELD(data->facs_addr, addr); + ACPI_READ_FIELD(data->dsdt_addr, addr); } =20 static void sanitize_fadt_ptrs(test_data *data) @@ -206,6 +154,12 @@ static void sanitize_fadt_ptrs(test_data *data) continue; } =20 + /* check original FADT checksum before sanitizing table */ + g_assert(!(uint8_t)( + acpi_calc_checksum((uint8_t *)sdt, sizeof(AcpiTableHeader)) + + acpi_calc_checksum((uint8_t *)sdt->aml, sdt->aml_len) + )); + /* sdt->aml field offset :=3D spec offset - header size */ memset(sdt->aml + 0, 0, 4); /* sanitize FIRMWARE_CTRL(36) ptr */ memset(sdt->aml + 4, 0, 4); /* sanitize DSDT(40) ptr */ @@ -226,7 +180,7 @@ static void sanitize_fadt_ptrs(test_data *data) static void test_acpi_facs_table(test_data *data) { AcpiFacsDescriptorRev1 *facs_table =3D &data->facs_table; - uint32_t addr =3D le32_to_cpu(data->fadt_table.firmware_ctrl); + uint32_t addr =3D le32_to_cpu(data->facs_addr); =20 ACPI_READ_FIELD(facs_table->signature, addr); ACPI_READ_FIELD(facs_table->length, addr); @@ -265,7 +219,7 @@ static void fetch_table(AcpiSdtTable *sdt_table, uint32= _t addr) static void test_acpi_dsdt_table(test_data *data) { AcpiSdtTable dsdt_table; - uint32_t addr =3D le32_to_cpu(data->fadt_table.dsdt); + uint32_t addr =3D le32_to_cpu(data->dsdt_addr); =20 fetch_table(&dsdt_table, addr); ACPI_ASSERT_CMP(dsdt_table.header.signature, "DSDT"); @@ -674,7 +628,7 @@ static void test_acpi_one(const char *params, test_data= *data) test_acpi_rsdp_address(data); test_acpi_rsdp_table(data); test_acpi_rsdt_table(data); - test_acpi_fadt_table(data); + fadt_fetch_facs_and_dsdt_ptrs(data); test_acpi_facs_table(data); test_acpi_dsdt_table(data); fetch_rsdt_referenced_tables(data); --=20 2.7.4