ACPI/ECDT on gateway 200x notebook

Rich Ibbotson
2004-01-04T02:01:09Z

Dear ACPI Gurus,

I'm trying to get ACPI working on a Gateway 200X (200ARC) notebook
running Linux with kernel 2.4.23 (built from sources). The specs for
this notebook claim that it has APM 1.2 and ACPI 2.0 support. However,
when I run a kernel with ACPI enabled (as a module) the
/proc/acpi/battery and /proc/acpi/ac_adapter directories are both empty
and I see these messages at boot time:

kernel: ACPI-1120: *** Error: Method execution failed
[\_SB_.ADP1._STA] (Node c12f88c0), AE_AML_NO_RETURN_VALUE
kernel: ACPI-1120: *** Error: Method execution failed
[\_SB_.BAT1._STA] (Node c12f89c0), AE_AML_NO_RETURN_VALUE

I see that this has been discussed here before, and it looks like the
consensus is that I need to manually install an ECDT at boot time.

The latest discussions of this problem that I've seen are here:
http://sourceforge.net/mailarchive/forum.php?thread_id=3451648&forum_id=6102
http://sourceforge.net/mailarchive/forum.php?thread_id=3479606&forum_id=6102

After reading those threads, I've tried two things to get ACPI working:

1) Patch the latest 2.4.23 kernel sources with acpi-20031203-2.4.23.diff
and the "fake_ecdt" patch from Ducrot Bruno, passing the string
"ecdt_fake=0x66:0x62:28:1:\\_SB_.PCI0.LPCB.H_EC" to the kernel at boot
time (my _GPE is 0x1c and the _UID reported by acpidmp under Device H_EC
is 0x01)

I see that the fake ecdt does not work, but I am not sure why. I see
nothing between the following two logs:

kernel: ACPI: Faking ECDT
kernel: ACPI: Could not use ECDT

If I specify the path as "\_SB_.PCI0.LPCB.H_EC" (only one "\") in my
grub.conf, I see the following:

kernel: ACPI: Faking ECDT
kernel: evregion-0347: *** Error: Handler for [EmbeddedControl]
returned AE_BAD_PARAMETER
kernel: dswexec-0435 [11] ds_exec_end_op : [Store]: Could not
resolve operands, AE_BAD_PARAMETER
kernel: psparse-1120: *** Error: Method execution failed
[\_SB_.PCI0.LPCB.H_EC._REG] (Node c13f6c68), AE_BAD_PARAMETER
kernel: ACPI: Could not use ECDT

I do see an entry for "\_SB_.PCI0.LPCB.H_EC._REG" in the DSDT, though:

000028c5: Method _REG (\_SB_.PCI0.LPCB.H_EC._REG)
000028cb: ArgCount 2; NotSerialized
000028cc: If
000028ce: LAnd
000028cf: LEqual
000028d0: Arg0
000028d1: 0x03
000028d3: LEqual
000028d4: Arg1
000028d5: 0x01
000028d7: Store
000028d8: 0x01
000028da: ECON (0000024e)
000028de: Store
000028df: \_SB_.PCI0.LPCB.H_EC.ACEX (00002844)
000028f6: \PWRS (00000160)

I'm not sure if this means that it got a little further, or if this is
an error because I should have used both backslashes.

2) I would like to try actually supplying an ECDT, using the information
below (I got much of this from the DSDT, but I'm not sure if the Creator
ID/Creator Revision matter). Is there a suggested way to put this into
a char[] or some form that can be used in acpi_os_table_override? If I
can get it into a char[] then I guess I can calculate the checksum and
length, but if not then how do I compute these?

ECDT: Length=?, Revision=1, Checksum=?,
OEMID=INTEL, OEM Table ID=MONTARAG, OEM Revision=0x06040000,
Creator ID=fake, Creator Revision=0x1
EC_CONTROL=0x66:0[8] (IO)
EC_DATA=0x62:0[8] (IO)
UID=1, GPE_BIT=0x1c
EC_ID=\_SB_.PCI0.LPCB.H_EC

thanks for any advice,
Rich

-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills. Sign up for IBM's
Free Linux Tutorials. Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click