Contribute
Register

[Guide] 10.11+ USB changes and solutions

Status
Not open for further replies.
Thank you for the hard work! I was having issues with 10.12.2 and some USB/USB3 ports sometimes were working and sometimes weren't, so I updated patch, now including also a DSDT patch and new kext and the issues seem to be gone. I have a couple of questions though:

- Do I need kext and patches together or can I take out one of the two?
- Can I keep patches for series 9 and series 100 together?
- Any chance to have a little bit snippier restart and shutdown?

Thanks again!
 
Thank you for the hard work! I was having issues with 10.12.2 and some USB/USB3 ports sometimes were working and sometimes weren't, so I updated patch, now including also a DSDT patch and new kext and the issues seem to be gone. I have a couple of questions though:

- Do I need kext and patches together or can I take out one of the two?
- Can I keep patches for series 9 and series 100 together?
- Any chance to have a little bit snippier restart and shutdown?

Thanks again!

No idea which patches you're referring to. Please be more specific.

If you're referring to the port limit patch, keep in mind it is not for long term use. To be used only for port discovery.
 
When you deleted FakePCIID_XHCIMux.kext it turns the routing from XHCI to EHCI. But at the same time, you excluded HSxx ports on XHC, which means any USB2 device plugged in to a port on XHC won't work.



Your profile indicates 9-series, not Skylake. Each XHC controller has a different number of potential ports.

I plugged 3.0 and 2.0 into each available port. 7 & 8 are front USB ports and 1 & 2 are USB 3.1 ports. When writing the SSDT, would I use " AppleUSB30XHCIPort@XXXXXXX " for port name?

And am I ok to use the SSDT template he provides in the write up or would it be different for the 9 series?
 

Attachments

  • Screen Shot 2016-12-21 at 9.10.54 PM.png
    Screen Shot 2016-12-21 at 9.10.54 PM.png
    29.4 KB · Views: 125
No idea which patches you're referring to. Please be more specific.

If you're referring to the port limit patch, keep in mind it is not for long term use. To be used only for port discovery.

I mean this one. Of course I did not add series 100 patches. These patches plus latest Kext seem to hit the spot. Do I always need to use patches AND kext?

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ACPI</key>
    <dict>
        <key>DSDT</key>
        <dict>
            <key>Patches</key>
            <array>
                <dict>
                    <key>Comment</key>
                    <string>change _OSI to XOSI</string>
                    <key>Find</key>
                    <data>X09TSQ==</data>
                    <key>Replace</key>
                    <data>WE9TSQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC1 to EH01</string>
                    <key>Find</key>
                    <data>RUhDMQ==</data>
                    <key>Replace</key>
                    <data>RUgwMQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC2 to EH02</string>
                    <key>Find</key>
                    <data>RUhDMg==</data>
                    <key>Replace</key>
                    <data>RUgwMg==</data>
                </dict>
            </array>
        </dict>
    </dict>
    <key>KernelAndKextPatches</key>
    <dict>
        <key>KextsToPatch</key>
        <array>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 20 in XHCI kext (9-series)</string>
                <key>MatchOS</key>
                <string>10.11.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g72M/v//EA==</data>
                <key>Replace</key>
                <data>g72M/v//FQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 26 in XHCI kext (100-series)</string>
                <key>MatchOS</key>
                <string>10.11.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g72M/v//EA==</data>
                <key>Replace</key>
                <data>g72M/v//Gw==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 20 in XHCI kext (9-series)</string>
                <key>MatchOS</key>
                <string>10.12.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g710////EA==</data>
                <key>Replace</key>
                <data>g710////FQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 26 in XHCI kext (100-series)</string>
                <key>MatchOS</key>
                <string>10.12.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g710////EA==</data>
                <key>Replace</key>
                <data>g710////Gw==</data>
            </dict>
        </array>
    </dict>
</dict>
</plist>
 
When writing the SSDT, would I use " AppleUSB30XHCIPort@XXXXXXX " for port name?

No. USInjectAll.kext uses port names like SSPx, SSxx, HPxx, PRxx, or HSxx.

And am I ok to use the SSDT template he provides in the write up or would it be different for the 9 series?

As per USBInjectAll.kext README, you should find the appropriate template in SSDT-UIAC-ALL.dsl.
 
I mean this one. Of course I did not add series 100 patches. These patches plus latest Kext seem to hit the spot. Do I always need to use patches AND kext?

Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ACPI</key>
    <dict>
        <key>DSDT</key>
        <dict>
            <key>Patches</key>
            <array>
                <dict>
                    <key>Comment</key>
                    <string>change _OSI to XOSI</string>
                    <key>Find</key>
                    <data>X09TSQ==</data>
                    <key>Replace</key>
                    <data>WE9TSQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC1 to EH01</string>
                    <key>Find</key>
                    <data>RUhDMQ==</data>
                    <key>Replace</key>
                    <data>RUgwMQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC2 to EH02</string>
                    <key>Find</key>
                    <data>RUhDMg==</data>
                    <key>Replace</key>
                    <data>RUgwMg==</data>
                </dict>
            </array>
        </dict>
    </dict>
    <key>KernelAndKextPatches</key>
    <dict>
        <key>KextsToPatch</key>
        <array>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 20 in XHCI kext (9-series)</string>
                <key>MatchOS</key>
                <string>10.11.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g72M/v//EA==</data>
                <key>Replace</key>
                <data>g72M/v//FQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 26 in XHCI kext (100-series)</string>
                <key>MatchOS</key>
                <string>10.11.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g72M/v//EA==</data>
                <key>Replace</key>
                <data>g72M/v//Gw==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 20 in XHCI kext (9-series)</string>
                <key>MatchOS</key>
                <string>10.12.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g710////EA==</data>
                <key>Replace</key>
                <data>g710////FQ==</data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>change 15 port limit to 26 in XHCI kext (100-series)</string>
                <key>MatchOS</key>
                <string>10.12.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
                <key>Find</key>
                <data>g710////EA==</data>
                <key>Replace</key>
                <data>g710////Gw==</data>
            </dict>
        </array>
    </dict>
</dict>
</plist>

After you create your custom SSDT, you will be under or at the 15-port limit and will not need the port limit patch.
 
After you create your custom SSDT, you will be under or at the 15-port limit and will not need the port limit patch.

I know where to place a custom SSDT as I had one on my NUC. But how do I create one? When you refer to the port limit patch you mean the DSDT or the KextToPatch one, or both?

Thanks again
 
I know where to place a custom SSDT as I had one on my NUC. But how do I create one? When you refer to the port limit patch you mean the DSDT or the KextToPatch one, or both?

Thanks again

Use SSDT-UIAC-ALL.dsl as a template for your own custom SSDT. Remove ports you don't need and set UsbConnector to the correct values for your ports.

There is only a KextsToPatch "port limit" patch. No such thing as "DSDT" port limit patch.
 
Use SSDT-UIAC-ALL.dsl as a template for your own custom SSDT. Remove ports you don't need and set UsbConnector to the correct values for your ports.

There is only a KextsToPatch "port limit" patch. No such thing as "DSDT" port limit patch.

Thanks for the reply. How do I know which ports to remove? Do I have to write down the IDs from system profiler and delete those in the template that don't match?

About the DSDT patch I mean this one:

Code:
<key>DSDT</key>
        <dict>
            <key>Patches</key>
            <array>
                <dict>
                    <key>Comment</key>
                    <string>change _OSI to XOSI</string>
                    <key>Find</key>
                    <data>X09TSQ==</data>
                    <key>Replace</key>
                    <data>WE9TSQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC1 to EH01</string>
                    <key>Find</key>
                    <data>RUhDMQ==</data>
                    <key>Replace</key>
                    <data>RUgwMQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC2 to EH02</string>
                    <key>Find</key>
                    <data>RUhDMg==</data>
                    <key>Replace</key>
                    <data>RUgwMg==</data>
                </dict>
 
Thanks for the reply. How do I know which ports to remove? Do I have to write down the IDs from system profiler and delete those in the template that don't match?

By testing all ports with both USB2 and USB3 devices while IORegistryExplorer is open, you can clearly see which ports were used and which were not.

About the DSDT patch I mean this one:

Code:
<key>DSDT</key>
        <dict>
            <key>Patches</key>
            <array>
                <dict>
                    <key>Comment</key>
                    <string>change _OSI to XOSI</string>
                    <key>Find</key>
                    <data>X09TSQ==</data>
                    <key>Replace</key>
                    <data>WE9TSQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC1 to EH01</string>
                    <key>Find</key>
                    <data>RUhDMQ==</data>
                    <key>Replace</key>
                    <data>RUgwMQ==</data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC2 to EH02</string>
                    <key>Find</key>
                    <data>RUhDMg==</data>
                    <key>Replace</key>
                    <data>RUgwMg==</data>
                </dict>

Those patches are independent from the port limit patch. _OSI->XOSI matches up with SSDT-XOSI.am. And the EHCx->EH0x rename patches are needed (as per post #1) to disconnect from native port injectors provided by Apple and to match against the names expected by USBInjectAll.kext.
 
Status
Not open for further replies.
Back
Top