Jump to content

Sleep fix para ICH9


oldnapalm
 Share

6 posts in this topic

Recommended Posts

Tópico original: http://www.insanelymac.com/forum/index.php?showtopic=168014

 

Em algumas placas com chip ICH9/R os dispositivos USB não são reconhecidos, desligando o gerenciamento de energia. Para saber se é o seu caso, verifique a propriedade "Errata" dos AppleUSBUHCI no IORegistryExplorer, se o valor for 0x0 provavelmente o driver não reconheceu o dispositivo.

 

O fix consiste em fazer um patch no DSDT alterando os device IDs dos dispositivos UHCI, para que o sistema reconheça como um ICH10R.

 

Liste os dispositivos com o comando lspci -nn | grep UHCI

00:1d.0 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 [8086:2934] (rev 02)
00:1d.1 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 [8086:2935] (rev 02)
00:1d.2 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 [8086:2936] (rev 02)
00:1a.0 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 [8086:2937] (rev 02)
00:1a.1 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 [8086:2938] (rev 02)
00:1a.2 USB Controller [0c03]: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 [8086:2939] (rev 02)

 

Então procure pelos devices USB com esses endereços no seu DSDT e adicione o método _DSM em cada um deles, com os device IDs conforme abaixo

            Device (USB0)
           {
               Name (_ADR, 0x001D0000)

               ... código original

               Method (_DSM, 4, NotSerialized)
               {
                   Store (Package (0x02)
                       {
                           "device-id", 
                           Buffer (0x04)
                           {
                               0x34, 0x3A, 0x00, 0x00
                           }
                       }, Local0)
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                   Return (Local0)
               }
           }

           Device (USB1)
           {
               Name (_ADR, 0x001D0001)

               ... código original

               Method (_DSM, 4, NotSerialized)
               {
                   Store (Package (0x02)
                       {
                           "device-id", 
                           Buffer (0x04)
                           {
                               0x35, 0x3A, 0x00, 0x00
                           }
                       }, Local0)
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                   Return (Local0)
               }
           }

           Device (USB2)
           {
               Name (_ADR, 0x001D0002)

               ... código original

               Method (_DSM, 4, NotSerialized)
               {
                   Store (Package (0x02)
                       {
                           "device-id", 
                           Buffer (0x04)
                           {
                               0x36, 0x3A, 0x00, 0x00
                           }
                       }, Local0)
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                   Return (Local0)
               }
           }

           Device (USB4)
           {
               Name (_ADR, 0x001A0000)

               ... código original

               Method (_DSM, 4, NotSerialized)
               {
                   Store (Package (0x02)
                       {
                           "device-id", 
                           Buffer (0x04)
                           {
                               0x37, 0x3A, 0x00, 0x00
                           }
                       }, Local0)
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                   Return (Local0)
               }
           }

           Device (USB5)
           {
               Name (_ADR, 0x001A0001)

               ... código original

               Method (_DSM, 4, NotSerialized)
               {
                   Store (Package (0x02)
                       {
                           "device-id", 
                           Buffer (0x04)
                           {
                               0x38, 0x3A, 0x00, 0x00
                           }
                       }, Local0)
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                   Return (Local0)
               }
           }

           Device (USB6)
           {
               Name (_ADR, 0x001A0002)

               ... código original

               Method (_DSM, 4, NotSerialized)
               {
                   Store (Package (0x02)
                       {
                           "device-id", 
                           Buffer (0x04)
                           {
                               0x39, 0x3A, 0x00, 0x00
                           }
                       }, Local0)
                   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                   Return (Local0)
               }
           }

Veja que nem todos os devices USB foram modificados, mas estes 6 foram suficientes para o sleep funcionar.

 

Caso ainda não tenha, adicione o método DTGP

    Method (DTGP, 5, NotSerialized)
   {
       If (LEqual (Arg0, Buffer (0x10)
               {
                   /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
                   /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
               }))
       {
           If (LEqual (Arg1, One))
           {
               If (LEqual (Arg2, Zero))
               {
                   Store (Buffer (One)
                       {
                           0x03
                       }, Arg4)
                   Return (One)
               }

               If (LEqual (Arg2, One))
               {
                   Return (One)
               }
           }
       }

       Store (Buffer (One)
           {
               0x00
           }, Arg4)
       Return (Zero)
   }

Link to comment
Share on other sites

  • 3 months later...

Desculpe a falta de conhecimento, mas como eu executo o comando lspci -nn | grep UHCI?

E, devo substituir no dsdt o "device-id" pelo numero listado, certo? Qual o formato certo de coloca-los? tipo, "[8086:2934]" com ou sem aspas, com ou sem colchetes... sou iniciante mesmo, então tenho essas curiosidades e dificuldade.... obrigado.

Link to comment
Share on other sites

Você precisa instalar o comando lspci, ele não faz parte do sistema. Mas na verdade esta parte é apenas para compreensão do que se está fazendo, não é realmente necessária. Se você tem certeza de que o chipset da placa mãe é ICH9, pode simplesmente aplicar o patch usando o DSDT Editor que certamente vai funcionar.

 

1) DSL - Extract from system

2) Patch - Load from file - selecione "ICH9 USB sleep.txt"

3) Apply

4) AML - Compile

5) AML - Save to file - dsdt.aml

6) Copie o dsdt.aml para /Extra

Link to comment
Share on other sites

Não tenho certeza de que meu acer D250 seja ICH9, sabe me diser?

Sei que minha gigabyte é ICH7, posso testar nela?

Como instalo esse comando lspci? Pelo que sei ele lista todo o hardware e não só a usb certo? isso me ajudaria com a wifi do D250...

Obrigado...

Link to comment
Share on other sites

 Share

×
×
  • Create New...