Jump to content

[GUIDE] USB Fix El Capitan 10.11


830 posts in this topic

Recommended Posts

But I have 4 USB 3.0 ports. This is the specs: http://thinkstation-specs.com/thinkstation-d30/

Far I know, I had read that is a X79 7-series Ivy Brigde

 

The El Captain work flawless, but the USB not.

Event the Audio I could install (using VoodooHDA)

 

 

Thanks

I repeat: Your USB3 controller is not Intel. FakePCIID_XHCIMux is for Intel only. X79, unlike Intel 7-series, DOES NOT have an Intel XHCI controller.

Link to comment
Share on other sites

I repeat: Your USB3 controller is not Intel. FakePCIID_XHCIMux is for Intel only. X79, unlike Intel 7-series, DOES NOT have an Intel XHCI controller.

 

Ok... so, how can I make the USB (even 2.0 works?)

GenericUSBHCI only make two ports works for keyboard and mouse.

 

In DSDT has only USBE and EUSB "tags".

 

Any ideas?

 

 

Thank you.

 

 

PS: I always made osx86 boot and work in various computers and notebooks, my Acer 8920G has from Snow Leopard and today has macOS Sierra working. This desktop (lenovo d30) is the only one I'm having problems with USB. I think El Captain and Sierra uses the same engine for USB now, I appreciate any idea or how can I see the lenovo d30 motherboard or usb controller (ubuntu maybe?)

 

 

Thank you again,

Link to comment
Share on other sites

Ok... so, how can I make the USB (even 2.0 works?)

GenericUSBHCI only make two ports works for keyboard and mouse.

 

In DSDT has only USBE and EUSB "tags".

Rename them to EH01/EH02. Use USBInjectAll.kext. Eventually, create a custom SSDT (for USBInjectAll.kext) that injects only the ports that are connected.

 

For USB3, you will need GenericUSBXHCI.kext if installing a compatible USB3 controller is not an option (FL1100-based chipset supported OOB). GenericUSBXHCI.kext is likely to be unreliable.

  • Like 1
Link to comment
Share on other sites

Rename them to EH01/EH02. Use USBInjectAll.kext. Eventually, create a custom SSDT (for USBInjectAll.kext) that injects only the ports that are connected.

 

For USB3, you will need GenericUSBXHCI.kext if installing a compatible USB3 controller is not an option (FL1100-based chipset supported OOB). GenericUSBXHCI.kext is likely to be unreliable.

 

Ok, I have a SSDT working for this PC.

It's the SSDT-0.aml in the EFI/CLOVER/ACPI/patched

 

1- But I only find tutorial/guide to rename EHC1 to EH01, how rename USBE to this?

2 - For the SSDT USBInjectAll.kext, I put in SSDT-0.aml (can I split in another file like SSDT-UIA.aml?, btw?)

 

Here is the SSDT for USBInjectAll that I was using:


    // Override for USBInjectAll.kext
    Device(UIAC)
    {
        Name(_HID, "UIA00000")
        Name(RMCF, Package()
        {
            // XHC overrides
            "8086_8xxx", Package()
            {
                //"port-count", Buffer() { 0x15, 0, 0, 0 },
                "ports", Package()
                {
                    "HS01", Package()
                    {
                        "UsbConnector", 3,
                        "port", Buffer() { 0x01, 0, 0, 0 },
                    },
                    "HS02", Package()
                    {
                        "UsbConnector", 3,
                        "port", Buffer() { 0x02, 0, 0, 0 },
                    },
                    "HS05", Package()   // touch screen
                    {
                        "UsbConnector", 255,
                        "port", Buffer() { 0x05, 0, 0, 0 },
                    },
                    "HS06", Package()
                    {
                        "UsbConnector", 255,
                        "port", Buffer() { 0x06, 0, 0, 0 },
                    },
                    "HS07", Package()
                    {
                        "UsbConnector", 255,
                        "port", Buffer() { 0x07, 0, 0, 0 },
                    },
                    "HS09", Package()
                    {
                        "UsbConnector", 0,
                        "port", Buffer() { 0x09, 0, 0, 0 },
                    },
                    "SS01", Package()
                    {
                        "UsbConnector", 3,
                        "port", Buffer() { 0x10, 0, 0, 0 },
                    },
                    "SS02", Package()
                    {
                        "UsbConnector", 3,
                        "port", Buffer() { 0x11, 0, 0, 0 },
                    },
                },
            },
        })

Thank you for the reply!

Link to comment
Share on other sites

1- But I only find tutorial/guide to rename EHC1 to EH01, how rename USBE to this?

You can use Find/Replace in MaciASL or config.plist/ACPI/DSDT/Patches.

 

 

Here is the SSDT for USBInjectAll that I was using:

Complete nonsense. As 8086_8xxx would be for Intel 8/9-series XHC. As already discussed, you have no Intel XHC in X79.

Your SSDT will focus on EH01/EH02/HUB1/HUB2 configuration.

Refer to SSDT-UIAC-ALL.dsl in the USBInjectAll github.

Link to comment
Share on other sites

You can use Find/Replace in MaciASL or config.plist/ACPI/DSDT/Patches.

 

 

 

Complete nonsense. As 8086_8xxx would be for Intel 8/9-series XHC. As already discussed, you have no Intel XHC in X79.

Your SSDT will focus on EH01/EH02/HUB1/HUB2 configuration.

Refer to SSDT-UIAC-ALL.dsl in the USBInjectAll github.

 

Ok, I understand now.

But just a last question, my DSDT doesn't compiles "properly", only the SSDT.

The USBE and EUSB are in DSDT.

 

How can I find the replace data/string (for find and replace) in Clover/ACPI/DSDT/Patches for replace EUSB with EH01?

Need to see the HEX of DSDT?

Because, I know that for EHC1 to EH01 it's <45484331> to <45483031>, right?

 

 

Thank you.

Ok, I understand now.

But just a last question, my DSDT doesn't compiles "properly", only the SSDT.

The USBE and EUSB are in DSDT.

 

How can I find the replace data/string (for find and replace) in Clover/ACPI/DSDT/Patches for replace EUSB with EH01?

Need to see the HEX of DSDT?

Because, I know that for EHC1 to EH01 it's <45484331> to <45483031>, right?

 

 

Thank you.

Just found out here, going to test :)

Link to comment
Share on other sites

Ok, I understand now.

But just a last question, my DSDT doesn't compiles "properly", only the SSDT.

Probably you failed to disassemble properly (always use SSDTs as context: iasl -da -dl DSDT.aml SSDT*.aml)

 

How can I find the replace data/string (for find and replace) in Clover/ACPI/DSDT/Patches for replace EUSB with EH01?

Need to see the HEX of DSDT?

Basic stuff... in Terminal:

echo -n EUSB|xxd
echo -n USBE|xxd
Link to comment
Share on other sites

Probably you failed to disassemble properly (always use SSDTs as context: iasl -da -dl DSDT.aml SSDT*.aml)

 

 

Basic stuff... in Terminal:

echo -n EUSB|xxd
echo -n USBE|xxd

 

Hi, I did the iasl -da -dl DSDT.aml SSDT*.aml with latest iasl.

I compiled using ACPI 4.0 with MaciASL, but I didn't touch the embedded iasl from the MaciASL, it's better I update it too?

 

By the way, I can now replace EUSB to EH01 and USBE to EH01, but either EUSB or USBE has the "HUBN" child.

If I replace HUBN to HUB1, the both children will be replaced

 

Today have:

EUSB
 |--- HUBN
          |-- PRT10
                 |-- PR30
                 |-- PR31
                 |-- PR32
                 |-- PR33
                 |-- PR34
                 |-- PR35
                 |-- PR36
                 |-- PR37

...
USBE
 |-- HUBN
       |--PR10
            |-- PR30
            |-- PR31
            |-- PR32
            |-- PR33
            |-- PR34
            |-- PR35

There's any problem to, with the rename, stays like this?

EH01
 |--- HUB1
          |-- PRT10
                 |-- PR30
                 |-- PR31
                 |-- PR32
                 |-- PR33
                 |-- PR34
                 |-- PR35
                 |-- PR36
                 |-- PR37

...
EH02
 |-- HUB1
       |--PR10
            |-- PR30
            |-- PR31
            |-- PR32
            |-- PR33
            |-- PR34
            |-- PR35

Thank you!

Link to comment
Share on other sites

Hi, I did the iasl -da -dl DSDT.aml SSDT*.aml with latest iasl.

I compiled using ACPI 4.0 with MaciASL, but I didn't touch the embedded iasl from the MaciASL, it's better I update it too?

Use ACPI 6.1 (iasl and MaciASL).

 

By the way, I can now replace EUSB to EH01 and USBE to EH01, but either EUSB or USBE has the "HUBN" child.

If I replace HUBN to HUB1, the both children will be replaced

Use USBInjectAll.kext.

Link to comment
Share on other sites

The only ACPI change required is EH01/EH02.

 

Ok, so I just make:

  - have the SSDT.aml in efi/clover/acpi/patches (without the DSDT.aml, because even with iasl (acpi 6.0) it won't compile)

  - change from USBE to EH01 and EUSB to EH02 in efi/clover/acpi/dsdt/patches

  - put the USBInjectAll.kext in efi/clover/kexts/10.11

 

  or do I need to put SSDT-UIAC-ALL.aml (compiled) with changes? * Because only shows PR11-PR21 and I have only PR30-PR35, just for have sure.

 

 

 

Thank you.

Link to comment
Share on other sites

How do I get XHCIMux to stop routing USB2 devices to EH01 when connected to a USB3 port?

 

On my laptop if I connect my iPad to one of the USB3 ports, it's routed to EH01 and doesn't get the extra current required. It also gets no extra current if connected to a USB2 port.

 

If I remove XHCIMux then the iPad gets the extra current (1600 when connected to a USB3 port, 500 when connected to a USB2 one) but everything gets routed to XHC, even USB2 devices in USB2 ports.

Link to comment
Share on other sites

Ok, so I just make:

  - have the SSDT.aml in efi/clover/acpi/patches (without the DSDT.aml, because even with iasl (acpi 6.0) it won't compile)

  - change from USBE to EH01 and EUSB to EH02 in efi/clover/acpi/dsdt/patches

  - put the USBInjectAll.kext in efi/clover/kexts/10.11

 

  or do I need to put SSDT-UIAC-ALL.aml (compiled) with changes? * Because only shows PR11-PR21 and I have only PR30-PR35, just for have sure.

 

 

 

Thank you.

You should verify in ioreg that the ports are being injected by USBInjectAll.kext as expected.

How do I get XHCIMux to stop routing USB2 devices to EH01 when connected to a USB3 port?

You can inject RM,pr2-force to change the routing (by setting a bit to 1, the port is kept on XHC).

Link to comment
Share on other sites

You can inject RM,pr2-force to change the routing (by setting a bit to 1, the port is kept on XHC).

 

I assume I can edit the value in the info.plist to do this but how do I work out what to enter?

 

I've been trying to see if I can get things working with a port injector kext in place of XHCIMux but it's not looking good. Anything plugged into the USB2 ports still gets routed to XHC.

 

Basically, I'm trying to figure out how to get extra current working properly post-Yosemite. On this laptop and my X79 with a FL1100 card.

 

With the laptop, it seems that without any edits XHCIMux is stopping USB2 ports from providing extra current. Maybe that's the problem more than the routing.

Link to comment
Share on other sites

Hello, @RehabMan.

 

  I tried everything you told. I still can't compile the DSDT (even with iasl 6.0), only the SSDT.

 

  What I can tell you is that:

    - with GenericUSBHCI.kext, I can boot the system and have keyboard and mouse (only this two, but I need the bluetooth that don't recognize).

    - without the GenericUSBHCI.kext, I can't boot, the El Captain will stop before [ PCI Configuration ] message with a kernel panic at AppleIOUSBHostFamily.

 

  There is any configuration for Clover? Inject USB? Fix_USB? All this is false.

 

  What do you need so I can boot without the GenericUSB kext?

 

 

Thank you.

Link to comment
Share on other sites

Hello, @RehabMan.

 

  I tried everything you told. I still can't compile the DSDT (even with iasl 6.0), only the SSDT.

I said use ACPI 6.1. You can find my guide if you search for it.

 

What I can tell you is that:

    - with GenericUSBHCI.kext, I can boot the system and have keyboard and mouse (only this two, but I need the bluetooth that don't recognize).

GenericUSBXHCI.kext will, of course, be needed for any unsupported USB3 controller you may have.

My recommendation (again), is to disable the unsupported XHCI controller and install a supported XHCI controller, such as one based on FL1100.

Link to comment
Share on other sites

I said use ACPI 6.1. You can find my guide if you search for it.

 

 

GenericUSBXHCI.kext will, of course, be needed for any unsupported USB3 controller you may have.

My recommendation (again), is to disable the unsupported XHCI controller and install a supported XHCI controller, such as one based on FL1100.

 

But how can I disable the unsupported XHCI and put a new one?

Btw, I don't want (don't need) USB 3.0 working, just USB 2.0, that I don't have.

 

I can't boot and even with correctly SSDT + USBInjectAll + EUSB->EH01 + USBE -> EH02 rename patches, I still get IOUSBHostFamily error.

But, if I put GenericUSBXHCI.kext I can boot normally, but without any port with bluetooth/etc working.

 

 

PS: Yosemite was fine, the problem I know it's the new USB in El Captain/Sierra, but how can I pass through the IOUSBHostFamily error at boot to check the IOReg and if the USBInjectAll is working?

Link to comment
Share on other sites

While doing some more digging around with my FL1100 card I finally figured out how to get El Capitan to display the speed and current info for devices attached to it (Sierra fixed this already).

 

The fix is to inject a bus number for the card. Presumably there's none because it's a pci-e expansion card.

 

Via DSDT you can just add the property like so after the usual AAPL,current etc entries:

                                "AAPL,xhci-clock-id",
                                One,
                                "USBBusNumber",
                                0x10,

I used 0x10 as this is what I found in an old MP6,1 IOReg. Once this is done, El Capitan will show the speed and current info. It even shows some extra current for my iPad (but not as much as in Yosemite). I'm still not convinced the card is being seen as built-in (which is/was the usual way to enable extra current) as in Sierra I still only get 500mA and Extra Current remains at 0.

 

This is why I assume it will only work (fully) if the system thinks the ports are built-in. How exactly to do this in El Capitan and beyond I'm not sure. Previously just adding a clock-id value was enough but that stopped working with the new USB system. AAPL,device-internal and AAPL,xhci-clock-id don't seem to do it.

 

Update: I found a newer MP6,1 Darwindumper report on applelife. This was from El Capitan so I was able to see the new properties. The following entries were missing in my Sierra IOReg and I think the first one might be the modern equivalent to clock-id:

 

kUSBSleepSupported

kUSBWakePortCurrentLimit
kUSBSleepPortCurrentLimit
 
I injected them with a usb injector and according to System Profiler the iPad is now getting 1600mA extra current.
Link to comment
Share on other sites

Disable in BIOS. Install supported PCIe USB3 card.

 

Ok, first, I could compile DSDT.

SSDT has a parse_op error that I can fix with the _PSS fix.

 

In BIOS I have:

 EHCI Hand-off (enabled)

 XHCI Hand-off (enabled)

 

I can also disable each USB port individually (at BIOS)

 

 

For boot, without the IOUSBHostFamilly problem,

 

1 - Should I disable in BIOS or has some "magic" for disable in DSDT using the USBE / EUSB tags?

2 - Just rename (in DSDT or clover patches) USBE to EH01, and EUSB to EH02)

3 - Need to apply the OS Windows 8 Fix in DSDT (or use the clover patch + SSDT _OSI)?

4 - Need to turn on only the DropOEM for SSDT, in clover, and DSDT in clover has this option too?

 

 

Thank you :)

Link to comment
Share on other sites

Ok, first, I could compile DSDT.

SSDT has a parse_op error that I can fix with the _PSS fix.

Not enough information. Compiler errors refer to line numbers in the source file for a good reason.

 

In BIOS I have:

 EHCI Hand-off (enabled)

 XHCI Hand-off (enabled)

 

I can also disable each USB port individually (at BIOS)

Look for an option to disable the unsupported XHCI controller. Your responsibility to find it, if it exists.

 

For boot, without the IOUSBHostFamilly problem,

 

1 - Should I disable in BIOS or has some "magic" for disable in DSDT using the USBE / EUSB tags?

2 - Just rename (in DSDT or clover patches) USBE to EH01, and EUSB to EH02)

3 - Need to apply the OS Windows 8 Fix in DSDT (or use the clover patch + SSDT _OSI)?

4 - Need to turn on only the DropOEM for SSDT, in clover, and DSDT in clover has this option too?

EUSB/USBE/EH01/EH02 are related to EHCI, not XHCI, therefore unrelated to your panic with the XHCI controller.

Link to comment
Share on other sites

  • 2 weeks later...

anyone getting IOUSBFamily kernel panics? it's happened 2x after opening chrome. Also happens when rebooting from Windows sometimes. Really confused as to why. I'm wondering if it's related to the USB kext patch/USBInjectAll thing.

 

If it is the kext patch I guess that's what I get for doing things the lazy way...

post-969691-0-31736900-1477891727_thumb.jpg

Link to comment
Share on other sites

  • 4 weeks later...

Hi. Im having trouble implementing the fixes in this thread for a MacPro3.1...yes, i know its old! ;-)

My usb ports on the mac unit (front-back) or on the apple cinema display all work.

however, i am having issue with my Bluetooth coming from a Broadcom BCM94360CD on a Mini-PCIE inside the MacPro. 

i understand this issue may be coming from the USB issue, so i'd like to figure out if this is the issue.

 

ive tried to install the fakepciid and xhcimux, but couldnt boot up anymore after disabling SIP. so i removed those.

here are a couple of extracts from the system report.

 

any ideas?

thanks

Link to comment
Share on other sites

SOLVED! 

after all the searching, it turns out my USB were correclty working but OSX was defaulting the USB host controller to a secondary one.

i could see the Cambridge S Radio controller in the BT area but my Broadcom one was being ignored.

i tried to switch adapters using Bluetooth Explorer App, but it wouldnt let me switch.

i finally used terminal to force the switch:

sudo nvram bluetoothHostControllerSwitchBehavior=always

rebooted and Voila! all working again.;-)

Link to comment
Share on other sites

×
×
  • Create New...