hugo070601 Posted February 24, 2025 Share Posted February 24, 2025 Hello guys ! Hope everything goods, I'm in trouble with my open core EFI while booting Windows I have one BSOD caused by ACPI... I'm a bit lost. I'm on a Razer Blade Base model 2018. If someone have an idea about my bad open core's configuration, you'll be my hero !! Thanks Have a nice day The attached file don't have my kexts (20mo) but you can see them on my config.plist EFI.zip Link to comment https://www.insanelymac.com/forum/topic/360717-bsod-acpi_bios-while-booting-windows-on-opencore/ Share on other sites More sharing options...
Avery B Posted February 27, 2025 Share Posted February 27, 2025 (edited) Hey! Opencore will inject ACPI into every OS it boots, so you will need to make each SSDT either compatible with Windows or at least check the current OS. You can check the currently booted OS in ACPI using the _OSI() call, where you pass in the OS you want to check for! _OSI("Darwin") for example would return true when running macOS and false in Windows/Linux. I went through the SSDTs real quick and I think you just need to do the following: SSDT-BATT: I believe SSDT-BATT can be replaced with ECEnabler.kext. I don't think this would cause issues with Windows as is though. SSDT-DDGPU: Replace "If (CondRefOf (\_SB.PCI0.PEG0.PEGP._OFF))" with "If (CondRefOf (\_SB.PCI0.PEG0.PEGP._OFF) && _OSI("Darwin"))". I doubt you want to disable the dedicated GPU in windows but I guess you could if you really wanted to. Another option I think is surrounding the entire RMD1 device in an OS check. I'll attach this version below. SSDT-GPI0: This shouldn't cause any harm as is. Can do something like the below if you want though to only enable the GPI0 device in macOS. Method (_STA, 0, NotSerialized) // _STA: Status { If (_OSI("Darwin")) { Return (0x0F) } Return (0x00) } SSDT-HPET: No changes needed I think SSDT-PLUG: No changes needed SSDT-PMC: No changes needed, this already checks for Darwin/macOS SSDT-PNLFCFL: I would not be surprised if this is the one causing issues. I've ran into this specific SSDT causing issues before in Windows. Update to use the latest SSDT-PNLF from Acidanthera which checks for Windows and contains Coffeelake fixes https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-PNLF.dsl SSDT-PTSWAK.dsl: Similar to SSDT-DDGPU, just add "&& _OSI("Darwin") in the If CondRefOf statements for both _WAK and _PTS. I doubt you want to disable the dedicated GPU in windows. SSDT-RTEC: Is this doing anything? This just has an empty RTEC method which does not do anything. SSDT-TPD0.dsl: At the beginning of the _CRS Method I would add: If (_OSI("Darwin")) { Return(XCRS()) } You will need to add the below above as well: External (\_SB.PCI0.I2C0.TPD0.XCRS, MethodObj) This makes it so that your new _CRS implementation which returns the GPIO based interrupt only runs in macOS. This goes hand in hand with SSDT-GPI0 above. If you decide to have the GPI0 device enabled all the time, I think you could leave this SSDT alone without adding the OS check at the beginning. If you make the GPI0 _STA method check for macOS though and only return 0x0F in macOS, you will need to make this modification here so prevent the GPIO device being used for interrupts in Windows/Linux where the GPI0 device is disabled. SSDT-XOSI: So I don't think this one will break Windows either, but this is another case where you probably don't want to be messing with things in windows too badly. I would just add the below at the beginning of the XOSI method If (!_OSI("Darwin")) { Return (_OSI(Arg0)) } Note: I modified the SSDTs I noted above and attached them. These are in the decompiled DSL format so you will need to use iasl or MaciASL to compile them real quick. I figured this was a bit easier to show the changes I made so you can compare the before and after. To compile with MaciASL, you just need to open up the DSL then do Save As and change the format to AML. Any SSDTs that came from SSDTTime or Acidanthera will already be compatible with Windows so you should not need to mess with those fyi. Last note, you will likely want to set Kernel->Quirks->CustomSMBIOSGuid to Yes/True and PlatformInfo->UpdateSMBIOSMode to "Custom". This will make sure that any changes to the reported model of your device (i.e. Razer Blade to MacBookPro16,1) will only affect macOS rather than all OSes. You could always install the bootcamp tools for fun though and get a startup disk utility in windows though SSDT-XOSI.dsl SSDT-PTSWAK.dsl SSDT-TPD0.dsl SSDT-GPI0.dsl SSDT-DDGPU.dsl Edited February 27, 2025 by 1Revenger1 3 Link to comment https://www.insanelymac.com/forum/topic/360717-bsod-acpi_bios-while-booting-windows-on-opencore/#findComment-2830639 Share on other sites More sharing options...
Avery B Posted February 27, 2025 Share Posted February 27, 2025 I posted that giant post above and realized it was a lot. A lot of people here would probably recommend using Clover (which does not inject ACPI into Windows) or skipping any bootloader and booting straight to Windows from the BIOS picker. I myself do like using Opencore to boot all my OSes on my Lenevo X1 Extreme and I do use it to boot Windows regularly. I find the requirement to be mindful about ACPI changes and their effects results in smaller (better) patches which are easier to maintain across BIOS updates/changes to BIOS settings. Not everyone would agree though - and I won't be offended if you decide to skip all this and just use your BIOS picker haha. 2 Link to comment https://www.insanelymac.com/forum/topic/360717-bsod-acpi_bios-while-booting-windows-on-opencore/#findComment-2830641 Share on other sites More sharing options...
Recommended Posts