[PATCH] xhci: Report max device limit when Enable Slot command fails.

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

 



On Mon, Apr 07, 2014 at 09:04:41AM +0000, Amund Hov wrote:
> 
> >>> The USB bus specification says that 255 devices can be connected to the
> >>> host, but that doesn't mean the xHCI host controller has all the
> >>> internal resources to support that.
> >
> > To me that sounds like such xHCI HCs can not be considered USB compliant. :\
> 
> I would tend to agree Peter. It sounds weird that the number of connected devices would
>  not be part of the  USB standard. On the other hand it makes sense as a host controller
> on a small tablet wouldn’t need to handle more than a few devices. Still, would be nice to
> have this in more clear print in resources online which frequently quote the 127 number
> with reservations made on bandwidth, not hardware registers.
> 
> I realise this might not be relevant to kernel development at this point,
> so I’ll take my ranting elsewhere.

I completely understand your frustration, and it actually is relevant to
kernel development. :)  Perhaps the attached patch would have at least
saved you some time and frustration in debugging the driver and host
issue?

Sarah Sharp

>8-------------------------------------------------------------------8<

xHCI host controllers may only support a limited number of device slot
IDs, which is usually far less than the theoretical maximum number of
devices (255) that the USB specifications advertise.  This is
frustrating to consumers that expect to be able to plug in a large
number of devices.

Add a print statement when the Enable Slot command fails to show how
many devices the host supports.  We can't change hardware manufacturer's
design decisions, but hopefully we can save customers a little bit of
time trying to debug why their host mysteriously fails when too many
devices are plugged in.

Signed-off-by: Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx>
Reported-by: Amund Hov <Amund.Hov@xxxxxxxxxx>
---
 drivers/usb/host/xhci.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 26dffd4e6d73..421a3a2c4509 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -3668,6 +3668,9 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
 
 	if (!xhci->slot_id) {
 		xhci_err(xhci, "Error while assigning device slot ID\n");
+		xhci_err(xhci, "Max number of devices this xHCI host supports is %u.\n",
+				HCS_MAX_SLOTS(
+					readl(&xhci->cap_regs->hcs_params1)));
 		return 0;
 	}
 
-- 
1.8.3.2

--
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