Jump to content

SpeedStep vanilla


  • Please log in to reply
45 replies to this topic

#1
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
Tópico original: http://www.insanelym...howtopic=181631

Recomendo a leitura do tópico Dicas sobre gerenciamento de energia
http://www.insanelym...howtopic=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).

Posted Image

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.

#2
Carlos Paixao

Carlos Paixao

    Getting Oracle

  • Members
  • PipPipPipPip
  • 191 posts
  • Gender:Male
  • Location:Sete Lagoas, MG - BRASIL
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??

#3
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
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.insanelym...howtopic=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.insanelym...howtopic=213576

#4
Carlos Paixao

Carlos Paixao

    Getting Oracle

  • Members
  • PipPipPipPip
  • 191 posts
  • Gender:Male
  • Location:Sete Lagoas, MG - BRASIL

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.insanelym...howtopic=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.insanelym...howtopic=213576


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

#5
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil

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

O "specified upper limit" está correto?

#6
jwagnervaz

jwagnervaz

    InsanelyMac Protégé

  • Members
  • Pip
  • 20 posts
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?

#7
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
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.insanelym...howtopic=215767

#8
MTavares

MTavares

    InsanelyMac Protégé

  • Members
  • PipPip
  • 93 posts
  • Gender:Male

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?

#9
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil

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.

#10
MTavares

MTavares

    InsanelyMac Protégé

  • Members
  • PipPip
  • 93 posts
  • Gender:Male
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.

#11
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
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.

#12
MTavares

MTavares

    InsanelyMac Protégé

  • Members
  • PipPip
  • 93 posts
  • Gender:Male
Só mais uma dúvida:
A mudança manual eu posso fazer pelo TextEditor mesmo?
Depois posto os resultados.

#13
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
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.

#14
MTavares

MTavares

    InsanelyMac Protégé

  • Members
  • PipPip
  • 93 posts
  • Gender:Male
Bicho, eu fiz a instalação usando o Empire EFI, portanto não tenho o smbios.plist na pasta Extra.
E agora?


#15
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
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>


#16
MTavares

MTavares

    InsanelyMac Protégé

  • Members
  • PipPip
  • 93 posts
  • Gender:Male
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...

#17
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
Faz o boot com -s e remove o arquivo
mount -uw /
rm /Extra/smbios.plist


#18
MTavares

MTavares

    InsanelyMac Protégé

  • Members
  • PipPip
  • 93 posts
  • Gender:Male
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...

#19
oldnapalm

oldnapalm

    InsanelyMac V.I.P.

  • Moderators
  • 6,836 posts
  • Gender:Male
  • Location:Brazil
Qual o seu Acer? Antes do 10.6.4 a temperatura estava normal? Você usava VoodooPowerMini?

#20
MTavares

MTavares

    InsanelyMac Protégé

  • Members
  • PipPip
  • 93 posts
  • Gender:Male
É 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?





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy