Jump to content
InsanelyMac Forum
Sign in to follow this  
oldnapalm

SpeedStep vanilla

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.

Share this post


Link to post
Share on other sites
Advertisement

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

Share this post


Link to post
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

Share this post


Link to post
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...

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
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

Share this post


Link to post
Share on other sites
Você tentou mudar o model identifier? Eu sempre usei MacPro3,1.

 

Essa mudança no Model Identifier pode ser feita pelo Lizard ou tem que editar o DSDT?

Share this post


Link to post
Share on other sites
Essa mudança no Model Identifier pode ser feita pelo Lizard ou tem que editar o DSDT?

Ou pelo Lizard, ou editando o arquivo smbios.plist manualmente.

Share this post


Link to post
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.

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

Pode, mas como o usuário não tem permissão para gravar o arquivo, você precisa rodar o editor como root (sudo), ou copiar o arquivo para a mesa, modificar e depois substituir o da pasta Extra.

Share this post


Link to post
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>

Share this post


Link to post
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...

Share this post


Link to post
Share on other sites

Consegui dar boot com o smbios.plist na pasta Extra, identificou como MacBookPro 5,1 mas não tá funcionando restart, shutdown e nem a fan...

Share this post


Link to post
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?

Share this post


Link to post
Share on other sites

Sim, mas no 10.5.8 você usava o que para SpeedStep? VoodooPower ou vanilla?

 

Está usando alguma disabler (nullCPUPM) no 10.6.4?

Share this post


Link to post
Share on other sites

Tando 10.5.8 quanto no 10.6.4 eu usava o VoodooPowerMini e a Disabler que você disponibilizou no Topico do seu 5920

Share this post


Link to post
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?

Share this post


Link to post
Share on other sites

Você tentou deixar sem nenhuma destas kexts? Em dois Acers que eu instalei (5920 e 3690) o SpeedStep nativo funciona sem alterações no DSDT, basta usar o identificador MacBookPro5,1.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.



×