Cuando mi Macbook Air se cayó al suelo mientras estaba conectada una memoria USB, el conector USB del lado derecho se dañó. El puerto dejó de funcionar y desde entonces aparentemente tiene un pequeño cortocircuito. En efecto, la zona cercana a él se calienta y la batería del portátil se agota en una hora. Una reparación de hardware probablemente requeriría la sustitución de la placa lógica principal, ya que, por desgracia, este conector USB forma parte de esa placa. Una pieza de repuesto costaría 300 dólares y unas 2 horas de trabajo para un HW gugy experimentado, así que decidí que esto no me merece la pena.
No encontré ningún problema de software hasta que actualicé mi sistema de Mac OS X 10.8.6 Mountain Lion a 10.12.6 Sierra. Más tarde me enteré de que con 10.11 El Capitan la forma de incluir los puertos USB ha cambiado .
Cuando el sistema (cualquier Mac OS X 10.11 o posterior) arranca, tarda entre 2 y 3 veces más de lo habitual mientras emite constantemente dmesg
mensajes como los siguientes:
XHC1@14000000: AppleUSBXHCI::hardwareException: kUSBCommandReset did not clear
XHC1@14000000: AppleUSBHostController::setPowerStateGated: going to state 2 failed with 0xe00002e9
Después de la corrección mencionada a continuación, sigue dando ocasionalmente el siguiente mensaje, que es soportable y una buena indicación de la causa root:
AppleUSBHostPort::interruptOccurred: overcurrent detected with port status 0x4000, localSimulatedInterrupts = 0x0
Desde entonces, he estado luchando para encontrar una manera de desactivar ese puerto USB de manera que el arranque del sistema no se detenga y que el otro puerto USB del lado izquierdo siga siendo utilizable (al menos en el modo USB 2.0 de alta velocidad). Finalmente lo he conseguido, y comparto mi solución aquí para otros que puedan enfrentarse a un problema similar:
cd /System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns
Editar AppleUSBEHCIPCI.kext/Contents/Info.plist
para eliminar o comentar (utilizando el inicio de comentarios XML <!--
y terminar -->
) la entrada de AppleUSBXHCIPPT
:
<!--<key>AppleUSBXHCIPPT</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
<key>IOClass</key>
<string>AppleUSBXHCIPPT</string>
<key>IOPCIPauseCompatible</key>
<true/>
<key>IOPCIPrimaryMatch</key>
<string>0x1e318086</string>
<key>IOPCITunnelCompatible</key>
<true/>
<key>IOProbeScore</key>
<integer>1000</integer>
<key>IOProviderClass</key>
<string>IOPCIDevice</string>
</dict>-->
Como alternativa, y de forma más sencilla, desactive AppleUSBXHCIPCI
en conjunto:
sudo mv AppleUSBXHCIPCI.kext{,.disabled}
En ambos casos, finalmente
sudo touch /System/Library/Extensions && sudo kextcache -u /
y reiniciar.
Tenga en cuenta que la desactivación del controlador sobre la marcha:
kextunload -b com.apple.driver.usb.AppleUSBXHCIPCI
no funciona porque está en uso por alguna otra extensión del kernel.