Re: Not enough host controller resources for new device state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, November 22, 2015 5:41 am, Alan Stern wrote:
> On Sat, 21 Nov 2015, Patrick Shirkey wrote:
>
>> On Sat, November 21, 2015 9:35 am, Peter Stuge wrote:
>> > Patrick Shirkey wrote:
>> >> > You essentially have to educate yourself on silicon level (ie. what
>> >> > hardware IP is being used in which consumer products) to sustain a
>> >> > dependency on 127 possible devices per bus.
>> >> >
>> >> > I guess you'll find that there are only very few xHCI IPs out
>> there,
>> >> > probably just three or four. I wouldn't be surprised if they all
>> have
>> >> > the same, or similar, limitations.
>> >>
>> >> Is there anything I can do at the system level to avoid disabling
>> xHCI
>> >> at
>> >> the BIOS level?
>> >
>> > Unfortunately not. The number of supported devices is now very much
>> > hardwired in the host controller hardware. Each connected device
>> > requires its own set of registers in xHCI, so when there is a limit
>> > it is a hard limit.
>> >
>> >
>>
>> That's a bit of a let down as it seems to make it even more difficult to
>> rely on USB for my specific use case in the future.
>>
>> In case anyone else comes across this thread do you mind giving a little
>> more detail on why xHCI overrides EHCI and why it is not possible to
>> disable or work around xHCI at the system level?
>
> xHCI is the controller technology that supports SuperSpeed (5 Gb/s), as
> used by many USB-3 devices.  EHCI is the controller technology that
> supports High Speed (480 Mb/s), used by many USB-2 devices.  (Note that
> xHCI also supports High Speed, as well as Full Speed (12 Mb/s) and Low
> Speed (1.5 Mb/s) which date back to USB-1.1.)
>
> If you disable your xHCI controller, USB connections will not be able
> to run at SuperSpeed.  Depending on how the motherboard is designed,
> they may fall back to High Speed (using an on-board EHCI controller) or
> they may not work at all (if the motherboard doesn't have any other USB
> controllers).
>
> This should explain why xHCI overrides EHCI.  If you have a
> SuperSpeed-capable device, you generally want it to run as fast as
> possible, which means it should connect to the xHCI controller and not
> to the EHCI controller.
>


Thank you again for this details response. It all makes perfect sense now.


> It _is_ possible to disable xHCI at the system level.  By sending the
> proper command to the appropriate sysfs file, you can unbind the
> xhci-hcd driver from the xHCI controller.  This will disable the
> controller, and so all further USB communications will run no faster
> than High Speed.  (Or if your computer doesn't have an EHCI controller,
> you won't get any further USB communications at all.)
>

Is there a method to determine if the system has multiple or single
controllers available?

Do you or anyone else here have a link to the sysfs command to unbind the
controller?

> Actually it's a little more complicated than that.  Some systems have a
> software-settable switch that determines whether devices will connect
> to the xHCI or the EHCI controller.  On such systems, Linux sets the
> switch to use xHCI, unless the kernel was built without xHCI support.
> Therefore, although it is possible to force the use of EHCI on such
> systems, in order to do so you have to rebuild the kernel.
>


In regards to the last item can you provide some more details on why the
software switch is only set if the kernel module is enable/disabled?

I assume it has something to do with compiler flags and run time efficiency?




--
Patrick Shirkey
Boost Hardware Ltd
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux