There's no machine, it's just SSDT and DSDT that I wrote. Is there not enough information in the data I sent? Something's unclear?
On Wed, Nov 20, 2013 at 05:25:39PM +0000, Moore, Robert wrote:
If there are still issues, please send the acpidump for the machine.
-----Original Message----- From: Moore, Robert Sent: Wednesday, November 20, 2013 9:09 AM To: 'Michael S. Tsirkin' Cc: Kevin O'Connor; Idwer Vollering; seabios@seabios.org; Tang, Feng; coreboot@coreboot.org Subject: RE: iasl compiler/disassembler getting confused by Scope operator
We've made some recent changes in this area. Please try iasl version 20131115. Thanks, Bob
-----Original Message----- From: Michael S. Tsirkin [mailto:mst@redhat.com] Sent: Wednesday, November 20, 2013 8:59 AM To: Moore, Robert Cc: Kevin O'Connor; Idwer Vollering; seabios@seabios.org; Tang, Feng; coreboot@coreboot.org Subject: Re: iasl compiler/disassembler getting confused by Scope operator
Ping. any news?
On Tue, Oct 08, 2013 at 06:19:20AM +0000, Moore, Robert wrote:
I am out this week, will take a look when I get back. Bob
-----Original Message----- From: Michael S. Tsirkin [mailto:mst@redhat.com] Sent: Monday, October 07, 2013 12:18 AM To: Moore, Robert Cc: Kevin O'Connor; Idwer Vollering; seabios@seabios.org; Tang, Feng; coreboot@coreboot.org Subject: iasl compiler/disassembler getting confused by Scope operator
I observe the following issue with acpica-tools-20130823-
2.fc19.i686:
Compile a file, disassemble it then compile again, this fails because the Extern directives produced by disassembler confuse the
compiler.
Wiuld be nice if this was fixed disasseble then compile is a nice sanity- check tool. Thanks!
--->
Original:
/*
- Intel ACPI Component Architecture
- AML Disassembler version 20130823-32 [Aug 28 2013]
- Copyright (c) 2000 - 2013 Intel Corporation
- Disassembly of SSDT, Mon Oct 7 09:48:29 2013
- Original Table Header:
Signature "SSDT"
Length 0x00000FE0 (4064)
Revision 0x01
Checksum 0x9F
OEM ID "BOCHS "
OEM Table ID "BXPCSSDT"
OEM Revision 0x00000001 (1)
Compiler ID "BXPC"
Compiler Version 0x00000001 (1)
*/ DefinitionBlock ("SSDT.aml", "SSDT", 1, "BOCHS ", "BXPCSSDT", 0x00000001) {
External (_SB_.PCI0, DeviceObj) External (_SB_.PCI0.ISA_, DeviceObj) External (BNUM, FieldUnitObj) External (CPEJ, MethodObj) // 2 Arguments External (CPMA, MethodObj) // 1 Arguments External (CPST, MethodObj) // 1 Arguments External (PCEJ, MethodObj) // 2 Arguments External (PCID, FieldUnitObj) External (PCIU, FieldUnitObj) Scope (\) { Name (P0S, 0x80000000) Name (P0E, 0xFEBFFFFF) Name (P1V, 0x00) Name (P1S, Buffer (0x08) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) Name (P1E, Buffer (0x08) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) Name (P1L, Buffer (0x08) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) } Scope (\) { Name (_S3, Package (0x04) // _S3_: S3 System State { One, One, Zero, Zero }) Name (_S4, Package (0x04) // _S4_: S4 System State { 0x02, 0x02, Zero, Zero }) Name (_S5, Package (0x04) // _S5_: S5 System State { Zero, Zero, Zero, Zero }) } Scope (\_SB.PCI0.ISA) { Device (PEVT) { Name (_HID, "QEMU0001") // _HID: Hardware ID Name (PEST, 0x0000) OperationRegion (PEOR, SystemIO, PEST, One) Field (PEOR, ByteAcc, NoLock, Preserve) { PEPT, 8 } Method (_STA, 0, NotSerialized) // _STA: Status { Store (PEST, Local0) If (LEqual (Local0, Zero)) { Return (Zero) } Else { Return (0x0F) } } Method (RDPT, 0, NotSerialized) { Store (PEPT, Local0) Return (Local0) } Method (WRPT, 1, NotSerialized) { Store (Arg0, PEPT) } Name (_CRS, ResourceTemplate () // _CRS: Current
Resource Settings { IO (Decode16, 0x0000, // Range Minimum 0x0000, // Range Maximum 0x01, // Alignment 0x01, // Length _Y03) }) CreateWordField (_CRS, _SB.PCI0.ISA.PEVT._Y03._MIN, IOMN) // _MIN: Minimum Base Address CreateWordField (_CRS, _SB.PCI0.ISA.PEVT._Y03._MAX, IOMX) // _MAX: Maximum Base Address Method (_INI, 0, NotSerialized) // _INI: Initialize { Store (PEST, IOMN) Store (PEST, IOMX) } } }
Scope (_SB) { Scope (PCI0) { Name (BSEL, Zero) Device (S18) { Name (_SUN, 0x03) // _SUN: Slot User Number Name (_ADR, 0x00030000) // _ADR: Address Method (_EJ0, 1, NotSerialized) // _EJx: Eject
Device
{ PCEJ (BSEL, _SUN) } } Method (DVNT, 2, NotSerialized) { If (And (Arg0, 0x08)) { Notify (S18, Arg1) } } Method (PCNT, 0, NotSerialized) { Store (Zero, BNUM) DVNT (PCIU, One) DVNT (PCID, 0x03) ^S20.PCNT () } Device (S20) { Name (_SUN, 0x04) // _SUN: Slot User Number Name (_ADR, 0x00040000) // _ADR: Address Name (BSEL, One) Method (PCNT, 0, NotSerialized) { Store (One, BNUM) } } } }
}
Compile with iasl foo.dsl
Disassemble with iasl -d -e DSDT SSDT.aml (see DSDT.dsl at the end of the mail).
/*
- Intel ACPI Component Architecture
- AML Disassembler version 20130823-32 [Aug 28 2013]
- Copyright (c) 2000 - 2013 Intel Corporation
- Disassembly of SSDT.aml, Mon Oct 7 10:10:41 2013
- Original Table Header:
Signature "SSDT"
Length 0x00000207 (519)
Revision 0x01
Checksum 0xBF
OEM ID "BOCHS "
OEM Table ID "BXPCSSDT"
OEM Revision 0x00000001 (1)
Compiler ID "INTL"
Compiler Version 0x20130823 (538118179)
*/ DefinitionBlock ("SSDT.aml", "SSDT", 1, "BOCHS ", "BXPCSSDT", 0x00000001) {
External (_SB_.PCI0.ISA_, DeviceObj) External (BNUM, FieldUnitObj) External (PCEJ, MethodObj) // 2 Arguments External (PCI0, DeviceObj) External (PCID, FieldUnitObj) External (PCIU, FieldUnitObj) Scope (\) { Name (P0S, 0x80000000) Name (P0E, 0xFEBFFFFF) Name (P1V, Zero) Name (P1S, Buffer (0x08) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) Name (P1E, Buffer (0x08) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) Name (P1L, Buffer (0x08) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }) } Scope (\) { Name (_S3, Package (0x04) // _S3_: S3 System State { One, One, Zero, Zero }) Name (_S4, Package (0x04) // _S4_: S4 System State { 0x02, 0x02, Zero, Zero }) Name (_S5, Package (0x04) // _S5_: S5 System State { Zero, Zero, Zero, Zero }) } Scope (\_SB.PCI0.ISA) { Device (PEVT) { Name (_HID, "QEMU0001") // _HID: Hardware ID Name (PEST, Zero) OperationRegion (PEOR, SystemIO, PEST, One) Field (PEOR, ByteAcc, NoLock, Preserve) { PEPT, 8 } Method (_STA, 0, NotSerialized) // _STA: Status { Store (PEST, Local0) If (LEqual (Local0, Zero)) { Return (Zero) } Else { Return (0x0F) } } Method (RDPT, 0, NotSerialized) { Store (PEPT, Local0) Return (Local0) } Method (WRPT, 1, NotSerialized) { Store (Arg0, PEPT) } Name (_CRS, ResourceTemplate () // _CRS: Current
Resource Settings { IO (Decode16, 0x0000, // Range Minimum 0x0000, // Range Maximum 0x01, // Alignment 0x01, // Length _Y00) }) CreateWordField (_CRS, _SB.PCI0.ISA.PEVT._Y00._MIN, IOMN) // _MIN: Minimum Base Address CreateWordField (_CRS, _SB.PCI0.ISA.PEVT._Y00._MAX, IOMX) // _MAX: Maximum Base Address Method (_INI, 0, NotSerialized) // _INI: Initialize { Store (PEST, IOMN) Store (PEST, IOMX) } } }
Scope (_SB) { Scope (PCI0) { Name (BSEL, Zero) Device (S18) { Name (_SUN, 0x03) // _SUN: Slot User Number Name (_ADR, 0x00030000) // _ADR: Address Method (_EJ0, 1, NotSerialized) // _EJx: Eject
Device
{ PCEJ (BSEL, _SUN) } } Method (DVNT, 2, NotSerialized) { If (And (Arg0, 0x08)) { Notify (S18, Arg1) } } Method (PCNT, 0, NotSerialized) { Store (Zero, BNUM) DVNT (PCIU, One) DVNT (PCID, 0x03) ^S20.PCNT () } Device (S20) { Name (_SUN, 0x04) // _SUN: Slot User Number Name (_ADR, 0x00040000) // _ADR: Address Name (BSEL, One) Method (PCNT, 0, NotSerialized) { Store (One, BNUM) } } } }
}
<----
Compilation error: Intel ACPI Component Architecture ASL Optimizing Compiler version 20130823-32 [Aug 28 2013] Copyright (c) 2000 - 2013 Intel Corporation
SSDT.dsl 130: Scope (PCI0) Error 6117 - ^ Existing object has invalid type
for
Scope operator (PCI0 [Untyped])
If you compane the original and the disassebled result, you see the
issue:
DefinitionBlock ("SSDT.aml", "SSDT", 1, "BOCHS ", "BXPCSSDT", 0x00000001) {
- External (_SB_.PCI0, DeviceObj) External (_SB_.PCI0.ISA_, DeviceObj) External (BNUM, FieldUnitObj) External (CPEJ, MethodObj) // 2 Arguments External (CPMA, MethodObj) // 1 Arguments External (CPST, MethodObj) // 1 Arguments External (PCEJ, MethodObj) // 2 Arguments
- External (PCI0, DeviceObj) External (PCID, FieldUnitObj) External (PCIU, FieldUnitObj)
So External (_SB_.PCI0.ISA_, DeviceObj) implicitly defines PCI0 as an untyped object, Scope (PCI0) is then taken to refer to that (since it's in the correct namespace). Also, External (PCI0, DeviceObj) is produced in the wrong namespace.
To reproduce you will need a DSDT (for disassembler), see DSDT.dsl
below:
/*
- Intel ACPI Component Architecture
- AML Disassembler version 20130823-32 [Aug 28 2013]
- Copyright (c) 2000 - 2013 Intel Corporation
- Disassembly of DSDT, Mon Oct 7 09:58:06 2013
- Original Table Header:
Signature "DSDT"
Length 0x00001158 (4440)
Revision 0x01 **** 32-bit table (V1), no 64-bit math
support
Checksum 0xC6
OEM ID "BXPC"
OEM Table ID "BXDSDT"
OEM Revision 0x00000001 (1)
Compiler ID "INTL"
Compiler Version 0x20130823 (538118179)
*/ DefinitionBlock ("DSDT.aml", "DSDT", 1, "BXPC", "BXDSDT", 0x00000001)
{
External (_SB_.PCI0.PCNT, MethodObj) External (NTFY, MethodObj) External (CPON) External (P0E_, IntObj) External (P0S_, IntObj) External (P1E_, IntObj) External (P1L_, IntObj) External (P1S_, IntObj) External (P1V_) Scope (\) { OperationRegion (DBG, SystemIO, 0x0402, One) Field (DBG, ByteAcc, NoLock, Preserve) { DBGB, 8 } Method (DBUG, 1, NotSerialized) { ToHexString (Arg0, Local0) ToBuffer (Local0, Local0) Subtract (SizeOf (Local0), One, Local1) Store (Zero, Local2) While (LLess (Local2, Local1)) { Store (DerefOf (Index (Local0, Local2)), DBGB) Increment (Local2) } Store (0x0A, DBGB) } } Scope (_SB) { Device (PCI0) { Name (_HID, EisaId ("PNP0A03")) // _HID: Hardware ID Name (_ADR, Zero) // _ADR: Address Name (_UID, One) // _UID: Unique ID } } Scope (_SB.PCI0) { Device (ISA) { Name (_ADR, 0x00010000) // _ADR: Address OperationRegion (P40C, PCI_Config, 0x60, 0x04) Name (FDEN, One) } } 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) Store (Arg0, BNUM) Store (ShiftLeft (One, Arg1), B0EJ) Release (BLCK) Return (Zero) } } Scope (_GPE) { Name (_HID, "ACPI0006") // _HID: Hardware ID Method (_L00, 0, NotSerialized) // _Lxx: Level-Triggered
GPE
{ } Method (_E01, 0, NotSerialized) // _Exx: Edge-Triggered GPE { Acquire (\_SB.PCI0.BLCK, 0xFFFF) \_SB.PCI0.PCNT () Release (\_SB.PCI0.BLCK) } }
}