I am out this week, will take a look when I get back. Bob
> -----Original Message----- > From: Michael S. Tsirkin [mailto:[email protected]] > Sent: Monday, October 07, 2013 12:18 AM > To: Moore, Robert > Cc: Kevin O'Connor; Idwer Vollering; [email protected]; Tang, Feng; > [email protected] > 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) > } > > } > } > -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

