Jump to content

[GUIDE] USB Fix El Capitan 10.11


830 posts in this topic

Recommended Posts

...

But I still has the sleep problem: instant wake after sleep. reason is EHC, remove _PRW doesn't help. Only disable internal usb bluetooth and camera can solve this.

You need to remove all _PRWs that correspond to the same GPE, not just the _PRW on EHCx.

Do you think we can do it by SSDT.aml injection ? So it will very easy to generate once you know your ports and it won't be impacted by updates ... 

 

a SSDT with only : 

_ADR for Address

_UPC / _PLD for Infos

_DSM for Cosmetics 

for ECH1, EHC2 and XCH1

which match a SMBIOS config ... 

 

See the SSDT attached

Using an injector is easier, and still survives updates. No reason to make it more complex.

IIRC you must first disable the original USB devices in the DSDT, I don't think you can just override them from an SSDT without disabling them first. I have not tried using an SSDT for USB but it should be possible to rename _SB.PCI0.EHC1/etc. to _SB.PCI0.EH01/etc. (using Clover config.plist DSDT binpatch) [you don't want to just rename all instances of EHC1/etc. to EH0/etc. because you want the original names so you can disable them], and then disable the original USB device. A short SSDT example:

DefinitionBlock ("GA-Z77X-UD5H.aml", "SSDT", 1, "APPLE", "tinySSDT-USB", 0x00000001)
{
	External (_SB.PCI0, DeviceObj)

	Scope (\_SB.PCI0)
	{
		/* Disabling the EHC1 device */
		Scope (EHC1) { Name (_STA, Zero) }
		/* Adding a new EH01 device */
		Device (EH01)
		{
			Name (_ADR, 0x001D0000)
			/* Put methods/whatever here */
		}
	}
} 
I haven't tested this technique with USB devices (I don't need to add new USB devices in my SSDT, I just add a _DSM method), but it has worked with other devices I've tried it with. Credits to Piker-Alpha for this technique.

 

This override technique has limitations:

- the _STA as 0 only works if _STA is not defined in the DSDT. An SSDT cannot redefine a symbol already defined in DSDT or an earlier SSDT.

- sometimes you can store 0 in _STA for the case that _STA is defined as a name (because then it is a Name(variable), not a method(code).

- but if _STA is a method (common), then you can't override it.

- you can play similar tricks with _ADR, provided _ADR is not a method. By assigning zero to _ADR in an _INI, you effectively "detach" the ACPI object from the associated PCIe object (because they are matched on address). Keep in mind that changing the _ADR detaches existing code using the old name from the PCI config. So, for example, if existing code tries to manipulate the PCI_config space associated, it will fail.

 

So... as long as you analyze your existing DSDT/SSDT code to see if what you're doing is safe, then it is fine.

 

IMHO, it is much easier to use config.plist/ACPI/DSDT/Patches to implement the rename, or do do it manually with search/replace.

I don't even do manual DSDT patches anymore, I just use Clover DSDT binpatches + a tinySSDT (based off work by Piker-Alpha) and it works well enough for me.

Clover's config.plist/ACPI/DSDT/Patches works fine for the "little stuff".

 

For highly invasive patches (such as for >8-bit EC fields, common ion battery status), it gets a bit unwieldy.

Hey I just ran along this post and can say that my G750Jx Asus Haswell Laptop only behaves like this when on battery only.

Disable "USB deep sleep" in BIOS.

There is no 15-port limitation if you use a port injector.

Not true. Still 15 ports per controller limit.

Do you have an example? The port injector does not unlock the 15 limit of XHC but reroute ports from XHC to EHC1 or EHC2.

Port injectors perform no "rerouting".

 

That is the job of FakePCIID_XHCIMux.kext+FakePCIID.kext.

You forgot to set port-count to the maximum count number of your ports.

Note that it is not a count of ports at all, but rather the maximum value expected for a port address.

I feel that there is no universal method for fixing USBs on El Captian which is why many are confused. Some say to edit the DSDT, others say make your own injector, and others say use dummy kexts. And then some say use fakepciid to override usb 2.0. I'm not even sure what method is the best.

...

First, dummy kexts (injectors with symlinks) are not needed.

 

And each solution builds on the last... In some cases, multiple solutions are needed.

 

On my u430:

- renamed EHCx->EH0x

- FakePCIID_XHCIMux (actually optional) to route USB2 ports on XHC to EH01

- correct DSDT patches to simulate a Windows version for Darwin (_OSI related)

- injectors for each controller (EH01/XHC) and for the hub ports

- correct BIOS settings

 

To reach a final solution, you need knowledge on what is going on and what each fix does.

Actually I forgot that I was using the FakePCIID Mux kext. That could be the reason why the AS2015 is detected as a USB 2.0 device. I remember before it was found under PXSX > AppleUSB30XHCIPort....

FakePCIID_XHCIMux affects only Intel controllers.

Link to comment
Share on other sites

So if you're dual booting Yos and El Cap you need a way to apply a different config.plist for each volume?

I don't need it, and you probably don't either, but if you're asking if there is a way... the answer is "Yes".

Link to comment
Share on other sites

First, dummy kexts (injectors with symlinks) are not needed.

 

And each solution builds on the last... In some cases, multiple solutions are needed.

 

On my u430:

- renamed EHCx->EH0x

- FakePCIID_XHCIMux (actually optional) to route USB2 ports on XHC to EH01

- correct DSDT patches to simulate a Windows version for Darwin (_OSI related)

- injectors for each controller (EH01/XHC) and for the hub ports

- correct BIOS settings

 

To reach a final solution, you need knowledge on what is going on and what each fix does.

 

FakePCIID_XHCIMux affects only Intel controllers.

 

Does this mean that if my motherboard is using the VIA805 USB 3.0 controller that controls the back 4 USB 3.0 ports, doing this port injector and patching the DSDT will make those ports work? The other ports that the motherboard has, 2 Front USB 3.0 and 6 USB 2.0 ports are controlled by intel and they work natively on El Capitan with no patches. People are saying that I have to wait for a 3rd party kext for the VIA 3.0 ports. Is that correct?

 

The VIA805 ports are detected (or OS X is lying) on OS X under PXSX, in verbose mode it throws "AppleUSBXHCI::createPorts: created port" message with ports 1-5 but that doesn't do anything. The ports receive power (USB drive light flashes forever) but OS X does not mount the USB drives. I'm not understanding why it bothers creating these ports when it doesn't let you use them anyways.

Link to comment
Share on other sites

Does this mean that if my motherboard is using the VIA805 USB 3.0 controller that controls the back 4 USB 3.0 ports, doing this port injector and patching the DSDT will make those ports work?

I don't know if the USB drivers in 10.11 support your device. All my XHCI controllers here are Intel.

Link to comment
Share on other sites

@ RehabMan

I don't understand at all! So, my USB 3 intel don't use at the top of velocity

 

http://www.insanelymac.com/forum/topic/306777-guide-usb-fix-el-capitan-1011/?p=2170908

Not possible to know what is going on from "System Information". You have to dig into ioreg.

Link to comment
Share on other sites

Ugh, still no luck with this. USB 1.1 or nothing.

 

Tried re-installing and them remembered that I never could install El Capitan straight on the hackintosh and instead had to install it via a real mac. Such a pain in the arse. Think at this rate I'll just have to suck it up and stick with Yosemite.

Link to comment
Share on other sites

Asrock Z77 Pro4M MB, USB3 ports working full speed El Capitan 10.11. My modell MacPro5,1.

 

Edit IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBXHCIPCI.kext/Contents/Info.plist - IOKitPersonalities

Copy/paste "MacPro6,1-XHC1" Dictionary.

Rename "MacPro6,1-XHC1-2" → "MacPro5,1-XHC1"

Save

Replace  IOUSBHostFamily.kext S/L/E

Run Kext Utility

Restart

 

USB3 speed 5Gb/s  :)

 

post-1073423-0-47646700-1443696943_thumb.png

 

IOUSBHostFamily.kext.zip

Link to comment
Share on other sites

Ehm. The "port" and "port-count" properties are all blank in /S*/L*/E*/IOUSBHostFamily.kext/C*/P*/AppleUSBEHCIPCI.kext/C*/Info.plist (El Capitan 10.11.1 (15B17c)) so there is no port restriction.

Does that mean that we would not need any DSDT rename fix?

Link to comment
Share on other sites

I'm using DSDT and DummyUSBXHCIPCI provided by the chap on the first page for my motherboard H87M-HD3 http://www.insanelymac.com/forum/topic/306777-guide-usb-fix-el-capitan-1011/page-1?do=findComment&comment=2147401

 

No matter what I do I can't get USB3 working, I have legacy usb disabled in bios and the other XHCI set to auto but my USB3.0 HDD will only run at 2.0 speeds.

 

I've attached IOREG and the DSDT I am using.

 

Can someone please tell me where I am going wrong, thanks.

Archive.zip

Link to comment
Share on other sites

Ehm. The "port" and "port-count" properties are all blank in /S*/L*/E*/IOUSBHostFamily.kext/C*/P*/AppleUSBEHCIPCI.kext/C*/Info.plist (El Capitan 10.11.1 (15B17c)) so there is no port restriction.

Not blank. Right click, "Show Raw Keys/Values"

Why not just use IOJones and be done with it lol, smaller human readable files ftw

I prefer IORegistryExplorer v2.1. It is faster, search is better, and the properties are sorted on the RHS.

 

You're entitled to use what you prefer, as am I.

  • Like 1
Link to comment
Share on other sites

×
×
  • Create New...