Patch "usb: ohci: Default to per-port over-current protection" has been added to the 4.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    usb: ohci: Default to per-port over-current protection

to the 4.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     usb-ohci-default-to-per-port-over-current-protection.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 1444768bdc0b48d47676c2325cbec1afc4ed41e2
Author: Hamish Martin <hamish.martin@xxxxxxxxxxxxxxxxxxx>
Date:   Fri Sep 11 09:25:11 2020 +1200

    usb: ohci: Default to per-port over-current protection
    
    [ Upstream commit b77d2a0a223bc139ee8904991b2922d215d02636 ]
    
    Some integrated OHCI controller hubs do not expose all ports of the hub
    to pins on the SoC. In some cases the unconnected ports generate
    spurious over-current events. For example the Broadcom 56060/Ranger 2 SoC
    contains a nominally 3 port hub but only the first port is wired.
    
    Default behaviour for ohci-platform driver is to use global over-current
    protection mode (AKA "ganged"). This leads to the spurious over-current
    events affecting all ports in the hub.
    
    We now alter the default to use per-port over-current protection.
    
    This patch results in the following configuration changes depending
    on quirks:
    - For quirk OHCI_QUIRK_SUPERIO no changes. These systems remain set up
      for ganged power switching and no over-current protection.
    - For quirk OHCI_QUIRK_AMD756 or OHCI_QUIRK_HUB_POWER power switching
      remains at none, while over-current protection is now guaranteed to be
      set to per-port rather than the previous behaviour where it was either
      none or global over-current protection depending on the value at
      function entry.
    
    Suggested-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
    Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Hamish Martin <hamish.martin@xxxxxxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20200910212512.16670-1-hamish.martin@xxxxxxxxxxxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 27bd3e49fe8e3..07d76d9d4ce1b 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -663,20 +663,24 @@ static int ohci_run (struct ohci_hcd *ohci)
 
 	/* handle root hub init quirks ... */
 	val = roothub_a (ohci);
-	val &= ~(RH_A_PSM | RH_A_OCPM);
+	/* Configure for per-port over-current protection by default */
+	val &= ~RH_A_NOCP;
+	val |= RH_A_OCPM;
 	if (ohci->flags & OHCI_QUIRK_SUPERIO) {
-		/* NSC 87560 and maybe others */
+		/* NSC 87560 and maybe others.
+		 * Ganged power switching, no over-current protection.
+		 */
 		val |= RH_A_NOCP;
-		val &= ~(RH_A_POTPGT | RH_A_NPS);
-		ohci_writel (ohci, val, &ohci->regs->roothub.a);
+		val &= ~(RH_A_POTPGT | RH_A_NPS | RH_A_PSM | RH_A_OCPM);
 	} else if ((ohci->flags & OHCI_QUIRK_AMD756) ||
 			(ohci->flags & OHCI_QUIRK_HUB_POWER)) {
 		/* hub power always on; required for AMD-756 and some
-		 * Mac platforms.  ganged overcurrent reporting, if any.
+		 * Mac platforms.
 		 */
 		val |= RH_A_NPS;
-		ohci_writel (ohci, val, &ohci->regs->roothub.a);
 	}
+	ohci_writel(ohci, val, &ohci->regs->roothub.a);
+
 	ohci_writel (ohci, RH_HS_LPSC, &ohci->regs->roothub.status);
 	ohci_writel (ohci, (val & RH_A_NPS) ? 0 : RH_B_PPCM,
 						&ohci->regs->roothub.b);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux