summaryrefslogtreecommitdiff
path: root/include/linux/usb (unfollow)
Commit message (Collapse)Author
2020-12-02USB: core: add endpoint-blacklist quirkJohan Hovold
commit 73f8bda9b5dc1c69df2bc55c0cbb24461a6391a9 upstream Add a new device quirk that can be used to blacklist endpoints. Since commit 3e4f8e21c4f2 ("USB: core: fix check for duplicate endpoints") USB core ignores any duplicate endpoints found during descriptor parsing. In order to handle devices where the first interfaces with duplicate endpoints are the ones that should have their endpoints ignored, we need to add a blacklist. Tested-by: edes <edes@gmx.net> Cc: stable <stable@vger.kernel.org> Signed-off-by: Johan Hovold <johan@kernel.org> Link: https://lore.kernel.org/r/20200203153830.26394-2-johan@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> [sudip: adjust context] Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-05USB: serial: ir-usb: fix link-speed handlingJohan Hovold
commit 17a0184ca17e288decdca8b2841531e34d49285f upstream. Commit e0d795e4f36c ("usb: irda: cleanup on ir-usb module") added a USB IrDA header with common defines, but mistakingly switched to using the class-descriptor baud-rate bitmask values for the outbound header. This broke link-speed handling for rates above 9600 baud, but a device would also be able to operate at the default 9600 baud until a link-speed request was issued (e.g. using the TCGETS ioctl). Fixes: e0d795e4f36c ("usb: irda: cleanup on ir-usb module") Cc: stable <stable@vger.kernel.org> # 2.6.27 Cc: Felipe Balbi <balbi@kernel.org> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Johan Hovold <johan@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-11-06USB: gadget: Reject endpoints with 0 maxpacket valueAlan Stern
commit 54f83b8c8ea9b22082a496deadf90447a326954e upstream. Endpoints with a maxpacket length of 0 are probably useless. They can't transfer any data, and it's not at all unlikely that a UDC will crash or hang when trying to handle a non-zero-length usb_request for such an endpoint. Indeed, dummy-hcd gets a divide error when trying to calculate the remainder of a transfer length by the maxpacket value, as discovered by the syzbot fuzzer. Currently the gadget core does not check for endpoints having a maxpacket value of 0. This patch adds a check to usb_ep_enable(), preventing such endpoints from being used. As far as I know, none of the gadget drivers in the kernel tries to create an endpoint with maxpacket = 0, but until now there has been nothing to prevent userspace programs under gadgetfs or configfs from doing it. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Reported-and-tested-by: syzbot+8ab8bf161038a8768553@syzkaller.appspotmail.com CC: <stable@vger.kernel.org> Acked-by: Felipe Balbi <balbi@kernel.org> Link: https://lore.kernel.org/r/Pine.LNX.4.44L0.1910281052370.1485-100000@iolanthe.rowland.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-06-11usb: gadget: fix request length error for isoc transferPeter Chen
commit 982555fc26f9d8bcdbd5f9db0378fe0682eb4188 upstream. For isoc endpoint descriptor, the wMaxPacketSize is not real max packet size (see Table 9-13. Standard Endpoint Descriptor, USB 2.0 specifcation), it may contain the number of packet, so the real max packet should be ep->desc->wMaxPacketSize && 0x7ff. Cc: Felipe F. Tonello <eu@felipetonello.com> Cc: Felipe Balbi <felipe.balbi@linux.intel.com> Fixes: 16b114a6d797 ("usb: gadget: fix usb_ep_align_maybe endianness and new usb_ep_aligna") Signed-off-by: Peter Chen <peter.chen@nxp.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-06-04usb: dwc3: Support float charger detectionSriharsha Allenki
Chargers on some platforms do not support FLOAT charger detection. On these platforms, the float charger can be detected depending on the state of the DP and DM lines as detected by the PHY. So, on these platforms check for the DP DM line state and if found floating, do not start the peripheral mode and notify PMIC -ETIMEDOUT implying the connected charger is of type float. Change-Id: I6bf54b0d5c143a849ce9ea7bc515d62204ed2f33 Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
2018-12-04usb: gadget: Fix double free of device descriptor pointersHemant Kumar
Upon driver unbind usb_free_all_descriptors() function frees all speed descriptor pointers without setting them to NULL. In case gadget speed changes (i.e from super speed plus to super speed) after driver unbind only upto super speed descriptor pointers get populated. Super speed plus desc still holds the stale (already freed) pointer. As a result next composition switch results into double free of super speed plus descriptor. Fix this issue by setting all descriptor pointers to NULL after freeing them in usb_free_all_descriptors(). Also clean up gsi_unbind() which is setting up descriptor pointers to NULL already. Change-Id: I4f28294c165bb3b5dc9feb4f22d819f527ad4d50 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
2018-06-20usb: misc: diag_ipc_bridge: Add support for QMI messages over BULKAjay Agarwal
Add support for routing QMI messages to and from connected device over BULK In and Out endpoints. Change-Id: I9d6d06252ff7e98a1e41206b8699990f4312fb01 Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2018-06-20usb: misc: Add snapshot of diag_bridge driverAjay Agarwal
Add diag_bridge driver which is used to communicate with the diag and QMI interfaces exposed by Qualcomm devices. This snapshot is taken as of msm-3.10 'commit d722f698a54e ("regulator: core: Fix buffer overflow issue")'. Also rename the diag_bridge driver to diag_ipc_bridge.c. Change-Id: Ide503c5bf729a7e41de98b12c89e4edc12af61fe Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2018-05-30usb: gadget: composite: fix incorrect handling of OS desc requestsChris Dickens
[ Upstream commit 5d6ae4f0da8a64a185074dabb1b2f8c148efa741 ] When handling an OS descriptor request, one of the first operations is to zero out the request buffer using the wLength from the setup packet. There is no bounds checking, so a wLength > 4096 would clobber memory adjacent to the request buffer. Fix this by taking the min of wLength and the request buffer length prior to the memset. While at it, define the buffer length in a header file so that magic numbers don't appear throughout the code. When returning data to the host, the data length should be the min of the wLength and the valid data we have to return. Currently we are returning wLength, thus requests for a wLength greater than the amount of data in the OS descriptor buffer would return invalid (albeit zero'd) data following the valid descriptor data. Fix this by counting the number of bytes when constructing the data and using this when determining the length of the request. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-05-15Revert "usb: core: Add helper function to return controller id"Ajay Agarwal
This reverts commit c611d78437adeb9299d8be3f7be78b9c153152e5. Remove helper function to return controller id. Change-Id: Iadc085bf1dd9553c0805511f3cbafabdec8744f5 Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2018-05-15Revert "usb: core: Remove helper APIs returning dcba dma address"Ajay Agarwal
This reverts commit 039bcf340ea35f1e5c4a81f290455570097d7d62. Add back helper APIs to return dcba dma address. Change-Id: Ia65e98691d1a3c241694f07215c12605832f574d Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2018-05-15Revert "usb: host: xhci: Remove helper API retuning dcba dma address"Ajay Agarwal
This reverts commit 9c1d883952b8430994a302d10aab2bc8130bcd97. Add back helper API to return dcba dma address. Change-Id: I769c42d53f19bbefb65d491823911b39ec620751 Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2018-04-08usb: gadget: fix usb_ep_align_maybe endianness and new usb_ep_alignFelipe F. Tonello
commit 16b114a6d7973cf027e4c2b23eae1076eaf98c25 upstream. USB spec specifies wMaxPacketSize to be little endian (as other properties), so when using this variable in the driver we should convert to the current CPU endianness if necessary. This patch also introduces usb_ep_align() which does always returns the aligned buffer size for an endpoint. This is useful to be used by USB requests allocator functions. Signed-off-by: Felipe F. Tonello <eu@felipetonello.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-03-18usb: quirks: add control message delay for 1b1c:1b20Danilo Krummrich
commit cb88a0588717ba6c756cb5972d75766b273a6817 upstream. Corsair Strafe RGB keyboard does not respond to usb control messages sometimes and hence generates timeouts. Commit de3af5bf259d ("usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard") tried to fix those timeouts by adding USB_QUIRK_DELAY_INIT. Unfortunately, even with this quirk timeouts of usb_control_msg() can still be seen, but with a lower frequency (approx. 1 out of 15): [ 29.103520] usb 1-8: string descriptor 0 read error: -110 [ 34.363097] usb 1-8: can't set config #1, error -110 Adding further delays to different locations where usb control messages are issued just moves the timeouts to other locations, e.g.: [ 35.400533] usbhid 1-8:1.0: can't add hid device: -110 [ 35.401014] usbhid: probe of 1-8:1.0 failed with error -110 The only way to reliably avoid those issues is having a pause after each usb control message. In approx. 200 boot cycles no more timeouts were seen. Addionaly, keep USB_QUIRK_DELAY_INIT as it turned out to be necessary to have the delay in hub_port_connect() after hub_port_init(). The overall boot time seems not to be influenced by these additional delays, even on fast machines and lightweight distributions. Fixes: de3af5bf259d ("usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard") Cc: stable@vger.kernel.org Signed-off-by: Danilo Krummrich <danilokrummrich@dk-develop.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-24usb: host: xhci: Remove helper API retuning dcba dma addressHemant Kumar
Since dcba dma address is not required by class driver therefore remove the API definition. Change-Id: I6851729f1ad4254bbfaf179755d9afa7870e8e01 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2017-11-24usb: core: Remove helper APIs returning dcba dma addressHemant Kumar
Since dcba dma address is not required by class driver therefore remove the API definitions. Change-Id: I2623cf3bf406ca0d47ea2549b5163d9e9b7351a1 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2017-11-24usb: core: Add helper function to return controller idHemant Kumar
Function provides controller id used by a remote entity to identify which usb controller to program to initiate data transfer. Change-Id: Ied396f34496104c139a7910ee86844c124e6803f Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2017-11-15cdc_ncm: Set NTB format again after altsetting switch for Huawei devicesEnrico Mioso
commit 2b02c20ce0c28974b44e69a2e2f5ddc6a470ad6f upstream. Some firmwares in Huawei E3372H devices have been observed to switch back to NTB 32-bit format after altsetting switch. This patch implements a driver flag to check for the device settings and set NTB format to 16-bit again if needed. The flag has been activated for devices controlled by the huawei_cdc_ncm.c driver. V1->V2: - fixed broken error checks - some corrections to the commit message V2->V3: - variable name changes, to clarify what's happening - check (and possibly set) the NTB format later in the common bind code path Signed-off-by: Enrico Mioso <mrkiko.rs@gmail.com> Reported-and-tested-by: Christian Panton <christian@panton.org> Reviewed-by: Bjørn Mork <bjorn@mork.no> CC: Bjørn Mork <bjorn@mork.no> CC: Christian Panton <christian@panton.org> CC: linux-usb@vger.kernel.org CC: netdev@vger.kernel.org CC: Oliver Neukum <oliver@neukum.org> Signed-off-by: David S. Miller <davem@davemloft.net> Cc: Porto Rio <porto.rio@gmx.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-07-17usb: gadget: f_qdss: Add support for mdm qdss channelHemant Kumar
Driver needs to pass qdss data received from mdm qdss bridge driver to host PC. This requires a software data path using IN endpoint. Bridge driver needs to open qdss_mdm channel and use exported write() API to pass the qdss data received from mdm. Driver calls the notify call back upon write completion. Change-Id: I4d8ceaed0bf9c85aa17d3f49503cd690917cc117 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2017-07-15usb: Fix typo in the definition of Endpoint[out]RequestBenjamin Herrenschmidt
commit 7cf916bd639bd26db7214f2205bccdb4b9306256 upstream. The current definition is wrong. This breaks my upcoming Aspeed virtual hub driver. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-05-14usb: chipidea: Handle extcon events properlyStephen Boyd
commit a89b94b53371bbfa582787c2fa3378000ea4263d upstream. We're currently emulating the vbus and id interrupts in the OTGSC read API, but we also need to make sure that if we're handling the events with extcon that we don't enable the interrupts for those events in the hardware. Therefore, properly emulate this register if we're using extcon, but don't enable the interrupts. This allows me to get my cable connect/disconnect working properly without getting spurious interrupts on my device that uses an extcon for these two events. Acked-by: Peter Chen <peter.chen@nxp.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: "Ivan T. Ivanov" <iivanov.xz@gmail.com> Fixes: 3ecb3e09b042 ("usb: chipidea: Use extcon framework for VBUS and ID detect") Signed-off-by: Stephen Boyd <stephen.boyd@linaro.org> Signed-off-by: Peter Chen <peter.chen@nxp.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-04-10sound: usb: Add support for parsing AudioControl intf for BADD devicesAjay Agarwal
BADD 3.0 devices support three types of topologies; Basic I/P, Basic O/P, and BASIC I/P. Accordingly, various units and terminals have to be parsed which are not exposed by the device and host must be able to figure out various class-specific descriptors based on the profile ID of the device. This patch adds this logic to build various units and terminals of the AudioControl interface of a BADD device. Change-Id: Ib52f884133cdf6e0ec95f49095c14f7d005a5356 Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2017-04-10sound: usb: Add support for parsing AudioStreaming intf for BADD devicesAjay Agarwal
BADD(Basic Audio Device Definition) is a subset of UAC3 specifications. It defines standard profiles which provide specific attributes of class descriptors. BADD audio device provides profile id and BADD supporting host will infer attributes from profile-id. Currently USB Audio Host driver has support for UAC1 and UAC2 devices. To handle BADD 3.0 devices, AudioControl and AudioStreaming Interfaces have to be properly parsed. The Host has to derive all class-specific information based on the profile ID that the device exposes. Add support for parsing the AudioStreaming interfaces exposed by the device. Change-Id: I726bbb735708fe8e395011c7228a73d5f65c092d Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2017-03-30usb-core: Add LINEAR_FRAME_INTR_BINTERVAL USB quirkSamuel Thibault
commit 3243367b209faed5c320a4e5f9a565ee2a2ba958 upstream. Some USB 2.0 devices erroneously report millisecond values in bInterval. The generic config code manages to catch most of them, but in some cases it's not completely enough. The case at stake here is a USB 2.0 braille device, which wants to announce 10ms and thus sets bInterval to 10, but with the USB 2.0 computation that yields to 64ms. It happens that one can type fast enough to reach this interval and get the device buffers overflown, leading to problematic latencies. The generic config code does not catch this case because the 64ms is considered a sane enough value. This change thus adds a USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL quirk to mark devices which actually report milliseconds in bInterval, and marks Vario Ultra devices as needing it. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-03-26usb: core: hub: hub_port_init lock controller instead of busChris Bainbridge
commit feb26ac31a2a5cb88d86680d9a94916a6343e9e6 upstream. The XHCI controller presents two USB buses to the system - one for USB2 and one for USB3. The hub init code (hub_port_init) is reentrant but only locks one bus per thread, leading to a race condition failure when two threads attempt to simultaneously initialise a USB2 and USB3 device: [ 8.034843] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command [ 13.183701] usb 3-3: device descriptor read/all, error -110 On a test system this failure occurred on 6% of all boots. The call traces at the point of failure are: Call Trace: [<ffffffff81b9bab7>] schedule+0x37/0x90 [<ffffffff817da7cd>] usb_kill_urb+0x8d/0xd0 [<ffffffff8111e5e0>] ? wake_up_atomic_t+0x30/0x30 [<ffffffff817dafbe>] usb_start_wait_urb+0xbe/0x150 [<ffffffff817db10c>] usb_control_msg+0xbc/0xf0 [<ffffffff817d07de>] hub_port_init+0x51e/0xb70 [<ffffffff817d4697>] hub_event+0x817/0x1570 [<ffffffff810f3e6f>] process_one_work+0x1ff/0x620 [<ffffffff810f3dcf>] ? process_one_work+0x15f/0x620 [<ffffffff810f4684>] worker_thread+0x64/0x4b0 [<ffffffff810f4620>] ? rescuer_thread+0x390/0x390 [<ffffffff810fa7f5>] kthread+0x105/0x120 [<ffffffff810fa6f0>] ? kthread_create_on_node+0x200/0x200 [<ffffffff81ba183f>] ret_from_fork+0x3f/0x70 [<ffffffff810fa6f0>] ? kthread_create_on_node+0x200/0x200 Call Trace: [<ffffffff817fd36d>] xhci_setup_device+0x53d/0xa40 [<ffffffff817fd87e>] xhci_address_device+0xe/0x10 [<ffffffff817d047f>] hub_port_init+0x1bf/0xb70 [<ffffffff811247ed>] ? trace_hardirqs_on+0xd/0x10 [<ffffffff817d4697>] hub_event+0x817/0x1570 [<ffffffff810f3e6f>] process_one_work+0x1ff/0x620 [<ffffffff810f3dcf>] ? process_one_work+0x15f/0x620 [<ffffffff810f4684>] worker_thread+0x64/0x4b0 [<ffffffff810f4620>] ? rescuer_thread+0x390/0x390 [<ffffffff810fa7f5>] kthread+0x105/0x120 [<ffffffff810fa6f0>] ? kthread_create_on_node+0x200/0x200 [<ffffffff81ba183f>] ret_from_fork+0x3f/0x70 [<ffffffff810fa6f0>] ? kthread_create_on_node+0x200/0x200 Which results from the two call chains: hub_port_init usb_get_device_descriptor usb_get_descriptor usb_control_msg usb_internal_control_msg usb_start_wait_urb usb_submit_urb / wait_for_completion_timeout / usb_kill_urb hub_port_init hub_set_address xhci_address_device xhci_setup_device Mathias Nyman explains the current behaviour violates the XHCI spec: hub_port_reset() will end up moving the corresponding xhci device slot to default state. As hub_port_reset() is called several times in hub_port_init() it sounds reasonable that we could end up with two threads having their xhci device slots in default state at the same time, which according to xhci 4.5.3 specs still is a big no no: "Note: Software shall not transition more than one Device Slot to the Default State at a time" So both threads fail at their next task after this. One fails to read the descriptor, and the other fails addressing the device. Fix this in hub_port_init by locking the USB controller (instead of an individual bus) to prevent simultaneous initialisation of both buses. Fixes: 638139eb95d2 ("usb: hub: allow to process more usb hub events in parallel") Link: https://lkml.org/lkml/2016/2/8/312 Link: https://lkml.org/lkml/2016/2/4/748 Signed-off-by: Chris Bainbridge <chris.bainbridge@gmail.com> Cc: stable <stable@vger.kernel.org> Acked-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org> [sumits: minor merge conflict resolution for linux-4.4.y] Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-03-20usb: gadget: ccid: Fix data types of header structuresManu Gautam
Replace unsigned long with __u32 as 4 bytes is the length of field where as unsigned long could be 8 bytes on 64 bit machine. Also, replace short and char with u16 and u8 respectively for better readability. Change-Id: I8637f6b32d56d90c01b4453b4677f40d5b865bf6 Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
2017-02-02usb: xhci-plat: Add DT parameter to program xhci imod_intervalManu Gautam
XHCI allows interrupt moderation using imod_interval at 250ns increments. Add DT parameter to specify this imod_value for targets mainly with single CPU to reduce CPU interrupt loads. This allows better balance between CPU usage and performance. CRs-fixed: 1019219 Change-Id: Id479c162da6492caff4dd83de4054fee63b6abc5 Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
2017-01-20usb: composite: Increase ep0 buffer size to 4KBHemant Kumar
Maximum QMI packet size is 4KB. As a result with current ep0 buffer size of 1KB driver is overstepping the buffer memory when QMI packet of more than 1KB size is received from usb host. Change-Id: Id162ed23dfa855fd7e11d43b32627b577c0c2dd4 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2017-01-16usb: gadget: Add snapshot of CCID function driverHemant Kumar
This snapshot is taken as of msm-3.18 commit: bf10764e3d1 (Merge "ARM: dts: msm: Update APC MEM ACC settings for msm8920") This USB CCID function driver will be a transport layer between the userspace CCID component and the Windows Host. Data and control commands from the Windows Host will be sent to the userspace component and vice-versa. Change-Id: Ie5eeda1550ac30cac47fd3799021598eac550652 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-12-12USB: dwc3-msm: Perform DBM config/unconfig under spinlock protectionVijayavardhan Vennapusa
There is a possibility of dwc3_msm_ep_queue() and msm_ep_unconfig() racing each other if suspend happens right after configured. This scenario will result in NOC error if start_xfer command gets queued after msm_ep_unconfig(). Hence fix the issue by adding spinlock protection for DBM endpoint configuration and unconfiguration. Change-Id: I3fd007647370250017c97faebffadb35afb7fc4d Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org> Signed-off-by: Chandana Kishori Chiluveru <cchiluve@codeaurora.org>
2016-12-12USB: dwc3-msm: Initialize DBM ep before BAM pipe resetVijayavardhan Vennapusa
On new platforms, endpoint clock gating is added for dbm endpoints with Synopsys USB3.0 controller. This hardware feature requires initialization of DBM endpoint before BAM pipe reset for bam2bam mode data transfers working. Hence change sequence such that do DBM endpoint initialization first followed by BAM pipe reset and do start transfer as last operation. CRs-Fixed: 965207 Change-Id: Ib5bfd1a7d258fe336a4c9924850fc9223c1c81f6 Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org> Signed-off-by: Chandana Kishori Chiluveru <cchiluve@codeaurora.org>
2016-11-02usb: pd: Avoid calling SVID disconnect if not previously connectedJack Pham
Only call an SVID handler's disconnect function only if it was previously connected, i.e. when the state machine had proceeded received a successful DISCOVER_SVIDs response. This helps to avoid excessive notification to SVID clients. While at it, require that .connect and .disconnect callbacks are supplied during registration. This helps to eliminate NULL checks each time they are called. Change-Id: I030153a6b2106a6504ed51b5cb00a27f842e2488 Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-10-06usb: host: Flush hub workqueue before stopping controllerHemant Kumar
when xhci platform driver is removed with a usb device connected there is a possibility of race between xhci platform driver remove context and device disconnect hub event work context. This results into use after free: xhci_mem_clean() called from xhci_plat_remove() freeing the xhci virtual device when a structure member is being accessed by xhci_alloc_virt_device() after virtual device allocation as part of connect hub event. deadlock: Upon device disconnect if stop endpoint command remains pending xhci_mem_cleanup() frees xhci virtual device which also frees up endpoint stop_cmd_timer. udev->dev lock is held until cancelled urb is not given back to class driver. In a different context xhci platform remove calls usb_disconnect() on children of root hub which tries to acquire the same udev->dev lock this results into a dead lock condition. Fix issues by making sure hub events are flushed before xhci is stopped. Change-Id: I86d414bca17464d1dff3346ec668d8b3efec1652 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-09-19usb: gadget: Enable L1 suspend by defaultHemant Kumar
Currently L1 suspend is disabled. Superspeed capable device needs to support L1 suspend in HS/FS/LS mode. Also, add module parameter to disable L1 suspend in High speed mode. Change-Id: Ie8e7f3949d276325305799640f2775343bd6b9da Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-07-27USB: EHCI: declare hostpc register as zero-length arrayAlan Stern
commit 7e8b3dfef16375dbfeb1f36a83eb9f27117c51fd upstream. The HOSTPC extension registers found in some EHCI implementations form a variable-length array, with one element for each port. Therefore the hostpc field in struct ehci_regs should be declared as a zero-length array, not a single-element array. This fixes a problem reported by UBSAN. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Reported-by: Wilfried Klaebe <linux-kernel@lebenslange-mailadresse.de> Tested-by: Wilfried Klaebe <linux-kernel@lebenslange-mailadresse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-07-25usb: pd: Add vendor defined message handlingJack Pham
Add APIs to send and receive vendor defined messages (VDM) over USB PD. A handler for a standard or vendor ID (SVID) can register callbacks to be notified of reception of VDM messages. One use case is for another kernel driver, such as DisplayPort, to be able to be notified when an Alternate Mode adapter is connected to the Type-C port in order to enter modal operation. SVID handlers should maintain their own state and timer resources in order to comply with the Power Delivery Specification. Change-Id: Ibe26e6deeca587f21f8121f6f32cf7cc0a5c3e23 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Jack Pham <jackp@codeaurora.org>
2016-07-20usb: dwc3: Determine connection speed for HS PHYDevdutt Patnaik
DP/DM linestate is needed by the QUSB2 PHY driver to configure the polarity of DP/DM transition triggers for exiting low power mode. This was previously available via the QUSB2PHY_PORT_UTMI_STATUS PHY register which is now deprecated. In order to correctly determine the interrupt polarity we need to pass the current operating speed to the QUSB2 PHY driver. The PHY driver uses mode, speed and cable connection status to determine the linestate and configure interrupt polarities for wake up. Add logic to determine operating speed for host and device mode cases. Change-Id: Iaede1269f514a314bd9717a33100f748e7753b2a Signed-off-by: Devdutt Patnaik <dpatnaik@codeaurora.org>
2016-07-06usb: xhci: Add helper APIs to return xhci dma addressesHemant Kumar
dma address of secondary event ring, transfer ring and device context base address are required to pass to remote entity. Remote entity uses these addresses to program xhci controller registers. Change-Id: Ie0756d646a396a11b41b93e886bca9aff636ee5d Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-07-06usb: xhci: Add support for secondary interruptersHemant Kumar
Implement APIs to dynamically allocate and free secondary event rings based upon interrupter number. Also add exported APIs in usb core layer which allows secondary event ring management via remote processor entity. Change-Id: I5ee7d44d6cad8e35e22d3c1a027a1eec5d208585 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-06-10USB: gadget: Implement COMPAT_IOCTL for ioctlsHemant Kumar
32-bit userspace calling into 64-bit kernel cause different ioctl codes to get generated. The different ioctl code gets generated because sizeof is used on mtp and accessory structures which is different for 32/64 compilation. Because of this, 64-bit kernel can never execute the right ioctl command. Implement compat_ioctl to handle such execution environment. Change-Id: I26cc10986e28a28eab6f3c65f28f4d2b808112d9 Signed-off-by: Sujeet Kumar <ksujeet@codeaurora.org> Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-05-25usb: dwc3: Add support handle type-c plug orientationHemant Kumar
Register callbacks for plug orientations in order to cache the current plug orientation reported by extcon. This allows super speed phy driver to configure the appropriate lane upon phy initialization. Change-Id: I906005680b4cc90cc38dc3d403beebf7aa515ad7 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-05-19usb: dual-role: make stub functions inlineJack Pham
If CONFIG_DUAL_ROLE_USB_INTF is disabled but the exported functions are referenced, the build will result in warnings such as: In file included from include/linux/usb/class-dual-role.h:112:13: warning: ‘dual_role_instance_changed’ defined but not used [-Wunused-function] These stub functions should be static inline. Change-Id: I5a9ef58dca32306fac5a4c7f28cdaa36fa8ae078 Signed-off-by: Jack Pham <jackp@codeaurora.org> (cherry picked from commit 2d152dbb0743526b21d6bbefe097f874c027f860) (cherry picked from commit 8ad66cafaa10e6ba94ff79a8dbc2cc437c6bfe93)
2016-05-11usb: dwc3: Add support for gsi endpoint disable operationHemant Kumar
gsi driver does not call the gadget API usb_ep_enable() instead uses gsi ep operation call back to enable gsi ep. As a result ep->enabled flag remains clear. Later function driver calls usb_ep_disble() API from gadget framework and ep disable operation gets skipped. Fix this by adding gsi ep operation for ep disable. This makes the enable and disable ep operations both handled by gsi ep ops. CRs-Fixed: 1013830 Change-Id: I5caa9a839b9fdd144af0a59a7c605777f7a3a659 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
2016-05-03usb: dual-role: make stub functions inlineJack Pham
If CONFIG_DUAL_ROLE_USB_INTF is disabled but the exported functions are referenced, the build will result in warnings such as: In file included from include/linux/usb/class-dual-role.h:112:13: warning: ‘dual_role_instance_changed’ defined but not used [-Wunused-function] These stub functions should be static inline. Change-Id: I5a9ef58dca32306fac5a4c7f28cdaa36fa8ae078 Signed-off-by: Jack Pham <jackp@codeaurora.org> (cherry picked from commit 2d152dbb0743526b21d6bbefe097f874c027f860) (cherry picked from commit 8ad66cafaa10e6ba94ff79a8dbc2cc437c6bfe93)
2016-03-23usb: gadget: Add support for DMA mapping optimization of request buffersDanny Segal
In order to improve performance, this patch enabled mapping of USB request buffers in advance, before queueing them to the HW. This can be used when there is a pool or pre-mapped request buffers so we don't need to map it again every time the request gets queued. Change-Id: Ic3a6db749343ef1345e0816210517755aee055b3 Signed-off-by: Danny Segal <dsegal@codeaurora.org> Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-03-23msm_hsusb: Allow USB BAM driver to compile if CI is not enableMayank Rana
USB BAM driver is accessing some of APIs which are specific to CI controller. Hence add definitions of those APIs as No-ops when CI is not enable to compile USB BAM driver. Change-Id: Id121f042023f4a176936c8b575613244ec46de7f Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-03-23usb: gadget: qdss: Modify to support configfs usageMayank Rana
- This change adds configfs usage with USB QDSS driver. - It removes all different supported control and data transports and assume BAM2BAM as default mode. - It also removes supported DPL functionality from this driver. Change-Id: I9678c9e9a397445f36272616e517bbb83a59e88a Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-03-23USB: gadget: QDSS: Add snapshot of USB QDSS Function driverMayank Rana
This change adds USB QDSS function driver which is used for USB QDSS functionality. This snapshot is taken as of msm-3.18 kernel commit d5809484bb1b. Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-03-23usb: Remove DPDM pulsing functionalityMayank Rana
This change removes DP DM pulsing functionality related support from QUSB PHY driver as it is not required. Signed-off-by: Mayank Rana <mrana@codeaurora.org>
2016-03-23usb: diag: Fix build error if CONFIG_USB_F_DIAG=mJack Pham
Instead of #ifdef, use the IS_ENABLED() macro which correctly handles if the Kconfig symbol is built-in (=y) or a module (=m). Also add missing MODULE_LICENSE and MODULE_DESCRIPTION to f_diag.c to allow building as a module. Signed-off-by: Jack Pham <jackp@codeaurora.org>