Jump to content

[GUIDE] USB Fix El Capitan 10.11


830 posts in this topic

Recommended Posts

hi thanks buddy which solution would u prefer or how can i handle this

My solution is detailed in this thread (you can look for my posts as easily as I can).

 

I rename EHC1/EHC2 to EH01/EH02 via direct DSDT edits or via Clover config.plist/ACPI/DSDT/Patches. I leave XHC as XHC (no rename to XHC1).

 

Those names are not used by Apple, which avoids conflicts with Apple's existing injectors.

 

Then I build an injector kext (not "dummy" kext) to add the ports needed for the specific computer, matching on the names EHC1/EHC2/XHC. And add a hub port injector if needed, using an IOProbeScore=5000 to force recognition of my hub port injector over any system provided hub port injector.

  • Like 1
Link to comment
Share on other sites

ok thanks but the question is how to identify which one is the right port any help would be greatly appreciated

 

i have attached some screen short if u want to look in  i have also attached  my dsdt file in the frist post

You can see the list of potential ports in your DSDT.

 

Also you can see the active ones (where _STA returns active), in IOACPIPlane in ioreg.

Link to comment
Share on other sites

The port-count is actually not a "count of ports", but actually the maximum value for 'port' in the 'ports' dictionary.

 

Poor naming on the part of Apple.

Ah, okey. I didn't know. Thanks for the information. 

Link to comment
Share on other sites

Does anybody know how to add xHCI data into a dsdt that doesn't have any? Or would anyone be willing to edit one for me?

I have a GA-H61N-USB3 rev 1 board. DSDT from phonymacx86.com repository
Using F8 bios.

The board uses the FL1009 USB3 chipset, which is basically the same as the FL1100 chipset albeit minus 2 ports.

The FL1100 chipset is natively supported, so maybe with some kept editing and a proper DSDT I would be able to boot with USB3 enabled. Currently it must be disabled USB3 in the bios, with it disabled it breaks sleep in both 10.10 and 10.11.

Thank you,
BNZ

 

EDIT- I made some non-usb3 edit (graphics, AHCI, sata, etc) to the "original" DSDT. I have attached my current version and a IO dump. 

DSDT.aml.zip

bc2’s-iMac.ioreg.zip

Link to comment
Share on other sites

@RehabMan

 

I came to the same conclusion as you about renaming devices and using an injector kext but I can't for the life of me get the USB3 ports active on my Asus z97 board. My DSDT is similar to chicOn's earlier on in the thread in that the address of each SSP port in determined by :

Method (_ADR, 0, NotSerialized)  // _ADR: Address
                    {
                        Return ((XSPA + Zero))
                    }

I have tried to determine the value of XSPA using ACPIDebug and adding the line \RMDT.PUSH(XSPA) into the Method but console shows ACPIDebug loading but no output. If I look at IOACPIPlane in ioreg then i get all the SSP ports showing an _STA of 0xffffffff but the _ADR value of each changes from one boot to the next. The net result is that all USB3 devices  attach to EHCA or EHCB and are seen as USB2. No devices ever attach to Device (XHC). Any help here in how to determine the port value for each SSP would be much appreciated.

Link to comment
Share on other sites

@RehabMan

 

 

 

I came to the same conclusion as you about renaming devices and using an injector kext but I can't for the life of me get the USB3 ports active on my Asus z97 board. My DSDT is similar to chicOn's earlier on in the thread in that the address of each SSP port in determined by :

Method (_ADR, 0, NotSerialized)  // _ADR: Address
                    {
                        Return ((XSPA + Zero))
                    }
I have tried to determine the value of XSPA using ACPIDebug and adding the line \RMDT.PUSH(XSPA) into the Method but console shows ACPIDebug loading but no output. If I look at IOACPIPlane in ioreg then i get all the SSP ports showing an _STA of 0xffffffff but the _ADR value of each changes from one boot to the next. The net result is that all USB3 devices  attach to EHCA or EHCB and are seen as USB2. No devices ever attach to Device (XHC). Any help here in how to determine the port value for each SSP would be much appreciated.

 

If you're using a port injector, ACPI is not used to determine the port address as it is specified by the 'ports' dictionary. So it is not unexpected that your _ADR method may not be called.

 

But that's only guess due to incomplete information.

 

If you want me to look at something post ioreg with IORegistryExplorer v2.1 and 'patchmatic -extract' output (so I can see the DSDT/SSDTs loaded).

Link to comment
Share on other sites

I have the same problem with my ASUS Z-97 Deluxe board. I tried the Fake PCIID fix and some others. Nothing did work.

 

Will post ioreg and the used DSDT and SSDT later also.

 

Thank you very much for your support RehabMan!

Link to comment
Share on other sites

If you're using a port injector, ACPI is not used to determine the port address as it is specified by the 'ports' dictionary. So it is not unexpected that your _ADR method may not be called.

 

But that's only guess due to incomplete information.

 

If you want me to look at something post ioreg with IORegistryExplorer v2.1 and 'patchmatic -extract' output (so I can see the DSDT/SSDTs loaded).

Thanks for getting back. Attached is ioreg and patchmatic output  :) I am not convinced my XHC port values in the injector are correct. Should I just delete the XHC entry in the injector and repost ioreg?

Link to comment
Share on other sites

Thanks for getting back. Attached is ioreg and patchmatic output  :) I am not convinced my XHC port values in the injector are correct. Should I just delete the XHC entry in the injector and repost ioreg?

The ioreg is corrupt. Please use IORegistryExplorer v2.1 as requested.

 

XHC device in DSDT should not be named XHC1... It may cause conflicts with your port injector and injectors provided by the system.

 

The reason you see no output from ACPIDebug for the _ADR method is because you placed the call to \RMDT.PUSH *after* the return statement. Method execution ceases at Return. The code you added is unreachable.

 

See:

                    Method (_ADR, 0, NotSerialized)  // _ADR: Address
                    {
                        Return (Add (XSPA, Zero))  // execution of method stops here...
                        \RMDT.PUSH (XSPA)  // !! this code is not reachable !!
                    }
Link to comment
Share on other sites

Here is my ioreg export (using 2.1) and the patchmatic extract.

Asus Z97-Deluxe.

 

 

 

PS: I tried to use the attached DummyKext's as a fix, because they are also from a Z97 motherboard.

Start by renaming EHC1/EHC2 to EH01/EH02. This will test your DSDT _UPC/_PLD methods. If they are good, no injector will be needed.

 

On the XHC you can see you have HS01 through HS14, plus one SS port SSP1. Does this reflect reality? DSDT shows an SSP2.

 

DSDT is not patched to simulate a version of Windows with "Darwin". This could be part of your problem...

Link to comment
Share on other sites

Start by renaming EHC1/EHC2 to EH01/EH02. This will test your DSDT _UPC/_PLD methods. If they are good, no injector will be needed.

 

Thanks again! I'm a complete newbie at this. Where would I rename the name of the USB2 controllers in the DSDT.aml? Just do a "string replace" on the whole file or at a specific position?

Link to comment
Share on other sites

Thanks again! I'm a complete newbie at this. Where would I rename the name of the USB2 controllers in the DSDT.aml? Just do a "string replace" on the whole file or at a specific position?

Simple find/replace.

Link to comment
Share on other sites

Thanks again! I'm a complete newbie at this. Where would I rename the name of the USB2 controllers in the DSDT.aml? Just do a "string replace" on the whole file or at a specific position?

 

Use can also use this simple DSDT patch...

# Rename USB 2.0 devices for OS X El Capitan support.
#
# For more information about USB and OS X El Capitan visit:
# http://www.insanelymac.com/forum/topic/306777-guide-usb-fix-el-capitan-1011/

into device label EHC1 set_label begin EH01 end;
into device label EHC2 set_label begin EH02 end;
into_all all code_regex EHC1 replaceall_matched begin EH01 end;
into_all all code_regex EHC2 replaceall_matched begin EH02 end
Link to comment
Share on other sites

Use can also use this simple DSDT patch...

# Rename USB 2.0 devices for OS X El Capitan support.
#
# For more information about USB and OS X El Capitan visit:
# http://www.insanelymac.com/forum/topic/306777-guide-usb-fix-el-capitan-1011/

into device label EHC1 set_label begin EH01 end;
into device label EHC2 set_label begin EH02 end;
into_all all code_regex EHC1 replaceall_matched begin EH01 end;
into_all all code_regex EHC2 replaceall_matched begin EH02 end

 

It does not work (in this case). Find/Replace is more complete.

 

I'll leave it as an exercise for the reader to come up with a complete MaciASL patch for the DSDT in #238.

  • Like 1
Link to comment
Share on other sites

Start by renaming EHC1/EHC2 to EH01/EH02. This will test your DSDT _UPC/_PLD methods. If they are good, no injector will be needed.

 

On the XHC you can see you have HS01 through HS14, plus one SS port SSP1. Does this reflect reality? DSDT shows an SSP2.

 

DSDT is not patched to simulate a version of Windows with "Darwin". This could be part of your problem...

 

The Windows patch was a very good direction. I have no applied the USB2 rename and the windows patch (using the Windows13 definition if Darwin matches).

 

Now, I can use the ASM107x USB3 Controller. But the Intel USB 3 controller does not work yet... 

 

But at least one thing off the list ;-)

post-1582146-0-72007500-1440699889_thumb.png

Link to comment
Share on other sites

The ioreg is corrupt. Please use IORegistryExplorer v2.1 as requested.

 

XHC device in DSDT should not be named XHC1... It may cause conflicts with your port injector and injectors provided by the system.

 

 

Cracked it! Thanks very much RehabMan for pointing me in the right direction  :D This is what I did:

1.  Disabled Asmedia USB3 in Bios

2.  In DSDT:

    Search and replace XHC1 with XHC

    Search and replace EHC1 with EHCA

    Search and replace EHC2 with EHCB

    Replaced If (_OSI ("Windows 2012")) with  If(LOr(_OSI("Darwin"),_OSI("Windows 2013")))

  

3. Injector kext only containing the kUSBMuxDisabled flag for EHCA and EHCB (no port entries there).

 

Link to comment
Share on other sites

Cracked it! Thanks very much RehabMan for pointing me in the right direction  :D This is what I did:

1.  Disabled Asmedia USB3 in Bios

2.  In DSDT:

    Search and replace XHC1 with XHC

    Search and replace EHC1 with EHCA

    Search and replace EHC2 with EHCB

    Replaced If (_OSI ("Windows 2012")) with  If(LOr(_OSI("Darwin"),_OSI("Windows 2013")))

  

3. Injector kext only containing the kUSBMuxDisabled flag for EHCA and EHCB (no port entries there).

 

Where did you disable the Asmedia USB3 Controller in the bios? I do not find that option?...

Link to comment
Share on other sites

@ thebo

 

try this attachicon.gifDummyUSBXHCIPCI.kext.zip that has path of SSP1-SSP6.  Still need FakePCIID and FakePCI_Mux. 

 

see info.plist for detail and compare the old one. 

 

I think you don't need DummyUSBEHCIPCI.kext since your smbios is iMac15,1 that has both EHC1 and EHC2 in AppleUSBEHCIPCI.kext's info.plist.

 

Thank you very much! Will try this evening!

Link to comment
Share on other sites

×
×
  • Create New...