What we expect to see is:
[ 28.070535] ACPI: EC: Look up EC in DSDT [ 28.077294] ACPI: Interpreter enabled [ 28.077357] ACPI: (supports S0 S3 S4 S5) [ 28.077612] ACPI: Using IOAPIC for interrupt routing [ 28.078065] ACPI: EC: non-query interrupt received, switching to interrupt mode [ 28.105273] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62 [ 28.105338] ACPI: EC: driver started in interrupt mode
But i386, when on external power, reports:
[ 18.127035] ACPI: EC: Look up EC in DSDT [ 18.136591] ACPI: Interpreter enabled [ 18.136594] ACPI: (supports S0 S3 S4 S5) [ 18.136604] ACPI: Using IOAPIC for interrupt routing [ 18.136844] ACPI: EC: non-query interrupt received, switching to interrupt mode [ 18.634304] ACPI: EC: acpi_ec_wait timeout, status = 0, expect_event = 1 [ 18.634362] ACPI: EC: read timeout, command = 128 [ 18.634415] ACPI Exception (evregion-0420): AE_TIME, Returned by Handler for [EmbeddedControl] [20070126] [ 18.634419] ACPI Exception (dswexec-0462): AE_TIME, While resolving operands for [OpcodeName unavailable] [20070126] [ 18.634423] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PCI0.LPCB.EC__._REG] (Node f7c4bd20), AE_TIME [ 19.142018] ACPI: EC: missing confirmations, switch off interrupt mode. [ 19.154286] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62 [ 19.154288] ACPI: EC: driver started in poll mode
The key part is:
[ 18.634419] ACPI Exception (dswexec-0462): AE_TIME, While resolving operands for [OpcodeName unavailable] [20070126]
The ACPI EC._REG method is:
Method (_REG, 2, NotSerialized) { If (LEqual (Arg0, 0x03)) { Store (Arg1, ECON) Store (BATP, BNUM) Store (RSCL, B0SC) Store (RPWR, PWRS) Notify (BAT0, 0x81) PNOT () If (LEqual (PRCP, One)) { Notify (DOCK, Zero) }
If (LEqual (WKSR, 0x02)) { Notify (DOCK, One) } } }
If the early-enabling of the EC is the reason, it looks to me as if one or more of the STORE() operations is failing because the target hasn't been declared in the ACPI name-space yet.
The call-chain looks to be:
drivers/acpi/ec.c::acpi_ec_transaction_unlocked() drivers/acpi/ec.c::acpi_ec_wait()
-- drivers/acpi/ec.c::acpi_ec_transaction_unlocked() --
for (; rdata_len > 0; --rdata_len) { result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF_1, force_poll); if (result) { pr_err(PREFIX "read timeout, command = %d\n", command); goto end;
--
-- acpi_ec_wait() --
if (likely(test_bit(EC_FLAGS_GPE_MODE, &ec->flags)) && ...
... if (acpi_ec_check_status(ec, event)) { ... } else { /* missing GPEs, switch back to poll mode */ if (printk_ratelimit()) pr_info(PREFIX "missing confirmations, " "switch off interrupt mode.\n"); clear_bit(EC_FLAGS_GPE_MODE, &ec->flags); }
I'll do an ACPI debug test on this and see where it is going wrong.
What we expect to see is:
[ 28.070535] ACPI: EC: Look up EC in DSDT
[ 28.077294] ACPI: Interpreter enabled
[ 28.077357] ACPI: (supports S0 S3 S4 S5)
[ 28.077612] ACPI: Using IOAPIC for interrupt routing
[ 28.078065] ACPI: EC: non-query interrupt received, switching to interrupt mode
[ 28.105273] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62
[ 28.105338] ACPI: EC: driver started in interrupt mode
But i386, when on external power, reports:
[ 18.127035] ACPI: EC: Look up EC in DSDT PCI0.LPCB. EC__._REG] (Node f7c4bd20), AE_TIME
[ 18.136591] ACPI: Interpreter enabled
[ 18.136594] ACPI: (supports S0 S3 S4 S5)
[ 18.136604] ACPI: Using IOAPIC for interrupt routing
[ 18.136844] ACPI: EC: non-query interrupt received, switching to interrupt mode
[ 18.634304] ACPI: EC: acpi_ec_wait timeout, status = 0, expect_event = 1
[ 18.634362] ACPI: EC: read timeout, command = 128
[ 18.634415] ACPI Exception (evregion-0420): AE_TIME, Returned by Handler for [EmbeddedControl] [20070126]
[ 18.634419] ACPI Exception (dswexec-0462): AE_TIME, While resolving operands for [OpcodeName unavailable] [20070126]
[ 18.634423] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.
[ 19.142018] ACPI: EC: missing confirmations, switch off interrupt mode.
[ 19.154286] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62
[ 19.154288] ACPI: EC: driver started in poll mode
The key part is:
[ 18.634419] ACPI Exception (dswexec-0462): AE_TIME, While resolving operands for [OpcodeName unavailable] [20070126]
The ACPI EC._REG method is:
Method (_REG, 2, NotSerialized)
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECON)
Store (BATP, BNUM)
Store (RSCL, B0SC)
Store (RPWR, PWRS)
Notify (BAT0, 0x81)
PNOT ()
If (LEqual (PRCP, One))
{
Notify (DOCK, Zero)
}
If (LEqual (WKSR, 0x02))
{
Notify (DOCK, One)
}
}
}
If the early-enabling of the EC is the reason, it looks to me as if one or more of the STORE() operations is failing because the target hasn't been declared in the ACPI name-space yet.
The call-chain looks to be:
drivers/ acpi/ec. c::acpi_ ec_transaction_ unlocked( ) acpi/ec. c::acpi_ ec_wait( )
drivers/
-- drivers/ acpi/ec. c::acpi_ ec_transaction_ unlocked( ) --
for (; rdata_len > 0; --rdata_len) { EVENT_OBF_ 1, force_poll);
result = acpi_ec_wait(ec, ACPI_EC_
if (result) {
pr_err(PREFIX "read timeout, command = %d\n", command);
goto end;
--
-- acpi_ec_wait() --
if (likely( test_bit( EC_FLAGS_ GPE_MODE, &ec->flags)) && ...
... check_status( ec, event)) { ratelimit( )) bit(EC_ FLAGS_GPE_ MODE, &ec->flags);
if (acpi_ec_
...
} else {
/* missing GPEs, switch back to poll mode */
if (printk_
pr_info(PREFIX "missing confirmations, "
"switch off interrupt mode.\n");
clear_
}
I'll do an ACPI debug test on this and see where it is going wrong.