On Wed, Nov 20, 2013 at 05:08:43PM +0000, Moore, Robert wrote:
> We've made some recent changes in this area. Please try iasl version 20131115.
> Thanks,
> Bob
I tried with latest git:
commit 176efde76486dc037bb34345685d060c97bdd0d3
Author: Robert Moore <Robert.Moore(a)intel.com>
Date: Fri Nov 15 10:12:23 2013 -0800
Update version to 20131115.
Version 20131115.
same issue:
from disassembler output: SSDT.dsl:
External (_SB_.PCI0.ISA_, DeviceObj)
External (BNUM)
External (PCI0, DeviceObj)
External (PCID)
External (PCIU)
again PCI0 is declared after _SB_.PCI0.ISA_ so PCI0 becomes
untyped. As a result:
[mst@robin tmp]$ ../generate/unix/bin/iasl SSDT.dsl
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20131115-32 [Nov 20 2013]
Copyright (c) 2000 - 2013 Intel Corporation
SSDT.dsl 141: Scope (PCI0)
Error 6117 - ^ Existing object has invalid type for
Scope operator (PCI0 [Untyped])
ASL Input: SSDT.dsl - 184 lines, 3603 bytes, 54 keywords
Compilation complete. 1 Errors, 0 Warnings, 0 Remarks, 0 Optimizations
>
> > -----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(a)seabios.org; Tang, Feng;
> > coreboot(a)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(a)seabios.org; Tang,
> > > > Feng; coreboot(a)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)
> > > > }
> > > >
> > > > }
> > > > }
> > > >