svn commit: r358876 - in stable/9/sys/dev/usb: . controller

Hans Petter Selasky hselasky at FreeBSD.org
Wed Mar 11 08:23:17 UTC 2020


Author: hselasky
Date: Wed Mar 11 08:23:14 2020
New Revision: 358876
URL: https://svnweb.freebsd.org/changeset/base/358876

Log:
  MFC r358738:
  Remove the power bit from the super speed root hub port status register
  because it clobbers the super speed link status when a device is in super
  speed mode. Currently the power bit is not needed for anything in the USB
  hub driver.
  
  This fixes USB warm reset for super speed devices.
  
  Tested by:	Shichun.Ma at dell.com
  Sponsored by:	Mellanox Technologies

Modified:
  stable/9/sys/dev/usb/controller/xhci.c
  stable/9/sys/dev/usb/usb_hub.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/dev/usb/controller/xhci.c
==============================================================================
--- stable/9/sys/dev/usb/controller/xhci.c	Wed Mar 11 08:21:48 2020	(r358875)
+++ stable/9/sys/dev/usb/controller/xhci.c	Wed Mar 11 08:23:14 2020	(r358876)
@@ -3514,13 +3514,10 @@ xhci_roothub_exec(struct usb_device *udev,
 			i |= UPS_OVERCURRENT_INDICATOR;
 		if (v & XHCI_PS_PR)
 			i |= UPS_RESET;
-		if (v & XHCI_PS_PP) {
-			/*
-			 * The USB 3.0 RH is using the
-			 * USB 2.0's power bit
-			 */
-			i |= UPS_PORT_POWER;
-		}
+#if 0
+		if (v & XHCI_PS_PP)
+			/* XXX undefined */
+#endif
 		USETW(sc->sc_hub_desc.ps.wPortStatus, i);
 
 		i = 0;

Modified: stable/9/sys/dev/usb/usb_hub.c
==============================================================================
--- stable/9/sys/dev/usb/usb_hub.c	Wed Mar 11 08:21:48 2020	(r358875)
+++ stable/9/sys/dev/usb/usb_hub.c	Wed Mar 11 08:23:14 2020	(r358876)
@@ -646,7 +646,7 @@ repeat:
 		break;
 	case USB_SPEED_SUPER:
 		if (udev->parent_hub == NULL)
-			power_mask = UPS_PORT_POWER;
+			power_mask = 0;	/* XXX undefined */
 		else
 			power_mask = UPS_PORT_POWER_SS;
 		break;
@@ -654,7 +654,7 @@ repeat:
 		power_mask = 0;
 		break;
 	}
-	if (!(sc->sc_st.port_status & power_mask)) {
+	if ((sc->sc_st.port_status & power_mask) != power_mask) {
 		DPRINTF("WARNING: strange, connected port %d "
 		    "has no power\n", portno);
 	}


More information about the svn-src-all mailing list