[SeaBIOS] [PATCHv2 0/3] acpi: fix up EJ0 in DSDT

Michael S. Tsirkin mst at redhat.com
Thu Sep 22 13:37:16 CEST 2011


This is a second iteration of the patch.  The patch has been
significantly reworked to address (offline) comments by Gleb.

I think the infrastructure created is generic enough
to be generally useful beyond the specific bug
that I would like to fix. Specifically it
will be able to find S3 Name to patch that,
or process compiled CPU SSDT to avoid the need for
hardcoded offsets.

Please comment.

Main changes:
	- tools rewritten in python
	- Original ASL retains _EJ0 methods, BIOS patches that to EJ0_
	- generic ACP_EXTRACT infrastructure that can match Method
          and Name Operators
	- instead of matching specific method name, insert tags
	  in original DSL source and match that to AML

-----

Here's a bug: guest thinks it can eject VGA device and ISA bridge.

[root at dhcp74-172 ~]#lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 PCI bridge: Red Hat, Inc. Device 0001
00:04.0 Ethernet controller: Qumranet, Inc. Virtio network device
00:05.0 SCSI storage controller: Qumranet, Inc. Virtio block device
01:00.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03)

[root at dhcp74-172 ~]# ls /sys/bus/pci/slots/1/
adapter  address  attention  latch  module  power
[root at dhcp74-172 ~]# ls /sys/bus/pci/slots/2/
adapter  address  attention  latch  module  power

[root at dhcp74-172 ~]# echo 0 > /sys/bus/pci/slots/2/power 
[root at dhcp74-172 ~]# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:03.0 PCI bridge: Red Hat, Inc. Device 0001
00:04.0 Ethernet controller: Qumranet, Inc. Virtio network device
00:05.0 SCSI storage controller: Qumranet, Inc. Virtio block device
01:00.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03)

This is wrong because slots 1 and 2 are marked as not hotpluggable
in qemu.

The reason is that our acpi tables declare both _RMV with value 0,
and _EJ0 method for these slots. What happens in this case
is undocumented by ACPI spec, so linux ignores _RMV,
and windows seems to ignore _EJ0.

The correct way to suppress hotplug is not to have _EJ0,
so this is what this patch does: it probes PIIX and
modifies DSDT to match.

With these patches applied, we get:

[root at dhcp74-172 ~]# ls /sys/bus/pci/slots/1/
address
[root at dhcp74-172 ~]# ls /sys/bus/pci/slots/2/
address



Michael S. Tsirkin (3):
  acpi: generate and parse mixed asl/aml listing
  acpi: EJ0 method name patching
  acpi: remove _RMV

 Makefile                         |   10 +-
 src/acpi-dsdt.dsl                |   96 ++++++++-----------
 src/acpi.c                       |   31 ++++++
 tools/acpi_extract.py            |  195 ++++++++++++++++++++++++++++++++++++++
 tools/acpi_extract_preprocess.py |   37 +++++++
 5 files changed, 307 insertions(+), 62 deletions(-)
 create mode 100755 tools/acpi_extract.py
 create mode 100755 tools/acpi_extract_preprocess.py

-- 
1.7.5.53.gc233e



More information about the SeaBIOS mailing list