Jump to content

X79 usb not work under OpenCore


ganxiao
 Share

11 posts in this topic

Recommended Posts

Hi,

I have an old X79 mainboard with a Xeon E5-2680v2 CPU which worked normally in MacOS Catalina using Clover as bootloader.

This mainboard has two built-in Intel USB2.0 controllers and a third-party ASMedia USB3.0 controller.

I decided to switch my bootloader to OpenCore, compiled the latest code from github, modified config file according to my system.

OpenCore booted to Catalina login screen smoothly, then I found I can't use keyboard to input password.

After some test, I found all usb device fail to work.

I used vnc to login in and found no usb device listed under usb controller in ioreg.

2114123850_2019-10-239_38_50.png.2decc6844d59b4d21d37bff0da0642d9.png

But I can boot another Z170 system with no usb problem using the same compiled OpenCore.

Could anyone help me to resolve this issue?

Thanks in advance.

 

Office's Pro opencore usb issue.zip

Link to comment
Share on other sites

I have a asus z9pe-d8 ws motherboard which is the workstation version of the X79, it also uses the same USB controller that the X79 does. EUSB and USBE are the default devices for that USB Controller in the ACPI tables and is showing up in your ioreg. Please upload your entire EFI folder that you made so we can see what all you have done for settings.

Edited by Pavo
Link to comment
Share on other sites

26 minutes ago, Pavo said:

I have a asus z9pe-d8 ws motherboard which is the workstation version of the X79, it also uses the same USB controller that the X79 does. EUSB and USBE are the default devices for that USB Controller in the ACPI tables and is showing up in your ioreg. Please upload your entire EFI folder that you made so we can see what all you have done for settings.

Hi Pavo,

Please check attached EFI file.

 

I also noticed OpenCore seems not inject my modified DSDT to ACPI table correctly,  because i did some rename staff in modified DSDT,

 but I can't find it throug ioreg.

 

EFI.zip

Link to comment
Share on other sites

1 hour ago, ganxiao said:

Hi Pavo,

Please check attached EFI file.

 

I also noticed OpenCore seems not inject my modified DSDT to ACPI table correctly,  because i did some rename staff in modified DSDT,

 but I can't find it throug ioreg.

 

EFI.zip

DSDT injection is no problem, it's due to wrong DSDT file.

And usb problem was resolved when correct DSDT injected.

 

Link to comment
Share on other sites

OK, I found the root cause.

 

Background:

1. EUSB and USBE are the default ACPI device name of built-in Intel USB 2.0 controllers of my X79 mainboard, however using original ACPI names USB can't work in 10.15 even with USBInjectAll.kext enabled.

2. If we change EUSB and USBE to EH01 and EH02, with USBInjectAll.kext enabled, USB can work normally.

3. I need to inject a modified DSDT for my X79 mainboard to boot MacOS normally.

4. I prefer to use ACPI patch function to do all ACPI re-name jobs.

5. USB work using Clover as bootloader with above modifications.

 

Problem:

With the same configuration, USB can't work when OpenCore was selected as bootloader.

 

Analysis:

I noticed usb name was still EUSB after DSDT inject and ACPI patch.

If I re-name USB directly in DSDT file, drop ACPI patch function, then USB worked.

So I collected OpenCore bootlog opencore-2019-10-23-041824.txt, found DSDT inject was behind ACPI patch, 

2097839332_2019-10-2312_58_13.thumb.png.1455d127e18d3ba74c6ad87bafadbff8.png

If DSDT inject was used, then all ACPI patch would not take effect at all.

 

Suggestion:

ACPI patch is useful, it does not only patch DSDT table but also other ACPI tables like SSDTs.

For its function consistency, it should even work on the injected DSDT file, like Clover do.

ACPI table inject should before ACPI patch.

Link to comment
Share on other sites

7 hours ago, ganxiao said:

1. EUSB and USBE are the default ACPI device name of built-in Intel USB 2.0 controllers of my X79 mainboard, however using original ACPI names USB can't work in 10.15 even with USBInjectAll.kext enabled.

EUSB and USBE naming does not matter, you do not need to use USBInjectAll.kext. 

 

7 hours ago, ganxiao said:

3. I need to inject a modified DSDT for my X79 mainboard to boot MacOS normally.

Why?

 

7 hours ago, ganxiao said:

4. I prefer to use ACPI patch function to do all ACPI re-name jobs.

You should not use ACPI Patching for renaming ACPI devices, this is outlined in the OC Documentation.

 

7 hours ago, ganxiao said:

ACPI patch is useful, it does not only patch DSDT table but also other ACPI tables like SSDTs.

It is a security issue, that is why OC devs have outlined this in the documentation.

 

7 hours ago, ganxiao said:

ACPI table inject should before ACPI patch.

If you do all your ACPI patching within SSDTs, this would solve all your DSDT and patching requirements. There is nothing that you can patch in a DSDT that you can not patch bob using a SSDT. This is how Apple does ACPI naming and patching for real Macs.

OpenCore is not like Clover, so comparing its features is mute.

Link to comment
Share on other sites

13 hours ago, Pavo said:

EUSB and USBE naming does not matter, you do not need to use USBInjectAll.kext. 

I did a test:

revert EH01/EH02 to EUSB/USBE, remove USBInjectAll.kext -> USB can't work.

So it must be something related to USBInjectAll.kext with specific ACPI names.

 

13 hours ago, Pavo said:

Why?

This mainboard has serious DSDT bugs to prevent MacOS from booting.

Ref: 

Other bugs like 12 core CPU will not boot MacOS which need fix from C010 to C31D

1508670686_2019-10-2410_04_34.thumb.png.fe95697485d2c3c53b28c80a243cc7e7.png

 

13 hours ago, Pavo said:

You should not use ACPI Patching for renaming ACPI devices, this is outlined in the OC Documentation.

I modified DSDT instead of ACPI patching now.

 

13 hours ago, Pavo said:

It is a security issue, that is why OC devs have outlined this in the documentation.

Understand.

 

13 hours ago, Pavo said:

If you do all your ACPI patching within SSDTs, this would solve all your DSDT and patching requirements. There is nothing that you can patch in a DSDT that you can not patch bob using a SSDT. This is how Apple does ACPI naming and patching for real Macs.

OpenCore is not like Clover, so comparing its features is mute.

I understand SSDT can do all the patching staff, but I use the modified DSDT in the end.

Because it is difficult for me to use SSDT to patch CPU C010 to C31D.

Would you please check DSDT and DSDTorigin file attached, how we can patch CPU using a SSDT?

Thanks!

DSDT.dsl DSDTorigin.dsl

 

Link to comment
Share on other sites

8 minutes ago, ganxiao said:

I did a test:

revert EH01/EH02 to EUSB/USBE, remove USBInjectAll.kext -> USB can't work.

So it must be something related to USBInjectAll.kext with specific ACPI names.

Funny that my all my USB ports work perfectly fine without using USBInjectAll.kext

XxBnHFF.png

 

11 minutes ago, ganxiao said:

This mainboard has serious DSDT bugs to prevent MacOS from booting.

 

Other bugs like 12 core CPU will not boot MacOS which need fix from C010 to C31D

I have 2x Xeon E-5 2670v2 CPUs which are 10 core CPUs each and had the same issues back in Sierra, but has changed since High Sierra and has gotten better native support. Now if you want proper CPU Power Management you still have to generate a CPU PM SSDT using Piker Alpha's SSDT generation script. 

 

14 minutes ago, ganxiao said:

I understand SSDT can do all the patching staff, but I use the modified DSDT in the end.

Because it is difficult for me to use SSDT to patch CPU C010 to C31D.

Would you please check DSDT and DSDTorigin file attached, how we can patch CPU using a SSDT?

As stated above, not needed anymore since High Sierra. The reason to not use a patched DSDT is because everything effects it, whenever you update your firmware or make BIOS settings changes it changes your DSDT. When you use SSDTs those settings do not effect it because you are just extending the native device with more settings or configurations. Without seeing a verbose output of your boot phase with using bootargs: keepsym=1 debug=0x100 and not loading your modified DSDT. I can not confirm you actually need to patch CPU C010 to C31D. But if you actually need to, it would look something like this, based off your original DSDT:

 

DefinitionBlock ("", "SSDT", 2, "Pavo", "CPU", 0x00001000)
{
    External (_SB_.SCK0, DeviceObj)

    If (_OSI ("Darwin"))
    {
        Scope (\_SB.SCK0)
        {
            Scope (C010)
            {
                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (Zero)
                }
            }

            Device (C31D)
            {
                Name (_HID, "ACPI0007")  // _HID: Hardware ID
                Name (_UID, "PCI0-CP31D")  // _UID: Unique ID
                Name (_PXM, Zero)  // _PXM: Device Proximity
                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (0x0F)
                }
            }
        }
    }
}

 

Link to comment
Share on other sites

6 hours ago, Pavo said:

As stated above, not needed anymore since High Sierra. The reason to not use a patched DSDT is because everything effects it, whenever you update your firmware or make BIOS settings changes it changes your DSDT. When you use SSDTs those settings do not effect it because you are just extending the native device with more settings or configurations. Without seeing a verbose output of your boot phase with using bootargs: keepsym=1 debug=0x100 and not loading your modified DSDT. I can not confirm you actually need to patch CPU C010 to C31D. But if you actually need to, it would look something like this, based off your original DSDT:

 


DefinitionBlock ("", "SSDT", 2, "Pavo", "CPU", 0x00001000)
{
    External (_SB_.SCK0, DeviceObj)

    If (_OSI ("Darwin"))
    {
        Scope (\_SB.SCK0)
        {
            Scope (C010)
            {
                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (Zero)
                }
            }

            Device (C31D)
            {
                Name (_HID, "ACPI0007")  // _HID: Hardware ID
                Name (_UID, "PCI0-CP31D")  // _UID: Unique ID
                Name (_PXM, Zero)  // _PXM: Device Proximity
                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (0x0F)
                }
            }
        }
    }
}

 

I checked original DSDT,it only allow 16 cpu cores,that's why I need to patch C010-C017 to meet 12c24t cpus,

Using ACPI patch to patch C010-C017 can solve this problem.

Also tried SSDT, but no luck.

Please check if I made wrong SSDT.

SSDT-SCK0.aml SSDT-CPU.aml

Link to comment
Share on other sites

  • 2 months later...
On 10/23/2019 at 2:51 AM, Pavo said:

I have a asus z9pe-d8 ws motherboard which is the workstation version of the X79, it also uses the same USB controller that the X79 does. EUSB and USBE are the default devices for that USB Controller in the ACPI tables and is showing up in your ioreg. Please upload your entire EFI folder that you made so we can see what all you have done for settings.

did you managed to get OC to boot catalina? Can you please send me your efi folder!!!!!!

Link to comment
Share on other sites

51 minutes ago, master4nick8r said:

did you managed to get OC to boot catalina? Can you please send me your efi folder!!!!!!

I did but I do not have the Intel hack anymore, switch to AMD.

Link to comment
Share on other sites

 Share

×
×
  • Create New...