Commit graph

562 commits

Author SHA1 Message Date
Dmitry Luhtionov
0d7064d58f xhci(4): Add new USB IDs.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2023-01-17 11:45:35 +01:00
Dmitry Luhtionov
f9237e1937 ehci(4): Add new USB IDs.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2023-01-17 11:45:35 +01:00
Dmitry Luhtionov
986c7be472 uhci(4): Add new USB IDs.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2023-01-17 11:45:35 +01:00
Cheng, Huiming
8685d7b5cb xhci(4): Make sure allocated bandwidth is freed in hardware by unconfiguring endpoint.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2023-01-13 11:18:19 +01:00
Val Packett
0b4531511e copyright: chase my name and email change
Reviewed by:	imp, emaste
Differential Revision:	https://reviews.freebsd.org/D37945
2023-01-06 15:28:42 -05:00
Andrew Turner
8793196ca2 Check for more XHCI ACPI IDs
The Windows Dev Kit 2023 uses the XHCI-compliant USB controller without
standard debug ID in its ACPI tables. Check for both ID values found
on [1] in the XHCI ACPI attachment.

[1] https://learn.microsoft.com/en-us/windows-hardware/drivers/bringup/device-management-namespace-objects

Tested by:	Robert Clausecker <fuz@fuz.su>
Sponsored by:	Arm Ltd
2023-01-04 16:54:05 +00:00
Søren Schmidt
1d8c07b7ab Get clocks for Rockchip RK3568. 2022-12-20 08:53:58 +00:00
Emmanuel Vadot
0860c27fe8 usb/dwc3: Use more () for macros variables
Suggested by:	andrew
Sponsored by:	Beckhoff Automation GmbH & Co. KG
2022-11-16 11:58:32 +01:00
Emmanuel Vadot
d47f5f2886 usb/dwc3: Only force USB2 based on the PHY register and IP version
We shouldn't force USB2 only based on if we have an external PHY.
The internal PHY register tell us what link speed we can acheive
and we need to force USB2 only if it cannot do USB3.
This is only available after revision 0x290A of the dwc3 IP.

Reviewed by:	andrew
Differential Revision:	https://reviews.freebsd.org/D37394
Fixed:	1331c0f44b ("Add support for RockChip RK356X to DWC3 driver.")
Sponsored by:	Beckhoff Automation GmbH & Co. KG
2022-11-16 11:58:32 +01:00
Emmanuel Vadot
0e87f58bd7 usb/dwc3: Read the full IDs/version
We need to enable some quirks based on the version so read it.

Reviewed by:	andrew
Differential Revision:	https://reviews.freebsd.org/D37393
Sponsored by:	Beckhoff Automation GmbH & Co. KG
2022-11-16 11:58:31 +01:00
Emmanuel Vadot
0a5f342aa5 dwc3: Handle optional clocks
Usually dwc3 needs a glue node that contain the SoC specific clocks/resets.
For some reason the RK3328 DTS doesn't have this glue node and the clocks
are specified in the dwc3 node directly.
The bindings says that it is allowed but doesn't specified some strict names
for them.
Add a specific case for RK3328 based on the compatible string.

Reviewed by:	andrew
Differential Revision:	https://reviews.freebsd.org/D37392
Sponsored by:	Beckhoff Automation GmbH & Co. KG
2022-11-16 11:58:31 +01:00
Hans Petter Selasky
3346ae0d24 xhci(4): Don't allocate an IRQ vector if hw.usb.xhci.use_polling=1 is set.
This is useful for debugging purposes.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-10-20 19:23:42 +02:00
Alexander Motin
2a31a06bf1 Add random VMware device IDs.
Just to make dmesg look nicer there.

MFC after:	1 week
2022-10-20 10:19:24 -04:00
Hans Petter Selasky
62d42655bc usb(4): Substitute "unsigned int" using the equivalent and shorter "unsigned" keyword.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-10-07 13:41:00 +02:00
Hans Petter Selasky
8758aabb16 usb(4): Make the enumeration thread nice time a variable.
Depends on "options USB_DEBUG".

Suggested by:	koobs@
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-10-07 13:41:00 +02:00
Hans Petter Selasky
55a3bd000d usb(4): Make sure the enumeration thread doesn't loop too fast.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-10-05 12:12:33 +02:00
Mitchell Horne
26d786331b usb: musb_otg_allwinner: de-constify bus_space_tags
The SAN interceptors simply take a bus_space_tag_t, so we're
dropping qualifiers here.  const semantics with a ptr typedef mean we'd
have to drop or change the bus_space_tag_t abstraction used in the SAN
sanitizers in order to make a compatible change there, which likely
isn't worth it.

Reviewed by:	andrew, markj
Sponsored by:	Juniper Networks, Inc.
Sponsored by:	Klara, Inc.
Differential Revision:	https://reviews.freebsd.org/D36764
2022-09-27 15:54:00 -05:00
Søren Schmidt
1331c0f44b Add support for RockChip RK356X to DWC3 driver.
For RK356x platform, we can set bit 26 of DWC3_GUCTL1 register
for usb 2.0 device.

Reviewed by:	manu
Differential Revision:	https://reviews.freebsd.org/D36211
2022-08-16 12:24:44 +00:00
Bjoern A. Zeeb
d3ef3c4cf8 XHCI: remove a self-assignment
x = x is an unneeded operation, remove it.
The value is read and assigned above for real.

MFC after:	4 weeks
2022-08-07 22:46:55 +00:00
Bjoern A. Zeeb
fbb5cb66f7 dwc3: add ACPI attachment
Split the current FDT-only implementation up into an FDT and an
ACPI part reusing and sharing as much code as possible (thanks mw!).

This makes the Synopsis XHCI root hubs attach correctly on SolidRun's
HoenyComb instead of just the generic XHCI root and this means we
are also doing proper chip setup and applying the quirk needed there [1].

There is one problem with ACPI attachment in that it uses the generic
XHCI PNP ID.  So we need to do extra checks in order to not claim
all xhci, which means we check for a known quirk to be present
in acpi_probe.  Long term this isn't scaling and this was discussed
in SolidRun's Discord Channel in 2021 with the intend that "jnettlet"
will take this to a steering committee.  Since then ACPI has kind-of
become a technology non grata (due to not getting changes into Linux
timely) so it is unclear if this will ever happen.  If there will be
further hardware with dwc3/ACPI we should go and make sure this problem
gets solved.

[1] 24698f90b7/Silicon/NXP/LX2160A/AcpiTables/Dsdt/Usb.asl

Reviewed by:		manu, mw
MFC after:		10 days
Differential Revision:	https://reviews.freebsd.org/D32256
2022-07-06 11:26:34 +00:00
Bjoern A. Zeeb
ec32fc2af5 dwc3: fix from not working
During the review of 09cdf4878c we
switched from cached registers to reading them as needed.
One read of the two reads was moved after the softreset got triggered
and as a result returned 0 rather than the proper register value.
Moving the read before the softreset gets initiated seems to make
things work again and xhci.c no longer complains about
"Controller does not support 4K page size.".

MFC after:	10 days
X-MFC with:	09cdf4878c
Pointy hat to:	bz
2022-07-05 00:53:42 +00:00
Bjoern A. Zeeb
11a7d5e5d9 dwc3: improve debugging
Rather than hiding behind #if 0, hide the debugging behind DWC3_DEBUG
so it can be turned on with a single define.  Require bootverbose
to print anything so we can still avoid spamming the console if DWC3_DEBUG
is on.
Harmonize the format string in snsp_dwc3_dump_regs() to always print the
full register and also print the XHCI quirks.
Call snsp_dwc3_dump_regs() twice, before and after generic XHCI attachment
and initialisation as this may have an effect on the confirgumation state.

Obtained from:	an old debug patch
MFC after:	2 weeks
Reviewed by:	mw
Differential Revision: https://reviews.freebsd.org/D35700
2022-07-03 22:19:40 +00:00
Bjoern A. Zeeb
09cdf4878c dwc3: add more quirks and checks
Rather than just printing the Global SNPS ID Register store it as well
so we can do a version check later.
In addition, for debugging purposes, read the Global Hardware Parameters
Registers and print them.

Based on the snpsid disable an XHCI feature using a quirk prepared
in 447c418da0.
Add the "snps,dis_u3_susphy_quirk" quirk and handle Suspend USB3.0 SS PHY
after power-on-reset/during core initialization (suggested to be cleared)
based on the DWC3_GHWPARAMS0 register.

MFC after:	2 weeks
Obtained from:	an old debugging patch
Reviewed by:	mw (earlier version), mmel
Differential Revision: https://reviews.freebsd.org/D35699
2022-07-03 22:17:35 +00:00
Bjoern A. Zeeb
cec0a5ec6b dwc3: uncondinationally enable Host IN Auto Retry
Enable dwc3's auto retry feature. For IN transfers with crc errors
or internal overruns this will make the host reply with a
non-terminating retry ACK.  I believe the hope was to improve
reliability after seeing occasional hiccups.

Obtained from:	an old debugging patch
MFC after:	2 weeks
Reviewed by:	mw
Differential Revision: https://reviews.freebsd.org/D35698
2022-07-03 22:15:12 +00:00
Bjoern A. Zeeb
0084212bfd dwc3: fix snps,dis-del-phy-power-chg-quirk
If snps,dis-del-phy-power-chg-quirk is set, the register bit should be
cleared not ored on (it's the "dis" version).

MFC after:	2 weeks
Reviewed by:	mw
Differential Revision: https://reviews.freebsd.org/D35697
2022-07-03 22:13:28 +00:00
Bjoern A. Zeeb
b11f52f4db USB: dwc3: use device_{has,get}_property()
Switch the driver to use device based functions which will work not
only with FDT but also ACPI.

While here make dr_mode a local variable as it is only used during
probe and not needed later in the softc.

MFC after:	2 weeks
Reviewed by:	mw
Differential Revision: https://reviews.freebsd.org/D33170
2022-06-28 13:02:11 +00:00
Bjoern A. Zeeb
447c418da0 USB: add quirks to XHCI
While XHCI is very generic some revisions of chipsets have problems.
On dwc3 <= 3.00a Port Disable does not seem to work so we need to not
enable it.
For that introduce quirks to xhci so that controllers can steer
certain features.  I would hope that this is and remains the only one.

Obtained from:	an old patch mainly debugging other problems
MFC after:	2 weeks
Reviewed by:	hselasky
Differential Revision: https://reviews.freebsd.org/D35482
2022-06-15 21:08:58 +00:00
John Baldwin
bc9372d784 usb: Remove unused devclass arguments to DRIVER_MODULE. 2022-05-06 15:46:57 -07:00
Hans Petter Selasky
a1c0442b41 xhci(4): Tweak USB port speed checks to allow newer super speed generations.
This allows setting the U1 and U2 port timeout values.

MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-05-04 09:26:39 +02:00
Hans Petter Selasky
d730333c80 xhci(4): Properly define all basic USB port speeds.
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-05-04 09:26:38 +02:00
Hans Petter Selasky
09dd1adfa4 xhci(4): Always add and evaluate the slot context.
Because the maximum number of endpoint contexts is stored there.

Tested by:	ehaupt@
PR:		262882
MFC after:	3 hours
Sponsored by:	NVIDIA Networking
2022-05-03 18:13:53 +02:00
Hans Petter Selasky
e276d28150 xhci(4): Only drop BULK and INTERRUPT endpoints to reset data toggle.
Only drop BULK and INTERRUPT endpoints, to reset the data toggle,
because for other endpoint types this is not critical.

Tested by:	ehaupt@
PR:		262882
MFC after:	3 hours
Sponsored by:	NVIDIA Networking
2022-05-03 18:13:53 +02:00
Hans Petter Selasky
cda31e7349 xhci(4): Ensure the so-called data toggle gets properly reset.
Use the drop and enable endpoint context commands to force a reset of
the data toggle for USB 2.0 and USB 3.0 after:
 - clear endpoint halt command (when the driver wishes).
 - set config command (when the kernel or user-space wants).
 - set alternate setting command (only affected endpoints).

Some XHCI HW implementations may not allow the endpoint reset command when
the endpoint context is not in the halted state.

Reported by:		Juniper and Gary Jennejohn
MFC after:		1 week
Sponsored by:		NVIDIA Networking
2022-04-21 17:01:13 +02:00
John Baldwin
ffd8101e93 usb: Add a __usbdebug_used for variables only used under #ifdef USB_DEBUG.
Use it for various variables only used in DPRINTF debug traces
conditional on USB_DEBUG.
2022-04-13 16:08:20 -07:00
Gordon Bergling
2e09a4ac3b usb(4): Remove a double word in a source code comment
- s/for for/for/

MFC after:	3 days
2022-04-09 11:02:23 +02:00
John Baldwin
438548300b ehci_imx: Remove unused variable. 2022-04-08 18:31:29 -07:00
John Baldwin
8c3923ae2f uhci: Remove write-only variable. 2022-04-06 16:45:27 -07:00
Warner Losh
12312f7583 uss820dci: eliminate unused variables sc, ep_no
Sponsored by:		Netflix
2022-04-04 22:30:31 -06:00
Warner Losh
6ccdcae1b9 uhci_xfer_setup: eliminate write only variable sc
Sponsored by:		Netflix
2022-04-04 22:30:29 -06:00
Warner Losh
ab59cd6a0b musb: eliminate write only variable sc
Sponsored by:		Netflix
2022-04-04 22:30:26 -06:00
Warner Losh
e73b02f66b atmegadci: eliminate unused variables sc, ep_no
Sponsored by:		Netflix
2022-04-04 22:30:23 -06:00
Hans Petter Selasky
19837718ab xhci(4): Add quirk for "Fresco Logic FL1009 USB3.0 xHCI Controller".
Submitted by:		John F Carr <jfc@mit.edu>
MFC after:		1 week
Sponsored by:		NVIDIA Networking
2022-03-16 16:49:00 +01:00
Hans Petter Selasky
33cbbf268f xhci(4): Add quirk for "TUSB73x0 USB3.0 xHCI Controller".
Tested by:	br@
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-03-03 18:14:21 +01:00
Emmanuel Vadot
fb6cebd8bd usb: Make ext_resources non-optional
EXT_RESOURCES have been introduced in 12-CURRENT and all supported
releases have it enabled in their kernel config.

MFC after:      1 month
Differential Revision:	https://reviews.freebsd.org/D33827
2022-02-21 17:28:52 +01:00
Hans Petter Selasky
e85af89fa7 Add more USB host controller PCI ID's.
Submitted by:	Gary Jennejohn <gljennjohn@gmail.com>
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-02-08 00:29:24 +01:00
Jung-uk Kim
379797d4b4 usb(4): Belatedly add a PCI device ID for AMD Bolton chipset 2022-02-07 13:48:09 -05:00
Hans Petter Selasky
42cf33dd1a Add new USB host controller PCI ID's.
Submitted by:	Dmitry Luhtionov <dmitryluhtionov@gmail.com>
MFC after:	1 week
Sponsored by:	NVIDIA Networking
2022-02-06 13:18:35 +01:00
Andrew Turner
a3cea15680 Fix undefined behaviour in the USB controllers
The USB controller drivers assume they can cast a NULL pointer to a
struct and find the address of a member. KUBSan complains about this so
replace with the __offsetof and __containerof macros that use either a
builtin function where available, or the same NULL pointer on older
compilers without the builtin.

Reviewers: hselasky

Subscribers: imp

Reviewed by:	hselasky
Sponsored by:	The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D33865
2022-01-12 13:53:19 +00:00
Warner Losh
44796b7e82 mips: remove saf1761
The saf1761 OTG support was only for mips targets (BERI?). Retire it.

Sponsored by:		Netflix
Reviewed by:		brooks
Differential Revision:	https://reviews.freebsd.org/D33706
2022-01-04 16:01:14 -07:00
Warner Losh
c6df6f5322 Create wrapper for Giant taken for newbus
Create a wrapper for newbus to take giant and for busses to take it too.
bus_topo_lock() should be called before interacting with newbus routines
and unlocked with bus_topo_unlock(). If you need the topology lock for
some reason, bus_topo_mtx() will provide that.

Sponsored by:		Netflix
Reviewed by:		mav
Differential Revision:	https://reviews.freebsd.org/D31831
2021-12-09 17:04:45 -07:00