]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
xHCI: warm reset support
authorAndiry Xu <andiry.xu@amd.com>
Wed, 27 Apr 2011 10:07:29 +0000 (18:07 +0800)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 2 May 2011 23:42:51 +0000 (16:42 -0700)
This patch adds warm reset support to xhci hub control.
It handles Set Port Feature(BH_PORT_RESET) and Clear Port Feature
(C_BH_PORT_RESET) request from usbcore.
Note warm reset is called BH reset some places in USB3.0 specification.

Signed-off-by: Andiry Xu <andiry.xu@amd.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/host/xhci-hub.c

index ae1d24cb930332bf649b9bdf02fd42b8bc1c2580..1ab7f2e2c05f61b4a34e69960375dda4369a18d1 100644 (file)
@@ -341,6 +341,10 @@ static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue,
                status = PORT_RC;
                port_change_bit = "reset";
                break;
+       case USB_PORT_FEAT_C_BH_PORT_RESET:
+               status = PORT_WRC;
+               port_change_bit = "warm(BH) reset";
+               break;
        case USB_PORT_FEAT_C_CONNECTION:
                status = PORT_CSC;
                port_change_bit = "connect";
@@ -557,6 +561,12 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
                        temp = xhci_readl(xhci, port_array[wIndex]);
                        xhci_dbg(xhci, "set port reset, actual port %d status  = 0x%x\n", wIndex, temp);
                        break;
+               case USB_PORT_FEAT_BH_PORT_RESET:
+                       temp |= PORT_WR;
+                       xhci_writel(xhci, temp, port_array[wIndex]);
+
+                       temp = xhci_readl(xhci, port_array[wIndex]);
+                       break;
                default:
                        goto error;
                }
@@ -625,6 +635,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
                case USB_PORT_FEAT_C_SUSPEND:
                        bus_state->port_c_suspend &= ~(1 << wIndex);
                case USB_PORT_FEAT_C_RESET:
+               case USB_PORT_FEAT_C_BH_PORT_RESET:
                case USB_PORT_FEAT_C_CONNECTION:
                case USB_PORT_FEAT_C_OVER_CURRENT:
                case USB_PORT_FEAT_C_ENABLE: