Nonaktifkan Nvidia Optimus Dengan SSDT Opencore
Sebagai pengguna hackintosh, laptop ini punya fitur yang dibenci, yaitu Nvidia Optimus. Nvidia Optimus ini gak bisa jalan di hackintosh, namun nyedot power paling gede, jadi laptop akan lebih panas dari biasanya. Sebelumnya di Legacy BIOS, saya sengaja menonaktifkan Nvidia Optimus ini sehingga hanya menggunakan Internal Grafik dari Intel. Selain laptop jadi adem, baterei jadi lebih awet. Urusan game, tenang, saya kan pake VGA eksternal π so, Nvidia Optimus jadi gak kepake.
Nah, berhubung BIOS sudah saya upgrade ke UEFI, jadi Nvidia Optimus akan dikunci selalu aktif oleh Acer di BIOS, dan yah begitulah, kalo di hackintosh bikin laptop panas banget dan baterei boros. Untuk itulah biasanya para hackintosher akan menonaktifkan Nvidia Optimus via DSDT patch. DSDT patch sebelumnya masih relevan dengan bootloader Clover, namun seiring tambah canggihnya environment hackintosh, muncul bootloader baru yang lebih efisien dan canggih tentunya. Namanya Opencore Bootloader.
Dengan Opencore, DSDT patch jadi kurang relevan dan kurang dianjurkan lagi. Katanya ada cara yang lebih efisien, yaitu SSDT "hotpatch" (cari tau sendiri yah apa itu, hehe). Biasanya kita akan buka "kitab hackintosh online" Dortania untuk menemukan SSDT hotpatch untuk menonaktifkan Nvidia Optimus. Begitupun dengan saya, langsung saya terapkan hotpatch sesuai dengan petunjuk Dortania disini di laptop ini.
Hasilnya? Sukses! Nvidia Optimus sepenuhnya nonaktif, laptop jadi adem dan baterei awet. Namun ada satu masalah ketika saya memakai hotpatch tersebut, laptop bisa sleep dengan baik tapi ketika wake dari sleep BLACK SCREEN! Laptop harus dimatikan paksa. Sebenarnya, solusinya sudah ada disini, namun itu untuk DSDT patch, sedangkan tujuan saya adalah SSDT hotpatch sahaja. Pusing lah saya memutar otak, bagaimana cara "convert" solusi diatas menjadi SSDT hotpatch untuk Opencore?
Setelah berhari-hari utak-atik dan searching sana-sini π saya sukses "convert" solusi diatas menjadi SSDT hotpatch untuk Opencore. Dan kali ini saya mau share ke sobat langkah-langkah nya:
1. Cari tau ACPI Path Nvidia Optimus sobat. Bisa di Windows buka Device Manager lalu buka detil BIOS Name. Catat ACPI Path nya, kalo punya saya ini: \_SB.PCI0.PEG0.PEGP
Perhatikan yang warna merah, itu bisa saja berbeda-beda tergantung jenis laptop sobat, jadi sobat bisa ubah nanti sesuai dengan spek laptop.
2. Siapkan SSDT kosongan, kode nya:
DefinitionBlock ("", "SSDT", 2, "AGUYS", "DGPU", 0x00000000)
{
...
}
3. Hapus titik tiga buah tersebut, pastekan kode "external method" berikut:
External (_SB_.PCI0.PEG0.PEGP._OFF, MethodObj)
External (_SB_.PCI0.PEG0.PEGP._ON_, MethodObj)
External (_SB_.PCI0.PEG0.PEGP._PS0, MethodObj)
External (_SB_.PCI0.PEG0.PEGP._PS3, MethodObj)
External (_SB_.PCI0.PEG0.PEGP.SGOF, MethodObj)
External (_SB_.PCI0.PEG0.PEGP.SGON, MethodObj)
External (ZPTS, MethodObj)
External (ZWAK, MethodObj)
4. Tepat di bawah kode diatas, kita tambahkan method M_OF dan M_ON:
Method (M_ON, 0, NotSerialized)
{
If (CondRefOf (\_SB.PCI0.PEG0.PEGP._ON))
{
\_SB.PCI0.PEG0.PEGP._ON ()
}
If (CondRefOf (\_SB.PCI0.PEG0.PEGP._PS0))
{
\_SB.PCI0.PEG0.PEGP._PS0 ()
}
If (CondRefOf (\_SB.PCI0.PEG0.PEGP.SGON))
{
\_SB.PCI0.PEG0.PEGP.SGON ()
}
}
Method (M_OF, 0, NotSerialized)
{
If (CondRefOf (\_SB.PCI0.PEG0.PEGP._OFF))
{
\_SB.PCI0.PEG0.PEGP._OFF ()
}
If (CondRefOf (\_SB.PCI0.PEG0.PEGP._PS3))
{
\_SB.PCI0.PEG0.PEGP._PS3 ()
}
If (CondRefOf (\_SB.PCI0.PEG0.PEGP.SGOF))
{
\_SB.PCI0.PEG0.PEGP.SGOF ()
}
}
Perhatikan warna merah sekali lagi, sesuaikan dengan spek laptop (ACPI Patch) sobat.
5. Lalu dibawahnya lagi, panggil method M_OF tadi dalam method _WAK dan _INI:
Method (_WAK, 1, NotSerialized)
{
Local0 = ZWAK (Arg0)
If (_OSI ("Darwin"))
{
M_OF ()
}
Return (Local0)
}
Method (_INI, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
M_OF ()
}
}
6. Lanjut, di bawah nya panggil M_ON dalam method _PTS:
Method (_PTS, 1, NotSerialized)
{
If (_OSI ("Darwin"))
{
M_ON ()
}
ZPTS (Arg0)
}
7. Terakhir compile SSDT yang baru kita buat, pastikan tidak ada error ya.
8. Save file SSDT-DGPU.aml yang di compile tadi. Taro di folder ACPI Opencore. Tambahkan "patch rename" tambahan ini dalam config.plist Opencore sobat:
Rename _PTS to ZPTS
Find: 5F505453
Replace: 5A505453
Rename _WAK to ZWAK
Find: 5F57414B
Replace: 5A57414B
9. Restart laptop cobat. Kalau tidak ada kendala, Nvidia Optimus akan nonaktif dan problem sleep sudah tiada. Done, alhamdulillah.
Mungkin ada yang bertanya, method M_OF dan M_ON diatas itu ngapain sih? Singkatnya, method M_OF dalam _INI bertugas menonaktifkan Nvidia Optimus setelah startup. Lalu method M_ON dalam _PTS bertugas mengaktifkan sementara Nvidia Optimus sesaat sebelum sleep guna menghindari black screen saat wake. Sedang method M_OF dalam _WAK bertugas menonaktifkan lagi Nvidia Optimus setelah wake. Mantap kan sob? Dengan sedikit modifikasi, SSDT ini mungkin bisa juga dipake untuk Windows atau Linux, tapi gak saya bahas disini deh hehe.
Oke deh, sekian dulu tutor dari saya sob, apabila ada cara yang lebih mudah bisa share di kolom komentar. Dan apabila ada salah kata atau info, maaf. Do with your own risk dan wassalam.