Jump to content

SpeedStep vanilla


oldnapalm
 Share

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
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??

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

  • 2 weeks later...

Não sei se entendi, mas isso seria um tutorial de como fazer o SO, reconhecer os Cores do processador, e gerenciar o fator de multiplicação tal qual o Windows faz?

____

Se for isso como fazer meu Leopard, 10.5.8 reconhecer corretamente meu Quad core Q8400?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Vou tentar o Lizard.

É que eu atualizei meu Acer pro Snow 10.6.4 e voltei a ter problemas com temperatura (entre 55º e 58ºC ocioso) e vou tentar usar o AppleIntelCPUPowerManagement.kext nativo pra ver se baixa.

Link to comment
Share on other sites

Para notebook use "MacBookPro5,1", é o que eu uso no meu Acer, veja no link da assinatura.

 

Os laptops Acer normalmente não precisam mudança no DSDT para funcionar o SpeedStep nativo, basta acertar o model identifier.

Link to comment
Share on other sites

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>

Link to comment
Share on other sites

Criei e joguei na pasta Extra, mas agora não tá dando boot.

Quer dizer ta dando boot porque eu vejo ele na rede e acesso os arquivos, mas a tela fica no startup (reloginho rodando) e não aparece nada.

E não tá dando entrando na BIOS pra dar boot pelo CD...

Link to comment
Share on other sites

É 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?

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

 Share

×
×
  • Create New...