- Oct 7, 2011
- ASUS ProArt Z490 Creator 10G
- Integrated Graphics Processor
In Step 3 I am not getting "Populated: XHC: 15, AppleUSBXHCITR: 4" at the bottom of the list after entering my 15 ports. Instead I am getting "Populated: XHC: 15, pci8086,15ec: 4". (See attached screenshot). Is there something I am doing incorrectly?USB Mapping Guide
As noted in the latest OpenCore Release (0.6.7) there is a potential issue with Big Sur 11.3 where a boot loop can happen when "XhciPortLimit" is set to "True" (You will likely have this set to true if you haven't made a USB map yet). There is no way to know if the issue will affect this board but it makes sense to have a USB map ready so we can disable this Kernel Quirk and be more future-proofed.
We now know that as of Big Sur 11.3 USB will be completely broken on this board when using USBInjectAll, so it's important to create a map before you update, if you are doing a fresh install of Big Sur I'd advice to start with a version older than 11.3 and update after you have a working usbmap.
Update: The only working ports are HS in the rear type-C ports.
1. Choosing 15 Ports:
Here are all ports on our motherboard:
View attachment 511825
The maximum number of ports for any single controller is 15 so we need to decide which ports from the XHC controller we want to keep out of the potential 26 . Our USB3 ports are actually two separate ports: USB2(HS) and USB3(SS). There are 3 ports we can ignore as they are not used by the macOS at all: HS12 (LED Controller), USR1 & USR2.
Now we need to make a list of all the HS and SS ports we want to keep, I recommend writing it down in note form. Here is what I went with as an example: HS01, HS02, HS03, HS04, HS07, HS09, HS10, HS11, SS01, SS02, SS03, SS04, SS07, SS09, SS10.
I removed ports 5 & 6 completely since they are the slowest. I also removed the HS capability from the Type-C ports on the back since only iOS devices use it for syncing, which I will do with my Front Panel type-c connector instead.
2. System Preparation:
ALWAYS HAVE A USB RECOVERY BOOT HANDY!! If you miss some of these files you may not be able to boot.
- Add USBInjectAll-400series-Dren.kext to OC/Kexts. Remove all other USB injectors (USBInjectAll.kext, USBPorts.kext and USBMap.kext), (Big thanks to @dolgarrenan)
- Add @Stork's Thunderbolt 3 SSDT to OC/ACPI, (Big thanks to @Stork) (linked in original post).
- Add SSDT-RHUB.aml or your own USB reset SSDT to OC/ACPI,
- Download USBMap and make the '.command' executable.
- Set Kernel/Quirks/XhciPortLimit to True
- Make sure your config includes all the files we've added.
3. Creating the map in USBMap:
Open USBMap.command and click "D" to discover ports. You should see a list of 30 items (26 + 4), if not then you may have missed something from the System Preparation section. Click "Q" to return to the main menu.
Now click "P" to Edit & Create USBMap.kext. I like to start by clicking "N" to remove all ports from the selection.
Then we're going to enter a comma separated list of all the ports we want to keep. e.g. "1,2,3".
We should now see Populated: XHC: 15, AppleUSBXHCITR: 4 at the bottom of this list.
View attachment 511826
OK, we have a list of 15 ports, great! But don't break out the champagne, yet. Now we need to figure what the correct connector type is for each port, I am only going to cover the ports that are actually on this board (we don't have USB2 external ports).
"3" - USB3 Type-A
"9" - USB Type-C
"10" - USB Type-C where ACPI port changes if you flip the connector (Our internal USB3.1 header does this).
"255" - Internal (for Bluetooth only)
As you may have noticed from your USBMap list, all ports are set to type "3" which is USB 3 Type-A
Lets start by correctly setting our internal Bluetooth (port 9 / HS11) to "255"
Now lets add the Type C ports using type 9, like so:
Remember to set the Thunderbolt ports to Type C too:
Finally we need to deal with the Front USB3.1 header, set this to type 10:
4. Finishing up:
Now that you have a list of 15 XHC ports and 4 Thunderbolt ports with the correct connector type set we can generate our kext.
1. Click "K" Build USBMap.kext, which will create a USBMap.kext file in the "Results" folder of USBMap.
2. Copy "USBMap.kext" to OC/Kexts
3. Remove: USBInjectAll-400series-Dren.kext
4. Set Kernel/Quirks/XhciPortLimit to False (V Important)
5. Update config to reflect these changes.
5. Confirming it Works:
View attachment 511827
USBMap after applying the new map we created
View attachment 511848
Congrats, now you have a fully working USBmap
I have always used a different app to make USB maps (Hackintool), the GUI is a lot cleaner and easier to understand. The reason I made this guide with USBmap was because the Thunderbolt ports will not show up in Hackintool without removing the TB3 Hot swap SSDT. Creating a map in Hackintool will essentially omit the entire Thunderbolt controller in a kind of "ignored" state, this means the rear USB3 type C will still work but won't be listed in system profiler. I wish I knew more to know where the line between cosmetics and functionality lie between the two methods but based on all my research I am confident this is the best approach.
More to come, feel free to leave suggestions on how I can improve it. Apologies for grammar / formatting.
EDIT: The front USB 3.1 Header changes ACPI port (HS07/SS07) depending which way you plug it in.
Set HS07 and SS07 to type 10 instead of 9.
EDIT: Noted that rear usb type c ports still work at HS speeds without a usbmap (useful for recovery).