Con la instalación de openSuSe 11.1 me tope con un error en la Tabla de Descripción del Sistema Diferenciada o DSDT por sus siglas en ingles. El error en esta tabla causaba que el proceso de encendido o apagado de mi laptop DV6921la fuera muy lento, casi interminable si esta se encontraba desconectada de la corriente.
Voy a documentar paso a paso el procedimiento para corregir esta tabla con openSuSe 11.1 a 32 bits, funciona también a 64 e incluso en ubuntu, señalare las diferencias de esta última.
Lo primero será obtener la DSDT actual (linea 1) y desensamblarlo (linea 2) lo que nos dará como resultado un archivo :
hackob@itzpapalotl:~/temp/dsdt> sudo cat /proc/acpi/dsdt > dsdt.dat hackob@itzpapalotl:~/temp/dsdt> iasl -d dsdt.dat Intel ACPI Component Architecture AML Disassembler version 20081031 [Dec 3 2008] Copyright (C) 2000 - 2008 Intel Corporation Supports ACPI Specification Revision 3.0a Loading Acpi table from file dsdt.dat Acpi table [DSDT] successfully installed and loaded Pass 1 parse of [DSDT] Pass 2 parse of [DSDT] Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions) .............................................................................................................. .............................................................................................................. .............................................................................................................. .............................................................................................................. .......................................... Parsing completed Disassembly completed, written to "dsdt.dsl" hackob@itzpapalotl:~/temp/dsdt>
Después de haberlo desensamblado inicia lo realmente interesante, ya que para encontrar los errores en nuestra DSDT en necesario compilarlo :
hackob@itzpapalotl:~/temp/dsdt> iasl -tc dsdt.dsl Intel ACPI Component Architecture ASL Optimizing Compiler version 20081031 [Dec 3 2008] Copyright (C) 2000 - 2008 Intel Corporation Supports ACPI Specification Revision 3.0a dsdt.dsl 104: Method (\_WAK, 1, NotSerialized) Warning 1080 - ^ Reserved method must return a value (_WAK) dsdt.dsl 3540: Method (_Q16, 0, NotSerialized) Warning 1087 - ^ Not all control paths return a value (_Q16) dsdt.dsl 7714: Method (_HOT, 0, Serialized) Warning 1087 - ^ Not all control paths return a value (_HOT) dsdt.dsl 7714: Method (_HOT, 0, Serialized) Warning 1080 - ^ Reserved method must return a value (_HOT) dsdt.dsl 7716: Zero Error 4095 - ^ syntax error, unexpected PARSEOP_ZERO dsdt.dsl 7723: Method (_CRT, 0, Serialized) Warning 1087 - ^ Not all control paths return a value (_CRT) dsdt.dsl 7723: Method (_CRT, 0, Serialized) Warning 1080 - ^ Reserved method must return a value (_CRT) dsdt.dsl 7725: Zero Error 4095 - ^ syntax error, unexpected PARSEOP_ZERO ASL Input: dsdt.dsl - 8137 lines, 278758 bytes, 4173 keywords Compilation complete. 2 Errors, 6 Warnings, 0 Remarks, 1127 Optimizations hackob@itzpapalotl:~/temp/dsdt>
Entre la línea 8 y la 30 se muestran los problemas y advertencias que encontró la compilación del archivo dsdt.dsl ahora vamos a infocarnos en solucionar 1 a 1. Para esto, indicaré el error o advertencia, el código original y como debe quedar. la edición del archivo dsdt.dsl puede ser con su editor favorito, las líneas indicadas a la derecha corresponden al número aproximado de línea del archivo:
Method (\_WAK, 1, NotSerialized)
Original:
Store (0x0D, \_SB.PCI0.SMIS) Store (0x86, \_SB.PCI0.SMIC) Store (\_SB.PCI0.SMIS, CTK3) Release (\_SB.PCI0.PSMX) } } Method (Z000, 0, NotSerialized) {
Corregido:
Store (0x0D, \_SB.PCI0.SMIS) Store (0x86, \_SB.PCI0.SMIC) Store (\_SB.PCI0.SMIS, CTK3) Release (\_SB.PCI0.PSMX) } Return(Package(0x02){0x00, 0x00}) } Method (Z000, 0, NotSerialized) {
Method (_Q16, 0, NotSerialized)
Original:
Store (0x04, \_SB.WMID.Z013) Store (0x00, \_SB.WMID.Z014) Notify (\_SB.WMID, 0x80) } Method (_Q80, 0, NotSerialized) {
Corregido:
Store (0x04, \_SB.WMID.Z013) Store (0x00, \_SB.WMID.Z014) Notify (\_SB.WMID, 0x80) Return (0x00) } Method (_Q80, 0, NotSerialized) {
Method (_HOT, 0, Serialized) y Method (_CRT, 0, Serialized)
Original:
Method (_HOT, 0, Serialized) { Zero If (LEqual (OSYS, 0x07D6)) { Return (Add (0x0AAC, Multiply (TPC, 0x0A))) } } Method (_CRT, 0, Serialized) { Zero If (LLess (OSYS, 0x07D6)) { Return (Add (0x0AAC, Multiply (TPC, 0x0A))) } }
Corregido:
Method (_HOT, 0, Serialized) { // Zero // If (LEqual (OSYS, 0x07D6)) // { Return (Add (0x0AAC, Multiply (TPC, 0x0A))) // } // } Method (_CRT, 0, Serialized) { // Zero // If (LLess (OSYS, 0x07D6)) // { Return (Add (0x0AAC, Multiply (TPC, 0x0A))) // } }
Una vez corregidos los problemas y advertencias compilamos de nuevo nuestro archivo dsdt.dsl y listo, al parecer todo está correcto:
hackob@itzpapalotl:~/temp/dsdt> iasl -tc dsdt.dsl Intel ACPI Component Architecture ASL Optimizing Compiler version 20081031 [Dec 3 2008] Copyright (C) 2000 - 2008 Intel Corporation Supports ACPI Specification Revision 3.0a ASL Input: dsdt.dsl - 8140 lines, 278814 bytes, 4171 keywords AML Output: dsdt.aml - 31924 bytes, 821 named objects, 3350 executable opcodes Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 1130 Optimizations hackob@itzpapalotl:~/temp/dsdt>
Ahora solo resta hacer la instalación para que la tabla sea tomada el próximo reinicio, para esto es necesario tener instalado el paquete kernel-source y seguir los siguientes pasos :
:~/temp/dsdt> cd /usr/src/linux/Documentation/acpi/ :/usr/src/linux/Documentation/acpi> sudo chmod +x initramfs-add-dsdt.sh :/usr/src/linux/Documentation/acpi> sudo ./initramfs-add-dsdt.sh /boot/initrd-`uname -r` ~/temp/dsdt/dsdt.aml :/usr/src/linux/Documentation/acpi>
En la línea 3 se debe indicar la ruta en donde tienes el archivo dsdt.aml, comento que deliberadamente omití la cadena “hackob@itzpapalotl” del prompt del shell para mejorar la lectura. Una vez terminado esto nos queda reiniciar.
Después de reiniciar y para ver si los cambios fueron efectivos debemos buscar las lineas que contengan ACPI en los mensajes del kernel de la siguiente forma:
hackob@itzpapalotl:~> dmesg | grep ACPI ... Using ACPI (MADT) for SMP configuration information ACPI: Core revision 20080609 ACPI: Checking initramfs for custom DSDT ACPI: Found DSDT in DSDT.aml. ACPI: Override [DSDT- MCP67], this is unsafe: tainting kernel ACPI: Table DSDT replaced by host OS ACPI: DSDT 00000000, 7CB4 (r1 NVIDIA MCP67 6040000 INTL 20081031) ACPI: DSDT override uses original SSDTs unless "acpi_no_auto_ssdt" tbxface-0596 [00] tb_load_namespace : ACPI Tables successfully acquired evxfevnt-0091 [00] enable : Transition to ACPI mode successful ACPI: bus type pci registered ACPI: EC: Look up EC in DSDT ...
Si encontramos la línea “ACPI: Found DSDT in DSDT.aml.” quiere decir que la nueva DSDT fue instalada con éxito, ahora sólo basta que pruebes reiniciando o apagando tu máquina sin que este conectada.
Para aquellos no quieran seguir todo el procedimiento aquí les dejo el archivo dsdt.aml que me resultó a mi pero que les debe funcionar sin problemas, sólo descarguenlo y sigan los pasos de instalación.
Nota para usuarios de ubuntu: Para instalar el archivo dsdt.aml en su sistema basta con ejecutar el comando:
hackob@itzpapalotl:~> sudo cp ~/temp/dsdt/dsdt.aml /etc/initramfs-tools/DSDT.aml hackob@itzpapalotl:~> sudo update-initramfs -u -k `uname -r`
Para buscadores:
Linux y HP Pavilion DV6921la
No inicia a menos que se mantenga presionado el botón de poder
Inicio y apagado muy lento si ni esta conectado a la corriente

gracias
me sacaste d un apuro muy grande
q bno q ai gente inteligente en ste mundo
bno muchas gracias……xD
sigue asi
ayadaras a mucha gente
bno otra vez gracias….
bye