18 Mei 2021

Nonaktifkan Nvidia Optimus Dengan SSDT Opencore

Jadi kemarin saya iseng upgrade BIOS laptop (g)old (Acer V5-471G) dari Legacy BIOS a.k.a v1.xx menjadi UEFI BIOS a.k.a v2.xx. Yah gimana, penasaran aja soalnya selama ini masih betah sih di Legacy BIOS. Sekarang laptop (g)old saya telah siap menuju tantangan baru (lebay😁). Namun sayangnya, ada satu hal yang mengganjal, kalo update BIOS, pengaturan switchable graphics akan terkunci, sehingga saya tidak bisa merubah pengaturan graphics card di laptop ini lagi deh.

optimus_agus

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

acpi_path

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.

compile


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

Merasa terbantu? Donate:
Previous
Prev Post «
Disqus
Blogger
Choose comment platform

6 komentar

Terimakasih atas tutorial yang simplenya mas. Akhirnya ga pusing pusing baca reahabman lagi. Untuk config plist ada referensi nya mas untuk find replace nya kenapa pakai string segitu

Balas

Berhubung kita pakai hotpatch yang mana fungsinya menimpa DSDT, jadi kita rename method WAK dan PTS biar gak menimpa semua method bawaan di DSDT. Soalnya method WAK dan PTS juga ada di device lain, misal wifi, usb, dll. Jadi dengan rename tsb, SSDT ini akan "jalan" pada device target hotpatch kita saja.

Balas

Uh, mohon maaf sebelumnya. yg saya maksud bukan yg itu. find and replace nya mas wkwk

Balas

Refrensinya kenapa pakai string itu maksudnya?

Semua SSDT patch di dortania pake rename method dibagian akhirnya. Saya pernah pakai tanpa rename, akhirnya kacau banyak yang gak jalan.

Balas

Mas, kalau malah untuk mengaktifkan NVME SSD kodenya gimana yah?
Soalnya laptop saya Lenovo L340 pas masuk diskutil (akan mulai instalasi) hardisk tsb gk ke-detect.

Sebenarnya Micron 2200s masuk Anti buyer guide di Dortania.

Balas

Kalo SSD masuk anti buyer paling biasanya (kalo gak hoki) bikin panic doang, gak sampe gak detek. Driver nvme sudah dimasukin di opencore?

Balas

Berkomentarlah dengan bijak. Sobat juga bisa menambahkan emoticon, klik πŸ‘‰

Langganan Artikel Gratis
Masukan alamat email:

Delivered by FeedBurner

Merasa terbantu oleh blog ini?

Sobat bisa memberikan donasi via PayPal, klik tombol di bawah ini. Terima kasih.

Popular Posts