aboutsummaryrefslogtreecommitdiff
path: root/lib/libusb/usb-xhci.c
AgeCommit message (Collapse)AuthorFilesLines
2017-09-12usb-xhci: Reset ERSTSZ together with ERSTBAAlexey Kardashevskiy1-0/+2
When shutting down the adapter, SLOF writes 0 to the Event Ring Segment Table Base Address Register (ERSTBA) but does not reset the Event Ring Segment Table Size Register (ERSTSZ) which makes QEMU do DMA access at zero address which fails in unassigned_mem_accepts. This resets ERSTSZ right before resetting ERSTBA so these 2 registers can stay in sync. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2016-08-03usb: Set XHCI slot speed according to port statusThomas Huth1-5/+7
So far, the code was always assuming SuperSpeed for all devices, which seemed to work OK with QEMU ... but let's better play safe instead and use the speed from the port status instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2016-08-03usb: Build correct route string for USB3 devices behind a hubThomas Huth1-4/+10
To support USB3 devices attached to a hub, we've got to set the so-called "route string" in the slot context, which is a concatenation of the hub port numbers that need to be traversed between the root hub port and the destination device. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2016-08-03usb: Initialize USB3 devices on a hub and keep track of hub topologyThomas Huth1-4/+6
USB3 devices need to be initialized with usb3_dev_init(), so that they get assigned a proper slot ID. And for USB3 devices that are attached to a (non-root) hub, we also need to keep track of the hub topology, so a new field called "hub" is added to the struct usb_dev which references the hub devices where the current USB devices is attached to. The hub topology will be used later to build the so-called "route string" for the USB3 devices. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2016-08-03usb: Increase amount of maximum slot IDs and add a sanity checkThomas Huth1-0/+6
SLOF should be able to support more than just four devices on the four root hub ports. So we've got to increase the amount of possible slot IDs. Since QEMU supports up to 44 devices (four devices at the root ports + 5 tiers of hubs with 8 ports each), this seems to be a good new value instead. And to make sure that we do not accidentially get a buffer overflow when accessing the xhcd->xdevs[slot_id] array, this patch also add a sanity check at the beginning of the xhci_alloc_dev() function here. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2016-08-03usb: Move XHCI port state arrays from header to .c fileThomas Huth1-0/+17
Arrays should not be declared in a header (to avoid that it gets declared multiple times when the header is included more than once), so the ps_array_usbX settings should reside in the .c file instead. Signed-off-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2016-06-07usb-xhci: assign field4 before conditionalNikunj A Dadhania1-5/+4
Static analysis tool reported: file lib/libusb/usb-xhci.c line 1022 uninitialized `field4' file lib/libusb/usb-xhci.c line 1036 uninitialized `field4' Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Reviewed-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2016-05-02xhci: fix missing keys from keyboardNikunj A Dadhania1-12/+39
Current handling of the keyboard polling was very slow and keys were getting dropped. Done following for fixing this: * Use multiple buffers per TRB * Allocate buffers in xhci according to the number of TRBS. This reduces the delay of key? processing by getting rid of wait in the polling routine. Reported-by: Dinar Valeev <k0da@opensuse.org> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Tested-by: Dinar Valeev <k0da@opensuse.org> Tested-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2016-05-02xhci: add memory barrier after filling the trbNikunj A Dadhania1-0/+1
A memory barrier was missing after updating the trb details. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-12-01Stack optimization in libusb: split up setup_new_device()Thomas Huth1-1/+3
When scanning hubs, the code in libusb can be called recursively, for example usb_hub_init() calls setup_new_device(), which then calls slof_usb_handle() to execute Forth code for the next device. If that next device is a hub, we end up recursively in usb_hub_init() again. Since stack space is limited in SLOF, we can optimize here a little bit by splitting up the setup_new_device() function into the part that retrieves the descriptors (which takes most of the stack space in this code path since the descriptors are placed on the stack), and the part that populates the the device tree node of the new device (which is responsible for the recursion). Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-10-06usb-xhci: add keyboard supportNikunj A Dadhania1-1/+115
Add support for xhci interrupt pipes needed for keyboard handling Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-10-06usb-xhci: ready the link trb earlyNikunj A Dadhania1-7/+6
The keyboard events being async, need to prepare the link when last but one trb is queued. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-10-06usb-xhci: scan usb high speed portsNikunj A Dadhania1-9/+30
Current code scanned only the super speed ports. Add support for scanning high speed ports as well. Also re-org code to reduce duplication of code. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-10-06usb-xhci: bulk improve event handling loopNikunj A Dadhania1-9/+32
Since the controller was being used by single user, event poll loop works without verifying what event returned. Now with usb-keyboard addition where we will get keyboard events, this would not work. Transfer bulk would only look for response from the trb queued and ignore rest of the events. Moreover, while bulk transfer is going on, there are no keyboard events in booting use case. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-10-06usb-xhci: return on allocation failureNikunj A Dadhania1-1/+2
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-10-06usb-xhci: add delay in shutdown pathNikunj A Dadhania1-0/+12
QEMU implementation of XHCI doesn't implement halt properly. There might be ongoing activities and active DMAs, introduce 50ms delay during shutdown path. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2015-10-06usb-xhci: event trbs does not need link trbNikunj A Dadhania1-4/+6
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
2014-10-29usb-xhci: support xhci extended capabilitiesNikunj A Dadhania1-6/+31
commit 706c69e4 "xhci: fix port assignment" partially fixed the usb port numbering. Adding parsing of xhci extended capabilities, we can parse the overlapped ports accordingly and have proper port numbering. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2014-07-17xhci: fix port assignmentNikunj A Dadhania1-1/+1
Port assignment logic was generating negative port number Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2014-04-25xhci: fix controller stopNikunj A Dadhania1-1/+1
A bit operation bug left the controller in the running state causing PCI EEH in the host when using pci-passthru for USB3 device. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2014-01-20[oex]hci_exit: Check before freeing/unmapping memoryNikunj A Dadhania1-4/+8
While doing cleanup of the allocated memory, make sure addresses being unmapped/free were really allocated. During error conditions, some address would not have been. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2013-12-16usb-xhci: memory freeing and using returns as bool uniformlyNikunj A Dadhania1-26/+36
* Fix freeing of memory in error path * Boolean and int were used interchangebly at various points, consolidate it to use boolean Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2013-11-16Fix dprintf macros at various pointsNikunj A Dadhania1-1/+1
Signed-off-by: Avik Sil <aviksil@linux.vnet.ibm.com> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2013-11-15usb-xhci: add xhci host controller supportNikunj A Dadhania1-4/+1176
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2013-11-15usb-xhci: add xhci supportNikunj A Dadhania1-0/+105
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>