Contribute
Register

The New Beginner's Guide to USB Port Configuration

For series 7/8/9 motherboards, the method is a bit different and time has forgotten us who have these motherboards.....

I researched and found that for the 9 series of chipset (7/8/9 actually), I needed FakePCIID_XHCIMux.kext and FakePCIID.kext.




My process to get perfection (on the Gigabyte H97-HD3 which has 4 physical USB 3.0 and 2 physical USB 2.0 at the rear, 2 USB 3.0 and 2 USB 2.0 at the front (from an onboard header)), Haswell CPU running as Mac Pro 7,1, OpenCore 0.6.9.




1. Rename EHC1 to EH01; rename EHC2 to EH02, rename XHCI to XHC; rename XHC1 to XHC under ACPI->Patch


2. Initially untick XhciPortLimit


3. Remove USBInjectAll.kext. Put in FakePCIID_XHCIMux.kext and FakePCIID.kext.

.


4. Save & Reboot


.


5. Run corpnewt's USBMap script. This time all 6 SS ports show up numbered nicely 1-6 under XHC, with USB 2.0 detected on EHC. Plug in a USB 3.0 to each port to register.


6. This time USBMap is correct. Just generate the kext and no need editing.


7. Put the above USBMap.kext in the correct OC folder, re-tick XhciPortLimit and reboot.

USB 3.0 devices show up correctly under the XHC type.
USB 2.0 are handled by EHC1/2 and these are not displayed "live"by hackintool. They do show up in SystemReport and IORegistryExplorer.

Try this. Not applicable to motherboards newer than series 9 that do not have EHC anymore I think.

As RehabMan described it "The effect is to route any USB2 devices attached to the USB2 pins on the XHC ports to EHC1. In other words, handle USB2 devices with the USB2 drivers instead of the USB3 drivers (AppleUSBEHCI vs. AppleUSBXHCI)."when using FakePCIID_XHCIMux.kext


Screenshot 2021-05-31 at 12.19.59 AM.png
 
Last edited:
For series 7/8/9 motherboards, the method is a bit different and time has forgotten us who have these motherboards.....

I researched and found that for the 9 series of chipset (7/8/9 actually), I needed FakePCIID_XHCIMux.kext and FakePCIID.kext.




My process to get perfection (on the Gigabyte H97-HD3 which has 4 physical USB 3.0 and 2 physical USB 2.0 at the rear, 2 USB 3.0 and 2 USB 2.0 at the front (from an onboard header)), Haswell CPU running as Mac Pro 7,1, OpenCore 0.6.9.




1. Rename EHC1 to EH01; rename EHC2 to EH02, rename XHCI to XHC; rename XHC1 to XHC under ACPI->Patch


2. Initially untick XhciPortLimit


3. Remove USBInjectAll.kext. Put in FakePCIID_XHCIMux.kext and FakePCIID.kext.

.


4. Save & Reboot


.


5. Run corpnewt's USBMap script. This time all 6 SS ports show up numbered nicely 1-6 under XHC, with USB 2.0 detected on EHC. Plug in a USB 3.0 to each port to register.


6. This time USBMap is correct. Just generate the kext and no need editing.


7. Put the above USBMap.kext in the correct OC folder, re-tick XhciPortLimit and reboot.

USB 3.0 devices show up correctly under the XHC type.
USB 2.0 are handled by EHC1/2 and these are not displayed "live"by hackintool. They do show up in SystemReport and IORegistryExplorer.

Try this. Not applicable to motherboards newer than series 9 that do not have EHC anymore I think.

As RehabMan described it "The effect is to route any USB2 devices attached to the USB2 pins on the XHC ports to EHC1. In other words, handle USB2 devices with the USB2 drivers instead of the USB3 drivers (AppleUSBEHCI vs. AppleUSBXHCI)."when using FakePCIID_XHCIMux.kext


View attachment 520230

Thanks for your input - it is mostly correct. Why use a port-limit removal patch but not USBInjectAll.kext?

The macOS XHCI controllers do have USB2 drivers. The point about moving USB2 ports off XHCI and onto EHCI is to enable more USB3 ports to be used within the 15-port controller limit, especially on laptops, NUC and ITX boards. And of course @RehabMan was the genius who created USBInjectAll.kext and FakePCIID_XHCIMux.kext.

This is a Guide using Hackintool and it's export files - USBPorts.kext. It is not a guide for USBMap.kext as that is an off-site method supported by CorpNewt etc.

:)
 
This i believe is what a Hackintool USB tab should look like on a Series-9 motherboard (GA-Z97X-UD5H).

Screenshot 2021-05-30 at 18.47.00.png

The EHCx controllers have been disabled with an SSDT-EHCx_OFF.aml table (copy attached below). This means all the USB ports are activated by the XHC controller.

The SSDT should be added to either the /CLOVER/ACPI/patched folder or the /OC/ACPI folder & a corresponding entry in the /OC/config.plist > ACPI section.

The rename patches required for a Gigabyte motherboard would include these three entries:
  • change EHC1 to EH01
  • change EHC2 to EH02
  • change XHCI to XHC_
You would not need the change XHC1 to XHC_ rename patch as no such device exists in the systems DSDT.aml. Well it doesn't in any of the six different Gigabyte boards that I own.

You need only have USBInjectAll.kext installed during the 'USB Discovery' phase. It can be removed once the USBPorts.kext has been generated by Hackintool, and the kext has been added to the /CLOVER/kexts/Other or /OC/Kexts folders & /OC/config.plist > Kernel section.

I have never needed to use FakePCIID.kext & FakePCIID_XHCIMux.kext to get my USB ports generated and configured correctly. I previously (before I used the attached SSDT) had to use the USBInjectAll.kext boot argument to separate the EHCx and XHC ports, as there were too many ports on some of the boards and not all showed up during the USB port discovery phase.

Just my two pennies worth!

Forgot to say this is using the normal iMac 15,1 that works with a Haswell Refresh system.
 

Attachments

  • SSDT-EHCx_OFF.aml.zip
    820 bytes · Views: 33
This i believe is what a Hackintool USB tab should look like on a Series-9 motherboard (GA-Z97X-UD5H).

View attachment 520242

The EHCx controllers have been disabled with an SSDT-EHCx_OFF.aml table (copy attached below). This means all the USB ports are activated by the XHC controller.

The SSDT should be added to either the /CLOVER/ACPI/patched folder or the /OC/ACPI folder & a corresponding entry in the /OC/config.plist > ACPI section.

The rename patches required for a Gigabyte motherboard would include these three entries:
  • change EHC1 to EH01
  • change EHC2 to EH02
  • change XHCI to XHC_
You would not need the change XHC1 to XHC_ rename patch as no such device exists in the systems DSDT.aml. Well it doesn't in any of the six different Gigabyte boards that I own.

You need only have USBInjectAll.kext installed during the 'USB Discovery' phase. It can be removed once the USBPorts.kext has been generated by Hackintool, and the kext has been added to the /CLOVER/kexts/Other or /OC/Kexts folders & /OC/config.plist > Kernel section.

I have never needed to use FakePCIID.kext & FakePCIID_XHCIMux.kext to get my USB ports generated and configured correctly. I previously (before I used the attached SSDT) had to use the USBInjectAll.kext boot argument to separate the EHCx and XHC ports, as there were too many ports on some of the boards and not all showed up during the USB port discovery phase.

Just my two pennies worth!

Forgot to say this is using the normal iMac 15,1 that works with a Haswell Refresh system.

Great summary. :thumbup:

I agree that it makes more sense on a mixed controller chipset to activate and use the XHCI.

<rant>When did Apple ever use both EHCI and XHCI controllers together? This is an important point many miss when advocating 15-ports per controller, suggesting a macOS system can have 45x Intel ports. In theory. For a start the two EHCI controllers offer 8x + 6x USB2 ports, not 15 each (Less on certain chipsets). Has anyone reverse engineered Apple's USB code? I've seen people "prove" their point by force of argument, rather than empirical proof. </rant>

Another way to do the job you describe is not to use the *.aml but instead just activate all ports using USBnjectAll.kext and then delete any EHCI from USBPorts.kext. The danger - in my opinion - of disabling EHCI completely is that some motherboards use a third-party chip to augment Intel USB2 ports with USB3 functionality. (Others may offer both USB2 and USB3 in their entirety).


Probably fourpence-worth there!

:)
 
This i believe is what a Hackintool USB tab should look like on a Series-9 motherboard (GA-Z97X-UD5H).

View attachment 520242

The EHCx controllers have been disabled with an SSDT-EHCx_OFF.aml table (copy attached below). This means all the USB ports are activated by the XHC controller.

The SSDT should be added to either the /CLOVER/ACPI/patched folder or the /OC/ACPI folder & a corresponding entry in the /OC/config.plist > ACPI section.

The rename patches required for a Gigabyte motherboard would include these three entries:
  • change EHC1 to EH01
  • change EHC2 to EH02
  • change XHCI to XHC_
You would not need the change XHC1 to XHC_ rename patch as no such device exists in the systems DSDT.aml. Well it doesn't in any of the six different Gigabyte boards that I own.

You need only have USBInjectAll.kext installed during the 'USB Discovery' phase. It can be removed once the USBPorts.kext has been generated by Hackintool, and the kext has been added to the /CLOVER/kexts/Other or /OC/Kexts folders & /OC/config.plist > Kernel section.

I have never needed to use FakePCIID.kext & FakePCIID_XHCIMux.kext to get my USB ports generated and configured correctly. I previously (before I used the attached SSDT) had to use the USBInjectAll.kext boot argument to separate the EHCx and XHC ports, as there were too many ports on some of the boards and not all showed up during the USB port discovery phase.

Just my two pennies worth!

Forgot to say this is using the normal iMac 15,1 that works with a Haswell Refresh system.

Ok. Following you exact description, on my H97/Z97-HD3 Hackintool shows this:



Screenshot 2021-05-31 at 11.30.08 PM.png



I have no idea why only 1 USB 3.0 (SS) shows up. This was the reason I looked elsewhere..... I will show what I get next using UtterDisbelief method above.......
 
Great summary. :thumbup:

I agree that it makes more sense on a mixed controller chipset to activate and use the XHCI.

<rant>When did Apple ever use both EHCI and XHCI controllers together? This is an important point many miss when advocating 15-ports per controller, suggesting a macOS system can have 45x Intel ports. In theory. For a start the two EHCI controllers offer 8x + 6x USB2 ports, not 15 each (Less on certain chipsets). Has anyone reverse engineered Apple's USB code? I've seen people "prove" their point by force of argument, rather than empirical proof. </rant>

Another way to do the job you describe is not to use the *.aml but instead just activate all ports using USBnjectAll.kext and then delete any EHCI from USBPorts.kext. The danger - in my opinion - of disabling EHCI completely is that some motherboards use a third-party chip to augment Intel USB2 ports with USB3 functionality. (Others may offer both USB2 and USB3 in their entirety).


Probably fourpence-worth there!

:)

Using your method of omitting SSDT-EHCx_OFF.aml, I get the following on hackintool after a sweep and refresh:

Screenshot 2021-05-31 at 11.40.34 PM.png




Screenshot 2021-05-31 at 11.40.48 PM.png




So I am not sure what gives.......again only 1 SS
 

Attachments

  • Screenshot 2021-05-31 at 11.40.34 PM.png
    Screenshot 2021-05-31 at 11.40.34 PM.png
    185.9 KB · Views: 25
Using your method of omitting SSDT-EHCx_OFF.aml, I get the following on hackintool after a sweep and refresh:

View attachment 520300



View attachment 520301



So I am not sure what gives.......again only 1 SS

The first screen with only one USB3 port was because there was no USBInjectAll.kext and port-limit removal patch. You need both ...

As your second and third screengrab proves.

So ...

Do the port discovery process to identify all the ports you have and need, both USB2 and USB3.

Use Hackintool to remove all the ones you do not need. Aim for the magic 15 left.

Export the USBPorts.kext.

Remove or disable USBInjectAll.kext and the patch. Install the USBPorts.kext.

When you reboot, double-check your ports again with Hackintool BUT remember to click on the Broom icon and the Circular Arrows icon on the bottom row to refresh your display.

:)
 
Screenshot 2021-06-01 at 7.18.35 AM.png



The closest to all ports working. HS 1 does not detect a USB 2 but detects USB 3.0. The rest all works. I did not delete PR11 and PR21. I had to include HS01 in order to get SS01 to work.




The "Closest" to all ports working. Of course it is due to total > 15. Only HS01 doesn't work. xhciportlimit is ticked. Renames done.
 
You have none of the physical USB2 ports identified with the 'Connector' set as USB2.

The internal USB2 header ports are also set as USB3, which is wrong, they should be set as Internal.

This configuration will cause you issues unless you change the incorrectly defined USB ports.
 
You have none of the physical USB2 ports identified with the 'Connector' set as USB2.

The internal USB2 header ports are also set as USB3, which is wrong, they should be set as Internal.

This configuration will cause you issues unless you change the incorrectly defined USB ports.
Screenshot 2021-06-01 at 9.35.40 AM.png




Same. HS01 does not detect USB 2.0 device but OK with USB 3.0.
 
Back
Top