History log of /src/sys/dev/usb/xhci.c |
Revision | | Date | Author | Comments |
1.190 |
| 24-Aug-2025 |
nat | Handle special case of USBD_FORCE_SHORT_XFER.
This fixes devices such as urtwn(4) connected to an xhci port.
It works by sending a zero length transfer at the end of the data transfer for the above mentioned flag.
Similar artwork in this space already exists for ohci/uhci/ehci.
OK jkallsch@.
|
1.189 |
| 02-Aug-2025 |
mlelstv | Fix computation of ISOC microframes. Also, avoid crash on ISOC pipe restart (there is no upm_start method).
|
1.188 |
| 30-Jan-2025 |
jmcneill | branches: 1.188.2; xhci: Do not clobber existing state in xhci_update_ep0_mps
When updating the MPS field, make sure to preserve existing configuration. Without this, the XHCI IP on CIX CD8180 was returning a parameter error in response to the command.
|
1.187 |
| 30-Jan-2025 |
jmcneill | xhci: Always do 32-bit accesses for platform (ACPI) XHCI devices.
The XHCI IP found in the CIX CD8180 throws an serror for any access that is not 32-bit aligned. Let's add an XHCI_32BIT_ACCESS flag and set it unconditionally for platform devices as there are only a handful of non- 32-bit accesses at init time.
|
1.186 |
| 09-Jan-2025 |
jmcneill | xhci: Don't use USBMALLOC_COHERENT
Use normal WB mappings with non-cache coherent tags, will improve performance and seems to avoid stalling transfers on X1E.
|
1.185 |
| 21-Dec-2024 |
skrll | Relax the KASSERT in xhci_event_cmd to allow xhci_polling_p
|
1.184 |
| 20-May-2024 |
riastradh | branches: 1.184.2; xhci(4): Narrow some more variable scopes in xhci_device_isoc_enter.
No functional change intended.
|
1.183 |
| 20-May-2024 |
riastradh | xhci(4): Narrow scope of variable.
Nix spurious initialization in wider scope.
No functional change intended.
|
1.182 |
| 20-May-2024 |
riastradh | xhci.c: Fix confusing line break.
No functionanl change intended.
|
1.181 |
| 05-Apr-2024 |
riastradh | usb *hci: Always set ux_status before usbd_xfer_schedule_timeout.
Add an assert to usbd_xfer_schedule_timeout to enforce this.
Since access to ux_status is serialized by the bus lock, and nothing releases the bus lock in the interim, this doesn't make a functional change. But it does reduce confusion by readers, who no longer have to worry if some callers got the order wrong. It could also now potentially be factored out in a subsequent commit.
|
1.180 |
| 20-Jul-2023 |
riastradh | xhci(4): Don't panic on suspend if previous suspend/resume failed.
Trying to resume again probably won't make the situation much worse, but panicking can definitely make it worse.
XXX pullup-10
|
1.179 |
| 05-Jun-2023 |
mlelstv | - Fix clearing of EINT and other transient flags.
Patches from sc.dying in kern/56115: - Set proper Max ESIT Payload value for interrupt/isoc endpoint context. - Set proper Average TRB Length value. - Not tested on superspeed/superspeedplus isochronous device.
- Add handling of some error paths for isochronous transfers.
|
1.178 |
| 27-Apr-2023 |
skrll | Remove an unnecessary cast in a KASSERTMSG
|
1.177 |
| 09-Apr-2023 |
riastradh | xhci(4): Avoid crash in suspend/resume/resume if first resume fails.
Rather than try to recover from this, just make new commands fail so at least we don't deadlock.
XXX pullup-9 XXX pullup-10
|
1.176 |
| 07-Apr-2023 |
riastradh | xhci(4): Defer root intr xfers while polling.
Root intr xfers require taking adaptive locks, which is forbidden while polling.
This is not great -- any USB transfer completion callbacks might try to take adaptive locks, not just uhub_intr, and that will always causes trouble. We get lucky with ukbd_intr because it's not MP-safe, so it relies only on the kernel lock (a spin lock) anyway. But this change brings xhci in line with ehci.
PR kern/57326
XXX pullup-8 XXX pullup-9 XXX pullup-10
|
1.175 |
| 11-Oct-2022 |
msaitoh | branches: 1.175.2; KNF a bit. No functional change.
|
1.174 |
| 11-Oct-2022 |
msaitoh | "Add" number of ports because the same speed's ECR may appear multiple times.
|
1.173 |
| 11-Oct-2022 |
msaitoh | There is an xHCI device which has USB 2 port only. Support it.
- Example:
xhci4 at pci17 dev 0 function 0: AMD product 15b8 (rev. 0x00) xhci4: 64-bit DMA allocated pic msix10 type edge pin 0 level 6 to cpu0 slot 32 idt entry 107 xhci4: interrupting at msix10 vec 0 xhci4: xHCI version 1.20 xhci4: hcs1=1000840 hcs2=140000f1 hcs3=7000a xhci4: hcc=0x110ffc5<XECP=0x110,MAXPSA=0xf,CFC,SEC,SPC,PAE,NSS,LTC,CSZ,AC64> xhci4: xECP 440 xhci4: hcc2=0x3f<CIC,LEC,CTC,FSC,CMC,U3C> xhci4: ECR: 0x00000401 xhci4: ECR: 0x02000402 xhci4: SP: 0x02000402 0x20425355 0x00180101 0x00000000 xhci4: hs ports 1 - 1 xhci4: ECR: 0x000f000a xhci4: PAGESIZE 0x00000001 xhci4: sc_pgsz 0x00001000 xhci4: sc_maxslots 0x00000040 xhci4: sc_maxports 1 xhci4: sc_maxspbuf 2 xhci4: eventst: 0x000000013ee60fc0 0xffffb08826f5afc0 1000 xhci4: dcbaa: 0x000000013ee63000 0xffffb08826f5b000 1000 xhci4: current IMOD 0 (snip) usb8 at xhci4: USB revision 3.1 usb9 at xhci4: USB revision 2.0 uhub8 at usb8: NetBSD (0x0000) xHCI root hub (0x0000), class 9/0, rev 3.00/1.00, addr 0 uhub8: 0 ports with 0 removable, self powered uhub8: no ports, hub ignored uhub8: WARNING: power management not supported autoconfiguration error: usb8: root device is not a hub usb8: WARNING: power management not supported uhub9 at usb9: NetBSD (0x0000) xHCI root hub (0x0000), class 9/0, rev 2.00/1.00, addr 0 uhub9: 1 port with 1 removable, self powered
- To resolve this problem, keep number of ports of SS and HS and use it to attach child device(s). - Tested on ASUS TUF GAMING X670E-PLUS. - OK'd by skrll@.
|
1.172 |
| 25-Sep-2022 |
skrll | Remove the bus_space_barrier I added with the commit
revision 1.103 date: 2019-01-11 15:43:51 +0000; author: skrll; state: Exp; lines: +12 -2; commitid: RYSytjLNOZrFCn7B; Add a bs_barrier to make ThunderX xhci work. Not sure why this is needed, but I'll work it out later.
Turns out bus_dma.c needed fixing which I did with
revision 1.115 date: 2019-06-14 10:09:12 +0100; author: skrll; state: Exp; lines: +39 -34; commitid: GKW2p7ijoslyu8rB; Simplify the _ARM32_NEED_BUS_DMA_BOUNCE #ifdefs and rely on compiler optimisation of the bouncing = false case.
Drain the write buf (aka DSB) in more cases
Catch all CPUs that support speculation. (thunderx isn't CPU_CORTEX)
|
1.171 |
| 13-Sep-2022 |
riastradh | xhci(4): After attach, access to sc_child/2 requires sc_intr_lock.
Serializes access with xhci_intr.
XXX Need to ensure the interrupt handler is quiesced at this point or else it will trip over the assertion in xhci_intr about having at least one child.
|
1.170 |
| 13-Sep-2022 |
riastradh | xhci(4): Resume commands even if USBSTS.SRE is set.
Commands might not work after this but let's at least not deadlock -- give them an opportunity to time out or fail.
XXX Maybe set sc_dying here to skip the timeout.
|
1.169 |
| 01-Sep-2022 |
riastradh | xhci(4): Make sure to destroy sc_rhlock on detach.
|
1.168 |
| 23-Aug-2022 |
riastradh | xhci(4): Fix error branch for failed suspend.
If suspend failed, at least we can stop it from blocking all subsequent xhci commands or making a second suspend crash.
|
1.167 |
| 24-May-2022 |
andvar | fix various typos in comment, documentation and log messages.
|
1.166 |
| 14-May-2022 |
riastradh | xhci(4): Handle race between software abort and hardware stall.
|
1.165 |
| 14-May-2022 |
riastradh | xhci(4): Fix edge case in simultaneous xfer abort and failure.
On successful usbd_xfer_trycomplete, caller must set ux_status and call usb_transfer_complete before releasing the pipe (bus) lock. Failing to call usb_transfer_complete is a mistake. Presumably this was intended to claim the xfer to complete it only on the last packet.
I previously introduced the violation of this rule when the code looked like
xfer->ux_status = err; if (trb stuff) usb_transfer_complete(xfer);
I mostly mechanically changed all the assignments of xfer->ux_status to do usbd_xfer_trycomplete first and then usb_transfer_complete.
In the original, the extra assignment of xfer->ux_status in the event we _don't_ immediately call usb_transfer_complete was likely redundant and (except insofar as the abort protocol was broken) harmless. But now it is a problem because of the contract between usbd_xfer_trycomplete and usb_transfer_complete under the pipe (bus) lock. In retrospect, the original probably should have been
if (trb stuff) { xfer->ux_status = err; usb_transfer_complete(xfer); }
and my mechanical transformation should have worked, but also in retrospect I should have put more thought into the change and done it a little less mechanically.
|
1.164 |
| 06-Apr-2022 |
mlelstv | revert accidental last commit (except ukbd.c)
|
1.163 |
| 06-Apr-2022 |
mlelstv | remove debug printf
|
1.162 |
| 13-Mar-2022 |
riastradh | xhci(4): Serialize access to portsc registers.
Both xhci_roothub_ctrl and xhci_suspend/resume do r/m/w on them, so use a mutex to serialize access to avoid stomping on each other.
|
1.161 |
| 13-Mar-2022 |
riastradh | xhci(4): Restore synchronous abort.
In revision 1.155, I made the logic to abort the hardware asynchronous, under the misapprehension that it is necessary for ubm_abortx not to release the bus lock.
Not only is this not necessary, but it is harmful to for the logic to be asynchronous because the caller assumes the hardware won't use any DMA buffers by the time ubm_abortx has returned so it is safe to recycle them -- which is false if we don't synchronously wait for the hardware to stop.
|
1.160 |
| 09-Mar-2022 |
riastradh | xhci(4): Avoid holding bus lock across usb_delay_ms.
We may still need a mechanism to serialize access to the portsc registers between xhci_roothub_ctrl and xhci_suspend/resume, but the bus lock is no longer that, and holding the bus lock across usb_delay_ms may lead to deadlock by blocking the softints that wake usb_delay_ms.
|
1.159 |
| 09-Mar-2022 |
riastradh | usb: Provisionally release bus lock around ubm_rhctrl.
This isn't quite correct, but it avoids a deadlock:
- *_roothub_ctrl holds bus lock, waits in usb_delay_ms for kpause - softint waits for bus lock, holds up kpause wakeup
The deadlock is new since recent changes to hold the bus lock over upm_start/upm_transfer. Making this change regresses to other problems:
- *_suspend/resume and *_roothub_ctrl often touch the same portsc registers
- roothub_ctrl_abort needs to wait for ubm_rhctrl to complete.
When the bus lock was held across both, a noop served here, but we can't hold the bus lock across both, so that doesn't work.
However, these problems -- which we've had for a long time -- seem to be less bad than the deadlock. So let's avoid the deadlock for now and then work out another way to serialize suspend/resume/rhctrl and aborts.
Candidate fix for PR kern/56739.
|
1.158 |
| 03-Mar-2022 |
riastradh | usb: Hold pipe lock across upm_transfer and upm_start.
This simplifies the code and fixes races with abort. Access to the pipe's queue is now done exclusively while the pipe is locked.
|
1.157 |
| 03-Mar-2022 |
riastradh | usb: Factor usb_transfer_complete out of ubm_abortx method.
|
1.156 |
| 03-Mar-2022 |
riastradh | usb: Factor usb_insert_transfer out of upm_transfer and make private.
Almost every upm_transfer function starts with:
mutex_enter(&sc->sc_lock); err = usb_insert_transfer(xfer); mutex_exit(&sc->sc_lock); if (err) return err;
Some of them have debug messages sprinkled in here too, or assert that err == USBD_NORMAL_COMPLETION (alternative is USBD_IN_PROGRESS, only for pipes with up_running or up_serialise, presumably not applicable for these types of pipes). Some of them also assert xfer->ux_status == USBD_NOT_STARTED, which is guaranteed on entry and preserved by usb_insert_transer.
Exceptions:
- arch/mips/adm5120/dev/ahci.c ahci_device_isoc_transfer just returns USBD_NORMAL_COMPLETION, but I'm pretty sure this is and always has been broken anyway, so won't make anything worse (if anything, might make it better...)
- external/bsd/dwc2/dwc2.c dwc2_device_bulk_transfer and dwc2_device_isoc_transfer _also_ issue dwc2_device_start(xfer) under the lock. This is probably a better way to do it, but let's do it uniformly across all HCIs at once.
- rump/dev/lib/libugenhc/ugenhc.c rumpusb_device_bulk_transfer sometimes returns USBD_IN_PROGRESS _without_ queueing the transfer, in the !rump_threads case. Not really sure how this is supposed to work... If it actually breaks anything, we can figure it out.
|
1.155 |
| 29-Jan-2022 |
riastradh | xhci(4): Fix handling of endpoint reset/stop.
Use the same asynchronous task resetting a stalled/halted endpoint and stopping a running endpoint -- either way we need to put the endpoint back into a known state and, if there are transfers waiting to run, start them up again.
- xhci_abortx must not drop the pipe (bus) lock -- usbdi(9) requires this. So arrange to stop the endpoint and empty the queue asynchronously.
- If the xhci softint claims an xfer for completion with usbd_xfer_trycomplete, it must call usb_transfer_complete without ever releasing the pipe (bus) lock -- it can't claim the xfer and then defer the usb_transfer_complete to a task. So arrange to reset the endpoint asynchronously, hold up new transfers until the endpoint has been reset, and then do usb_transfer_complete immediately.
|
1.154 |
| 25-Jan-2022 |
msaitoh | Accept USB 3.2 in xhci_id_protocols().
|
1.153 |
| 16-Jan-2022 |
riastradh | xhci(4): Fix citation in comment.
4.15.2.1 is device-initiated resume, but we are doing host-initiated.
No functional change.
|
1.152 |
| 16-Jan-2022 |
riastradh | xhci(4): Fix copypasto in resume error message.
|
1.151 |
| 21-Dec-2021 |
skrll | Change the usb_mem API to take a bus_dma_tag_t in usb_allocmem instead of a struct usbd_bus *.
This allows an HCD to use more than one tag.
|
1.150 |
| 23-Oct-2021 |
jakllsch | xhci: Always read/write both halves of 64-bit registers
Access the 64-bit registers in their entirety at all times, independent of the AC64 parameter of the hardware implementation.
Makes xhci(4) work on SolidRun MACCHIATObin (Marvell 8040 SoC)
|
1.149 |
| 10-Oct-2021 |
jmcneill | xhci: shrink port reset delay
Instead of waiting for USB_PORT_ROOT_RESET_DELAY (250ms) before checking the port reset status, poll the PORTSC register and return early if the reset has completed.
|
1.148 |
| 17-Aug-2021 |
andvar | fix multiplei repetitive typos in comments, messages and documentation. mainly because copy paste code big amount of files are affected.
|
1.147 |
| 13-Aug-2021 |
andvar | fix typos in words "pointer" and s/fram /frame/
|
1.146 |
| 12-Jun-2021 |
riastradh | usb(4): Fix racy endpoint reference counting.
Rules:
1. After usbd_setup_pipe*, must usbd_kill_pipe. 2. After usbd_open_pipe*, must usbd_close_pipe.
Still haven't merged the logic in usbd_kill_pipe and usbd_close_pipe, but getting closer.
|
1.145 |
| 12-Jun-2021 |
riastradh | usb(4): Sprinkle kernel lock assertions.
|
1.144 |
| 06-Jun-2021 |
jdolecek | also reset xs->xs_xr[dci] to NULL when closing the pipe
avoids KASSERT() on next xhci_open()
should fix PR kern/56194 by nia
|
1.143 |
| 29-May-2021 |
riastradh | xhci(4): Wait USB_RESUME_WAIT ms, not 20 ms.
Better to use the named constant, and although the spec says 20 ms is enough, apparently for some devices it's not.
|
1.142 |
| 27-May-2021 |
skrll | Fix error handling botch in 1.138. Thanks to jmcneill@ for spotting it.
|
1.141 |
| 26-May-2021 |
riastradh | xhci: Fix logic in waiting for command queue access.
_Either_ an existing command in progress, _or_ an existing suspend in progress that is not done by us, should block us; the logic I wrote previously erroneously blocked only if both conditions happened at the same time.
Should fix issue reported by Andrius V in the PR kern/56050 followup discussion.
|
1.140 |
| 23-May-2021 |
riastradh | xhci(4): Block commands and issue Stop Endpoint on suspend.
|
1.139 |
| 23-May-2021 |
riastradh | xhci(4): Draft suspend/resume.
Work almost entirely done and tested by maya@ based on xhci 1.2 spec; tidied up and tweaked by me.
Not sure about issuing Stop Endpoint commands or ensuring the Command Ring is in the Stopped or Idle state, but this seems to work as is, so it's already an improvement over what we had before which was no xhci suspend/resume at all.
In particular, it's not clear to us:
- if we don't have any pending USB activity whether we need to issue the Stop Endpoints or quiesce the command ring; but
- if we do have any pending USB activity whether issuing Stop Endpoint is enough or whether we also need to do anything to synchronize with other software logic to quiesce it too.
|
1.138 |
| 05-Jan-2021 |
skrll | branches: 1.138.4; 1.138.6; More converstion from usbd_status to int for function error reporting. This time it's the turn of usb_allocmem.
|
1.137 |
| 02-Jan-2021 |
jmcneill | Use USBMALLOC_ZERO to ensure that all DMA memory is zero initialized.
|
1.136 |
| 22-Dec-2020 |
riastradh | usb: Omit bogus assertions about struct usbd_pipe::up_intrxfer.
These assertions were only valid for pipes at UE_IN_DIR, UE_INTERRUPT endpoints created with usbd_open_pipe_intr, which uses up_intrxfer to pass the struct usbd_xfer object to usbd_close_pipe to free later.
In contrast, for pipes at UE_OUT_DIR, UE_INTERRUPT endpoints, up_intrxfer is never initialized, so the assertion cannot be right. In principle we might even have more than one outstanding interrupt transfer at a time, rendering the point of the assertion moot anyway.
Found by interrupting a uhidev write to a u2f device.
ok nick
|
1.135 |
| 15-Oct-2020 |
jmcneill | branches: 1.135.2; Rename xhci_op_barrier to xhci_barrier and remove offset/length parameters. Barriers will be applied to the entire XHCI register space.
|
1.134 |
| 21-Aug-2020 |
jakllsch | xhci(4): initial support for Isochronous pipes
Needs more cleanup, and more work, particularly transaction scheduling may need to be examined with bus analyzer (to check if too frequent/ infrequent) or various isoc pipe consumers (to check if too infrequent) and fixed if incorrect.
Begins to address PR kern/55574.
|
1.133 |
| 21-Aug-2020 |
jakllsch | xhci(4): copy HCCPARAMS regs to softc, use when needed
We'll need more than just the AC64 bit for the Isoc support coming up; and we don't need to keep all the bits as bools in the softc.
|
1.132 |
| 06-Jun-2020 |
skrll | More __BITS. NFCI.
|
1.131 |
| 04-Jun-2020 |
skrll | Near complete conversion to __BITS
|
1.130 |
| 01-Jun-2020 |
skrll | Remove some unnecessary bit shifts by using appropriate read size
|
1.129 |
| 21-May-2020 |
jakllsch | xhci(4): only usbd_xfer_trycomplete() if certain to usb_transfer_complete()
Previously we'd cancel the timeout after the data stage of control xfers, and then hope that the status stage would eventually interrupt.
|
1.128 |
| 21-May-2020 |
jakllsch | xhci(4): dynamically allocate xhci_xfer->xx_trb buffer
Allocation size remains the same for now.
|
1.127 |
| 21-May-2020 |
jakllsch | xhci(4): Check for overflows with KASSERT when putting TRBs on xfer TRB buffer.
Also more-correctly check for overruns when putting TRBs on a ring.
|
1.126 |
| 21-May-2020 |
jakllsch | xhci(4): Be more concise in putting the setup request in TRB immediate data.
Or: memcpy(),htole64() is replaced by functionally-identical le64dec().
|
1.125 |
| 20-May-2020 |
jakllsch | Use more-semantically-correct types in xhci allocx/freex functions.
|
1.124 |
| 05-Apr-2020 |
skrll | Switch USB to use non-coherent buffers for data transfers in the same way as OpenBSD.
The use of coherent (uncacheable on ARM and other arches) mappings for transfer buffers impacts performance, espcially where memcpys are involved.
Audit the necessary usb_syncmem operations - a few were missing.
|
1.123 |
| 02-Apr-2020 |
skrll | Reduce the memory footprint by allocating a ring per endpoint/pipe on pipe open.
From sc.dying on tech-kern
|
1.122 |
| 14-Mar-2020 |
christos | fix more broken kernhist formats (now I got them all).
|
1.121 |
| 14-Mar-2020 |
christos | revert the 0x% -> %# change for fixed width formats pointed out by uwe.
|
1.120 |
| 13-Mar-2020 |
christos | PR/55068: sc.dying: Fix printf formats: - no %s/%p for kernel log - 0x% -> %# - always %j for kernel log
|
1.119 |
| 15-Feb-2020 |
skrll | Change bNbrPorts for loop to start from 1 to match others. NFCI.
|
1.118 |
| 15-Feb-2020 |
riastradh | Fix mistakes in previous sloppy change with root intr xfers.
- Make sure ux_status is set to USBD_IN_PROGRESS when started. Otherwise, if it is still in flight when we abort the pipe, usbd_ar_pipe will skip calling upm_abort.
- Initialize ux_status under the lock; in principle a completion interrupt (or a delay) could race with the initialization.
- KASSERT that the xfer is in progress when we're about to complete it.
Candidate fix for PR kern/54963 for other HCI drivers than uhci.
ok nick ok phone
(This is the change that nick evidently MEANT to ok when he ok'd the previous one!)
|
1.117 |
| 12-Feb-2020 |
riastradh | Fix steady state of root intr xfers.
Why?
- Avoid completing a root intr xfer multiple times in races. - Avoid potential use-after-free in poll_hub callouts (uhci, ahci).
How?
- Use sc->sc_intr_xfer or equivalent to store only a pending xfer that has not yet completed -- whether successfully, by timeout, or by synchronous abort. When any of those happens, set it to null under the lock, so the xfer is completed only once.
- For hci drivers that use a callout to poll the root hub (uhci, ahci):
. Pass the softc pointer, not the xfer, to the callout, so the callout is not even tempted to use xfer after free -- if the callout fires, but the xfer is synchronously aborted before the callout can do anything, the xfer might be freed by the time the callout starts to examine it.
. Teach the callout to do nothing if it is callout_pending after it has fired. This way:
1. completion or synchronous abort can just callout_stop 2. start can just callout_schedule
If the callout had already fired before (1), and doesn't acquire the bus lock until after (2), it may be tempted to abort the new root intr xfer just after submission, which would be wrong -- so instead we just have the callout do nothing if it notices it has been rescheduled, since it will fire again after the appropriate time has elapsed.
|
1.116 |
| 12-Feb-2020 |
riastradh | Factor out HCI-independent xfer completion logic.
New API for HCI drivers to synchronize hardware completion interrupts, synchronous aborts, and asynchronous timeouts:
- When submitting an xfer to hardware, call usbd_xfer_schedule_timeout(xfer).
- On HCI completion interrupt for xfer completion:
if (!usbd_xfer_trycomplete(xfer)) return; /* timed out or aborted, ignore it */
- In upm_abort methods, call usbd_xfer_abort(xfer).
For HCI drivers that use this API (not needed in drivers that don't, or for xfers like root intr xfers that don't use it):
- New ubm_abortx method serves role of former *hci_abort_xfer, but without any logic for wrangling timeouts/callouts/tasks -- caller in usbd_xfer_abort has already handled them.
- New ubm_dying method, returns true if the device is in the process of detaching, used by the timeout logic.
Converted and tested: - ehci - ohci
Converted and compile-tested: - ahci (XXX did this ever work?) - dwc2 - motg (XXX missing usbd_xfer_schedule_timeout in motg_*_start?) - uhci - xhci
Not changed:
- slhci (sys/dev/ic/sl811hs.c) -- doesn't use a separate per-xfer callout for timeouts (XXX but maybe should?)
- ugenhc (sys/rump/dev/lib/libugenhc/ugenhc.c) -- doesn't manage its own transfer timeouts
- vhci -- times transfers out only on detach; could be adapted easily if we wanted to use the xfer->ux_callout
|
1.115 |
| 29-Dec-2019 |
skrll | branches: 1.115.2; Acquire bus lock (if not polling) when changing xfer status, resetting the timeout and ringing the doorbell in the start methods.
|
1.114 |
| 08-Sep-2019 |
mrg | avoid non-debug kernel build issues.
|
1.113 |
| 07-Sep-2019 |
mrg | fix ryzen usb issue: we set TD size to '1', where has xhci spec 4.11.2.4 says final TRB for a TD should have this set to '0'. since we currently only generate sinel TRB TDs, set this to 0.
XXX: pullup-all
from sc.dying
|
1.112 |
| 07-Sep-2019 |
mrg | fix 32-bit debug build, and also vmstat -y. reported by sc.dying.
|
1.111 |
| 28-Aug-2019 |
mrg | introduce and use XHCIHIST_CALLARGS(). reduces lots of double logs, and includes useful info in all cases instead of just "called".
add a couple of more logs that i've wanted while debugging ryzen3 vs USB issues.
|
1.110 |
| 23-Aug-2019 |
mrg | convert a debug message to an error message. will help more quickly identify next time xhci version changes.
|
1.109 |
| 21-Aug-2019 |
mrg | match xhci version 3.10. allows properly finding all the USB busses on new ryzen 3 based systems.
unfortunately, the USB busses are still non-functional.
|
1.108 |
| 20-Aug-2019 |
skrll | typo in error message
|
1.107 |
| 08-May-2019 |
mrg | branches: 1.107.2; new comment explains this hack:
* XXXMRG: Stall task can run after slot is disabled when yanked. * This hack notices that the xs has been memset() in * xhci_disable_slot() and returns. Both xhci_reset_endpoint() * and xhci_set_dequeue() rely upon a valid ring setup for correct * operation, and the latter will fault, as would * usb_transfer_complete() if it got that far.
this truly fixes yanking active ucom devices (uchcom, uplcom and umcs all tested.) prior efforts largely worked by allowing the stall task to run first, as a side effect to their actual work.
ok @skrll.
XXX: pullup.
|
1.106 |
| 17-Feb-2019 |
rin | Fix assertion failures triggered by usbdi.c,v 1.182, when devices are detached.
This is because xfers of USBD_NOT_STARTED can be removed from queue in an invisible way to host controller drivers.
Discussed on tech-kern.
|
1.105 |
| 22-Jan-2019 |
skrll | Revert the KASSERT
|
1.104 |
| 22-Jan-2019 |
skrll | Add a KASSERT
|
1.103 |
| 11-Jan-2019 |
skrll | Add a bs_barrier to make ThunderX xhci work. Not sure why this is needed, but I'll work it out later.
|
1.102 |
| 11-Jan-2019 |
skrll | Style
|
1.101 |
| 07-Jan-2019 |
jakllsch | Seperate xHCI and xhci(4) TRB structs so as to avoid some of them (the ones that the hardware doesn't touch) ending up less-aligned than the compiler assumed.
Additionally, fix the most obvious problems that xhci(4) had on big endian systems.
Briefly tested on a Jetson TK1 in LE and BE w/ evbarm GENERIC kernel.
|
1.100 |
| 28-Oct-2018 |
mrg | use xhci_polling_p(). this might miss when bus2 is active.
XXX: pullup-7, pullup-8.
|
1.99 |
| 16-Sep-2018 |
mrg | consolidate the handling of polling across HC drivers, and generic USB: - don't take mutexes if polling - normalise the code across all drivers - add some not yet code to block discovery to/from polling - minor CSE - adjust comment for usbd_set_polling() to reality now i properly understand what it is used for and why.
this, with a hack to make RB_ASKNAME to wait 5 seconds allows boot -a work with USB keyboards. there are still multiple issues remaining: - discovery and polling need to be mutually exclusive - attachment of ukbd and wskbd is not handled by config_pending, and the 5 second delay isn't going to always be enough.
|
1.98 |
| 03-Sep-2018 |
riastradh | Rename min/max -> uimin/uimax for better honesty.
These functions are defined on unsigned int. The generic name min/max should not silently truncate to 32 bits on 64-bit systems. This is purely a name change -- no functional change intended.
HOWEVER! Some subsystems have
#define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b))
even though our standard name for that is MIN/MAX. Although these may invite multiple evaluation bugs, these do _not_ cause integer truncation.
To avoid `fixing' these cases, I first changed the name in libkern, and then compile-tested every file where min/max occurred in order to confirm that it failed -- and thus confirm that nothing shadowed min/max -- before changing it.
I have left a handful of bootloaders that are too annoying to compile-test, and some dead code:
cobalt ews4800mips hp300 hppa ia64 luna68k vax acorn32/if_ie.c (not included in any kernels) macppc/if_gm.c (superseded by gem(4))
It should be easy to fix the fallout once identified -- this way of doing things fails safe, and the goal here, after all, is to _avoid_ silent integer truncations, not introduce them.
Maybe one day we can reintroduce min/max as type-generic things that never silently truncate. But we should avoid doing that for a while, so that existing code has a chance to be detected by the compiler for conversion to uimin/uimax without changing the semantics until we can properly audit it all. (Who knows, maybe in some cases integer truncation is actually intended!)
|
1.97 |
| 30-Aug-2018 |
jakllsch | silence "not known to be supported" message for all version 1.x xHCIs
|
1.96 |
| 09-Aug-2018 |
mrg | pull across abort fixes from nick-nhusb. add more abort fixes, using ideas from Taylor and Nick, and myself. special thanks to both who inspired much of the code here, if not wrote it directly.
among other problems, this assert should no longer trigger:
panic: kernel diagnostic assertion "xfer->ux_state == XFER_ONQU" failed: file "/current/src/sys/dev/usb/usbdi.c", line 914
using usbhist i was able to track down my instance of it being related to userland close() beginning, dropping the sc_lock, and then the usb softintr completes the transfer normally, and when it is done, the abort path attempts to re-complete the transfer, and the above assert is tripped.
changes from nhusb were commited with these logs: -- Move the struct usb_task to struct usbd_xfer for everyone to use. -- Set device transfer status to USBD_IN_PROGRESS if start methods succeeds -- Actually set the transfer status on transfers in ohci_abort_xfer and the controller is dying -- Don't supply the lock to callout_halt when polling as it won't be held -- Improve transfer abort -- Mark device transfers as USBD_IN_PROGRESS appropriately and improve abort handling -- #ifdef DIAGNOSTIC -> KASSERT and add another KASSERT -- Mark device transfers as USBD_IN_PROGRESS appropriately and improve abort handling --
additional changes include: - initialise the usb abort task in the HCI allocx routine, so that it can be safely usb_rem_task()'d. - rework the handling of softintr vs cancellation vs timeout abort based upon a scheme from Taylor: when completing a transfer normally: - if the status is not in progress, it must be cancelled or timed out, and we should not process this xfer. - set the status as normal. - unconditionallly callout_stop() and usb_rem_task(). they're safe and either aren't running, or will run and do nothing. - finally call usb_transfer_complete(). when aborting a transfer: - status should be cancelled or timed out. - if cancelling, callout_halt and usb_rem_task_wait() to make sure the timer is either done or cancelled. - at this point, the ux_status must not be cancelled or timed out, and if it is not in progress we're done. - set the status. - if the controller is dying, just return. - perform HCI-specific tasks to abort this xfer. - finally call usb_transfer_complete(). for the timeout and timeout task: - if the HCI is not dying, and the ux_status is in progress, then trigger the usb abort task. - remove UXFER_ABORTWAIT and UXFER_ABORTING.
tested on: - multiple PC systems with several types of devices: ugen/UPS, ucom, umass with disk, ssd and cdrom backends, kbd, ms, using uhci, ehci and xhci. - erlite3: sd@umass on dwc2. - sunblade2000: kbd/ms and umass disk on ohci.
untested: - motg, slhci and ahci. motg has some portion of the new scheme applied, but slhci and ahci require more study.
future work includes pushing a lot of the common abort handling into usbdi.c and leaving upm_abort() for HC specific tasks, but this change is pullup-able to netbsd-7 and netbsd-8 as it does not change any external API, as well as removing over 100 lines of code while adding over 30 new asserts.
XXX: pullup-7, pullup-8.
|
1.95 |
| 18-Jul-2018 |
msaitoh | Read xHCI 1.1's HCCPARAMS2 registar and print it with aprint_debug_dev(). e.g.: xhci0: hcc2=0x7d<ETC,CIC,LEC,CTC,FSC,U3C>
|
1.94 |
| 16-Jul-2018 |
christos | make typing on the console work during boot: 1. if polling avoid mutex 2. convert spin mutex calls to regular calls in xhci_poll so that we don't spinout while waiting for the user to type. Tested by phil@
|
1.93 |
| 29-Jun-2018 |
msaitoh | Detect USB 3.1.
|
1.92 |
| 14-May-2018 |
jakllsch | branches: 1.92.2; With the hope it fixes PR #52911, be extra paranoid about assuring the Device Context DMA memory is sync'd immediately before reading from it.
|
1.91 |
| 02-May-2018 |
jmcneill | "Root Hub" -> "root hub" for consistency with other HC drivers
|
1.90 |
| 23-Apr-2018 |
jdolecek | enable code to only trigger usb processing when EINT is set, to avoid misinterpreting shared interrupt for another device
when clearing USBSTS, actually preserve the bits which spec requires to preserve, and actually clear bit 1, which should be actually always cleared to zero by spec
also #ifdef XHCI_DEBUG some unnecessary register reads
this should finally resolve PR kern/53066 also for Martin
|
1.89 |
| 22-Apr-2018 |
jdolecek | trigger the softint processing on that child bus which is not detached yet
fixes PR kern/53066 by Martin Husemann
|
1.88 |
| 21-Apr-2018 |
jdolecek | add KASSERT() that sc_child* is set to NULL after child detach; just for readability, it's not immediatelly obvious this is done in xhci_childdet()
no functional changes
|
1.87 |
| 09-Apr-2018 |
jakllsch | Stop potential misuse of vendor names and USB vendor IDs in root hub device and string descriptors.
Firstly: Few vendors have identical PCI-SIG vendor IDs and USB-IF vendor IDs. As such, using the PCI vendor ID as a USB vendor ID may trample on whomever is allocated that USB vendor ID.
Secondly: The vendor of the host controller hardware implementation has little to nothing to do with our usbroothub implementation. Thus we should not potentially associate any problems therewith to such third party.
This change will result in root hubs being identified by USB Vendor ID 0x0000. Root hub vendor string will now be "NetBSD" (or, specifically: ostype). Product ID (0x0000) and product strings remain unchanged.
|
1.86 |
| 07-Feb-2018 |
prlw1 | branches: 1.86.2; xhci.c: avoid unused variable in non-DIAGNOSTIC build
|
1.85 |
| 01-Feb-2018 |
msaitoh | Fix KASSERT panic. When detaching USB host controoler, the following panic occured: kernel diagnostic assertion "sc->sc_intrxfer == xfer" failed: file "../../../../dev/usb/ohci.c", line 1720 Clear sc_intrxfer correctly. Adviced by Nick and tested by me.
|
1.84 |
| 30-Jan-2018 |
msaitoh | Avoid panic while detaching xhci. The xhci driver has both sc_child and sc_child2 but xhci_childdet() only supported sc_child. OK'd by Nick.
|
1.83 |
| 20-Dec-2017 |
skrll | Fix the logic around TT Hub Slot ID, TT Port Number and Multi-TT in xhci_setup_tthub. TT Hub/Port need to reference the upstream HS hub and Multi-TT needs to reflect the capabilities of a HS hub itself or the same upstream HS hub.
|
1.82 |
| 19-Dec-2017 |
skrll | Trailing whitespace
|
1.81 |
| 10-Dec-2017 |
hannken | Use USB_DEBUG, not XHCI_DEBUG to protect `dci', DPRINTFN() always uses it.
|
1.80 |
| 09-Dec-2017 |
christos | adjust for hexdump signature
|
1.79 |
| 08-Dec-2017 |
christos | coalesce the two copies of hexdump into libkern
|
1.78 |
| 07-Dec-2017 |
christos | PR/52791: Robert Sprowson: avoid duplicate tests (use accessor variables)
|
1.77 |
| 17-Nov-2017 |
skrll | s/PR_NOWAIT/PR_WAITOK/ in HCD allocx (allocate xfer) method
|
1.76 |
| 09-Nov-2017 |
msaitoh | Wait 1ms first. Existing Intel xHCI requies 1ms delay to prevent system hang (Errata).
XXX pullup-[78]
|
1.75 |
| 28-Oct-2017 |
pgoyette | Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up...
(As proposed on tech-kern@ with additional changes and enhancements.)
Details of changes:
* All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.)
* Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments.
* All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t.
* All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size."
* All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed.
* vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9).
* vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed).
* vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built.
* The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements.
[1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju".
[2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies.
|
1.74 |
| 25-Sep-2017 |
jmcneill | If the bus glue calls xhci_init with interrupts enabled, there is a window between when xhci interrupts are enabled and the usb bus driver is attached. If an irq occurs in this window, xhci will attempt to schedule a softint with an invalid softint handle.
Add a quirk flag, XHCI_DEFERRED_START, that when set skips starting the controller at the end of xhci_init. Bus glue that sets this is responsible to call xhci_start after attaching the child usb devices.
|
1.73 |
| 22-Aug-2017 |
skrll | Check both buses for ub_usepolling and schedule the soft interrupt handler or call it directly. Fixes usb keyboard in ddb when attached to xhci.
|
1.72 |
| 01-Jun-2017 |
chs | branches: 1.72.2; remove checks for failure after memory allocation calls that cannot fail:
kmem_alloc() with KM_SLEEP kmem_zalloc() with KM_SLEEP percpu_alloc() pserialize_create() psref_class_create()
all of these paths include an assertion that the allocation has not failed, so callers should not assert that again.
|
1.71 |
| 13-Apr-2017 |
skrll | PR/52154: xHCI Slot Context Not Include in configure endpoint process
eXtensible Host Controller Interface Specification(rev 1.1), 4.6.6:
"A0 shall be set to 1 and refer to section 6.2.2.2 for the Slot Context fields used by the Configure Endpoint Command."
|
1.70 |
| 21-Jan-2017 |
skrll | Fix a kmem_{zalloc,free} size
|
1.69 |
| 19-Jan-2017 |
skrll | Fix build
|
1.68 |
| 19-Jan-2017 |
skrll | Pull across xhci(4) improvemnts from nick-nhusb
|
1.67 |
| 03-Sep-2016 |
skrll | branches: 1.67.2; Fix "spurious event" when command ring rolls over. When the enqueue pointer of command ring points at the last TRB, address of Link TRB was stored in sc_command_addr. It should be address of 0th TRB of ring.
From t-hash
|
1.66 |
| 03-Sep-2016 |
skrll | Suppress stopping-endpoint in xhci_close_pipe if the endpoint is already stopped.
From t-hash
|
1.65 |
| 18-Aug-2016 |
skrll | Put Link TRB always at the end of ring. Should fix ctrl xfer problem on Intel xHC.
From t-hash.
|
1.64 |
| 18-Aug-2016 |
skrll | Byte swap the address in xhci_new_device appropriately. From t-hash
|
1.63 |
| 17-Jul-2016 |
skrll | Various improvement from t-hash (and a bit from me).
- Flesh out the abort routine - Avoid using EVENT_DATA - Miscellaneous debug - Comment improvement
|
1.62 |
| 08-Jul-2016 |
skrll | branches: 1.62.2; Don't ignore return value of xhci_update_ep0_mps and remove KASSERT at the end of that function.
From t-hash
|
1.61 |
| 08-Jul-2016 |
skrll | More debug in new_device.
From t-hash.
|
1.60 |
| 08-Jul-2016 |
skrll | s/UBS/USB/
From t-hash
|
1.59 |
| 07-Jul-2016 |
maya | Turn a few KASSERTs into KASSERTMSG mentioning the tested values
Some of these values are optimized out, so knowing why the test failed can be challenging.
|
1.58 |
| 12-Jun-2016 |
skrll | Remove KASSERTs that don't make sense.
|
1.57 |
| 10-Jun-2016 |
skrll | Add callout_stop while clearing stall. From t-hash.
|
1.56 |
| 05-Jun-2016 |
skrll | PR/51202: XHCI driver sends stale TRBs from a pipe previously opened
Use xhci_host_dequeue in xhci_set_dequeue
|
1.55 |
| 05-Jun-2016 |
skrll | PR/51202: XHCI driver sends stale TRBs from a pipe previously opened
A similar patch was sent to me by t-hash and the xhci_setup_ctx is taken from that.
|
1.54 |
| 05-Jun-2016 |
skrll | Update some comments. Some from t-hash with updates from me.
|
1.53 |
| 05-Jun-2016 |
skrll | More debug
|
1.52 |
| 05-Jun-2016 |
skrll | Replace num of TRBs with xr->xr_ntrb. From t-hash.
|
1.51 |
| 05-Jun-2016 |
skrll | From t-hash + Gather up setting slot and device context into xhci_setup_ctx(), and split out setting route string and TT hub params. + Apply htole{32,64} to contexts at once as possible. + Use xhci_setup_ctx in xhci_set_address and xhci_configure_endpoint.
|
1.50 |
| 05-Jun-2016 |
skrll | Wrap long lines and other whitespace. From t-hash.
|
1.49 |
| 05-Jun-2016 |
skrll | Reduce the scope of some variable. From t-hash
|
1.48 |
| 05-Jun-2016 |
skrll | From t-hash + Split out setting address device. + Split out freeing slot structure. + Use xhci_free_slot() in xhci_disable_slot().
|
1.47 |
| 31-May-2016 |
mlelstv | Flush memory correctly during ring put. See PR 51199.
From Sprow, ok skrll@.
|
1.46 |
| 10-May-2016 |
pooka | sprinkle _KERNEL_OPT
|
1.45 |
| 07-May-2016 |
skrll | G/C more unused code
|
1.44 |
| 06-May-2016 |
skrll | Print LF in hexdump when datalen % 16 != 0. From t-hash.
|
1.43 |
| 06-May-2016 |
skrll | G/C some #if 0 code
|
1.42 |
| 06-May-2016 |
skrll | Remove magic numbers from xhci_hc_reset. From t-hash.
|
1.41 |
| 30-Apr-2016 |
skrll | Comment updates from t-hash + Add and update comments. + Update spec URLs.
|
1.40 |
| 30-Apr-2016 |
skrll | Updates from t-hash + Split out printing PSI and taking ownership. + Split out resetting HC. + Split out calculating TRB index.
XXX magic numbers XXX waits
|
1.39 |
| 30-Apr-2016 |
skrll | Cancel command when command times out. From t-hash.
XXX interrupt context?
|
1.38 |
| 30-Apr-2016 |
skrll | Fix type of return value in xhci_do_command
|
1.37 |
| 30-Apr-2016 |
skrll | Updates from t-hash + Change xhci_init() returns errno. + Fix memory leaks in error paths. + Add more messages for critical errors.
|
1.36 |
| 30-Apr-2016 |
skrll | Wrap long line. From t-hash.
|
1.35 |
| 30-Apr-2016 |
skrll | Use XHCI_XFER2XXFER
From t-hash
|
1.34 |
| 23-Apr-2016 |
skrll | Merge nick-nhusb
- API / infrastructure changes to support memory management changes. - Memory management improvements and bug fixes. - HCDs should now be MP safe - conversion to KERNHIST based debug - FS/LS isoc support on ehci(4). - conversion to kmem(9) - Some USB 3 support - mostly from Takahiro HAYASHI (t-hash). - interrupt transfers now get proper DMA operations - general bug fixes - kern/48308 - uhub status notification improvements - umass(4) probe fix (applied to HEAD already) - ohci(4) short transfer fix
|
1.33 |
| 06-Jan-2016 |
skrll | Get the iManufacturer, iProduct, and iSerialNumber strings before probing for drivers and cache them for later use. This reduces bus transactions and fixes attachment for at least two of my umass(4)s.
|
1.32 |
| 10-Dec-2015 |
skrll | Unwrap lines
|
1.31 |
| 10-Dec-2015 |
skrll | Fix indentation
|
1.30 |
| 10-Dec-2015 |
skrll | Trailing whitespace
|
1.29 |
| 19-Aug-2015 |
skrll | More IPL_SCHED -> IPL_USB
|
1.28 |
| 18-Nov-2014 |
skrll | branches: 1.28.2; kern/49391: Fixes to XHCI driver command ring and status TRB
CRCR needs 64byte aligned address
Use usb_allocmem instead of usb_allocmem_flags(..., 0)
Correct status stage TRB in xhci_device_ctrl_start - direction logic was wrong.
Correct a typo in a comment
|
1.27 |
| 03-Oct-2014 |
skrll | Convert to USB_HIST.
From Takahiro HAYASHI with tweaks from me.
|
1.26 |
| 12-Aug-2014 |
skrll | branches: 1.26.2; Set the correct MPS for LS devices. From Takahiro HAYASHI.
|
1.25 |
| 12-Aug-2014 |
skrll | Serialise xhci_intr1 calls with sc_intr_lock. From Takahiro HAYASHI.
|
1.24 |
| 11-Aug-2014 |
skrll | PR/49091: xhci: wrong wMaxPacketSize value
While this is correct according to the specification only fixed sizes are allowed, i.e. 512 for SS, etc. Maybe these should be used?
|
1.23 |
| 05-Aug-2014 |
skrll | branches: 1.23.2; Remove #ifdef DIAGNOSTIC around sc from the root interrupt abort methods now it's always used.
|
1.22 |
| 05-Aug-2014 |
skrll | Prevent the root hub sending updates once the root interrupt abort is called.
|
1.21 |
| 05-Aug-2014 |
skrll | Simplify the freeing of the interrupt pipe transfer. Inspired by OpenBSD.
|
1.20 |
| 26-Jul-2014 |
pgoyette | Another __diagused
|
1.19 |
| 15-Jul-2014 |
ozaki-r | Unbreak the build for i386
__debugused => XHCI_DEBUG
|
1.18 |
| 15-Jul-2014 |
ozaki-r | Suppress another debug output
It's output when DDB.
Fix previous: DEBUG => XHCI_DEBUG
|
1.17 |
| 14-Jul-2014 |
ozaki-r | Suppress debug output of xhci_device_intr_done
It's annoying because it is output even on keyboard inputs.
|
1.16 |
| 10-Mar-2014 |
skrll | branches: 1.16.2; 1.16.4; 1.16.6; Code style. No functional change.
|
1.15 |
| 10-Mar-2014 |
skrll | Don't abuse usbd_status in xhci_init
|
1.14 |
| 10-Mar-2014 |
skrll | Comment style.
|
1.13 |
| 16-Jan-2014 |
dsl | Add another XXX comment, I'm not in a postition to fix the code. The 'cycle' bit of a LINK trb must not be changed until the cycle bit of the following trb has been set.
|
1.12 |
| 14-Dec-2013 |
jakllsch | In xhci_init() use aprint_debug_dev() instead of device_printf().
|
1.11 |
| 10-Dec-2013 |
dsl | Add a few comments about some perversities of the xhci specification. XXX: I can't see any code that ensures there is space in the rings. XXX: Nothing stops buffer fragments crossing 64kB boundaries.
|
1.10 |
| 17-Nov-2013 |
skrll | Fix locking botch.
PR/48383
|
1.9 |
| 13-Nov-2013 |
christos | CID 1125827: Avoid buffer overrun (read past end of struct)
|
1.8 |
| 10-Nov-2013 |
mrg | add a default case in xhci_init_slot(). ok jakllsch.
|
1.7 |
| 08-Nov-2013 |
christos | fix unused variable warnings
|
1.6 |
| 04-Nov-2013 |
skrll | branches: 1.6.2; PR/48366 Always zero the allocated memory in xhci_alloc, not just in DIAGNOSTIC.
|
1.5 |
| 28-Oct-2013 |
matt | Add support for scratchpad buffers (required for some XHCI devices). Fix an endian issue.
|
1.4 |
| 18-Oct-2013 |
apb | Wrap several unused static inline functions with #if 0. I didn't delete them because I suspect that they might be needed later.
|
1.3 |
| 18-Oct-2013 |
skrll | Wrap some long lines.
|
1.2 |
| 18-Oct-2013 |
apb | Don't refer to uninitialised variable 'v' in case C(UR_GET_DESCRIPTOR, UT_READ_CLASS_DEVICE) in xhci_root_ctrl_start(). This code was apparently pasted from the ehci driver.
OK nick.
|
1.1 |
| 14-Sep-2013 |
jakllsch | Add work-in-progress xhci(4) driver code. Currently (mostly) supports interrupt-driven control, interrupt and bulk transfers at the three USB 2.0 speeds on root hub ports.
|
1.6.2.2 |
| 05-Nov-2013 |
matt | Pull down xhci support from HEAD
|
1.6.2.1 |
| 04-Nov-2013 |
matt | file xhci.c was added on branch matt-nb5-mips64 on 2013-11-05 18:36:31 +0000
|
1.16.6.2 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.16.6.1 |
| 10-Mar-2014 |
yamt | file xhci.c was added on branch yamt-pagecache on 2014-05-22 11:40:37 +0000
|
1.16.4.2 |
| 18-May-2014 |
rmind | sync with head
|
1.16.4.1 |
| 10-Mar-2014 |
rmind | file xhci.c was added on branch rmind-smpnet on 2014-05-18 17:45:48 +0000
|
1.16.2.1 |
| 10-Aug-2014 |
tls | Rebase.
|
1.23.2.9 |
| 17-Sep-2019 |
martin | Pull up following revision(s) (requested by mrg in ticket #1707):
sys/dev/usb/xhci.c: revision 1.113 sys/dev/usb/xhci.c: revision 1.109
match xhci version 3.10. allows properly finding all the USB busses on new ryzen 3 based systems.
unfortunately, the USB busses are still non-functional.
-
fix ryzen usb issue: we set TD size to '1', where has xhci spec 4.11.2.4 says final TRB for a TD should have this set to '0'. since we currently only generate sinel TRB TDs, set this to 0.
XXX: pullup-all from sc.dying
|
1.23.2.8 |
| 25-Aug-2018 |
martin | Pull up following revision(s) (requested by mrg in ticket #1632):
sys/dev/usb/usbdivar.h: revision 1.117 sys/external/bsd/dwc2/dwc2.c: revision 1.52 sys/dev/usb/xhcivar.h: revision 1.10 sys/dev/usb/motg.c: revision 1.22 sys/dev/usb/ehci.c: revision 1.260 sys/dev/usb/ehci.c: revision 1.261 sys/dev/usb/xhci.c: revision 1.96 sys/dev/usb/ohci.c: revision 1.282 sys/dev/usb/ohci.c: revision 1.283 sys/dev/usb/ehcivar.h: revision 1.45 sys/dev/usb/uhci.c: revision 1.281 sys/dev/usb/uhci.c: revision 1.282 sys/dev/usb/usbdi.c: revision 1.177 sys/dev/usb/ohcivar.h: revision 1.60 sys/dev/usb/uhcivar.h: revision 1.55 (all via patch)
pull across abort fixes from nick-nhusb. add more abort fixes, using ideas from Taylor and Nick, and myself. special thanks to both who inspired much of the code here, if not wrote it directly.
among other problems, this assert should no longer trigger:
panic: kernel diagnostic assertion "xfer->ux_state == XFER_ONQU" failed: file "/current/src/sys/dev/usb/usbdi.c", line 914
using usbhist i was able to track down my instance of it being related to userland close() beginning, dropping the sc_lock, and then the usb softintr completes the transfer normally, and when it is done, the abort path attempts to re-complete the transfer, and the above assert is tripped.
changes from nhusb were commited with these logs: -- Move the struct usb_task to struct usbd_xfer for everyone to use. -- Set device transfer status to USBD_IN_PROGRESS if start methods succeeds -- Actually set the transfer status on transfers in ohci_abort_xfer and the controller is dying -- Don't supply the lock to callout_halt when polling as it won't be held -- Improve transfer abort -- Mark device transfers as USBD_IN_PROGRESS appropriately and improve abort handling -- -- Mark device transfers as USBD_IN_PROGRESS appropriately and improve abort handling --
additional changes include: - initialise the usb abort task in the HCI allocx routine, so that it can be safely usb_rem_task()'d. - rework the handling of softintr vs cancellation vs timeout abort based upon a scheme from Taylor: when completing a transfer normally: - if the status is not in progress, it must be cancelled or timed out, and we should not process this xfer. - set the status as normal. - unconditionallly callout_stop() and usb_rem_task(). they're safe and either aren't running, or will run and do nothing. - finally call usb_transfer_complete(). when aborting a transfer: - status should be cancelled or timed out. - if cancelling, callout_halt and usb_rem_task_wait() to make sure the timer is either done or cancelled. - at this point, the ux_status must not be cancelled or timed out, and if it is not in progress we're done. - set the status. - if the controller is dying, just return. - perform HCI-specific tasks to abort this xfer. - finally call usb_transfer_complete(). for the timeout and timeout task: - if the HCI is not dying, and the ux_status is in progress, then trigger the usb abort task. - remove UXFER_ABORTWAIT and UXFER_ABORTING.
tested on: - multiple PC systems with several types of devices: ugen/UPS, ucom, umass with disk, ssd and cdrom backends, kbd, ms, using uhci, ehci and xhci. - erlite3: sd@umass on dwc2. - sunblade2000: kbd/ms and umass disk on ohci.
untested: - motg, slhci and ahci. motg has some portion of the new scheme applied, but slhci and ahci require more study.
future work includes pushing a lot of the common abort handling into usbdi.c and leaving upm_abort() for HC specific tasks, but this change is pullup-able to netbsd-7 and netbsd-8 as it does not change any external API, as well as removing over 100 lines of code while adding over 30 new asserts.
XXX: pullup-7, pullup-8.
fix DIAGNOSTIC build by not copying ub_usepolling to stack before use
Sprinkle __diagused
|
1.23.2.7 |
| 03-Jan-2018 |
snj | Pull up following revision(s) (requested by skrll in ticket #1529): sys/dev/usb/ehci.c: revision 1.257 sys/dev/usb/motg.c: revision 1.19 sys/dev/usb/ohci.c: revision 1.276 sys/dev/usb/uhci.c: revision 1.279 sys/dev/usb/xhci.c: revision 1.77 sys/external/bsd/dwc2/dwc2.c: revision 1.47 s/PR_NOWAIT/PR_WAITOK/ in HCD allocx (allocate xfer) method
|
1.23.2.6 |
| 03-Jan-2018 |
snj | Pull up following revision(s) (requested by msaitoh in ticket #1526): sys/dev/usb/xhci.c: revision 1.76 Wait 1ms first. Existing Intel xHCI requies 1ms delay to prevent system hang (Errata).
|
1.23.2.5 |
| 05-Apr-2017 |
snj | Pull up following revision(s) (requested by skrll in ticket #1395): share/man/man4/axe.4: netbsd-7-nhusb share/man/man4/axen.4: netbsd-7-nhusb share/man/man4/cdce.4: netbsd-7-nhusb share/man/man4/uaudio.4: netbsd-7-nhusb share/man/man4/ucom.4: netbsd-7-nhusb share/man/man4/uep.4: netbsd-7-nhusb share/man/man4/urtw.4: netbsd-7-nhusb share/man/man4/usb.4: netbsd-7-nhusb share/man/man4/uyap.4: netbsd-7-nhusb share/man/man4/xhci.4: netbsd-7-nhusb share/man/man9/usbdi.9: netbsd-7-nhusb sys/arch/amd64/conf/ALL: netbsd-7-nhusb sys/arch/amd64/conf/GENERIC: netbsd-7-nhusb sys/arch/amiga/dev/slhci_zbus.c: netbsd-7-nhusb sys/arch/arm/allwinner/awin_otg.c: netbsd-7-nhusb sys/arch/arm/allwinner/awin_usb.c: netbsd-7-nhusb sys/arch/arm/amlogic/amlogic_dwctwo.c: netbsd-7-nhusb sys/arch/arm/at91/at91ohci.c: netbsd-7-nhusb sys/arch/arm/broadcom/bcm2835_dwctwo.c: netbsd-7-nhusb sys/arch/arm/broadcom/bcm53xx_usb.c: netbsd-7-nhusb sys/arch/arm/ep93xx/epohci.c: netbsd-7-nhusb sys/arch/arm/gemini/obio_ehci.c: netbsd-7-nhusb sys/arch/arm/imx/files.imx23: netbsd-7-nhusb sys/arch/arm/imx/imxusb.c: netbsd-7-nhusb sys/arch/arm/imx/imxusbreg.h: netbsd-7-nhusb sys/arch/arm/omap/obio_ohci.c: netbsd-7-nhusb sys/arch/arm/omap/omap3_ehci.c: netbsd-7-nhusb sys/arch/arm/omap/omapl1x_ohci.c: netbsd-7-nhusb sys/arch/arm/omap/tiotg.c: netbsd-7-nhusb sys/arch/arm/s3c2xx0/ohci_s3c24x0.c: netbsd-7-nhusb sys/arch/arm/samsung/exynos_usb.c: netbsd-7-nhusb sys/arch/arm/xscale/pxa2x0_ohci.c: netbsd-7-nhusb sys/arch/arm/zynq/zynq_usb.c: netbsd-7-nhusb sys/arch/hpcarm/dev/nbp_slhci.c: netbsd-7-nhusb sys/arch/hpcmips/dev/plumohci.c: netbsd-7-nhusb sys/arch/i386/conf/ALL: netbsd-7-nhusb sys/arch/i386/conf/GENERIC: netbsd-7-nhusb sys/arch/i386/pci/gcscehci.c: netbsd-7-nhusb sys/arch/luna68k/conf/GENERIC: netbsd-7-nhusb sys/arch/mips/adm5120/dev/ahci.c: netbsd-7-nhusb sys/arch/mips/adm5120/dev/ahcivar.h: netbsd-7-nhusb sys/arch/mips/alchemy/dev/ohci_aubus.c: netbsd-7-nhusb sys/arch/mips/atheros/dev/ehci_arbus.c: netbsd-7-nhusb sys/arch/mips/atheros/dev/ohci_arbus.c: netbsd-7-nhusb sys/arch/mips/conf/files.adm5120: netbsd-7-nhusb sys/arch/mips/ralink/ralink_ehci.c: netbsd-7-nhusb sys/arch/mips/ralink/ralink_ohci.c: netbsd-7-nhusb sys/arch/mips/rmi/rmixl_ehci.c: netbsd-7-nhusb sys/arch/mips/rmi/rmixl_ohci.c: netbsd-7-nhusb sys/arch/playstation2/dev/ohci_sbus.c: netbsd-7-nhusb sys/arch/powerpc/booke/dev/pq3ehci.c: netbsd-7-nhusb sys/arch/powerpc/ibm4xx/dev/dwctwo_plb.c: netbsd-7-nhusb sys/arch/x68k/dev/slhci_intio.c: netbsd-7-nhusb sys/conf/files: netbsd-7-nhusb sys/dev/cardbus/ehci_cardbus.c: netbsd-7-nhusb sys/dev/cardbus/ohci_cardbus.c: netbsd-7-nhusb sys/dev/cardbus/uhci_cardbus.c: netbsd-7-nhusb sys/dev/ic/sl811hs.c: netbsd-7-nhusb sys/dev/ic/sl811hsvar.h: netbsd-7-nhusb sys/dev/isa/slhci_isa.c: netbsd-7-nhusb sys/dev/marvell/ehci_mv.c: netbsd-7-nhusb sys/dev/pci/ehci_pci.c: netbsd-7-nhusb sys/dev/pci/ohci_pci.c: netbsd-7-nhusb sys/dev/pci/uhci_pci.c: netbsd-7-nhusb sys/dev/pci/xhci_pci.c: netbsd-7-nhusb sys/dev/pcmcia/slhci_pcmcia.c: netbsd-7-nhusb sys/dev/usb/Makefile.usbdevs: netbsd-7-nhusb sys/dev/usb/TODO: netbsd-7-nhusb sys/dev/usb/TODO.usbmp: netbsd-7-nhusb sys/dev/usb/aubtfwl.c: netbsd-7-nhusb sys/dev/usb/auvitek.c: netbsd-7-nhusb sys/dev/usb/auvitek_audio.c: netbsd-7-nhusb sys/dev/usb/auvitek_dtv.c: netbsd-7-nhusb sys/dev/usb/auvitek_i2c.c: netbsd-7-nhusb sys/dev/usb/auvitek_video.c: netbsd-7-nhusb sys/dev/usb/auvitekvar.h: netbsd-7-nhusb sys/dev/usb/ehci.c: netbsd-7-nhusb sys/dev/usb/ehcireg.h: netbsd-7-nhusb sys/dev/usb/ehcivar.h: netbsd-7-nhusb sys/dev/usb/emdtv.c: netbsd-7-nhusb sys/dev/usb/emdtv_dtv.c: netbsd-7-nhusb sys/dev/usb/emdtv_ir.c: netbsd-7-nhusb sys/dev/usb/emdtvvar.h: netbsd-7-nhusb sys/dev/usb/ezload.c: netbsd-7-nhusb sys/dev/usb/ezload.h: netbsd-7-nhusb sys/dev/usb/files.usb: netbsd-7-nhusb sys/dev/usb/hid.c: netbsd-7-nhusb sys/dev/usb/hid.h: netbsd-7-nhusb sys/dev/usb/if_athn_usb.c: netbsd-7-nhusb sys/dev/usb/if_athn_usb.h: netbsd-7-nhusb sys/dev/usb/if_atu.c: netbsd-7-nhusb sys/dev/usb/if_atureg.h: netbsd-7-nhusb sys/dev/usb/if_aue.c: netbsd-7-nhusb sys/dev/usb/if_auereg.h: netbsd-7-nhusb sys/dev/usb/if_axe.c: netbsd-7-nhusb sys/dev/usb/if_axen.c: netbsd-7-nhusb sys/dev/usb/if_axenreg.h: netbsd-7-nhusb sys/dev/usb/if_axereg.h: netbsd-7-nhusb sys/dev/usb/if_cdce.c: netbsd-7-nhusb sys/dev/usb/if_cdcereg.h: netbsd-7-nhusb sys/dev/usb/if_cue.c: netbsd-7-nhusb sys/dev/usb/if_cuereg.h: netbsd-7-nhusb sys/dev/usb/if_kue.c: netbsd-7-nhusb sys/dev/usb/if_kuereg.h: netbsd-7-nhusb sys/dev/usb/if_otus.c: netbsd-7-nhusb sys/dev/usb/if_otusvar.h: netbsd-7-nhusb sys/dev/usb/if_rum.c: netbsd-7-nhusb sys/dev/usb/if_rumreg.h: netbsd-7-nhusb sys/dev/usb/if_rumvar.h: netbsd-7-nhusb sys/dev/usb/if_run.c: netbsd-7-nhusb sys/dev/usb/if_runvar.h: netbsd-7-nhusb sys/dev/usb/if_smsc.c: netbsd-7-nhusb sys/dev/usb/if_smscreg.h: netbsd-7-nhusb sys/dev/usb/if_smscvar.h: netbsd-7-nhusb sys/dev/usb/if_udav.c: netbsd-7-nhusb sys/dev/usb/if_udavreg.h: netbsd-7-nhusb sys/dev/usb/if_upgt.c: netbsd-7-nhusb sys/dev/usb/if_upgtvar.h: netbsd-7-nhusb sys/dev/usb/if_upl.c: netbsd-7-nhusb sys/dev/usb/if_ural.c: netbsd-7-nhusb sys/dev/usb/if_uralreg.h: netbsd-7-nhusb sys/dev/usb/if_uralvar.h: netbsd-7-nhusb sys/dev/usb/if_url.c: netbsd-7-nhusb sys/dev/usb/if_urlreg.h: netbsd-7-nhusb sys/dev/usb/if_urndis.c: netbsd-7-nhusb sys/dev/usb/if_urndisreg.h: netbsd-7-nhusb sys/dev/usb/if_urtw.c: netbsd-7-nhusb sys/dev/usb/if_urtwn.c: netbsd-7-nhusb sys/dev/usb/if_urtwn_data.h: netbsd-7-nhusb sys/dev/usb/if_urtwnreg.h: netbsd-7-nhusb sys/dev/usb/if_urtwnvar.h: netbsd-7-nhusb sys/dev/usb/if_urtwreg.h: netbsd-7-nhusb sys/dev/usb/if_zyd.c: netbsd-7-nhusb sys/dev/usb/if_zydreg.h: netbsd-7-nhusb sys/dev/usb/irmce.c: netbsd-7-nhusb sys/dev/usb/moscom.c: netbsd-7-nhusb sys/dev/usb/motg.c: netbsd-7-nhusb sys/dev/usb/motgvar.h: netbsd-7-nhusb sys/dev/usb/ohci.c: netbsd-7-nhusb sys/dev/usb/ohcireg.h: netbsd-7-nhusb sys/dev/usb/ohcivar.h: netbsd-7-nhusb sys/dev/usb/pseye.c: netbsd-7-nhusb sys/dev/usb/slurm.c: netbsd-7-nhusb sys/dev/usb/stuirda.c: netbsd-7-nhusb sys/dev/usb/u3g.c: netbsd-7-nhusb sys/dev/usb/uark.c: netbsd-7-nhusb sys/dev/usb/uatp.c: netbsd-7-nhusb sys/dev/usb/uaudio.c: netbsd-7-nhusb sys/dev/usb/uberry.c: netbsd-7-nhusb sys/dev/usb/ubsa.c: netbsd-7-nhusb sys/dev/usb/ubsa_common.c: netbsd-7-nhusb sys/dev/usb/ubsavar.h: netbsd-7-nhusb sys/dev/usb/ubt.c: netbsd-7-nhusb sys/dev/usb/uchcom.c: netbsd-7-nhusb sys/dev/usb/ucom.c: netbsd-7-nhusb sys/dev/usb/ucomvar.h: netbsd-7-nhusb sys/dev/usb/ucycom.c: netbsd-7-nhusb sys/dev/usb/udl.c: netbsd-7-nhusb sys/dev/usb/udl.h: netbsd-7-nhusb sys/dev/usb/udsbr.c: netbsd-7-nhusb sys/dev/usb/udsir.c: netbsd-7-nhusb sys/dev/usb/uep.c: netbsd-7-nhusb sys/dev/usb/uftdi.c: netbsd-7-nhusb sys/dev/usb/uftdireg.h: netbsd-7-nhusb sys/dev/usb/ugen.c: netbsd-7-nhusb sys/dev/usb/ugensa.c: netbsd-7-nhusb sys/dev/usb/uhci.c: netbsd-7-nhusb sys/dev/usb/uhcireg.h: netbsd-7-nhusb sys/dev/usb/uhcivar.h: netbsd-7-nhusb sys/dev/usb/uhid.c: netbsd-7-nhusb sys/dev/usb/uhidev.c: netbsd-7-nhusb sys/dev/usb/uhidev.h: netbsd-7-nhusb sys/dev/usb/uhmodem.c: netbsd-7-nhusb sys/dev/usb/uhso.c: netbsd-7-nhusb sys/dev/usb/uhub.c: netbsd-7-nhusb sys/dev/usb/uipad.c: netbsd-7-nhusb sys/dev/usb/uipaq.c: netbsd-7-nhusb sys/dev/usb/uirda.c: netbsd-7-nhusb sys/dev/usb/uirdavar.h: netbsd-7-nhusb sys/dev/usb/ukbd.c: netbsd-7-nhusb sys/dev/usb/ukbdmap.c: netbsd-7-nhusb sys/dev/usb/ukyopon.c: netbsd-7-nhusb sys/dev/usb/ukyopon.h: netbsd-7-nhusb sys/dev/usb/ulpt.c: netbsd-7-nhusb sys/dev/usb/umass.c: netbsd-7-nhusb sys/dev/usb/umass_isdata.c: netbsd-7-nhusb sys/dev/usb/umass_isdata.h: netbsd-7-nhusb sys/dev/usb/umass_quirks.c: netbsd-7-nhusb sys/dev/usb/umass_quirks.h: netbsd-7-nhusb sys/dev/usb/umass_scsipi.c: netbsd-7-nhusb sys/dev/usb/umass_scsipi.h: netbsd-7-nhusb sys/dev/usb/umassvar.h: netbsd-7-nhusb sys/dev/usb/umcs.c: netbsd-7-nhusb sys/dev/usb/umct.c: netbsd-7-nhusb sys/dev/usb/umidi.c: netbsd-7-nhusb sys/dev/usb/umidi_quirks.c: netbsd-7-nhusb sys/dev/usb/umidi_quirks.h: netbsd-7-nhusb sys/dev/usb/umodem.c: netbsd-7-nhusb sys/dev/usb/umodem_common.c: netbsd-7-nhusb sys/dev/usb/umodemvar.h: netbsd-7-nhusb sys/dev/usb/ums.c: netbsd-7-nhusb sys/dev/usb/uplcom.c: netbsd-7-nhusb sys/dev/usb/urio.c: netbsd-7-nhusb sys/dev/usb/urio.h: netbsd-7-nhusb sys/dev/usb/usb.c: netbsd-7-nhusb sys/dev/usb/usb.h: netbsd-7-nhusb sys/dev/usb/usb_mem.c: netbsd-7-nhusb sys/dev/usb/usb_mem.h: netbsd-7-nhusb sys/dev/usb/usb_quirks.c: netbsd-7-nhusb sys/dev/usb/usb_quirks.h: netbsd-7-nhusb sys/dev/usb/usb_subr.c: netbsd-7-nhusb sys/dev/usb/usbdevices.config: netbsd-7-nhusb sys/dev/usb/usbdevs: netbsd-7-nhusb sys/dev/usb/usbdevs.h: netbsd-7-nhusb sys/dev/usb/usbdevs_data.h: netbsd-7-nhusb sys/dev/usb/usbdi.c: netbsd-7-nhusb sys/dev/usb/usbdi.h: netbsd-7-nhusb sys/dev/usb/usbdi_util.c: netbsd-7-nhusb sys/dev/usb/usbdi_util.h: netbsd-7-nhusb sys/dev/usb/usbdivar.h: netbsd-7-nhusb sys/dev/usb/usbhid.h: netbsd-7-nhusb sys/dev/usb/usbhist.h: netbsd-7-nhusb sys/dev/usb/usbroothub.c: netbsd-7-nhusb sys/dev/usb/usbroothub.h: netbsd-7-nhusb sys/dev/usb/usbroothub_subr.c: delete sys/dev/usb/usbroothub_subr.h: delete sys/dev/usb/uscanner.c: netbsd-7-nhusb sys/dev/usb/uslsa.c: netbsd-7-nhusb sys/dev/usb/usscanner.c: netbsd-7-nhusb sys/dev/usb/ustir.c: netbsd-7-nhusb sys/dev/usb/uthum.c: netbsd-7-nhusb sys/dev/usb/utoppy.c: netbsd-7-nhusb sys/dev/usb/uts.c: netbsd-7-nhusb sys/dev/usb/uvideo.c: netbsd-7-nhusb sys/dev/usb/uvisor.c: netbsd-7-nhusb sys/dev/usb/uvscom.c: netbsd-7-nhusb sys/dev/usb/uyap.c: netbsd-7-nhusb sys/dev/usb/uyap_firmware.h: netbsd-7-nhusb sys/dev/usb/uyurex.c: netbsd-7-nhusb sys/dev/usb/x1input_rdesc.h: netbsd-7-nhusb sys/dev/usb/xhci.c: netbsd-7-nhusb sys/dev/usb/xhcireg.h: netbsd-7-nhusb sys/dev/usb/xhcivar.h: netbsd-7-nhusb sys/dev/usb/xinput_rdesc.h: netbsd-7-nhusb sys/external/bsd/common/conf/files.linux: netbsd-7-nhusb sys/external/bsd/common/include/linux/err.h: netbsd-7-nhusb sys/external/bsd/common/include/linux/kernel.h: netbsd-7-nhusb sys/external/bsd/common/include/linux/workqueue.h: netbsd-7-nhusb sys/external/bsd/common/linux/linux_work.c: netbsd-7-nhusb sys/external/bsd/drm2/dist/drm/radeon/atombios_encoders.c: netbsd-7-nhusb sys/external/bsd/drm2/dist/drm/radeon/radeon_legacy_encoders.c: netbsd-7-nhusb sys/external/bsd/drm2/drm/files.drmkms: netbsd-7-nhusb sys/external/bsd/drm2/i915drm/files.i915drmkms: netbsd-7-nhusb sys/external/bsd/drm2/include/linux/err.h: delete sys/external/bsd/drm2/include/linux/workqueue.h: delete sys/external/bsd/drm2/linux/files.drmkms_linux: netbsd-7-nhusb sys/external/bsd/drm2/linux/linux_work.c: delete sys/external/bsd/dwc2/dwc2.c: netbsd-7-nhusb sys/external/bsd/dwc2/dwc2.h: netbsd-7-nhusb sys/external/bsd/dwc2/dwc2var.h: netbsd-7-nhusb sys/external/bsd/dwc2/dwctwo2netbsd: netbsd-7-nhusb sys/external/bsd/dwc2/conf/files.dwc2: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_core.c: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_core.h: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_coreintr.c: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_hcd.c: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_hcd.h: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_hcdddma.c: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_hcdintr.c: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_hcdqueue.c: netbsd-7-nhusb sys/external/bsd/dwc2/dist/dwc2_hw.h: netbsd-7-nhusb sys/modules/drmkms_linux/Makefile: netbsd-7-nhusb sys/modules/i915drmkms/Makefile: netbsd-7-nhusb sys/rump/dev/lib/libugenhc/ugenhc.c: netbsd-7-nhusb sys/rump/dev/lib/libusb/Makefile: netbsd-7-nhusb sys/rump/dev/lib/libusb/USB.ioconf: netbsd-7-nhusb sys/rump/dev/lib/libusb/usb_at_ugenhc.c: delete sys/rump/dev/lib/libusb/opt/opt_usb.h: delete sys/rump/dev/lib/libusb/opt/opt_usbverbose.h: delete sys/sys/mbuf.h: netbsd-7-nhusb usr.sbin/usbdevs/usbdevs.8: netbsd-7-nhusb usr.sbin/usbdevs/usbdevs.c: netbsd-7-nhusb Merge netbsd-7-nhusb: - API / infrastructure changes to support memory management changes. - Memory management improvements and bug fixes. - HCDs should now be MP safe - conversion to KERNHIST based debug - FS/LS isoc support on ehci(4). - conversion to kmem(9) - Some USB 3 support - mostly from Takahiro HAYASHI (t-hash). - interrupt transfers now get proper DMA operations - general bug fixes - kern/48308 - uhub status notification improvements - umass(4) probe fix (applied to HEAD already) - ohci(4) short transfer fix - Change the SOFTINT level from NET to SERIAL for the USB softint handler. This gives the callback a chance of running when another softint handler at SOFTINT_NET has blocked holding a lock, e.g. softnet_lock and most of the network stack. - kern/49065 - ifconfig tun0 ... sequence locks up system / lockup: softnet_lock held across usb xfr - kern/50491 - unkillable wait in usbd_transfer while using usmsc0 on raspberry pi 2 - kern/51395 - USB Ethernet makes xhci hang - Various improvements to slhci(4) - Various improvements to dwc2(4)
|
1.23.2.4 |
| 06-Feb-2016 |
snj | branches: 1.23.2.4.2; Pull up following revision(s) (requested by skrll in ticket #1097): sys/dev/usb/usb.c: revision 1.161 sys/dev/usb/usb_subr.c: revisions 1.207, 1.208 sys/dev/usb/usbdivar.h: revision 1.111 sys/dev/usb/xhci.c: revision 1.33 Get the iManufacturer, iProduct, and iSerialNumber strings before probing for drivers and cache them for later use. This reduces bus transactions and fixes attachment for at least two of my umass(4)s. -- Need sys/kmem.h
|
1.23.2.3 |
| 02-Jan-2015 |
martin | Pull up following revision(s) (requested by skrll in ticket #372): sys/dev/usb/xhcireg.h: revision 1.2 sys/dev/usb/xhci.c: revision 1.28 kern/49391: Fixes to XHCI driver command ring and status TRB CRCR needs 64byte aligned address Use usb_allocmem instead of usb_allocmem_flags(..., 0) Correct status stage TRB in xhci_device_ctrl_start - direction logic was wrong. Correct a typo in a comment
|
1.23.2.2 |
| 13-Aug-2014 |
riz | Pull up following revision(s) (requested by skrll in ticket #11): sys/dev/usb/xhci.c: revision 1.25 Serialise xhci_intr1 calls with sc_intr_lock. From Takahiro HAYASHI.
|
1.23.2.1 |
| 11-Aug-2014 |
martin | Pull up following revision(s) (requested by skrll in ticket #3): sys/dev/usb/xhci.c: revision 1.24 PR/49091: xhci: wrong wMaxPacketSize value While this is correct according to the specification only fixed sizes are allowed, i.e. 512 for SS, etc. Maybe these should be used?
|
1.23.2.4.2.3 |
| 26-Jan-2017 |
skrll | Sync with HEAD/nhusb
|
1.23.2.4.2.2 |
| 07-Sep-2016 |
skrll | Sync with HEAD
|
1.23.2.4.2.1 |
| 06-Sep-2016 |
skrll | First pass at netbsd-7 updated with USB code from HEAD
|
1.26.2.3 |
| 03-Dec-2017 |
jdolecek | update from HEAD
|
1.26.2.2 |
| 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.26.2.1 |
| 12-Aug-2014 |
tls | file xhci.c was added on branch tls-maxphys on 2014-08-20 00:03:51 +0000
|
1.28.2.86 |
| 28-Aug-2017 |
skrll | Sync with HEAD
|
1.28.2.85 |
| 05-Feb-2017 |
skrll | Sync with HEAD
|
1.28.2.84 |
| 03-Jan-2017 |
skrll | Improve handling of roothub device and free up a bus address for LS/FS/HS controllers.
|
1.28.2.83 |
| 02-Jan-2017 |
skrll | Parse the extended capabilies to and log each controller port to SS/HS bus root hub ports.
Create/attach the two buses and adapt the xhci_roothub_ctrl to deal with both buses and sets of roothub ports.
XXX the roothub ub_devices entry needs work to interact with usbdevs(1) XXX correctly
|
1.28.2.82 |
| 02-Jan-2017 |
skrll | Use %s for __func__... oops
|
1.28.2.81 |
| 02-Jan-2017 |
skrll | Use __func__ in panic message
|
1.28.2.80 |
| 02-Jan-2017 |
skrll | Actually print the bus root hub device in debug output
|
1.28.2.79 |
| 02-Jan-2017 |
skrll | Remove unnecessary brackets
|
1.28.2.78 |
| 29-Dec-2016 |
skrll | Mark device transfers as USBD_IN_PROGRESS appropriately and improve abort handling
|
1.28.2.77 |
| 05-Oct-2016 |
skrll | Sync with HEAD
|
1.28.2.76 |
| 09-Jul-2016 |
skrll | Sync with HEAD
|
1.28.2.75 |
| 12-Jun-2016 |
skrll | Remove KASSERTs that don't make sense.
|
1.28.2.74 |
| 10-Jun-2016 |
skrll | Add callout_stop while clearing stall. From t-hash.
|
1.28.2.73 |
| 10-Jun-2016 |
skrll | Don't forget to destroy sc_cmdbusy_cv. From t-hash.
|
1.28.2.72 |
| 10-Jun-2016 |
skrll | Only call sc_vendor_init once. Spotted by t-hash.
|
1.28.2.71 |
| 05-Jun-2016 |
skrll | Sync with HEAD
|
1.28.2.70 |
| 30-May-2016 |
skrll | Serialise commands
|
1.28.2.69 |
| 29-May-2016 |
skrll | Sync with HEAD
|
1.28.2.68 |
| 30-Apr-2016 |
skrll | Move the struct usb_task to struct usbd_xfer for everyone to use.
|
1.28.2.67 |
| 16-Apr-2016 |
skrll | Remove an unnecessary ux_hcpriv assignement
|
1.28.2.66 |
| 11-Apr-2016 |
skrll | Don't use USB_IS_SS when there's a switch (speed) to use.
|
1.28.2.65 |
| 10-Apr-2016 |
skrll | Simplify xhci_do_command*
|
1.28.2.64 |
| 10-Apr-2016 |
skrll | route is a uint32_t in xhci_init_slot so pass it as such
|
1.28.2.63 |
| 10-Apr-2016 |
skrll | Free DMA buffer after disabling slot. Fix bug DCBA was not cleared after disabling slot.
From Takahiro HAYASHI
|
1.28.2.62 |
| 10-Apr-2016 |
skrll | Fix set_port_feature U[12]_TIMEOUT to work when speed > 4.
From Takahiro HAYASHI
|
1.28.2.61 |
| 10-Apr-2016 |
skrll | Fix a DPRINTF where the route string and roothub port were swapped.
From Takahiro HAYASHI
|
1.28.2.60 |
| 10-Apr-2016 |
skrll | Remove variable v0 becasue ~XHCI_PS_CLEAR does not mask speed bits.
From Takahiro HAYASHI
|
1.28.2.59 |
| 10-Apr-2016 |
skrll | Fix assertion of upper limit of slot index.
From Takahiro HAYASHI
|
1.28.2.58 |
| 10-Apr-2016 |
skrll | Fix lock assertion in xhci_softintr() when entering DDB on ukbd. Move this KASSERT to xhci_softintr() from xhci_handle_event().
From Takahiro HAYASHI
|
1.28.2.57 |
| 10-Apr-2016 |
skrll | Unwrap lines and other whitespace.
From Takahiro HAYASHI
|
1.28.2.56 |
| 10-Apr-2016 |
skrll | Fix merge botch
|
1.28.2.55 |
| 08-Apr-2016 |
skrll | Don't rely on XHCI_IMAN_INTR_PEND. Instead do as others do and simply clear the bit and handle any pending events.
usb 3 now works on my toshiba laptop (and probably elsewhere)
|
1.28.2.54 |
| 19-Mar-2016 |
skrll | Sync with HEAD
|
1.28.2.53 |
| 28-Feb-2016 |
skrll | Centralise the up_repeat handling and use the standard pipe method to start the next transfer. This allows the removal of a bunch of code in the upm_done methods for interrupt transfers which had copies of the upm_start method code.
At the same time we can perform the upm_done method before calling the transfer callback allowing correct bus_dma(9) operations before using the transfer DMA buffer.
|
1.28.2.52 |
| 13-Feb-2016 |
skrll | Improve transfer callout handling
|
1.28.2.51 |
| 06-Feb-2016 |
skrll | Remove unintended commit
|
1.28.2.50 |
| 06-Feb-2016 |
skrll | Use if (!expr) { ... } instead of a if (expr) goto label; ... ; label:
|
1.28.2.49 |
| 10-Jan-2016 |
skrll | Bring the following change from HEAD
Get the iManufacturer, iProduct, and iSerialNumber strings before probing for drivers and cache them for later use. This reduces bus transactions and fixes attachment for at least two of my umass(4)s.
|
1.28.2.48 |
| 23-Dec-2015 |
skrll | Revert previous... I got ahead of myself
|
1.28.2.47 |
| 23-Dec-2015 |
skrll | Transfer are only ever allocated from thread context now. Change IPL_USB to IPL_NONE in pool_cache_init for the xfer struct pool.
|
1.28.2.46 |
| 24-Oct-2015 |
skrll | xhci_xspeed2speed is unused for now
|
1.28.2.45 |
| 24-Oct-2015 |
skrll | Do the following slightly differently to the diff from t-hash
+ Fix the bug that port feature UHF_PORT_{U1,U2}_TIMEOUT were never set. PS_SPEED bits were always cleared. + Fix the bug of logic inversion whether port speed is SS when setting feature UHF_PORT_{U1,U2}_TIMEOUT.
|
1.28.2.44 |
| 21-Oct-2015 |
skrll | Comments
|
1.28.2.43 |
| 21-Oct-2015 |
skrll | Whitespace.
|
1.28.2.42 |
| 20-Oct-2015 |
skrll | Consistently providei/use *_{XFER,PIPE,BUS}2SC, etc macros
|
1.28.2.41 |
| 11-Oct-2015 |
skrll | Update ubm_allocx with the isoc frame count parameter and use it in dwctwo(4)
|
1.28.2.40 |
| 03-Oct-2015 |
skrll | Report as USB 3.0
|
1.28.2.39 |
| 29-Sep-2015 |
skrll | sizeof KNF
|
1.28.2.38 |
| 23-Sep-2015 |
skrll | Grammar
|
1.28.2.37 |
| 13-Sep-2015 |
skrll | Various improvements from t-hash (updated by me)
+ Improve xhci_configure_endpoint(). + Split off maxburst and interval calculation. + Start interval calculation with 10, not 11. + Put correct maxburst value. + Split off constructing endpoint context. + Improve xhci_event_transfer() + Remove case of unlikely completion codes I added. + Clear xr_cookies too when xhci_set_dequeue() clears xr_trb. + Return USBD_NO_ADDR if xhci_address_device fails with XHCI_TRB_ERROR_NO_SLOTS. + Add aprint_debug xhci capability registers. + Add & update comments.
I checked HCCPARAMS1 against version 1.1 of the XHCI specification. Not sure of previous version formats
|
1.28.2.36 |
| 13-Sep-2015 |
skrll | Split xhci_handle_event() into 3 functions. Whitespace.
From t-hash.
|
1.28.2.35 |
| 13-Sep-2015 |
skrll | Fix locking botch. From t-hash.
|
1.28.2.34 |
| 31-Aug-2015 |
skrll | Various improvements from t-hash (very very slightly tweaked by me)
+ Use usbd_xfer_isread(). + Change mutex to be initialized at IPL_USB. + Add vendor init/portsc hook. + Modify xhci_trb_put() to take host byte order arguments and convert them to little endian byte order. + Return PCI vendor ID of xhci instead of NetBSD(0x0) as a root hub vendor ID like other HCs do. + Move sc_ih in struct xhci_softc to struct xhci_pci_softc. + Improve debug message.
|
1.28.2.33 |
| 26-Jun-2015 |
skrll | Make xhci_close_pipe void - nothing cares about any errors.
From t-hash.
|
1.28.2.32 |
| 26-Jun-2015 |
skrll | Add port range check in xhci_rhpsc().
KASSERT xfer->ux_pipe != NULL in xhci_handle_event().
Based on a diff from t-hash
|
1.28.2.31 |
| 26-Jun-2015 |
skrll | Revert previous (for now)
|
1.28.2.30 |
| 25-Jun-2015 |
skrll | Improve bInterval handling in xhci_configure_endpoint - should help keyboards.
From t-hash
|
1.28.2.29 |
| 23-Jun-2015 |
skrll | Comment updates from t-hash.
|
1.28.2.28 |
| 07-Jun-2015 |
skrll | Update comment.
From t-hash.
|
1.28.2.27 |
| 28-May-2015 |
skrll | More changes from Takahiro HAYASHI
+ Add sc_statuspend that stores ports bitmap of pending interrupts instead of sc_isxhciroothub hack til someone implements suspend pipe. While sc_explorepending == 1, uhub_intr shall merge sc_status into sc_statuspend. + Eliminate confusing UPS_SUPER_SPEED flag and introduce UPS_OTHER_SPEED flag that indicates ud_speed of device is super speed (or more). uhub shall set this flag if ud_speed is super speed (or more). + Add the macro that checks ud_speed is super speed. The codes shall use this macro to check ud_speed is super speed. + Add speed type conversion functions. + Include port link status in port_status if port is super speed.
Various other changes to support SS hubs and devices
|
1.28.2.26 |
| 27-May-2015 |
skrll | Add patch for intel chips quirk from ryoon@ in https://mail-index.netbsd.org/netbsd-bugs/2014/08/31/msg038109.html slightly modified to set quirks before calling xhci_init.
Set special IMOD value and route ports to xhci for intel chips.
From Takahiro HAYASHI.
|
1.28.2.25 |
| 27-May-2015 |
skrll | Rewrite if-else-if chains with switch-case.
From Takahiro HAYASHI.
|
1.28.2.24 |
| 27-May-2015 |
skrll | Add some sanity checks for xfer. [Ed: should really find the bugs]
From Takahiro HAYASHI.
|
1.28.2.23 |
| 27-May-2015 |
skrll | Fix slot leak when address_device fails.
From Takahiro HAYASHI.
|
1.28.2.22 |
| 27-May-2015 |
skrll | Don't abuse pipe->up_async_task for xhci_clear_endpoint_stall_async_task. Add member struct usb_task xp_async_task to struct xhci_pipe.
From Takahiro HAYASHI.
|
1.28.2.21 |
| 27-May-2015 |
skrll | Add comments. Some cosmetic changes.
From Takahiro HAYASHI.
|
1.28.2.20 |
| 07-Apr-2015 |
skrll | Comments. From Takahiro HAYASHI.
|
1.28.2.19 |
| 07-Apr-2015 |
skrll | USB 3.0 snapshot from Takahiro HAYASHI
|
1.28.2.18 |
| 06-Apr-2015 |
skrll | Cosmetic/Whitespace changes from Takahiro HAYASHI
|
1.28.2.17 |
| 06-Apr-2015 |
skrll | *** empty log message ***
|
1.28.2.16 |
| 22-Mar-2015 |
skrll | Indentation and whitespace.
|
1.28.2.15 |
| 22-Mar-2015 |
skrll | Fix spellos
|
1.28.2.14 |
| 19-Mar-2015 |
skrll | Do the same as OpenBSD and get rid of the *_handle typedefs and use plain structures insteads
|
1.28.2.13 |
| 05-Dec-2014 |
skrll | KNF. Remove ( ) from return statements.
|
1.28.2.12 |
| 04-Dec-2014 |
skrll | Rework roothub control transfers so that much of the code is shared across HCDs.
I have retained the vendor/product reporting for each HCD for now, but it maybe get removed later.
ahci(4) now reports a language table and uses the usb_makestrdesc function instead of rolling its own version.
|
1.28.2.11 |
| 03-Dec-2014 |
skrll | Rename usbroothub_subr.[ch] to usbroothub.[ch]
|
1.28.2.10 |
| 03-Dec-2014 |
skrll | Provide a USETWD macro for use with USB words designated initialisers.
|
1.28.2.9 |
| 03-Dec-2014 |
skrll | Remove #include <sys/malloc.h> where it's not (no longer) needed
|
1.28.2.8 |
| 03-Dec-2014 |
skrll | Replace malloc(9) with kmem(9)
|
1.28.2.7 |
| 03-Dec-2014 |
skrll | Use designated initializers for more descriptors.
|
1.28.2.6 |
| 03-Dec-2014 |
skrll | Use designated initialisers for usb_device_descriptor_t structs.
|
1.28.2.5 |
| 03-Dec-2014 |
skrll | The grand renaming of structure members.
No functional change.
|
1.28.2.4 |
| 02-Dec-2014 |
skrll | Step #1 of memory allocation re-organisation.
Centralised the buffer allocation routine which now supports DMA and non-DMA capable host controllers. Remove the ubm_{alloc,free}m methods from usbd_bus_methods.
The buffer allocation is only allowed in thread context and, therefore, negates the usefulness of the reserve dma code which is removed in this change.
USBD_NO_COPY is also no longer required as usbd_transfer and usbd_transfer_complete now track buffer usage and handle any copying.
|
1.28.2.3 |
| 01-Dec-2014 |
skrll | Add prefixes to method structures member names. No functional change.
|
1.28.2.2 |
| 01-Dec-2014 |
skrll | Remove usbd_bus no_intrs member it was (virtually) unused.
|
1.28.2.1 |
| 30-Nov-2014 |
skrll | Use C99 types. u_int{8,16,32,64}_t to uint{8,16,32,64}_t.
No functional change.
|
1.62.2.3 |
| 26-Apr-2017 |
pgoyette | Sync with HEAD
|
1.62.2.2 |
| 20-Mar-2017 |
pgoyette | Sync with HEAD
|
1.62.2.1 |
| 26-Jul-2016 |
pgoyette | Sync with HEAD
|
1.67.2.1 |
| 21-Apr-2017 |
bouyer | Sync with HEAD
|
1.72.2.15 |
| 01-Aug-2023 |
martin | Pull up following revision(s) (requested by riastradh in ticket #1869):
sys/dev/usb/xhci.c: revision 1.176 sys/dev/usb/xhcivar.h: revision 1.23
xhci(4): Defer root intr xfers while polling.
Root intr xfers require taking adaptive locks, which is forbidden while polling.
This is not great -- any USB transfer completion callbacks might try to take adaptive locks, not just uhub_intr, and that will always causes trouble. We get lucky with ukbd_intr because it's not MP-safe, so it relies only on the kernel lock (a spin lock) anyway. But this change brings xhci in line with ehci.
PR kern/57326
|
1.72.2.14 |
| 23-Jan-2023 |
martin | Pull up the following revisions, requested by msaitoh in ticket #1787:
sys/dev/pci/xhci_pci.c 1.31 via patch sys/dev/usb/xhci.c 1.173-1.175 sys/dev/usb/xhcivar.h 1.22
Support xHCI device which has USB 2 port only.
|
1.72.2.13 |
| 16-Sep-2022 |
martin | Pull up following revision(s) (requested by msaitoh in ticket #1765):
sys/dev/usb/xhci.c: revision 1.154
Accept USB 3.2 in xhci_id_protocols().
|
1.72.2.12 |
| 16-Nov-2019 |
martin | Pull up the following revisions, requested by msaitoh in ticket #1443:
sys/arch/arm/nvidia/tegra_xusb.c 1.13-1.14 via patch sys/dev/pci/xhci_pci.c 1.13 sys/dev/usb/usb.c 1.169 sys/dev/usb/usbdivar.h 1.116 sys/dev/usb/xhci.c 1.93, 1.95, 1.97 sys/dev/usb/xhcireg.h 1.11-1.12
Detect USB 3.1
|
1.72.2.11 |
| 17-Sep-2019 |
martin | Pull up following revision(s) (requested by mrg in ticket #1377):
sys/dev/usb/xhci.c: revision 1.113 sys/dev/usb/xhci.c: revision 1.109
match xhci version 3.10. allows properly finding all the USB busses on new ryzen 3 based systems.
unfortunately, the USB busses are still non-functional.
-
fix ryzen usb issue: we set TD size to '1', where has xhci spec 4.11.2.4 says final TRB for a TD should have this set to '0'. since we currently only generate sinel TRB TDs, set this to 0.
XXX: pullup-all from sc.dying
|
1.72.2.10 |
| 04-Jan-2019 |
martin | Pull up following revision(s) (requested by mrg in ticket #1155):
sys/dev/usb/xhci.c: revision 1.100
use xhci_polling_p(). this might miss when bus2 is active. XXX: pullup-7, pullup-8.
|
1.72.2.9 |
| 28-Sep-2018 |
martin | Fixup for ticket #1037 - parts of the patch were accidently missing.
|
1.72.2.8 |
| 27-Sep-2018 |
martin | Pull up following revision(s) (requested by mrg in ticket #1037):
sys/dev/usb/uhub.c: revision 1.139 sys/external/bsd/dwc2/dwc2.c: revision 1.55 sys/ddb/db_output.c: revision 1.34 sys/ddb/db_command.c: revision 1.160 sys/dev/usb/ehci.c: revision 1.264 sys/dev/usb/xhci.c: revision 1.99 sys/dev/usb/ehci.c: revision 1.265 sys/kern/subr_userconf.c: revision 1.27 sys/dev/usb/ehcivar.h: revision 1.46 sys/dev/usb/ohci.c: revision 1.287 sys/dev/usb/uhci.c: revision 1.284 sys/dev/usb/usbdi.c: revision 1.178 sys/dev/usb/usb.c: revision 1.172 sys/dev/pci/xhci_pci.c: revision 1.14 sys/dev/usb/usb.c: revision 1.173 sys/dev/usb/usb.c: revision 1.174 share/man/man4/usb.4: revision 1.110 sys/ddb/db_command.c: revision 1.159 sys/dev/usb/usb_subr.c: revision 1.227 sys/dev/usb/uhcivar.h: revision 1.56 (all via patch)
consolidate the handling of polling across HC drivers, and generic USB: - don't take mutexes if polling - normalise the code across all drivers - add some not yet code to block discovery to/from polling - minor CSE - adjust comment for usbd_set_polling() to reality now i properly understand what it is used for and why.
this, with a hack to make RB_ASKNAME to wait 5 seconds allows boot -a work with USB keyboards. there are still multiple issues remaining: - discovery and polling need to be mutually exclusive - attachment of ukbd and wskbd is not handled by config_pending, and the 5 second delay isn't going to always be enough.
call cnpollc(1) and cnpollc(0) around cngetc(). (christos has a good idea to add a function that does all 3, and we should switch all the callers in this sequence to use it (and fix the MD ones missing it still). not all can, as eg, line-grabbing functions can use cngetsn(), which only calls cnpollc() twice.)
When this file is used when not building the kernel (eg: /usr/sbin/crash) make cnpollc() go away.
reorder some struct members to remove holes.
add config_pending usage to uhub and general USB device attachment. - call config_pending_incr() and config_pending_decr() around attaching devices against "usbdevif" attribute.
uhub: - convert sc_explorepending and sc_running to bool. add new sc_first_explore. - call config_pending_incr() at the start of uhub_attach(). dropped in uhub_explore(), if this is the first explore.
implement a gross hack to fix "boot -a" on systems with usb keyboards on systems with ehci handover to uhci (and maybe ohci), and fix a similar problem for "boot -s".
there is effort to ensure that all devices attached via USB are probed before RB_ASKNAME or RB_SINGLE attempts to ask any questions on the console, and largely this works, often by chance, today, for USB disks and root. i've recently pushed this more into uhub and general USB device attachment as well, and kept a config_pending reference across the first explore of a bus. these fix many issues with directly attached hubs.
however, on systems where devices connected to ehci ports are handed over to a companion uhci or ohci port, it may not be the first, or even second, bus explore that finds the device finally before attachment, and at this point all config_pending references are dropped.
there is no direct communication between drivers, the potentials are looked up but their device_t is only used for generic things like the name, so informing the correct companion to expect a device and deal with the config_pending references is not possible without some fairly ugly layer violations or multi-level callbacks (eg, we have "ehci0", and usually an the relevant companion, eg, "uhci2", but it is the uhub that uhci2 has attached that will deal with the device attachment.)
with the above fixes to generic USB code, the disown happens during the first explore. the hack works by, at this point, checking if (a) root is not mounted, (b) single user or ask name are set, and (c) if the hack as not been triggered already. if all 3 conditions are true, then a config_pending_incr() is called and a callback is triggered for (default) 5 seconds to call config_pending_decr(). ehci detach pauses waiting for this callback if scheduled.
this allows enough time for the uhub and the ukbd/wskbd to attach before the RK_ASKROOT prompts appear. testing shows it takes between 1.5 and 2 seconds for the keyboard to appear after the disown occurs.
Index: dev/usb/ehcivar.c - new sc_compcallout, sc_compcallout, sc_complock, and a state for th handover hack.
Index: dev/usb/ehci.c ehci_init(): - use aprint_normal_dev() instead of manual device_xname(). - initialise sc_compcallout, sc_compcallout, sc_complock, and sc_comp_state. ehci_detach(): - if there are companion controllers, tear own the above, including waiting if there is a callback scheduled. ehci_disown_callback(): - new callout to call config_pending_decr() in the the future. schedule this ca ehci_disown_sched_callback(): - if booting to single user or asking names, call config_pending_incr() and schedule the callout above, default 5 second delay. ehci_disown(): - if disowning a port call ehci_disown_sched_callback(). deal with partial attach failures in usb_attach vs usb_detach aka PR 53598. - make sure xhci's sc->sc_ios is NULL if failure happens. - rearrange usb_attach() / usb_doattach() to make it simpler to clean up. - move usb_async_intr softint into usb_once_init(). previously, each USB controller would start a new one, and leave the old one leaked. - handle controller interrupts without a bus attached
remove usb(4)'s "flags 1" code. it has been dead for a while, as it runs during the interrupts part of configuration now, and all the devices try attach as early as possible, including any root or boot required disk or keyboard device, which is what this flag was for.
|
1.72.2.7 |
| 25-Aug-2018 |
martin | Pull up following revision(s) (requested by mrg in ticket #980):
sys/dev/usb/usbdivar.h: revision 1.117 sys/external/bsd/dwc2/dwc2.c: revision 1.52 sys/dev/usb/xhcivar.h: revision 1.10 sys/dev/usb/motg.c: revision 1.22 sys/dev/usb/ehci.c: revision 1.260 sys/dev/usb/ehci.c: revision 1.261 sys/dev/usb/xhci.c: revision 1.96 sys/dev/usb/ohci.c: revision 1.282 sys/dev/usb/ohci.c: revision 1.283 sys/dev/usb/ehcivar.h: revision 1.45 sys/dev/usb/uhci.c: revision 1.281 sys/dev/usb/uhci.c: revision 1.282 sys/dev/usb/usbdi.c: revision 1.177 sys/dev/usb/ohcivar.h: revision 1.60 sys/dev/usb/uhcivar.h: revision 1.55 (all via patch)
pull across abort fixes from nick-nhusb. add more abort fixes, using ideas from Taylor and Nick, and myself. special thanks to both who inspired much of the code here, if not wrote it directly. among other problems, this assert should no longer trigger:
panic: kernel diagnostic assertion "xfer->ux_state == XFER_ONQU" failed: file "/current/src/sys/dev/usb/usbdi.c", line 914
using usbhist i was able to track down my instance of it being related to userland close() beginning, dropping the sc_lock, and then the usb softintr completes the transfer normally, and when it is done, the abort path attempts to re-complete the transfer, and the above assert is tripped.
changes from nhusb were commited with these logs: -- Move the struct usb_task to struct usbd_xfer for everyone to use. -- Set device transfer status to USBD_IN_PROGRESS if start methods succeeds -- Actually set the transfer status on transfers in ohci_abort_xfer and the controller is dying -- Don't supply the lock to callout_halt when polling as it won't be held -- Improve transfer abort -- Mark device transfers as USBD_IN_PROGRESS appropriately and improve abort handling -- -- Mark device transfers as USBD_IN_PROGRESS appropriately and improve abort handling --
additional changes include: - initialise the usb abort task in the HCI allocx routine, so that it can be safely usb_rem_task()'d. - rework the handling of softintr vs cancellation vs timeout abort based upon a scheme from Taylor: when completing a transfer normally: - if the status is not in progress, it must be cancelled or timed out, and we should not process this xfer. - set the status as normal. - unconditionallly callout_stop() and usb_rem_task(). they're safe and either aren't running, or will run and do nothing. - finally call usb_transfer_complete(). when aborting a transfer: - status should be cancelled or timed out. - if cancelling, callout_halt and usb_rem_task_wait() to make sure the timer is either done or cancelled. - at this point, the ux_status must not be cancelled or timed out, and if it is not in progress we're done. - set the status. - if the controller is dying, just return. - perform HCI-specific tasks to abort this xfer. - finally call usb_transfer_complete(). for the timeout and timeout task: - if the HCI is not dying, and the ux_status is in progress, then trigger the usb abort task. - remove UXFER_ABORTWAIT and UXFER_ABORTING.
tested on: - multiple PC systems with several types of devices: ugen/UPS, ucom, umass with disk, ssd and cdrom backends, kbd, ms, using uhci, ehci and xhci. - erlite3: sd@umass on dwc2. - sunblade2000: kbd/ms and umass disk on ohci.
untested: - motg, slhci and ahci. motg has some portion of the new scheme applied, but slhci and ahci require more study.
future work includes pushing a lot of the common abort handling into usbdi.c and leaving upm_abort() for HC specific tasks, but this change is pullup-able to netbsd-7 and netbsd-8 as it does not change any external API, as well as removing over 100 lines of code while adding over 30 new asserts.
XXX: pullup-7, pullup-8.
fix DIAGNOSTIC build by not copying ub_usepolling to stack before use
Sprinkle __diagused
|
1.72.2.6 |
| 05-May-2018 |
martin | Pull up following revision(s) (requested by jdolecek in ticket #787):
sys/dev/usb/xhci.c: revision 1.88-1.90 sys/dev/usb/xhcireg.h: revision 1.10
add KASSERT() that sc_child* is set to NULL after child detach; just for readability, it's not immediatelly obvious this is done in xhci_childdet() no functional changes
trigger the softint processing on that child bus which is not detached yet fixes PR kern/53066 by Martin Husemann
enable code to only trigger usb processing when EINT is set, to avoid misinterpreting shared interrupt for another device
when clearing USBSTS, actually preserve the bits which spec requires to preserve, and actually clear bit 1, which should be actually always cleared to zero by spec
also #ifdef XHCI_DEBUG some unnecessary register reads this should finally resolve PR kern/53066 also for Martin
|
1.72.2.5 |
| 21-Dec-2017 |
snj | Pull up following revision(s) (requested by skrll in ticket #459): sys/dev/usb/xhci.c: 1.78, 1.83 PR/52791: Robert Sprowson: avoid duplicate tests (use accessor variables) -- Fix the logic around TT Hub Slot ID, TT Port Number and Multi-TT in xhci_setup_tthub. TT Hub/Port need to reference the upstream HS hub and Multi-TT needs to reflect the capabilities of a HS hub itself or the same upstream HS hub.
|
1.72.2.4 |
| 23-Nov-2017 |
martin | Pull up following revision(s) (requested by skrll in ticket #385): sys/dev/usb/xhci.c: revision 1.77 sys/external/bsd/dwc2/dwc2.c: revision 1.47 sys/dev/usb/motg.c: revision 1.19 sys/dev/usb/ehci.c: revision 1.257 sys/dev/usb/ohci.c: revision 1.276 sys/dev/usb/uhci.c: revision 1.279
s/PR_NOWAIT/PR_WAITOK/ in HCD allocx (allocate xfer) method
|
1.72.2.3 |
| 17-Nov-2017 |
snj | Pull up following revision(s) (requested by msaitoh in ticket #356): sys/dev/usb/xhci.c: revision 1.76 Wait 1ms first. Existing Intel xHCI requies 1ms delay to prevent system hang (Errata).
|
1.72.2.2 |
| 02-Nov-2017 |
snj | Pull up following revision(s) (requested by pgoyette in ticket #335): share/man/man9/kernhist.9: 1.5-1.8 sys/arch/acorn26/acorn26/pmap.c: 1.39 sys/arch/arm/arm32/fault.c: 1.105 via patch sys/arch/arm/arm32/pmap.c: 1.350, 1.359 sys/arch/arm/broadcom/bcm2835_bsc.c: 1.7 sys/arch/arm/omap/if_cpsw.c: 1.20 sys/arch/arm/omap/tiotg.c: 1.7 sys/arch/evbarm/conf/RPI2_INSTALL: 1.3 sys/dev/ic/sl811hs.c: 1.98 sys/dev/usb/ehci.c: 1.256 sys/dev/usb/if_axe.c: 1.83 sys/dev/usb/motg.c: 1.18 sys/dev/usb/ohci.c: 1.274 sys/dev/usb/ucom.c: 1.119 sys/dev/usb/uhci.c: 1.277 sys/dev/usb/uhub.c: 1.137 sys/dev/usb/umass.c: 1.160-1.162 sys/dev/usb/umass_quirks.c: 1.100 sys/dev/usb/umass_scsipi.c: 1.55 sys/dev/usb/usb.c: 1.168 sys/dev/usb/usb_mem.c: 1.70 sys/dev/usb/usb_subr.c: 1.221 sys/dev/usb/usbdi.c: 1.175 sys/dev/usb/usbdi_util.c: 1.67-1.70 sys/dev/usb/usbroothub.c: 1.3 sys/dev/usb/xhci.c: 1.75 sys/external/bsd/drm2/dist/drm/i915/i915_gem.c: 1.34 sys/kern/kern_history.c: 1.15 sys/kern/kern_xxx.c: 1.74 sys/kern/vfs_bio.c: 1.275-1.276 sys/miscfs/genfs/genfs_io.c: 1.71 sys/sys/kernhist.h: 1.21 sys/ufs/ffs/ffs_balloc.c: 1.63 sys/ufs/lfs/lfs_vfsops.c: 1.361 sys/ufs/lfs/ulfs_inode.c: 1.21 sys/ufs/lfs/ulfs_vnops.c: 1.52 sys/ufs/ufs/ufs_inode.c: 1.102 sys/ufs/ufs/ufs_vnops.c: 1.239 sys/uvm/pmap/pmap.c: 1.37-1.39 sys/uvm/pmap/pmap_tlb.c: 1.22 sys/uvm/uvm_amap.c: 1.108 sys/uvm/uvm_anon.c: 1.64 sys/uvm/uvm_aobj.c: 1.126 sys/uvm/uvm_bio.c: 1.91 sys/uvm/uvm_device.c: 1.66 sys/uvm/uvm_fault.c: 1.201 sys/uvm/uvm_km.c: 1.144 sys/uvm/uvm_loan.c: 1.85 sys/uvm/uvm_map.c: 1.353 sys/uvm/uvm_page.c: 1.194 sys/uvm/uvm_pager.c: 1.111 sys/uvm/uvm_pdaemon.c: 1.109 sys/uvm/uvm_swap.c: 1.175 sys/uvm/uvm_vnode.c: 1.103 usr.bin/vmstat/vmstat.c: 1.219 Reorder to test for null before null deref in debug code -- Reorder to test for null before null deref in debug code -- KNF -- No need for '\n' in UVMHIST_LOG -- normalise a BIOHIST log message -- Update the kernhist(9) kernel history code to address issues identified in PR kern/52639, as well as some general cleaning-up... (As proposed on tech-kern@ with additional changes and enhancements.) Details of changes: * All history arguments are now stored as uintmax_t values[1], both in the kernel and in the structures used for exporting the history data to userland via sysctl(9). This avoids problems on some architectures where passing a 64-bit (or larger) value to printf(3) can cause it to process the value as multiple arguments. (This can be particularly problematic when printf()'s format string is not a literal, since in that case the compiler cannot know how large each argument should be.) * Update the data structures used for exporting kernel history data to include a version number as well as the length of history arguments. * All [2] existing users of kernhist(9) have had their format strings updated. Each format specifier now includes an explicit length modifier 'j' to refer to numeric values of the size of uintmax_t. * All [2] existing users of kernhist(9) have had their format strings updated to replace uses of "%p" with "%#jx", and the pointer arguments are now cast to (uintptr_t) before being subsequently cast to (uintmax_t). This is needed to avoid compiler warnings about casting "pointer to integer of a different size." * All [2] existing users of kernhist(9) have had instances of "%s" or "%c" format strings replaced with numeric formats; several instances of mis-match between format string and argument list have been fixed. * vmstat(1) has been modified to handle the new size of arguments in the history data as exported by sysctl(9). * vmstat(1) now provides a warning message if the history requested with the -u option does not exist (previously, this condition was silently ignored, with only a single blank line being printed). * vmstat(1) now checks the version and argument length included in the data exported via sysctl(9) and exits if they do not match the values with which vmstat was built. * The kernhist(9) man-page has been updated to note the additional requirements imposed on the format strings, along with several other minor changes and enhancements. [1] It would have been possible to use an explicit length (for example, uint64_t) for the history arguments. But that would require another "rototill" of all the users in the future when we add support for an architecture that supports a larger size. Also, the printf(3) format specifiers for explicitly-sized values, such as "%"PRIu64, are much more verbose (and less aesthetically appealing, IMHO) than simply using "%ju". [2] I've tried very hard to find "all [the] existing users of kernhist(9)" but it is possible that I've missed some of them. I would be glad to update any stragglers that anyone identifies. -- For some reason this single kernel seems to have outgrown its declared size as a result of the kernhist(9) changes. Bump the size. XXX The amount of increase may be excessive - anyone with more detailed XXX knowledge please feel free to further adjust the value appropriately. -- Misssed one cast of pointer --> uintptr_t in previous kernhist(9) commit -- And yet another one. :( -- Use correct mark-up for NetBSD version. -- More improvements in grammar and readability. -- Remove a stray '"' (obvious typo) and add a couple of casts that are probably needed. -- And replace an instance of "%p" conversion with "%#jx" -- Whitespace fix. Give Bl tag table a width. Fix Xr.
|
1.72.2.1 |
| 25-Aug-2017 |
snj | Pull up following revision(s) (requested by skrll in ticket #226): sys/dev/usb/xhci.c: revision 1.73 Check both buses for ub_usepolling and schedule the soft interrupt handler or call it directly. Fixes usb keyboard in ddb when attached to xhci.
|
1.86.2.9 |
| 18-Jan-2019 |
pgoyette | Synch with HEAD
|
1.86.2.8 |
| 26-Nov-2018 |
pgoyette | Sync with HEAD, resolve a couple of conflicts
|
1.86.2.7 |
| 30-Sep-2018 |
pgoyette | Ssync with HEAD
|
1.86.2.6 |
| 06-Sep-2018 |
pgoyette | Sync with HEAD
Resolve a couple of conflicts (result of the uimin/uimax changes)
|
1.86.2.5 |
| 28-Jul-2018 |
pgoyette | Sync with HEAD
|
1.86.2.4 |
| 21-May-2018 |
pgoyette | Sync with HEAD
|
1.86.2.3 |
| 02-May-2018 |
pgoyette | Synch with HEAD
|
1.86.2.2 |
| 22-Apr-2018 |
pgoyette | Sync with HEAD
|
1.86.2.1 |
| 16-Apr-2018 |
pgoyette | Sync with HEAD, resolve some conflicts
|
1.92.2.2 |
| 13-Apr-2020 |
martin | Mostly merge changes from HEAD upto 20200411
|
1.92.2.1 |
| 10-Jun-2019 |
christos | Sync with HEAD
|
1.107.2.12 |
| 01-Aug-2023 |
martin | Pull up following revision(s) (requested by riastradh in ticket #1687):
sys/dev/usb/xhci.c: revision 1.176 sys/dev/usb/xhcivar.h: revision 1.23
xhci(4): Defer root intr xfers while polling.
Root intr xfers require taking adaptive locks, which is forbidden while polling.
This is not great -- any USB transfer completion callbacks might try to take adaptive locks, not just uhub_intr, and that will always causes trouble. We get lucky with ukbd_intr because it's not MP-safe, so it relies only on the kernel lock (a spin lock) anyway. But this change brings xhci in line with ehci.
PR kern/57326
|
1.107.2.11 |
| 23-Jan-2023 |
martin | Pull up the following revisions, requested by msaitoh in ticket #1570:
sys/dev/pci/xhci_pci.c 1.31 via patch sys/dev/usb/xhci.c 1.173-1.175 sys/dev/usb/xhcivar.h 1.22
Support xHCI device which has USB 2 port only.
|
1.107.2.10 |
| 16-Sep-2022 |
martin | Pull up following revision(s) (requested by msaitoh in ticket #1525):
sys/dev/usb/xhci.c: revision 1.154
Accept USB 3.2 in xhci_id_protocols().
|
1.107.2.9 |
| 22-Jun-2021 |
martin | Fix pullup #1302 by adapting the changes to this branch (there was a misunderstanding in the ticket handling)
|
1.107.2.8 |
| 21-Jun-2021 |
martin | Pull up following revision(s) (requested by riastradh in ticket #1301):
sys/dev/usb/xhci.c: revision 1.140 sys/dev/usb/xhci.c: revision 1.141 sys/dev/usb/xhci.c: revision 1.143 sys/dev/usb/xhcivar.h: revision 1.18 sys/dev/usb/xhcivar.h: revision 1.19 sys/dev/usb/xhcireg.h: revision 1.19 sys/dev/usb/xhci.c: revision 1.139
xhci(4): Draft suspend/resume.
Work almost entirely done and tested by maya@ based on xhci 1.2 spec; tidied up and tweaked by me.
Not sure about issuing Stop Endpoint commands or ensuring the Command Ring is in the Stopped or Idle state, but this seems to work as is, so it's already an improvement over what we had before which was no xhci suspend/resume at all.
In particular, it's not clear to us: - if we don't have any pending USB activity whether we need to issue the Stop Endpoints or quiesce the command ring; but - if we do have any pending USB activity whether issuing Stop Endpoint is enough or whether we also need to do anything to synchronize with other software logic to quiesce it too.
xhci(4): Block commands and issue Stop Endpoint on suspend.
xhci: Fix logic in waiting for command queue access. _Either_ an existing command in progress, _or_ an existing suspend in progress that is not done by us, should block us; the logic I wrote previously erroneously blocked only if both conditions happened at the same time.
Should fix issue reported by Andrius V in the PR kern/56050 followup discussion.
xhci(4): Wait USB_RESUME_WAIT ms, not 20 ms. Better to use the named constant, and although the spec says 20 ms is enough, apparently for some devices it's not.
|
1.107.2.7 |
| 23-Dec-2020 |
martin | Pull up following revision(s) (requested by riastradh in ticket #1159):
sys/dev/usb/ohci.c: revision 1.314 sys/external/bsd/dwc2/dwc2.c: revision 1.75 sys/dev/usb/ehci.c: revision 1.284 sys/dev/usb/uhci.c: revision 1.305 sys/dev/usb/xhci.c: revision 1.136
usb: Omit bogus assertions about struct usbd_pipe::up_intrxfer.
These assertions were only valid for pipes at UE_IN_DIR, UE_INTERRUPT endpoints created with usbd_open_pipe_intr, which uses up_intrxfer to pass the struct usbd_xfer object to usbd_close_pipe to free later.
In contrast, for pipes at UE_OUT_DIR, UE_INTERRUPT endpoints, up_intrxfer is never initialized, so the assertion cannot be right. In principle we might even have more than one outstanding interrupt transfer at a time, rendering the point of the assertion moot anyway.
Found by interrupting a uhidev write to a u2f device.
ok nick
|
1.107.2.6 |
| 25-May-2020 |
martin | Pull up following revision(s) (requested by jakllsch in ticket #921):
sys/dev/usb/xhci.c: revision 1.129
xhci(4): only usbd_xfer_trycomplete() if certain to usb_transfer_complete()
Previously we'd cancel the timeout after the data stage of control xfers, and then hope that the status stage would eventually interrupt.
|
1.107.2.5 |
| 01-Mar-2020 |
martin | Pull up following revision(s) (requested by riastradh in ticket #744):
sys/dev/usb/uhci.c: revision 1.292 sys/dev/usb/uhci.c: revision 1.293 sys/dev/usb/usbdi.h: revision 1.99 sys/dev/usb/motg.c: revision 1.26 sys/dev/usb/motg.c: revision 1.27 sys/dev/usb/motg.c: revision 1.28 sys/dev/usb/motg.c: revision 1.29 sys/external/bsd/dwc2/dwc2.c: revision 1.70 sys/external/bsd/dwc2/dwc2.c: revision 1.71 sys/dev/usb/usb.c: revision 1.181 sys/arch/mips/adm5120/dev/ahci.c: revision 1.20 sys/dev/usb/usb.c: revision 1.182 sys/dev/usb/xhci.c: revision 1.116 sys/dev/usb/xhci.c: revision 1.117 sys/dev/usb/xhci.c: revision 1.118 sys/dev/usb/uhci.c: revision 1.289 sys/dev/usb/usbdivar.h: revision 1.121 sys/dev/usb/usbdi.c: revision 1.190 sys/dev/usb/usbdivar.h: revision 1.122 sys/dev/usb/usbdi.c: revision 1.191 sys/dev/usb/usbdi.c: revision 1.192 sys/external/bsd/dwc2/dwc2var.h: revision 1.7 sys/dev/usb/motg.c: revision 1.30 sys/dev/usb/motg.c: revision 1.31 sys/dev/usb/motg.c: revision 1.32 sys/dev/usb/motg.c: revision 1.33 sys/external/bsd/dwc2/dwc2.c: revision 1.67 sys/external/bsd/dwc2/dwc2.c: revision 1.68 sys/dev/usb/ehci.c: revision 1.270 sys/external/bsd/dwc2/dwc2.c: revision 1.69 sys/dev/usb/usbdi.h: revision 1.100 sys/dev/usb/ehci.c: revision 1.271 sys/arch/mips/adm5120/dev/ahci.c: revision 1.18 sys/dev/usb/usbdi.h: revision 1.101 sys/dev/usb/ehci.c: revision 1.272 sys/dev/ic/sl811hs.c: revision 1.103 sys/arch/mips/adm5120/dev/ahci.c: revision 1.19 sys/dev/usb/ehci.c: revision 1.273 sys/dev/usb/ohci.c: revision 1.293 sys/dev/usb/uhci.c: revision 1.290 sys/dev/usb/ohci.c: revision 1.294 sys/dev/usb/uhci.c: revision 1.291 sys/dev/usb/ohci.c: revision 1.295
Teach usb_rem_task to return whether removed from queue or not.
New function usb_task_pending for diagnostic assertions. Usable only for negative diagnostic assertions:
KASSERT(!usb_task_pending(dev, task))
If you can think of a better name for this than !usb_task_pending, I'm all ears.
-
Nothing guarantees xfer's timeout has completed.
Wait for it when we free the xfer.
-
New xfer state variables ux_timeout_set and ux_timeout_reset.
These are needed because: - The host controller interrupt cannot wait for the callout or task to finish running. - Nothing in the USBD API as is waits for the callout or task to finish running. - Callers expect to be able to resubmit USB xfers from xfer callbacks without waiting for anything to finish running.
The variable ux_timeout_set can be used by a host controller to decide on submission whether to schedule the callout or to ask an already-scheduled callout or already-queued task to reschedule the callout, by setting the variable ux_timeout_reset to true.
When the callout or task runs and sees that ux_timeout_reset is true, rather than queue the task or abort the xfer, it can instead just schedule the callout anew.
-
Fix steady state of timeouts in ehci.
This is complicated because: 1. There are three ways that an xfer can be completed: (a) hardware interrupt completes xfer (b) software decision aborts xfer with USBD_CANCELLED (c) timeout aborts xfer with USBD_TIMEOUT 2. The timeout abort can't be done in callout because ehci_sync_hc, called unconditionally by ehci_abort_xfer to wait until the device has finished using any references to the xfer, may sleep. So we have to schedule a callout that, when run, will schedule a usb_task. 3. The hardware completion interrupt can't sleep waiting for a callout or task to finish -- can't use callout_halt or usb_rem_task_wait. So the callout and usb_task must be able to run _after_ the hardware completion interrupt, and recognize that they're late to the party. (Note, though, that usbd_free_xfer does wait for the callout and task to complete, so there's no danger they may use themselves after free.) 4. The xfer may resubmitted -- and the timeout may be rescheduled -- immediately after the hardware completion interrupt, _while_ the callout and/or usb_task may still be scheduled. Specifically, we may have the following sequence of events: (a) hardware completion interrupt (b) callout or usb_task fires (c) driver resubmits xfer (d) callout or usb_task acquires lock and looks around dazed and bewildered at the firehose of events like reading the news in 2019
The mechanism for sorting this out is that we have two bits of state: - xfer->ux_timeout_set informs the driver, when submitting an xfer and setting up its timeout, whether either the callout or usb_task is already scheduled or not. - xfer->ux_timeout_reset informs the callout or usb_task whether it should reschedule the callout, because the xfer got resubmitted, or not.
-
Factor out HCI-independent xfer completion logic.
New API for HCI drivers to synchronize hardware completion interrupts, synchronous aborts, and asynchronous timeouts: - When submitting an xfer to hardware, call usbd_xfer_schedule_timeout(xfer). - On HCI completion interrupt for xfer completion: if (!usbd_xfer_trycomplete(xfer)) return; /* timed out or aborted, ignore it */ - In upm_abort methods, call usbd_xfer_abort(xfer).
For HCI drivers that use this API (not needed in drivers that don't, or for xfers like root intr xfers that don't use it): - New ubm_abortx method serves role of former *hci_abort_xfer, but without any logic for wrangling timeouts/callouts/tasks -- caller in usbd_xfer_abort has already handled them. - New ubm_dying method, returns true if the device is in the process of detaching, used by the timeout logic.
Converted and tested: - ehci - ohci
Converted and compile-tested: - ahci (XXX did this ever work?) - dwc2 - motg (XXX missing usbd_xfer_schedule_timeout in motg_*_start?) - uhci - xhci
Not changed: - slhci (sys/dev/ic/sl811hs.c) -- doesn't use a separate per-xfer callout for timeouts (XXX but maybe should?) - ugenhc (sys/rump/dev/lib/libugenhc/ugenhc.c) -- doesn't manage its own transfer timeouts
-
Fix steady state of root intr xfers.
Why? - Avoid completing a root intr xfer multiple times in races. - Avoid potential use-after-free in poll_hub callouts (uhci, ahci).
How? - Use sc->sc_intr_xfer or equivalent to store only a pending xfer that has not yet completed -- whether successfully, by timeout, or by synchronous abort. When any of those happens, set it to null under the lock, so the xfer is completed only once. - For hci drivers that use a callout to poll the root hub (uhci, ahci): . Pass the softc pointer, not the xfer, to the callout, so the callout is not even tempted to use xfer after free -- if the callout fires, but the xfer is synchronously aborted before the callout can do anything, the xfer might be freed by the time the callout starts to examine it. . Teach the callout to do nothing if it is callout_pending after it has fired. This way: 1. completion or synchronous abort can just callout_stop 2. start can just callout_schedule If the callout had already fired before (1), and doesn't acquire the bus lock until after (2), it may be tempted to abort the new root intr xfer just after submission, which would be wrong -- so instead we just have the callout do nothing if it notices it has been rescheduled, since it will fire again after the appropriate time has elapsed.
-
Initialize xfer->ux_status in uhci_root_intr_start.
Otherwise, it will be USBD_NOT_STARTED, so usbd_ar_pipe will skip calling upm_abort. Candidate fix for PR kern/54963, same problem as reported at: href="https://mail-index.NetBSD.org/current-users/2020/02/13/msg037740.html
-
Set ux_isdone in uhci_poll_hub for DIAGNOSTIC.
-
Fix mistakes in previous sloppy change with root intr xfers. - Make sure ux_status is set to USBD_IN_PROGRESS when started. Otherwise, if it is still in flight when we abort the pipe, usbd_ar_pipe will skip calling upm_abort. - Initialize ux_status under the lock; in principle a completion interrupt (or a delay) could race with the initialization. - KASSERT that the xfer is in progress when we're about to complete it.
Candidate fix for PR kern/54963 for other HCI drivers than uhci. ok nick ok phone (This is the change that nick evidently MEANT to ok when he ok'd the previous one!)
-
Fix build
-
Fix non-DIAGNOSTIC builds.
-
Fix wrong KASSERT in motg abort. This has been wrong since last summer when we did the transition to xfer->ux_status = USBD_CANCELLED earlier. XXX pullup-9
-
Fix mistakes in timeout/abort/completion changes in motg(4). - Call usbd_xfer_schedule_timeout so we actually do time out. - Don't call usbd_xfer_trycomplete until all the data have been transferred -- it commits to completion, not timeout. - Use xfer->ux_status != USBD_IN_PROGRESS to test whether, after a partial write, an xfer has been interrupted or timed out and need not be continued. - Remove wrong assertion.
-
Fix mistake in use of usbd_xfer_schedule_timeout in motg.
This code path is used both for xfers that are new, and xfers that are being done piece by piece and are partway done. For the latter case, skip usbd_xfer_schedule_timeout so we schedule it only once per xfer.
-
Simplify some branches and kassert some redundant assignments.
|
1.107.2.4 |
| 21-Jan-2020 |
martin | Pull up following revision(s) (requested by taca in ticket #625):
sys/dev/usb/xhci.c: revision 1.115
Acquire bus lock (if not polling) when changing xfer status, resetting the timeout and ringing the doorbell in the start methods.
|
1.107.2.3 |
| 13-Sep-2019 |
martin | Pull up following revision(s) (requested by mrg in ticket #196):
sys/dev/usb/xhci.c: revision 1.111 sys/dev/usb/xhci.c: revision 1.112 sys/dev/usb/xhci.c: revision 1.113 sys/dev/usb/xhci.c: revision 1.114
introduce and use XHCIHIST_CALLARGS(). reduces lots of double logs, and includes useful info in all cases instead of just "called". add a couple of more logs that i've wanted while debugging ryzen3 vs USB issues.
fix 32-bit debug build, and also vmstat -y. reported by sc.dying.
fix ryzen usb issue: we set TD size to '1', where has xhci spec 4.11.2.4 says final TRB for a TD should have this set to '0'. since we currently only generate sinel TRB TDs, set this to 0. from sc.dying
avoid non-debug kernel build issues.
|
1.107.2.2 |
| 01-Sep-2019 |
martin | Pull up following revision(s) (requested by mrg in ticket #135):
distrib/sets/lists/comp/mi 1.2279 distrib/sets/lists/modules/mi 1.123 share/man/man9/Makefile 1.438 share/man/man9/usbnet.9 1.1-1.9 sys/dev/ic/rndisreg.h 1.3 sys/dev/usb/TODO 1.47-1.52 sys/dev/usb/TODO.usbmp 1.15,1.16 sys/dev/usb/files.usb 1.157-1.167 sys/dev/usb/if_aue.c 1.155-1.161 sys/dev/usb/if_auereg.h 1.30-1.32 sys/dev/usb/if_axe.c 1.103-1.119 sys/dev/usb/if_axen.c 1.51-1.53,1.55-1.67 sys/dev/usb/if_axenreg.h 1.15 sys/dev/usb/if_cdce.c 1.54-1.67 sys/dev/usb/if_cue.c 1.85,1.86 sys/dev/usb/if_cuereg.h 1.23 sys/dev/usb/if_kue.c 1.97-1.100 sys/dev/usb/if_kuereg.h 1.23,1.24 sys/dev/usb/if_mue.c 1.51-1.55 sys/dev/usb/if_muereg.h 1.6 sys/dev/usb/if_muevar.h 1.9 sys/dev/usb/if_smsc.c 1.46-1.61 sys/dev/usb/if_smscreg.h 1.6 sys/dev/usb/if_smscvar.h delete sys/dev/usb/if_udav.c 1.60-1.71 sys/dev/usb/if_udavreg.h 1.14,1.15 sys/dev/usb/if_upl.c 1.65,1.66 sys/dev/usb/if_ure.c 1.15-1.31 sys/dev/usb/if_urevar.h 1.4,1.5 sys/dev/usb/if_url.c 1.67-1.70 sys/dev/usb/if_urlreg.h 1.14 sys/dev/usb/if_urndis.c 1.22-1.33 sys/dev/usb/if_urtwn.c 1.72 sys/dev/usb/ohci.c 1.290 sys/dev/usb/uhub.c 1.143 sys/dev/usb/usb.c 1.180 sys/dev/usb/usb.h 1.118 sys/dev/usb/usb_mem.c 1.71 sys/dev/usb/usb_subr.c 1.238,1.239 sys/dev/usb/usbdevs 1.772 sys/dev/usb/usbdi.c 1.183,1.186 sys/dev/usb/usbdi.h 1.97 sys/dev/usb/usbdi_util.c 1.75 sys/dev/usb/usbhist.h 1.5,1.6 sys/dev/usb/usbnet.c 1.1-1.24 sys/dev/usb/usbnet.h 1.1-1.14 sys/dev/usb/usbroothub.c 1.9 sys/dev/usb/xhci.c 1.109,1.110 sys/modules/Makefile 1.223 sys/modules/usbnet/Makefile 1.1
usbnet(9): Add common framework for USB network devices. This bring various safety fixes to all updated drivers, and includes locking clean up, detach safety when being used or not, separate rx/tx locks to improve performance, porting to NET_MPSAFE, many edge/error case bugs in drivers fixed, as well as resovling PRs 54303 and 54308. These drivers are converted: axe(4), axen(4), aue(4), cdce(4), cue(4), kue(4), mue(4), smsc(4), udav(4), upl(4), ure(4), url(4), and urndis(4).
|
1.107.2.1 |
| 21-Aug-2019 |
martin | Pull up following revision(s) (requested by skrll in ticket #104):
sys/dev/usb/xhci.c: revision 1.108
typo in error message
|
1.115.2.1 |
| 29-Feb-2020 |
ad | Sync with head.
|
1.135.2.2 |
| 03-Apr-2021 |
thorpej | Sync with HEAD.
|
1.135.2.1 |
| 03-Jan-2021 |
thorpej | Sync w/ HEAD.
|
1.138.6.1 |
| 31-May-2021 |
cjep | sync with head
|
1.138.4.1 |
| 17-Jun-2021 |
thorpej | Sync w/ HEAD.
|
1.175.2.4 |
| 23-Sep-2025 |
martin | Pull up following revision(s) (requested by nat in ticket #1159):
sys/dev/usb/xhci.c: revision 1.190
Handle special case of USBD_FORCE_SHORT_XFER.
This fixes devices such as urtwn(4) connected to an xhci port.
It works by sending a zero length transfer at the end of the data transfer for the above mentioned flag.
Similar artwork in this space already exists for ohci/uhci/ehci.
OK jkallsch@.
|
1.175.2.3 |
| 20-Sep-2024 |
martin | Pull up following revision(s) (requested by rin in ticket #885):
sys/dev/usb/xhcireg.h: revision 1.23 sys/dev/usb/xhci.c: revision 1.178 sys/dev/usb/xhci.c: revision 1.179
Remove an unnecessary cast in a KASSERTMSG - Fix clearing of EINT and other transient flags.
Patches from sc.dying in kern/56115: - Set proper Max ESIT Payload value for interrupt/isoc endpoint context. - Set proper Average TRB Length value. - Not tested on superspeed/superspeedplus isochronous device. - Add handling of some error paths for isochronous transfers.
|
1.175.2.2 |
| 01-Aug-2023 |
martin | Pull up following revision(s) (requested by riastradh in ticket #281):
sys/dev/usb/xhci.c: revision 1.177 sys/dev/usb/xhci.c: revision 1.180 sys/dev/usb/xhcivar.h: revision 1.24
xhci(4): Avoid crash in suspend/resume/resume if first resume fails. Rather than try to recover from this, just make new commands fail so at least we don't deadlock.
xhci(4): Don't panic on suspend if previous suspend/resume failed. Trying to resume again probably won't make the situation much worse, but panicking can definitely make it worse.
|
1.175.2.1 |
| 01-Aug-2023 |
martin | Pull up following revision(s) (requested by riastradh in ticket #280):
sys/dev/usb/xhci.c: revision 1.176 sys/dev/usb/xhcivar.h: revision 1.23
xhci(4): Defer root intr xfers while polling.
Root intr xfers require taking adaptive locks, which is forbidden while polling.
This is not great -- any USB transfer completion callbacks might try to take adaptive locks, not just uhub_intr, and that will always causes trouble. We get lucky with ukbd_intr because it's not MP-safe, so it relies only on the kernel lock (a spin lock) anyway. But this change brings xhci in line with ehci.
PR kern/57326
|
1.184.2.1 |
| 02-Aug-2025 |
perseant | Sync with HEAD
|
1.188.2.1 |
| 12-Sep-2025 |
snj | Pull up following revision(s) (requested by nat in ticket #30):
sys/dev/usb/xhci.c: revision 1.190
Handle special case of USBD_FORCE_SHORT_XFER. This fixes devices such as urtwn(4) connected to an xhci port. It works by sending a zero length transfer at the end of the data transfer for the above mentioned flag. Similar artwork in this space already exists for ohci/uhci/ehci. OK jkallsch@.
|