Commit Graph

324 Commits

Author SHA1 Message Date
hselasky
95a86b5ccc Refine support for disabling USB enumeration to allow device detach
and suspend and resume of existing devices.

MFC after:	2 weeks
2014-10-09 06:24:06 +00:00
hselasky
3a2fd4b247 Add support for disabling USB enumeration in general or on selected
USB HUBs.

MFC after:	2 weeks
2014-10-08 07:00:50 +00:00
hselasky
de588ec5be Fix XHCI driver for devices which have more than 15 physical root HUB
ports. The current bitmap array was too small to hold more than 16
bits and would at some point toggle the context size, which then would
trigger an enumeration fault and cause a fallback to the EHCI
companion controller, if any.

MFC after:	3 days
2014-10-03 15:58:04 +00:00
hselasky
223886f22f Make sure we always set the maximum number of valid contexts.
MFC after:	3 days
2014-10-02 16:56:00 +00:00
hselasky
3001a366c1 Set default cycle state in case of early interrupts.
MFC after:	3 days
2014-10-01 07:34:49 +00:00
gavin
3d4fec8198 Move the ARM Samsung s3c2xx0 support files into the samsung directory, to
match other platforms.

Discussed with:	andrew
2014-09-25 11:38:26 +00:00
hselasky
2b799f4318 Some XHCI hardware requires dropping the endpoint context before
adding it again.

MFC after:	3 days
Submitted by:	Kohji Okuno <okuno.kohji@jp.panasonic.com>
2014-09-22 10:21:42 +00:00
mav
752795f0c4 Add IDs for Intel Patsburg USB 2.0 controller. 2014-09-05 07:42:34 +00:00
hselasky
1d56927a73 - Implement fast interrupt handler to save CPU usage.
- Cleanup some register reads and writes to use existing register
  access macros.
- Ensure code which only applies to the control endpoint is not run
  for other endpoints in the data transfer path.

MFC after:	3 days
2014-08-05 18:48:12 +00:00
hselasky
c1996d7b52 - Ensure code which only applies to the control endpoint is not run
for other endpoints in the data transfer path.
- Ensure all bits of the "EPCON" register is written during
initialisation.

MFC after:	3 days
2014-08-05 13:36:26 +00:00
n_hibma
cd68ca5c6b Remove unused defines.
Fix some device_printf's that were missing '\n' at the end or had
speling errors.

PR:		145319
Submitted by:	rozhuk.im gmail.com
2014-08-05 08:24:41 +00:00
hselasky
598f1debb6 Rename driver name a bit to avoid unit number confusion in dmesg.
MFC after:	3 days
2014-08-05 06:37:07 +00:00
hselasky
aebc8722ef - Implement fast interrupt handler to save CPU usage.
- Add support for striding register offsets.
- Cleanup some register reads and writes to use existing register
access macros.
2014-08-05 06:33:59 +00:00
hselasky
907d8331c7 Ensure we catch USB transfers which complete right away. 2014-08-05 06:31:09 +00:00
hselasky
ed9fc3677b Split the XHCI TRB allocations into smaller parts, so that we don't
end up allocating contiguous busdma buffers above PAGE_SIZE bytes.

MFC after:	1 week
Tested by:	Ruslan Bukin <br@bsdpad.com>
2014-07-26 19:08:52 +00:00
hselasky
674e405004 Improve support for Intel Lynx Point USB 3.0 controllers by using the
USB 2.0 port mask in addition to the USB 3.0 port mask. The hardware
does not always accept when writing -1U to the port switching
registers.

MFC after:	3 days
Tested by:	Huang Wen Hui <huanghwh@gmail.com>
2014-07-16 06:14:41 +00:00
hselasky
4be2431f80 Improve support for Intel Lynx Point USB 3.0 controllers by masking
the port routing bits like done in Linux.

MFC after:	1 week
Tested by:	Tur-Wei Chan <twchan@singnet.com.sg>
2014-07-07 05:17:16 +00:00
hselasky
35b126e324 Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
gjb
fc21f40567 Revert r267961, r267973:
These changes prevent sysctl(8) from returning proper output,
such as:

 1) no output from sysctl(8)
 2) erroneously returning ENOMEM with tools like truss(1)
    or uname(1)
 truss: can not get etype: Cannot allocate memory
2014-06-27 22:05:21 +00:00
hselasky
bd1ed65f0f Extend the meaning of the CTLFLAG_TUN flag to automatically check if
there is an environment variable which shall initialize the SYSCTL
during early boot. This works for all SYSCTL types both statically and
dynamically created ones, except for the SYSCTL NODE type and SYSCTLs
which belong to VNETs. A new flag, CTLFLAG_NOFETCH, has been added to
be used in the case a tunable sysctl has a custom initialisation
function allowing the sysctl to still be marked as a tunable. The
kernel SYSCTL API is mostly the same, with a few exceptions for some
special operations like iterating childrens of a static/extern SYSCTL
node. This operation should probably be made into a factored out
common macro, hence some device drivers use this. The reason for
changing the SYSCTL API was the need for a SYSCTL parent OID pointer
and not only the SYSCTL parent OID list pointer in order to quickly
generate the sysctl path. The motivation behind this patch is to avoid
parameter loading cludges inside the OFED driver subsystem. Instead of
adding special code to the OFED driver subsystem to post-load tunables
into dynamically created sysctls, we generalize this in the kernel.

Other changes:
- Corrected a possibly incorrect sysctl name from "hw.cbb.intr_mask"
to "hw.pcic.intr_mask".
- Removed redundant TUNABLE statements throughout the kernel.
- Some minor code rewrites in connection to removing not needed
TUNABLE statements.
- Added a missing SYSCTL_DECL().
- Wrapped two very long lines.
- Avoid malloc()/free() inside sysctl string handling, in case it is
called to initialize a sysctl from a tunable, hence malloc()/free() is
not ready when sysctls from the sysctl dataset are registered.
- Bumped FreeBSD version to indicate SYSCTL API change.

MFC after:	2 weeks
Sponsored by:	Mellanox Technologies
2014-06-27 16:33:43 +00:00
marius
0a5ab649fa Avoid the USB device disconnected and controller shutdown clutter on system
shutdown by putting the former under !rebooting and turning the latter into
debug messages.

Reviewed by:	hps
MFC after:	1 week
Sponsored by:	Bally Wulff Games & Entertainment GmbH
2014-06-10 08:20:00 +00:00
hselasky
35c04fd76f Resolve a deadlock setting the USB configuration index from userspace
on USB HUBs by moving the code into the USB explore threads. The
deadlock happens because child devices of the USB HUB don't have the
expected reference count when called from outside the explore
thread. Only the HUB device itself, which the IOCTL interface locks,
gets the correct reference count.

MFC after:	3 days
2014-06-08 20:10:29 +00:00
hselasky
7f9a560665 Make WITNESS happy by giving USB mutexes different names.
Reported by:	trociny @
MFC after:	3 days
2014-06-07 15:51:29 +00:00
hselasky
5aa0851110 Fix for USB specification compliance. We need to accept both DATA0 and
DATA1 for INTERRUPT endpoints.

MFC after:	3 days
2014-06-07 10:13:45 +00:00
hselasky
092c9453db Some further DWC OTG improvements for full speed and low speed devices:
- Revert r265427. It appears we are halting the DWC OTG host
controller schedule if we process events only at every SOF. When doing
split transactions we rely on that events are processed quickly and
waiting too long might cause data loss.
- We are not always able to meet the timing requirements of interrupt
endpoint split transactions. Switch from INTERRUPT to CONTROL endpoint
type for interrupt endpoint events until further, hence CONTROL
endpoint events are more relaxed, reducing the chance of data
loss. See comment in code for more in-depth explanation.
- Simplify TT scheduling.

MFC after:	3 days
2014-06-07 07:23:17 +00:00
hselasky
13fb8aa893 - Verify that we don't load more data into a FIFO than it is
configured to handle.
- Add code to handle suspend and resume.

MFC after:	3 days
2014-06-05 18:23:51 +00:00
hselasky
412a788736 Need to check the transfer cache field in the device done function
to be sure all allocated channels are freed and not the transfer first
one.
2014-06-05 18:19:48 +00:00
hselasky
bea5f25709 Try to fix DWC OTG regression issues with full and low speed devices:
- Remove double buffering interrupt and isochronous traffic via the
transaction translator. It can be avoided because the DWC OTG will
always delay the start split transactions for interrupt and
isochronous traffic, but will not delay the complete split
transactions, if we set the odd frame bit correctly.
- Need to check the transfer cache field in the device done function
to be sure all allocated channels are freed and not the transfer first
one. This seems to resolve the control endpoint transfer type quirk
which is now removed.
- Make sure any received data upon TX is dumped else RX path will
stop.
- Transmit isochronous data before receiving isochronous data as a
means to optimise the TT schedule.
- Implement a simple TT bandwidth scheduler.
- Cleanup use of old "td->error" variable.
- On interrupt IN traffic via the transaction translator we simply
ignore missed transfer opportunities and silently retry the
transaction upon next available time slot.

MFC after:	3 days
2014-06-05 18:17:40 +00:00
hselasky
d44dd4ee4a The external USB HUB in the RPI-B rejects control endpoint traffic
using the BULK endpoint type, while other USB HUBs do not. Disable
endpoint type workaround for TT traffic.

MFC after:	3 days
2014-06-04 10:29:01 +00:00
hselasky
29d155d293 Add basic support for isochronous transfers in host mode to the
ISP/SAF1761 driver.

Sponsored by:	DARPA, AFRL
2014-06-01 10:22:18 +00:00
hselasky
7acb98f193 It appears the ISP/SAF1761 sometimes is busy when reading the status
word of the PTD and simply returns a value of zero. Retry a few times
before giving up.

Sponsored by:	DARPA, AFRL
2014-05-30 16:44:03 +00:00
hselasky
6047bb70d6 Add ISP/SAF1761 bootloader bus interface file.
Sponsored by:	DARPA, AFRL
2014-05-30 13:42:11 +00:00
hselasky
bd1b52741e Add some more spinlocks to protect the state of the USB transfer
queue. Rename some functions to indicate locking requirements.

MFC after:	1 week
2014-05-29 11:11:19 +00:00
hselasky
b164e3d336 Hook the ISP/SAF1761 driver into MIPS kernel builds.
- Update FDT file for BERI DE4 boards.
- Add needed kernel configuration keywords.
- Rename module to saf1761otg so that the device unit number does not
interfere with the hardware ID in dmesg.

Sponsored by:	DARPA, AFRL
2014-05-29 10:46:09 +00:00
hselasky
e7ad38a8d2 Optimise the ISP/SAF1761 driver:
- Use an interrupt filter for handling the data path interrupts. This
increases the throughput significantly.
- Implement support for USB suspend and resume in USB host mode.

Sponsored by:	DARPA, AFRL
2014-05-29 10:06:18 +00:00
hselasky
0efc57102d Fixes for ISP/SAF1761 host mode:
- Make the USB hardware skip PTDs which are not allocated.
- Peek host memory twice. Sometimes the PTD status is incorrectly
returned as zero.
- Ensure the host channel is always freed when software TD
is completing.
- Add correct configuration of interrupt polarity and type.
- Set CERR to 2 for asynchronous traffic to avoid having to
reactivate the PTD when a NAK token is received.
- Fix detection of STALL PID.

Sponsored by:	DARPA, AFRL
2014-05-28 16:28:22 +00:00
hselasky
0a93966003 - Correct bus space resource type for register access.
- Add configuration of interrupt type and polarity via FDT.

Sponsored by:	DARPA, AFRL
2014-05-27 10:12:16 +00:00
hselasky
6712d8d387 Multiple fixes and improvements:
- Put "_LE_" into the register access macros to indicate little endian
byte order is expected by the hardware.
- Avoid using the bounce buffer when not strictly needed. Try to move
data directly using bus-space functions first.
- Ensure we preserve the reserved bits in the power down mode
register. Else the hardware goes into a non-recoverable state.
- Always use 32-bit access when writing or reading registers or FIFOs,
because the hardware is 32-bit oriented and don't really understand 8-
and 16-bit access.
- Correct writes to the memory address register. There is no need to
shift the register offset.
- Correct interval for interrupt endpoints.
- Optimise 90ns internal memory buffer read delay.
- Rename PDT into PTD, which is how the datasheet writes it.
- Add missing programming for activating host controller PTDs.

Sponsored by:	DARPA, AFRL
2014-05-27 10:01:19 +00:00
hselasky
1dc28f6453 Make SAF1761 driver endian safe.
Sponsored by:	DARPA, AFRL
2014-05-25 06:42:43 +00:00
hselasky
98008afe59 - Fix a bug where the TLBPC value was forced to being odd for IN
direction isochronous transfers.
- Remove setting of fields which does not belong to the respective
TRBs. These fields are currently set as zero and this is more a
cosmetic change.

MFC after:	3 days
Submitted by:	Horse Ma <HMa@wyse.com>
2014-05-22 11:58:15 +00:00
hselasky
894f3932dd Implement interrupt endpoint methods for host mode transfers.
Sponsored by:	DARPA, AFRL
2014-05-21 17:22:41 +00:00
hselasky
e745bc5169 - Replace some constants with macros.
- Need to set the pre-fetch memory address when reading the host memory.
- We currently assume that no endianness conversion is needed.

Sponsored by:	DARPA, AFRL
2014-05-21 09:26:02 +00:00
hselasky
456533ff13 Correct some programming details. The layout of the PDTs were
different from what was initially thought. Fix re-programming of
hardware mode register after reset.

Sponsored by:	DARPA, AFRL
2014-05-20 14:15:03 +00:00
hselasky
a1867fd451 - Remove no longer used file. FDT is used to attach device drivers. 2014-05-18 09:19:13 +00:00
hselasky
bdd212c558 - Add softc pointer argument to FIFO functions as an optimisation.
- Implement support for interrupt filters in the DWC OTG driver, to
reduce the amount of CPU task switching when only feeding the FIFOs.
- Add common spinlock to the USB bus structure.

MFC after:	2 weeks
2014-05-18 09:13:29 +00:00
hselasky
08dac0fb0f Enable host controller interrupts.
Sponsored by:	DARPA, AFRL
2014-05-16 16:36:07 +00:00
hselasky
3e5aac3994 Remove old files.
Sponsored by:	DARPA, AFRL
2014-05-16 15:53:47 +00:00
hselasky
81eb6db4ac Fix a compile warning about unused variable.
Sponsored by:	DARPA, AFRL
2014-05-16 15:53:14 +00:00
hselasky
529b37774d Rename "saf1761_dci_xxx" into "saf1761_otg_xxx" to reflect that this
driver supports both host and device side mode.

Sponsored by:	DARPA, AFRL
2014-05-16 15:50:21 +00:00
hselasky
d8fcccb1e7 Implement basic support for the USB host controller found in the
SAF1761 chip, supporting BULK and CONTROL endpoints. This code is not
yet tested.

Sponsored by:	DARPA, AFRL
2014-05-16 15:41:55 +00:00