Jump to content

Gerenciamento de energia para Sandy Bridge/Ivy Bridge/Haswell CPU


Pimentel
 Share

272 posts in this topic

Recommended Posts

Olá Pessoal

 

GUIA ATUALIZADO - Foi adicionado patch XCPM para 10.10

Antes de tudo é muito bom que tenhamos uma versão atualizada do Chameleon, então por favor pegue essa versão mais atualizada bem aqui no tópico oficial: http://www.insanelymac.com/forum/files/download/59-chameleon-22-svn/

Desde 10.7.4 para os CPUs SandyBridger e IvyBridger os P e C States - que são responsáveis pelo bom funcionamento de energia - não são mais fornecidos pelo Chameleon, ou seja, somente ativar GeneratePStates e GenerateCStates não adiatam mais...

Uma saída rápida é a utilização da kext NullCPUPowermanagement, mas eu não recomendo a utilização continua dessa kext, pois ela desabilita a kext AppleIntelCPUPowermanagement que é pelo gerenciamento de energia.

A solução mais viável e recomendada que lhe proporcionará um gerenciamento de energia bom, é a criação de uma SSDT que irá contem todos os P-States e C-States.

Passo-a-Passo

Criando a SSDT

Crie sua SSDT baseada no script do Pike R. Alpha
Rode no terminal esses comandos

curl -o ~/ssdtPRGen.sh https://raw.githubusercontent.com/Piker-Alpha/ssdtPRGen.sh/master/ssdtPRGen.sh
chmod +x ssdtPRGen.sh
./ssdtPRGen.sh

Após roda-lo você precisa colocar a Frequência Máxima e o Máximo TDP do seu CPU... veja essas infos sobre seu CPU aqui: http://ark.intel.com/
Esse é um exemplo de um i7 2600 que possui 3800Mhz(3,8Ghz) de frequencia maxima e 95 de TDP

sudo ./ssdtPRGen.sh 3800 95

Coloque a SSDT na pasta Extra e renomeie ssdt_pr para SSDT

 

Obs: Alguns CPUs já são auto-detectados pelo script, simplesmente o script já detecta a frequência máxima e o TDP, então se simplesmente após rodar o primeiro comando você for avisado para salvar a SSDT na pasta Extra(não pedindo para digitar sua max frequenc. e TDP como o guia manda), não se preocupe com isso, apenas confirme, pois o script já detectou tudo e criou sua SSDT e no momento já está pedindo para salvar o arquivo.

Patch na AppleIntelCPUPowermanagement

Nas mobos mais antigas é necessário patchear a kext AICPUPM para possibilitar a gravação na Bios, caso contrário você receberá um Kernel Panic por não poder gravar na Bios...

Faça o download do patch:AICPUPMpatch

Rode no terminal

cd ~/Downloads/AICPMPatch

Apenas encontre e liste...

sudo perl AICPMPatch.pl /System/Library/Extensions/AppleIntelCPUPowerManagement.kext/Contents/MacOS/AppleIntelCPUPowerManagement

Depois dê patch no wrmsr para possibilitar a gravação na Bios

sudo perl AICPMPatch.pl /System/Library/Extensions/AppleIntelCPUPowerManagement.kext/Contents/MacOS/AppleIntelCPUPowerManagement --patch

Após isso é necessário atualizar o cache

sudo touch /System/Library/Extensions

Kernel Patch para Haswell CPU(Kernel XCPM)

 

Desde a versão 10.8.5 um novo kernel foi implementado no OSX, ele se chamada XNU kernel(Xnu Cpu Power Management(xcpm))

 

Esse kernel tem o gerenciamento de energia movido para dentro dele, no passado usávamos a kext AppleIntelCPUPowermanagement para o controle do gerenciamento de energia e algumas Bios eram travadas, ou seja, não era permitido gravar informações nela, por isso foi criado o patch para a kext AICPUPM para solucionar esse problema(veja acima como patchear a kext AICPUPM

 

Mas com o gerenciamento movido para dentro do kernel(XNU kernel)a kext AICPUPM não é mais carregada e por isso o mesmo erro que estávamos tendo no passado com a kext AICPUPM(Kernel Panic)estamos tendo agora com o XNU kernel em alguns modelos de CPU haswell(principalmente modelos portáteis, alguns modelos Desktop não precisam de patch)

 

Para solucionar esse problema é necessário aplicar um patch no kernel.

 

Para 10.10 você precisa abrir o terminal e digitar:

cd /Volumes/Nome do seu HDD/System/Library/Kernels/

Note que em 10.10 o diretório do kernel foi alterado. Copie esse código perl, isso é para a versão 10.10, coloque linha por linha

sudo perl -pi -e 's|\xe2\x00\x00\x00\x02\x00\x00\x00|\x00\x00\x00\x00\x02\x00\x00\x00|g' kernel
sudo perl -pi -e 's|\xe2\x00\x00\x00\x4c\x00\x00\x00|\x00\x00\x00\x00\x4c\x00\x00\x00|g' kernel
sudo perl -pi -e 's|\xe2\x00\x00\x00\x90\x01\x00\x00|\x00\x00\x00\x00\x90\x01\x00\x00|g' kernel

Para 10.9.x e 10.8.5 você precisa rodar esse comando no terminal:

cd /Volumes/Nome do seu HDD/

Agora, copie esse código perl se você usa as versão 10.9.x

sudo perl -pi -e 's|\x74\x6c(\x48\x83\xc7\x28\x90\x8b\x05..\x5e\x00\x85\x47\xdc)\x74\x54(\x8b\x4f\xd8\x45\x85\xc0\x74\x08\x44\x39\xc1\x44\x89\xc1)\x75\x44(\x0f\x32\x89\xc0\x48\xc1\xe2\x20\x48\x09\xc2\x48\x89\x57\xf8\x48\x8b\x47\xe8\x48\x85\xc0\x74\x06\x48\xf7\xd0\x48\x21\xc2\x48\x0b\x57\xf0\x49\x89\xd1\x49\xc1\xe9\x20\x89\xd0\x8b\x4f\xd8\x4c\x89\xca)(\x0f\x30\x8b\x4f\xd8\x0f\x32\x89\xc0\x48\xc1\xe2\x20\x48\x09\xc2\x48\x89\x17\x48\x83\xc7\x30\xff\xce)\x75\x99(\x5d\xc3)\x90{7}|\x74\x73${1}\x74\x5b${2}\x75\x4b${3}\x66\x81\xf9\xe2\x00\x74\x02${4}\x75\x92${5}|g' mach_kernel

ou esse outro código perl se você usa a versão 10.8.5

sudo perl -pi -e 's|\x74\x69(\x48\x83\xc7\x28\x90\x8b\x05\xfe\xce\x5f\x00\x85\x47\xdc)\x74\x51(\x8b\x4f\xd8\x45\x85\xc0\x74\x05\x44\x39\xc1)\x75\x44(\x0f\x32\x89\xc0\x48\xc1\xe2\x20\x48\x09\xc2\x48\x89\x57\xf8\x48\x8b\x47\xe8\x48\x85\xc0\x74\x06\x48\xf7\xd0\x48\x21\xc2\x48\x0b\x57\xf0\x49\x89\xd1\x49\xc1\xe9\x20\x89\xd0\x8b\x4f\xd8\x4c\x89\xca)(\x0f\x30\x8b\x4f\xd8\x0f\x32\x89\xc0\x48\xc1\xe2\x20\x48\x09\xc2\x48\x89\x17\x48\x83\xc7\x30\xff\xce)\x75\x9c(\x5d\xc3)\x90{7}(\x90{3})|\x74\x70${1}\x74\x58${2}\x75\x4b${3}\x66\x81\xf9\xe2\x00\x74\x02${4}\x75\x95${5}${6}|g' mach_kernel

Por último atualize o cache

sudo touch /System/Library/Extensions

Pronto! Kernel patcheado e o XCPM está trabalhando perfeitamente em seu CPU haswell

 

OBS1: XCPM só trabalha nos CPUs Ivy Bridger e Haswell, sendo que, os CPUs Ivy Bridger utilizam por padrão o gerenciamento de energia dado pela kext AICPUPM, para usar o gerenciamento de energia dado pelo kernel XCPM é necessário ativar essa flag(Chameleon)/argumento(Clover):

-xcpm

Os CPUs Haswell utilizam o gerenciamento XCPM por padrão e não mudam. O gerenciamento XCPM não suporta os CPUs Sandy Bridger, então quem usa SB pode ficar tranquilo acerca disso.

OBS2: Mesmo patcheando o kernel XCPM, você irá precisar patchear a kext AICPUPM, caso a sua BIOS seja trancada para gravação.

OBS3: Caso você não tenha nenhum problema com KP, não é necessário patchear o kernel, mas, em alguns casos, patchear o kernel ajudou em adicionar alguns states de energia.

 

OBS4: O Clover bootloader já tem o patch embutido, você só precisa editar o config.plist para habilitar o patch

<key>KernelAndKextPatches</key>
<dict>
        <key>KernelPm</key>
        <true/>
</dict>

Então, se você habilitar isso no Clover não é necessario patchear o kernel, porque o Clover irá fazer isso para você :)

 

Ajustes finais

Para fazer com que o Chameleon reconheça a sua SSDT, habilite DropSSDT no org.chameleon

<key>DropSSDT</key>
<string>Yes</string>

Não instale a NullCPUPM e não habilite P e C States no org.chameleon...

 

Não se esqueçam de futuramente criar uma DSDT para auxiliar no gerenciamento de energia

 

OBS: Para quem está com dificuldades com gerenciamento de energia... dê uma olhada para ver se as kexts: X86PlatformPlugin, ACPI_SMC_PlatformPlugin, AppleLPC estão carregadas, rode kextstat no terminal para ver...

Boa sorte para todos que tentarem este guia, eu somente juntei tudo em um único tutorial para facilitar a compreensão sobre gerenciamento de energia em Sandy e Ivy Bridger, mas  todos os créditos vão para os respectivos donos das ferramentas maravilhosas que possibilitam o gerenciamento de energia em nossas CPUs

 

Créditos: Pike R. Alpha

                flAked

                RevoGirl

                ReHabMan: http://www.insanelymac.com/forum/topic/302376-guide-patching-the-kernel-for-haswell-cpus-xcpm-early-reboot/

Edited by PimentelX86
Foi adicionado patch XCPM para 10.10
  • Like 18
Link to comment
Share on other sites

Olá

Eu não sou utilizador do Clover, mas creio que para CPUs Sandy e Ivy Bridger O Clover já gere automaticamente os P e C States...

Creio eu que não é necessário criar SSDT e fazer todo esse processo que eu realizei ai, pois o Chameleon não gera mais isso automaticamente por isso com ele é necessário fazer esse processo...

Somente deixe P e C States ativados no config.plist e veja os resultados... creio já ser o suficiente.

Uma outra coisa que eu acho muito bom de se fazer é aplicar o patch na AICPUPM, mesmo que você não vá fazer esse processo... você pode injetar esse processo através do config.plist deixando a opçõa AsusAICPUPM ativada...
 

  • Like 1
Link to comment
Share on other sites

Olá

 

Eu não sou utilizador do Clover, mas creio que para CPUs Sandy e Ivy Bridger O Clover já gere automaticamente os P e C States...

 

Creio eu que não é necessário criar SSDT e fazer todo esse processo que eu realizei ai, pois o Chameleon não gera mais isso automaticamente por isso com ele é necessário fazer esse processo...

 

Somente deixe P e C States ativados no config.plist e veja os resultados... creio já ser o suficiente.

 

Uma outra coisa que eu acho muito bom de se fazer é aplicar o patch na AICPUPM, mesmo que você não vá fazer esse processo... você pode injetar esse processo através do config.plist deixando a opçõa AsusAICPUPM ativada...

 

Sim, o clover ja gera PeC states para ambos os CPUS sandy e ivy.

mas mesmo assim ainda vc pode usar seu SSDT Olhe aqui: http://clover-wiki.zetam.org/Configuration/ACPI#SSDT

Link to comment
Share on other sites

Olá

Valeu por confirmar Mirone...

Eu estava usando Clover, mas estava tendo muito problemas com P-States(no meu caso somente ativar P e C States não funcionava... tinha que colocar essa SSDT gerada pelo script)no meu hack e precisava de um hack funcional para logo, então voltei para o Chameleon... não esqueço do suporte que vocês me deram acerca do Clover. E ainda vou testar o Clover outra hora.

Link to comment
Share on other sites

Olá

 

Muito bom JorgeMax, Allan possui alguns tutos bem interessantes sobre Clover... :)

 

Quando tiver tempo e outro HDD, vou testar o Clover e ver o que acontece ao tentar gerenciamento de energia com ele gerado pelo Script...

Link to comment
Share on other sites

  • 3 weeks later...

Olá

Obrigado Allan.

Claro que pode... isso não interfere em nada, pois quando o gerenciamento de energia for passado para o kernel XNU a kext AICPUPM não será mais carregada, mas mesmo assim, como eu já falei é necessário que ela seja patcheada(caso sua Bios seja trancada), mesmo que não vá usa-la, é necessário patchear....

O patch kernel não é necessário em CPUs Ivy somente em Haswell...

Boa sorte!

Link to comment
Share on other sites

Olá

 

Obrigado Allan.

 

Claro que pode... isso não interfere em nada, pois quando o gerenciamento de energia for passado para o kernel XNU a kext AICPUPM não será mais carregada, mas mesmo assim, como eu já falei é necessário que ela seja patcheada(caso sua Bios seja trancada), mesmo que não vá usa-la, é necessário patchear....

 

O patch kernel não é necessário em CPUs Ivy somente em Haswell...

 

Boa sorte!

 

Perfeito.

 

Acabei de testar aqui, e o sistema não subiu, mas o gerenciamento de energia está perfeito, com todas as kexts carregadas.

 

Obrigado Pimentel.  ;)

  • Like 1
Link to comment
Share on other sites

Olá

 

Como assim o sistema não subiu? Mas ficou tudo ok depois disso? Como fez para subir de novo?

 

Mais uma vez, de nada.

 

Outra coisa somente: Não cite(quote) um texto por inteiro, isso deixa uma poluição visual no fórum... cite apenas o que interessa no momento. Agradeço a compreensão :)

Link to comment
Share on other sites

Bem quando inseri o código no config.plist e reiniciei a tela de boot apenas aparece a maça, e volta pra tela do BIOS.

 

E como fiz para subir normalmente, eu fui no menu de opções de boot do Clover, e retirei o -xcpm da seção "Arguments", isso é temporário, pois não retira permanentemente, pois no sistema tive de tirar manualmente depois.

 

E o sistema ficou tudo ok, estava apenas testando.

 

Sobre o "quote" tudo bem, quando citado o texto todo realmente fica poluído.

 

Vlw

  • Like 1
Link to comment
Share on other sites

Olá

 

Pelo menos o teste foi muito bom... :)

 

O que eu realmente quero é que esse guia seja útil para os usuários do fórum.

 

Depois você me falar mais acerca daquela sua sugestão... Estou de "ouvidos" bem abertos para entender. :)

Link to comment
Share on other sites

Amigos, é necessário mesmo estas kexts serem carregadas: "ACPI_SMC_PlatformPluginAppleLPC"?

Pois só achei a kext "X86PlatformPlugin" carregada. Vejam:

Jorge-Kexts Carregadas.rtf

 

O meu sistema está funcionando, sem nenhum erro relatado até o momento. E em relação ao "patch" na "AppleIntelCPUPowermanagement", eu não apliquei e nem adicionei o "-xcpm" no "config.plist" do Clover.

 

Uso o processador da "assinatura". Criei somente o "SSDT" e adicionei o TDP e a freqüência máxima do mesmo. Minha placa-mãe utiliza BIOS UEFI com o Clover instalado neste modo.

Mas não vejo carregada a kext "AppleLPC".

 

Link to comment
Share on other sites

Então amigo Jorge, para ter o gerenciamento completo, você tem que ter estas kexts carregadas.

 

Já vi que algumas placas Gigabyte realmente não é preciso aplicar o patch na AICPM, mas para carregar a LPC é preciso que você procure o device na DSDT e aplique o patch nela.

 

No config.plist do Clover, a opção AsusAICPUPM está marcada?

 

Sem falar que para carregar estas kexts, você precisa aplicar alguns patchs na DSDT.

Como:

*DTGP

*New_HPET

*IRQs

*RTC

Estes patchs você encontra aqui: http://olarila.com/forum/patches.php

 

Mas tenha certeza do que vai aplicar, qualquer coisa estamos ai.

  • Like 2
Link to comment
Share on other sites

Olá

 

Na realidade a kext ACPI_SMC_PlatformPlugin não é tão necessária assim, somente em alguns casos onde existe algum erro causado pela falta dela(geralmente é um KP)é que ela precisa ser carregada. Se não está tendo problema nenhum então fica gelo em relação a isso. Mas a X86PlatformPlugin é obrigatoria para Ivy e Haswell

 

A kext AppleLPC precisa ser carregada ou o sleep/wake não irão funcionar bem...

 

A sua mobo é atual e é UEFI, como eu mencionei, algumas mobos atuais não precisam do patch no AICPUPM, pois tem a Bios destravada... se não patcheou, mas não teve KP, então deixa sem patch mesmo...

 

Não confunda as coisas... sua CPU é Ivy então o gerenciamento pelo XCPM kernel é opcional... se está tudo ocorrendo bem com o gerenciamento dado pela AICPUPM então não há necessidades de trocar para o XCPM

Eu não sei se todos esses "patchs" que você mencionou estão aplicados no "DSDT".

 

 

Como não sabe? Você é quem patcheou... não podemos advinha se patcheou ou não... inclua nesse DSDT o patch LPC(para carregar a kext AppleLPC)

Aqui um guia sobre DSDT: http://olarila.com/forum/viewtopic.php?f=7&t=646

  • Like 1
Link to comment
Share on other sites

Olá

 

Então o melhor caminho é deixar quieto... eu por exemplo não entendo muito bem sobre DSDT...

E quem fazia esses patches na sua maioria essa o Mald0n, ele atualmente simplesmente deixou de fazer, então... fica por nossa conta agora...

 

Procura pelo google se encontra alguma solução... e fato o importante no gerenciamento de energia é ter todos os states trabalhando... se já tem isso, então fica tranquilo...

 

Um Abraço.

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...