
The document explains how to get ACPI to work on a Compaq Evo N410c. While most of the information is available in bits and pieces in other pages, it took me quite a while to learn:
The solution is not perfect by any means. However, it makes the computer usable with ACPI. Readers may want to read notes about the Compaq Evo N410c Linux support in order to get some background information.
When enabling ACPI in the kernel, with or without the ACPI patches, the fan was not detected, which led to overheating. I have written a precise description of the problem.
Before going further, please not that I know very little about ACPI and that some statements in here may be wrong.
ACPI uses a DSDT table which, as I understand it, describes your hardware. Apparently, the DSDT table that is used by default very often does not work well. I do not know why though.
It happens that some of the problems in the DSDT table are easily fixable, which seems to improve the support a great deal even though it is not perfect.
First, I downloaded the latest kernel, 2.4.21-pre5, and the latest ACPI patch applying to 2.4, acpi-20030228-2.4.21-pre4.
Then, I mostly followed the steps described on Intel's Web site about how to override DSDTs. I will go through them here:
Follow their instructions.
Again, follow their instructions.
This is where there instructions are a little loose. Here is a little more guidance:
Step 4 is to recompile the table with iasl -tc. The
compiler will give you errors. This is what you have to fix.
I haven't managed to fix them all, but most of them can be fixed easily by following instruction on the ACPI HOWTO page and by doing searches in the acpi-devel archive.
The compiler can recompile the table even if there are errors remaining. I fixed all the ones I knew how to fix. Unknown objects errors seem tough to fix.
The Intel instructions didn't work for me, so I followed different instructions.
I put the output in drivers/acpi/dsdt_table.h, and
modified osl.c in this directory. See the patch to osl.c.
I enabled all the ACPI options, and compiled the kernel.
In the case of the Evo N410c, the default DSDT gave me the following errors:
Intel ACPI Component Architecture ASL Optimizing Compiler / AML Disassembler version 20030228 [Feb 28 2003] Copyright (C) 2000 - 2003 Intel Corporation Supports ACPI Specification Revision 2.0b dsdt.dsl.orig 53: If (LEqual (\C001, 0x00)) Error 1022 - Object does not exist ^ (\C001) dsdt.dsl.orig 188: Name (_HID, "*PNP0C01") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C01) dsdt.dsl.orig 305: Name (_HID, "*PNP0A03") Error 1068 - String must be entirely alphanumeric ^ (*PNP0A03) dsdt.dsl.orig 1362: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1387: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1412: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1437: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1462: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1487: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1512: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1537: Name (_HID, "*PNP0C0F") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0F) dsdt.dsl.orig 1719: Name (_HID, "*PNP0A06") Error 1068 - String must be entirely alphanumeric ^ (*PNP0A06) dsdt.dsl.orig 2873: Name (_HID, "*PNP0501") Error 1068 - String must be entirely alphanumeric ^ (*PNP0501) dsdt.dsl.orig 2996: Method (_OFF, 0, NotSerialized) Warning 2019 - Not all control paths return a value ^ (_OFF) dsdt.dsl.orig 3019: Name (_HID, "*PNP0700") Error 1068 - String must be entirely alphanumeric ^ (*PNP0700) dsdt.dsl.orig 3250: Name (_HID, "*SMCF010") Error 1068 - String must be entirely alphanumeric ^ (*SMCF010) dsdt.dsl.orig 3375: Name (_HID, "*PNP0401") Error 1068 - String must be entirely alphanumeric ^ (*PNP0401) dsdt.dsl.orig 3579: Name (_HID, "*PNP0C04") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C04) dsdt.dsl.orig 3589: Name (_HID, "*PNP0100") Error 1068 - String must be entirely alphanumeric ^ (*PNP0100) dsdt.dsl.orig 3599: Name (_HID, "*PNP0200") Error 1068 - String must be entirely alphanumeric ^ (*PNP0200) dsdt.dsl.orig 3611: Name (_HID, "*PNP0800") Error 1068 - String must be entirely alphanumeric ^ (*PNP0800) dsdt.dsl.orig 3620: Name (_HID, "*PNP0B00") Error 1068 - String must be entirely alphanumeric ^ (*PNP0B00) dsdt.dsl.orig 3631: Name (_HID, "*PNP0303") Error 1068 - String must be entirely alphanumeric ^ (*PNP0303) dsdt.dsl.orig 3673: Name (_HID, "*SYN0100") Error 1068 - String must be entirely alphanumeric ^ (*SYN0100) dsdt.dsl.orig 3679: Name (_HID, "*PNP0000") Error 1068 - String must be entirely alphanumeric ^ (*PNP0000) dsdt.dsl.orig 4391: Name (_HID, "*PNP0C0A") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0A) dsdt.dsl.orig 4436: Name (_HID, "*PNP0C0A") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0A) dsdt.dsl.orig 4476: Name (_HID, "*PNP0C0A") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0A) dsdt.dsl.orig 4516: Name (_HID, "*PNP0C0A") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0A) dsdt.dsl.orig 4576: Name (_HID, "*PNP0C0E") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0E) dsdt.dsl.orig 4590: Name (_HID, "*PNP0C0D") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0D) dsdt.dsl.orig 4828: Name (_HID, "*PNP0C02") Error 1068 - ^ String must be entirely alphanumeric (*PNP0C02) dsdt.dsl.orig 5103: Name (_HID, "*PNP0C02") Error 1068 - ^ String must be entirely alphanumeric (*PNP0C02) dsdt.dsl.orig 5121: Name (_HID, "*PNP0C02") Error 1068 - ^ String must be entirely alphanumeric (*PNP0C02) dsdt.dsl.orig 5306: Store (C11B (0x1F, 0x00, 0x00, 0x00), Local0) Error 1029 - Called method returns no value ^ dsdt.dsl.orig 5384: Store (C11B (0x08, 0x00, 0x00, 0x00), Local0) Error 1029 - Called method returns no value ^ dsdt.dsl.orig 5538: Name (_HID, "*PNP0C0B") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0B) dsdt.dsl.orig 5548: Name (_HID, "*PNP0C0B") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0B) dsdt.dsl.orig 5558: Name (_HID, "*PNP0C0B") Error 1068 - String must be entirely alphanumeric ^ (*PNP0C0B) dsdt.dsl.orig 5602: \_PR.C000 Error 1022 - Object does not exist ^ (\_PR.C000) dsdt.dsl.orig 5642: \_PR.C000 Error 1022 - Object does not exist ^ (\_PR.C000) dsdt.dsl.orig 5710: Notify (\_PR.C000, 0x80) Error 1022 - Object does not exist ^ (\_PR.C000) ASL Input: dsdt.dsl.orig - 5859 lines, 196276 bytes, 3499 keywords Compilation complete. 41 Errors, 1 Warnings, 0 Remarks, 954 Optimizations
After tweaking the table, I ended up with a modified table with no errors, although one of the fixes I did was fairly random:
Intel ACPI Component Architecture ASL Optimizing Compiler / AML Disassembler version 20030228 [Feb 28 2003] Copyright (C) 2000 - 2003 Intel Corporation Supports ACPI Specification Revision 2.0b ASL Input: dsdt.dsl - 5861 lines, 196304 bytes, 3501 keywords AML Output: DSDT.aml - 23685 bytes 784 named objects 2717 executable opcodes Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 955 Optimizations
This is the table I used.
Interestingly, the errors I found are close to the ones found on a Evo N600c. I found an updated table for it but didn't know what changes where made. I am not sure if I fixed everything as people with Evo N600c did, though.
Note: this section was written as the result of a previous test which had a few compilation errors left.
With this modified table, I got the fan detected, as well as the
batteries, thermal information. It is not perfect since the the fan is always
on, but at least it doesn't overheat. Also, some programs complain that there
is no ACPI support so /proc/acpi may be a little screwy. Here is
what the kernel says when it boots up now:
BIOS-provided physical RAM map: BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) BIOS-e820: 0000000000100000 - 000000001ffd0000 (usable) BIOS-e820: 000000001ffd0000 - 000000001fff0c00 (reserved) BIOS-e820: 000000001fff0c00 - 000000001fffc000 (ACPI NVS) BIOS-e820: 000000001fffc000 - 0000000020000000 (reserved) 511MB LOWMEM available. On node 0 totalpages: 131024 zone(0): 4096 pages. zone(1): 126928 pages. zone(2): 0 pages. ACPI: RSDP (v000 COMPAQ ) @ 0x000f6a20 ACPI: RSDT (v001 COMPAQ CPQ004C 08194.00800) @ 0x1fff0c84 ACPI: FADT (v002 COMPAQ CPQ004C 00000.00002) @ 0x1fff0c00 ACPI: SSDT (v001 COMPAQ CPQCPU 00000.04097) @ 0x1fff6e7b ACPI: SSDT (v001 COMPAQ CPQGysr 00000.04097) @ 0x1fff6ec6 ACPI: DSDT (v001 COMPAQ EVON410C 00001.00000) @ 0x00000000 ACPI: BIOS passes blacklist Kernel command line: root=/dev/hda2 ro resume=/dev/hda4 apm=on hdc=ide-scsi ide_setup: hdc=ide-scsi Initializing CPU#0 Detected 1196.039 MHz processor. Console: colour VGA+ 80x25 Calibrating delay loop... 2385.51 BogoMIPS Memory: 515748k/524096k available (1461k kernel code, 7960k reserved, 549k data, 84k init, 0k highmem) Dentry cache hash table entries: 65536 (order: 7, 524288 bytes) Inode cache hash table entries: 32768 (order: 6, 262144 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer-cache hash table entries: 32768 (order: 5, 131072 bytes) Page-cache hash table entries: 131072 (order: 7, 524288 bytes) CPU: L1 I cache: 16K, L1 D cache: 16K CPU: L2 cache: 512K Intel machine check architecture supported. Intel machine check reporting enabled on CPU#0. CPU: Intel(R) Pentium(R) III Mobile CPU 1200MHz stepping 01 Enabling fast FPU save and restore... done. Enabling unmasked SIMD FPU exception support... done. Checking 'hlt' instruction... OK. POSIX conformance testing by UNIFIX mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au) mtrr: detected mtrr type: Intel ACPI: Subsystem revision 20030228 PCI: PCI BIOS revision 2.10 entry at 0xf03a2, last bus=3 PCI: Using configuration type 1 tbget-0292: *** Info: Table [DSDT] replaced by host OS tbxface-0117 [03] acpi_load_tables : ACPI Tables successfully acquired Parsing all Control Methods:................................................................................................................................................................................................................................................................... Table [DSDT] - 802 Objects with 88 Devices 259 Methods 24 Regions Parsing all Control Methods: Table [SSDT] - 0 Objects with 0 Devices 0 Methods 0 Regions Parsing all Control Methods: Table [SSDT] - 0 Objects with 0 Devices 0 Methods 0 Regions ACPI Namespace successfully loaded at root c031c89c evxfevnt-0092 [04] acpi_enable : Transition to ACPI mode successful evgpe-0416 [06] ev_create_gpe_block : GPE Block: 2 registers at 0000000000001028 evgpe-0421 [06] ev_create_gpe_block : GPE Block defined as GPE0 to GPE15 evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L10 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L11 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L17 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L18 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L1C is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L1D is not valid evgpe-0115 [08] ev_save_method_info : Unknown GPE method type: C1C8 (name not of form _Lnn or _Enn) evgpe-0416 [06] ev_create_gpe_block : GPE Block: 2 registers at 000000000000102C evgpe-0421 [06] ev_create_gpe_block : GPE Block defined as GPE16 to GPE31 evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L0B is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L10 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L11 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L17 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L18 is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L1C is not valid evgpe-0138 [08] ev_save_method_info : GPE number associated with method _L1D is not valid evgpe-0115 [08] ev_save_method_info : Unknown GPE method type: C1C8 (name not of form _Lnn or _Enn) Executing all Device _STA and_INI methods:...evrgnini-0261: *** Error: Could not install pci_config handler for C03E, AE_ALREADY_EXISTS .....evrgnini-0261: *** Error: Could not install pci_config handler for C03E, AE_ALREADY_EXISTS .............................................................evrgnini-0261: *** Error: Could not install pci_config handler for C03E, AE_ALREADY_EXISTS ................... 88 Devices found containing: 88 _STA, 7 _INI methods Completing Region/Field/Buffer/Package initialization:......................................................................................... Initialized 12/24 Regions 0/0 Fields 25/26 Buffers 52/61 Packages (809 nodes) ACPI: Interpreter enabled ACPI: Using PIC for interrupt routing ACPI: System [ACPI] (supports S0 S3 S4bios S4 S5) ACPI: PCI Root Bridge [C03E] (00:00) PCI: Probing PCI hardware (bus 00) PCI: Ignoring BAR0-3 of IDE controller 00:1f.1 Transparent bridge - Intel Corp. 82801BAM/CAM PCI Bridge ACPI: Power Resource [C14D] (on) ACPI: Power Resource [C161] (on) ACPI: Power Resource [C165] (on) ACPI: Power Resource [C168] (on) ACPI: Power Resource [C171] (on) ACPI: PCI Interrupt Link [C0BB] (IRQs 5 10 11, disabled) ACPI: PCI Interrupt Link [C0BC] (IRQs 5 10 *11) ACPI: PCI Interrupt Link [C0BD] (IRQs 5 10 11, disabled) ACPI: PCI Interrupt Link [C0BE] (IRQs 5 10 11, disabled) ACPI: PCI Interrupt Link [C0BF] (IRQs 5 *10 11) ACPI: PCI Interrupt Link [C0C0] (IRQs *5 10 11) ACPI: PCI Interrupt Link [C0C1] (IRQs 5 10 *11) ACPI: PCI Interrupt Link [C0C2] (IRQs 5 10 11, disabled) ACPI: Power Resource [C1E0] (off) ACPI: Power Resource [C1E1] (off) ACPI: Power Resource [C1E2] (off) PCI: Probing PCI hardware ACPI: PCI Interrupt Link [C0BB] enabled at IRQ 5 ACPI: PCI Interrupt Link [C0BD] enabled at IRQ 10 ACPI: PCI Interrupt Link [C0BE] enabled at IRQ 5 ACPI: PCI Interrupt Link [C0C2] enabled at IRQ 11 PCI: Using ACPI for IRQ routing PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off' isapnp: Scanning for PnP cards... isapnp: No Plug & Play device found Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd ACPI: AC Adapter [C18F] (on-line) dsmthdat-0475 [44] ds_method_data_get_val: Uninitialized Local[0] at node dfe68108 psparse-1121: *** Error: Method execution failed [\_SB_.C03E.C054.C0D2.C12F] (Node c15f9f08), AE_AML_UNINITIALIZED_LOCAL psparse-1121: *** Error: Method execution failed [\_SB_.C03E.C054.C0D2.C13E] (Node c15f8748), AE_AML_UNINITIALIZED_LOCAL psparse-1121: *** Error: Method execution failed [\_SB_.C18B._BTP] (Node c15ee3e8), AE_AML_UNINITIALIZED_LOCAL ACPI: Battery Slot [C18B] (battery present) ACPI: Battery Slot [C18C] (battery absent) ACPI: Battery Slot [C18D] (battery absent) ACPI: Battery Slot [C18E] (battery absent) ACPI: Power Button (FF) [PWRF] ACPI: Sleep Button (CM) [C190] ACPI: Lid Switch [C191] ACPI: Fan [C1E3] (off) ACPI: Fan [C1E4] (off) ACPI: Fan [C1E5] (off) ACPI: Processor [C000] (supports C1 C2 C3, 2 performance states, 8 throttling states) ACPI: Thermal Zone [TZ1] (61 C) ACPI: Thermal Zone [C1DF] (35 C)
Also, here is what acpi says:
hugo@buena ~> acpi -V
Battery 1: unknown, 99%
Thermal 1: active[2], 44.0 degrees C
Thermal 2: ok, 35.0 degrees C
AC Adapter 1: on-line
As I said, the fan is always on so I don't think that it is terribly energy-efficient, but at least it is usable.
I have sent my semi-success story to acpi-devel in order to try and see if I can improve my situation. I am also trying to get more N600c information, and maybe N410c owners will be able to help me completing this task.
If you have a N410c and are playing with ACPI, please report your experience to hugo@larve.net and I will try and complete this page.