Jump to content
46 posts in this topic

Recommended Posts

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

 

Recomendo a leitura do tópico Dicas sobre gerenciamento de energia

http://www.insanelymac.com/forum/index.php?showtopic=213576

 

Para que a kext AppleIntelCPUPowerManagement funcione corretamente, é necessário que sua BIOS tenha os objetos _CST (C States), _PSS (Performance Supported States) e _PSD (P-State Dependency) na tabela SSDT.

 

Certamente não é regra, mas nas poucas placas mãe que observei, percebi as seguintes coincidências:

					  | _CST | _PSS | _PSD | Primeiro CPU | ID do LPC compatível
----------------------+------+------+------+--------------+---------------------
ASUS P5* (BIOS AMI)   | não  | sim  | sim  | CPU1		 | sim
----------------------+------+------+------+--------------+---------------------
Gigabyte (BIOS AWARD) | não  | não  | não  | CPU0		 | não

 

Para confirmar quais métodos sua placa possui, você pode usar tentativa e erro, inserindo um objeto por vez na tabela DSDT e verificando se funciona, ou fazer o procedimento explicado abaixo, utilizando o Linux. Observe que não tem problema se adicionar um objeto na tabela DSDT que já exista na SSDT. Os P-States, por exemplo, em algumas placas ASUS já estão presentes, basta adicionar os C States para que o SpeedStep funcione. Porém funciona com apenas 2 P-States (o máximo e o mínimo), então se quiser pode adicionar mais P-States no DSDT.

 

O seguinte comando pode ser executado no Linux para extrair todas as tabelas ACPI

mkdir ACPI && dmesg | perl -we '$n=0; while (<>) { if (($t,$a,$l,$o) = (/^[^a-zA-Z]*ACPI: ([-._A-Z0-9]{4,4}) +([0-9A-F]{8,8}), ([0-9A-F]{4,4})+(?:\s*\(([^)]+))?/)) { $o && $o=~s/[^-._a-zA-Z0-9]+/-/g; ($cmd="acpidump -a $a -l $l > \"ACPI/${t}".($o?"_$o":"").".aml\""); print "Running command: \"$cmd\"\n"; system($cmd); ++$n; } } die("No match") unless $n;' && zip -r ACPI-Tables.zip ACPI

 

Se o SpeedStep não funciona nativamente, é provável que sua BIOS não tenha os C States, então você precisa adicionar os seguintes métodos:

 

No primeiro CPU (pode ser CPU0 ou CPU1, dependendo da BIOS)

Method (_CST, 0, NotSerialized)
{
   Return (Package (0x02)
   {
       One, 
       Package (0x04)
       {
           ResourceTemplate ()
           {
               Register (FFixedHW, 
                   0x01,               // Bit Width
                   0x02,               // Bit Offset
                   0x0000000000000000, // Address
                   0x01,               // Access Size
                   )
           }, 

           One, 
           0x9D, 
           0x03E8
       }
   })
}

 

No segundo CPU (pode ser CPU1 ou CPU2, dependendo da BIOS)

Method (_CST, 0, NotSerialized)
{
   Return (Package (0x04)
   {
       0x03, 
       Package (0x04)
       {
           ResourceTemplate ()
           {
               Register (FFixedHW, 
                   0x01,               // Bit Width
                   0x02,               // Bit Offset
                   0x0000000000000000, // Address
                   ,)
           }, 

           One, 
           Zero, 
           0x03E8
       }, 

       Package (0x04)
       {
           ResourceTemplate ()
           {
               Register (FFixedHW, 
                   0x08,               // Bit Width
                   0x00,               // Bit Offset
                   0x0000000000000414, // Address
                   ,)
           }, 

           0x02, 
           One, 
           0x01F4
       }, 

       Package (0x04)
       {
           ResourceTemplate ()
           {
               Register (FFixedHW, 
                   0x08,               // Bit Width
                   0x00,               // Bit Offset
                   0x0000000000000415, // Address
                   ,)
           }, 

           0x03, 
           0x55, 
           0xFA
       }
   })
}

 

Nos demais CPUs (se existirem) adicione uma referência ao _CST do segundo CPU (lembre que pode ser CPU1 ou CPU2, dependendo da BIOS)

Method (_CST, 0, NotSerialized)
{
Return (^^CPU1._CST ())
}

 

Adicione o método _PSD apenas no primeiro CPU

Method (_PSD, 0, NotSerialized)
{
Return (Package (0x05)
{
	0x05, 
	Zero, 
	Zero, 
	0xFC, 
	0x04
})
}

 

Nos demais CPUs, adicione uma referência ao _PSD do primeiro CPU

Method (_PSD, 0, NotSerialized)
{
Return (^^CPU0._PSD ())
}

 

Para o método _PSS você precisa saber o número de P-States do seu CPU e os valores de FID e VID de cada P-State. Para obter estes dados você pode usar o programa PStateChanger (link para download no tópico original, veja no início do post).

 

pstates.png

 

Adicione apenas no primeiro CPU

Method (_PSS, 0, NotSerialized)
{
   Return (Package (0x0N) // N = número de P-States
   {
       Package (0x06)
       {
           Zero, 
           Zero, 
           0x10, 
           0x10, 
           0xFFVV, // FF = FID, VV = VID
           Zero // primeiro P-State
       }, 

       Package (0x06)
       {
           Zero, 
           Zero, 
           0x10, 
           0x10, 
           0xFFVV, // FF = FID, VV = VID
           One // segundo P-State
       }, 

       Package (0x06)
       {
           Zero, 
           Zero, 
           0x10, 
           0x10, 
           0xFFVV, // FF = FID, VV = VID
           0x02 // terceiro P-State
       }, 

       Package (0x06)
       {
           Zero, 
           Zero, 
           0x10, 
           0x10, 
           0xFFVV, // FF = FID, VV = VID
           0x03 // quarto P-State
       }
   })
}

 

Nos demais CPUs, adicione uma referência ao _PSS do primeiro CPU

Method (_PSS, 0, NotSerialized)
{
Return (^^CPU0._PSS ())
}

 

Outra coisa necessária para que o gerenciamento de energia nativo funcione, é que a kext AppleLPC esteja carregada. Se a sua placa mãe tem um dispositivo LPC com ID compatível, a kext será carregada normalmente. Caso contrário, use o zhell's trick para mudar o ID.

 

Adicione no device LPC (endereço 0x001F0000)

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

 

Para finalizar, configure o SMproductname como MacPro3,1 ou MacPro4,1 de acordo com o CPU.

Link to comment
https://www.insanelymac.com/forum/topic/215659-speedstep-vanilla/
Share on other sites

  • 1 month later...

Old, a minha placa tb eh uma GA-P35-DS3, assim como a do MaLd0n. Eu nunca mexi com speedstep ou dsdt patching, entao eu sou um leigo nisso!

 

Depois que eu atualizei para o 10.6.3, meu sleep nao funciona mais. Na verdade, para mim nem faz falta (mas realmente nao funciona). Meu processador eh um E6750 com OC a 3.2 GHZ, e ele fica nativo a 19 celsius. O max que ele chega eh aos 40 graus, mesmo assim, quando esta full e renderizando no Final Cut.

 

Para consertar o Sleep vai ser preciso fazer DSDT patching??

As placas com ICH9 sempre tiveram problema no sleep, se na sua funcionava até o 10.6.2 imagino que usava uma IOUSBFamily modificada.

 

Pode consertar pelo DSDT, mas não com o SpeedStep, isso é outra coisa. O patch do sleep é esse

http://www.insanelymac.com/forum/index.php?showtopic=215591

 

Sobre as temperaturas que você citou, acho difícil um CPU funcionar a temperaturas tão baixas, provavelmente seu tjmax esteja errado. Leia a respeito nesse tópico

http://www.insanelymac.com/forum/index.php?showtopic=213576

As placas com ICH9 sempre tiveram problema no sleep, se na sua funcionava até o 10.6.2 imagino que usava uma IOUSBFamily modificada.

 

Pode consertar pelo DSDT, mas não com o SpeedStep, isso é outra coisa. O patch do sleep é esse

http://www.insanelymac.com/forum/index.php?showtopic=215591

 

Sobre as temperaturas que você citou, acho difícil um CPU funcionar a temperaturas tão baixas, provavelmente seu tjmax esteja errado. Leia a respeito nesse tópico

http://www.insanelymac.com/forum/index.php?showtopic=213576

 

O app que eu uso para monitorar as temperaturas é o Temperature Monitor...

  • 2 weeks later...

Não é para reconhecer os cores do CPU, isto ele já faz normalmente, o patch é para que ele gerencie os multiplicadores (frequência) e voltagem do CPU de acordo com a utilização. Como fazer é o que está explicado no primeiro post.

 

Os passos iniciais estão nesse outro tópico

http://www.insanelymac.com/forum/index.php?showtopic=215767

Cria um novo

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>SMproductname</key>
	<string>MacBookPro5,1</string>
</dict>
</plist>

É o 5720. Com as kexts ficava em torno de 60ºC ocioso.

Antes do 10.6.4 eu tava usando o 10.5.8 e rodava na casa dos 50º

 

Instalei a kext AppleACPIThermal do Kext.com mas não fez diferença.

Essa kext tem que ser instalada direto na pasta extensions ou tem que ficar embutida no ACPIPlataform?

Tem razão.

É do tópico Dicas sobre gerenciamento de energia... foi mal.

 

A disabler que eu to usando é essa:

Snow Leopard (NullCPUPowerManagement.kext): http://www.mediafire.com/?uwvnvztwtna

 

E a VoodooPowerMini é a do superhai.

 

To pensando em colocar o AppleACPIThermal dentro do AppleACPIPlataform, mas to com medo de dar zica... Ou então instalar a VoodooPowerACPI (essa kext é para substituir a AppleACPIPlataform?) o que você acha?

×
×
  • Create New...