From 5645f996909d42e1878a434b8352c61463349d9f Mon Sep 17 00:00:00 2001 From: Ani Sinha Date: Tue, 29 Sep 2020 18:00:10 +0530 Subject: [PATCH 1/2] tests/acpi: unit test exercising global pci hotplug off for i440fx This change adds a unit test to exercise the case when hotplug is disabled both for pci root bus and the pci bridges by passing the following two switches to qemu: -global PIIX4_PM.acpi-root-pci-hotplug=off -global PIIX4_PM.acpi-pci-hotplug-with-bridge-support=off bios-tables-test-allowed-diff.h documents the fact that a new DSDT acpi gold master binary blob we need to be added to test this. We will do the actual addition in the next patch in the series. Signed-off-by: Ani Sinha Reviewed-by: Igor Mammedov Message-Id: <20200929123011.31836-2-ani@anisinha.ca> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- tests/qtest/bios-tables-test-allowed-diff.h | 1 + tests/qtest/bios-tables-test.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index dfb8523c8b..dea61d94f1 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1 +1,2 @@ /* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/pc/DSDT.hpbrroot", diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c index 3c09b844f9..b514b70b62 100644 --- a/tests/qtest/bios-tables-test.c +++ b/tests/qtest/bios-tables-test.c @@ -770,6 +770,21 @@ static void test_acpi_piix4_no_bridge_hotplug(void) free_test_data(&data); } +static void test_acpi_piix4_no_acpi_pci_hotplug(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine = MACHINE_PC; + data.variant = ".hpbrroot"; + data.required_struct_types = base_required_struct_types; + data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types); + test_acpi_one("-global PIIX4_PM.acpi-root-pci-hotplug=off " + "-global PIIX4_PM.acpi-pci-hotplug-with-bridge-support=off " + "-device pci-bridge,chassis_nr=1", &data); + free_test_data(&data); +} + static void test_acpi_q35_tcg(void) { test_data data; @@ -1192,6 +1207,8 @@ int main(int argc, char *argv[]) test_acpi_piix4_no_root_hotplug); qtest_add_func("acpi/piix4/pci-hotplug/no_bridge_hotplug", test_acpi_piix4_no_bridge_hotplug); + qtest_add_func("acpi/piix4/pci-hotplug/off", + test_acpi_piix4_no_acpi_pci_hotplug); qtest_add_func("acpi/q35", test_acpi_q35_tcg); qtest_add_func("acpi/q35/bridge", test_acpi_q35_tcg_bridge); qtest_add_func("acpi/q35/mmio64", test_acpi_q35_tcg_mmio64); From 42803552319a5481e90e93382d74a7336dfab496 Mon Sep 17 00:00:00 2001 From: Ani Sinha Date: Tue, 29 Sep 2020 18:00:11 +0530 Subject: [PATCH 2/2] tests/acpi: add DSDT.hpbrroot DSDT table blob to test global i440fx hotplug This change adds a new DSDT golden master table blob to test disabling hotplug on both pci root bus and pci bridges. Also reverts the change in file bios-tables-test-allowed-diff.h to make sure its now empty so that future modifications to acpi tables can be caught. The following is the disassembled diff between DSDT.hpbridge and DSDT.hpbrroot: @@ -5,13 +5,13 @@ * * Disassembling to symbolic ASL+ operators * - * Disassembly of tests/data/acpi/pc/DSDT.hpbridge, Tue Sep 29 17:51:04 2020 + * Disassembly of tests/data/acpi/pc/DSDT.hpbrroot, Tue Sep 29 17:50:00 2020 * * Original Table Header: * Signature "DSDT" - * Length 0x0000139D (5021) + * Length 0x00000C07 (3079) * Revision 0x01 **** 32-bit table (V1), no 64-bit math support - * Checksum 0x05 + * Checksum 0xAD * OEM ID "BOCHS " * OEM Table ID "BXPCDSDT" * OEM Revision 0x00000001 (1) @@ -247,38 +247,6 @@ } } - Scope (_SB.PCI0) - { - OperationRegion (PCST, SystemIO, 0xAE00, 0x08) - Field (PCST, DWordAcc, NoLock, WriteAsZeros) - { - PCIU, 32, - PCID, 32 - } - - OperationRegion (SEJ, SystemIO, 0xAE08, 0x04) - Field (SEJ, DWordAcc, NoLock, WriteAsZeros) - { - B0EJ, 32 - } - - OperationRegion (BNMR, SystemIO, 0xAE10, 0x04) - Field (BNMR, DWordAcc, NoLock, WriteAsZeros) - { - BNUM, 32 - } - - Mutex (BLCK, 0x00) - Method (PCEJ, 2, NotSerialized) - { - Acquire (BLCK, 0xFFFF) - BNUM = Arg0 - B0EJ = (One << Arg1) - Release (BLCK) - Return (Zero) - } - } - Scope (_SB) { Scope (PCI0) @@ -737,12 +705,6 @@ Scope (_GPE) { Name (_HID, "ACPI0006" /* GPE Block Device */) // _HID: Hardware ID - Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE - { - Acquire (\_SB.PCI0.BLCK, 0xFFFF) - \_SB.PCI0.PCNT () - Release (\_SB.PCI0.BLCK) - } } Scope (\_SB.PCI0) @@ -813,22 +775,6 @@ ) }) } - - Device (PHPR) - { - Name (_HID, "PNP0A06" /* Generic Container Device */) // _HID: Hardware ID - Name (_UID, "PCI Hotplug resources") // _UID: Unique ID - Name (_STA, 0x0B) // _STA: Status - Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings - { - IO (Decode16, - 0xAE00, // Range Minimum - 0xAE00, // Range Maximum - 0x01, // Alignment - 0x14, // Length - ) - }) - } } Scope (\) @@ -878,7 +824,6 @@ { Scope (PCI0) { - Name (BSEL, Zero) Device (S00) { Name (_ADR, Zero) // _ADR: Address @@ -907,436 +852,6 @@ { Name (_ADR, 0x00030000) // _ADR: Address } - - Device (S20) - { - Name (_SUN, 0x04) // _SUN: Slot User Number - Name (_ADR, 0x00040000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S28) - { - Name (_SUN, 0x05) // _SUN: Slot User Number - Name (_ADR, 0x00050000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S30) - { - Name (_SUN, 0x06) // _SUN: Slot User Number - Name (_ADR, 0x00060000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S38) - { - Name (_SUN, 0x07) // _SUN: Slot User Number - Name (_ADR, 0x00070000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S40) - { - Name (_SUN, 0x08) // _SUN: Slot User Number - Name (_ADR, 0x00080000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S48) - { - Name (_SUN, 0x09) // _SUN: Slot User Number - Name (_ADR, 0x00090000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S50) - { - Name (_SUN, 0x0A) // _SUN: Slot User Number - Name (_ADR, 0x000A0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S58) - { - Name (_SUN, 0x0B) // _SUN: Slot User Number - Name (_ADR, 0x000B0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S60) - { - Name (_SUN, 0x0C) // _SUN: Slot User Number - Name (_ADR, 0x000C0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S68) - { - Name (_SUN, 0x0D) // _SUN: Slot User Number - Name (_ADR, 0x000D0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S70) - { - Name (_SUN, 0x0E) // _SUN: Slot User Number - Name (_ADR, 0x000E0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S78) - { - Name (_SUN, 0x0F) // _SUN: Slot User Number - Name (_ADR, 0x000F0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S80) - { - Name (_SUN, 0x10) // _SUN: Slot User Number - Name (_ADR, 0x00100000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S88) - { - Name (_SUN, 0x11) // _SUN: Slot User Number - Name (_ADR, 0x00110000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S90) - { - Name (_SUN, 0x12) // _SUN: Slot User Number - Name (_ADR, 0x00120000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (S98) - { - Name (_SUN, 0x13) // _SUN: Slot User Number - Name (_ADR, 0x00130000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SA0) - { - Name (_SUN, 0x14) // _SUN: Slot User Number - Name (_ADR, 0x00140000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SA8) - { - Name (_SUN, 0x15) // _SUN: Slot User Number - Name (_ADR, 0x00150000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SB0) - { - Name (_SUN, 0x16) // _SUN: Slot User Number - Name (_ADR, 0x00160000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SB8) - { - Name (_SUN, 0x17) // _SUN: Slot User Number - Name (_ADR, 0x00170000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SC0) - { - Name (_SUN, 0x18) // _SUN: Slot User Number - Name (_ADR, 0x00180000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SC8) - { - Name (_SUN, 0x19) // _SUN: Slot User Number - Name (_ADR, 0x00190000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SD0) - { - Name (_SUN, 0x1A) // _SUN: Slot User Number - Name (_ADR, 0x001A0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SD8) - { - Name (_SUN, 0x1B) // _SUN: Slot User Number - Name (_ADR, 0x001B0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SE0) - { - Name (_SUN, 0x1C) // _SUN: Slot User Number - Name (_ADR, 0x001C0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SE8) - { - Name (_SUN, 0x1D) // _SUN: Slot User Number - Name (_ADR, 0x001D0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SF0) - { - Name (_SUN, 0x1E) // _SUN: Slot User Number - Name (_ADR, 0x001E0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Device (SF8) - { - Name (_SUN, 0x1F) // _SUN: Slot User Number - Name (_ADR, 0x001F0000) // _ADR: Address - Method (_EJ0, 1, NotSerialized) // _EJx: Eject Device - { - PCEJ (BSEL, _SUN) - } - } - - Method (DVNT, 2, NotSerialized) - { - If ((Arg0 & 0x10)) - { - Notify (S20, Arg1) - } - - If ((Arg0 & 0x20)) - { - Notify (S28, Arg1) - } - - If ((Arg0 & 0x40)) - { - Notify (S30, Arg1) - } - - If ((Arg0 & 0x80)) - { - Notify (S38, Arg1) - } - - If ((Arg0 & 0x0100)) - { - Notify (S40, Arg1) - } - - If ((Arg0 & 0x0200)) - { - Notify (S48, Arg1) - } - - If ((Arg0 & 0x0400)) - { - Notify (S50, Arg1) - } - - If ((Arg0 & 0x0800)) - { - Notify (S58, Arg1) - } - - If ((Arg0 & 0x1000)) - { - Notify (S60, Arg1) - } - - If ((Arg0 & 0x2000)) - { - Notify (S68, Arg1) - } - - If ((Arg0 & 0x4000)) - { - Notify (S70, Arg1) - } - - If ((Arg0 & 0x8000)) - { - Notify (S78, Arg1) - } - - If ((Arg0 & 0x00010000)) - { - Notify (S80, Arg1) - } - - If ((Arg0 & 0x00020000)) - { - Notify (S88, Arg1) - } - - If ((Arg0 & 0x00040000)) - { - Notify (S90, Arg1) - } - - If ((Arg0 & 0x00080000)) - { - Notify (S98, Arg1) - } - - If ((Arg0 & 0x00100000)) - { - Notify (SA0, Arg1) - } - - If ((Arg0 & 0x00200000)) - { - Notify (SA8, Arg1) - } - - If ((Arg0 & 0x00400000)) - { - Notify (SB0, Arg1) - } - - If ((Arg0 & 0x00800000)) - { - Notify (SB8, Arg1) - } - - If ((Arg0 & 0x01000000)) - { - Notify (SC0, Arg1) - } - - If ((Arg0 & 0x02000000)) - { - Notify (SC8, Arg1) - } - - If ((Arg0 & 0x04000000)) - { - Notify (SD0, Arg1) - } - - If ((Arg0 & 0x08000000)) - { - Notify (SD8, Arg1) - } - - If ((Arg0 & 0x10000000)) - { - Notify (SE0, Arg1) - } - - If ((Arg0 & 0x20000000)) - { - Notify (SE8, Arg1) - } - - If ((Arg0 & 0x40000000)) - { - Notify (SF0, Arg1) - } - - If ((Arg0 & 0x80000000)) - { - Notify (SF8, Arg1) - } - } - - Method (PCNT, 0, NotSerialized) - { - BNUM = Zero - DVNT (PCIU, One) - DVNT (PCID, 0x03) - } } } } Signed-off-by: Ani Sinha Acked-by: Igor Mammedov Message-Id: <20200929123011.31836-3-ani@anisinha.ca> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- tests/data/acpi/pc/DSDT.hpbrroot | Bin 0 -> 3079 bytes tests/qtest/bios-tables-test-allowed-diff.h | 1 - 2 files changed, 1 deletion(-) create mode 100644 tests/data/acpi/pc/DSDT.hpbrroot diff --git a/tests/data/acpi/pc/DSDT.hpbrroot b/tests/data/acpi/pc/DSDT.hpbrroot new file mode 100644 index 0000000000000000000000000000000000000000..36b0a8f2fbf93df47b66107125cd3ce01e017b92 GIT binary patch literal 3079 zcmZ<>b_rqUVPIff>*Vk35v<@85#S6GV`N}p0I@-|fG0}~Lv(|SlY2ZPHxmnEbR##I z?c(I_#37>N;uPx6I3purT0%ledjex(0YlOvfvHJ}1(Ljg!6p#UV5Se3vfkg$Mf;^YK| z$qC&5|1V)!z&CMnBEytK9)^csS(h*@;o|3rcMb{`6y)M-<78j}8P34Mz);B`pr!|M z4am9CO;Vo0j`3i(f&z>ox*@>Cz?q3Ffr~}JPh6iFrVykmy2-@b$t51s!L^rAU`iH`G@e8Bq;^1OcVh{kSa^!GxafXK< zI|Ib=(p(bmjGvf4F*C5ZGk$0O&dk85~;o@csCbMAq4>jE>;@xee_yyBRz`4yV$t)1`3ExthmrtTk7`heGdw`J zp*{s0UBFPlz{sJ*z*xy3;AaL3d;xDRP(+EiaK#4%g)kHdF*PI8vR8U=%n8d)v%#gf5U~)1;fe&6}gIo(rEueJ77!VX_z!4A>Xb2*VK!h=eh_Gj1a0uf9&T6iP42C6KoJ+X4 zMa(<{or5?z0)m1J1o^nQJJ}dG!Esc{&;=6XVhsoi@?5|@HG`|6AOpl+0uqjH@?rP! z^LB*A84o`={24gn1A>AD#khn!`4~8vSs54@xEL51xEVmHUxXi&Y8jS*9078kh+w>n zXD~x8h|SdiB1QN?`39uIIS9-bj}HzCX6(vy2<&Zv?g81>JgP60A2yvfdbMy)l~g z#yG4uj&Aa2@$vHxMz@{?Vm&Mgfy%u~1`$q3lyh;5uz@36gc}mWpkyM#298|;FFR0n zi*9n}ia`{60YR>CE4bLeiHp}cAXLF4zoa0iG+m)6wK%`DC^@y5A)3)Sz{eY!mwCCk z+!-0xGpuLisRR|NLBS!6+zjivc%mDX1A;(Bxq@?ms~@AYr(ZCmbC7QsqqD1*0V4y8 zv$L-YM|7i5Ku~Z9vvaVkj{<{&vx{Shf(TE%r=KTB0Ru=dy2;l#23&?a2ZTc0$Lr`E z;AvoBXaI5nqy}OY5p)i5i)32BH93Q!&Dp@fAXCJH%{e&4kuzF3MxO=bT~KBP`4Qyy z|Njdz(1n9teF_*77D!D-mjJoGfQvsNS{*~i$9qYFh%YP1N2FQAh;EdtmjPDuMcl-k zgPr|2aCn2m+0Qjxi0OX;LvjIQ$|4t`$tjEl3@HVS;DXbKXTszJ#;M7S1q=xV$>>&s zJ&Z2s?CY{Xd@8!Ai(^Rg(gmE86S@8uFs3Xmz$U*y1ta7@QC^VT0dga#)GT03SZKb$ z6hj#}QG~cfCUY?tU<6E%Z&(3iLTNInRpQD5X_kNtOkzj|MR_t~L2|SqcF$p$<>?n( znuI-=eL0=|gF|?51T*&3f?>Y1uS-EDmar+{VnP=MDa}F`ba4#9>bmG=3s9Pd)ZijK zpd8Mz1eCfNIO2UBLj<|GI2bq>7(lg%2w%K^a0oZZGYlD-St8OgdhzZ7uJNu0Mhwu* z4$4TNG$kMck^z@0&@5$O#vtI%56Nzz>;h?*IB;>z>ELBx;sM+LA4D>`GydTD!NbVW z!OOtN!weGo&cnd)g9py%{SQ+3xm}!r0U{5om;V0;)k`4NOblQdkc&ZFj{pDn{{t}? z7!G{v(njckh=G*-|Np-pL_>zW@VA12agAh8HA`RB}NY zINT6_flICj>mRIVWT|8j(2QZ=hz~Z77h+>!WMlxbP2z<(Sh$$Dn7}+!kPOH|0c%76 zMK|fWg*&@J!Z6U)H`KtuzzC!_#E}cx76DcPR#5pU;K3RLDvJahSV7?%-NYSiU;t^7 uGDJ6N1sg&+JPZs>3?dxy!G