Re: Bug 11884 - _REG and _INI

Zhao Yakui
2008-12-16T00:58:55Z

On Mon, 2008-12-15 at 18:47 +0800, Alexey Starikovskiy wrote:
> It's not that simple... Here is relevant part of dmesg from my thinkpad:
>
> ------------------------------------------------------------------------
> ACPI Error (evregion-0315): No handler for Region [ECOR]
> (ffff8800bf814558) [EmbeddedControl] [20080926]
> ACPI Error (exfldio-0291): Region EmbeddedControl(3) has no handler
> [20080926]
> ACPI Error (psparse-0524): Method parse/execution failed
> [\_SB_.PCI0.LPC_.EC__._INI] (Node ffff8800bf817300), AE_NOT_EXIST
> ACPI: EC: EC description table is found, configuring boot EC
> ACPI: Interpreter enabled
> ACPI: (supports S0 S3 S5)
> ACPI: Using IOAPIC for interrupt routing
> ACPI: EC: non-query interrupt received, switching to interrupt mode
> ACPI: EC: GPE = 0x1c, I/O: command/status = 0x66, data = 0x62
> ACPI: EC: driver started in interrupt mode
> --------------------------------------------------------------------------
There exists too much difference on different vendors.
In theory there exists the EC flag in AML code, which indicates whether
the EC operation region can be accessed. After the EC _REG object is
evaluated, the EC flag will be set and it means that EC operation region
can be accessed. Before the EC _REG object is evaluated, it had better
be zero.
>From the above dmesg it seems that the above warning is related with one
of the two following factors:
a. EC flag is initialized as one. In such case it means that EC
operation region can be accessed before EC initialization.
b. EC flag is not used correctly in some methods.

At the same time from the above message we know that there exists the
ECDT table. So when there exists the ECDT table, we can continue to use
the current flowchart of EC initialization.

Can Lin ming's proposal be applied to the situation that there is no
ECDT table?

Thanks.

>
> Any other suggestions?
>
> Regards,
> Alex.
>
> Alexey Starikovskiy wrote:
> > Zhao Yakui wrote:
> >> On Mon, 2008-12-15 at 11:51 +0800, Lin Ming wrote:
> >>> http://bugzilla.kernel.org/show_bug.cgi?id=11884
> >>> Method(\_SB._INI)
> >>> {
> >>> //initialize package CUZO
> >>> }
> >>>
> >>> Method(\_SB_.PCI0.LPCB.EC0_._REG)
> >>> {
> >>> //access package CUZO
> >>> }
> >>>
> >>> For this machine, ﻿\_SB._INI must be run before
> >>> ﻿\_SB_.PCI0.LPCB.EC0_._REG
> >>>
> >>> But currently early EC _REG method is run before _INI as below
> >>> acpi_bus_init shows.
> >>>
> >>> void __init acpi_bus_init(void)
> >>> .....
> >>> status = acpi_ec_ecdt_probe();
> >>> /* Ignore result. Not having an ECDT is not fatal. */
> >>>
> >>> status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION);
> >>> .....
> >>> }
> >>>
> >>> ﻿acpi_ec_ecdt_probe will install ec handler although no ECDT found
> >>> in this machine.
> >>>
> >>> Alexey, How about that if there's no ECDT found, we do not install
> >>> ec handler before ﻿acpi_initialize_objects?
> >>
> >> I do some test with the help of KVM. In my test the ECDT table is
> >> defined. And there also exists the EC device in DSDT table.Of course
> >> there exists the _INI/_REG object under the scope of EC device. Under
> >> the scope of \_SB.PCI0 there exists the _INI/_REG object.
> >>
> >>> From the test result it seems that all the _INI objects are evaluated
> >> before _REG object even when there exists the ECDT table.
> >>
> >> Hi, Alexey
> >> Can the Lin Ming's proposal be considered based on the above test?
> > Hi Yakui,
> > His proposal needs to be considered even without your test (but the
> > test itself is quite helpful), just because HP does not violate the
> > ACPI spec, but ASUS notebooks without ECDT do violate it (and fake
> > ECDT workaround is there for them).
> >
> > Thanks,
> > Alex.
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html