aboutsummaryrefslogtreecommitdiffstats
path: root/patches/1447-xhci-change-xhci_set_link_state-to-work-with-port-st.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/1447-xhci-change-xhci_set_link_state-to-work-with-port-st.patch')
-rw-r--r--patches/1447-xhci-change-xhci_set_link_state-to-work-with-port-st.patch163
1 files changed, 163 insertions, 0 deletions
diff --git a/patches/1447-xhci-change-xhci_set_link_state-to-work-with-port-st.patch b/patches/1447-xhci-change-xhci_set_link_state-to-work-with-port-st.patch
new file mode 100644
index 00000000000000..e34b7eb6e17a1c
--- /dev/null
+++ b/patches/1447-xhci-change-xhci_set_link_state-to-work-with-port-st.patch
@@ -0,0 +1,163 @@
+From 0251503d5d7b9e01f59702d87ec5d1f3744aaa16 Mon Sep 17 00:00:00 2001
+From: Mathias Nyman <mathias.nyman@linux.intel.com>
+Date: Mon, 21 May 2018 16:39:59 +0300
+Subject: [PATCH 1447/1795] xhci: change xhci_set_link_state() to work with
+ port structures
+
+Remove old iomem port array and index as parameters, just
+send a ponter to a port strucure instread
+
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+(cherry picked from commit 6b7f40f712344ec8fdca10450834825094e797fb)
+Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
+Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
+---
+ drivers/usb/host/xhci-hub.c | 34 ++++++++++++++++------------------
+ drivers/usb/host/xhci-ring.c | 3 +--
+ drivers/usb/host/xhci.h | 4 ++--
+ 3 files changed, 19 insertions(+), 22 deletions(-)
+
+diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
+index 372b4486c52a..e3be8d15c078 100644
+--- a/drivers/usb/host/xhci-hub.c
++++ b/drivers/usb/host/xhci-hub.c
+@@ -678,16 +678,16 @@ static int xhci_exit_test_mode(struct xhci_hcd *xhci)
+ return xhci_reset(xhci);
+ }
+
+-void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array,
+- int port_id, u32 link_state)
++void xhci_set_link_state(struct xhci_hcd *xhci, struct xhci_port *port,
++ u32 link_state)
+ {
+ u32 temp;
+
+- temp = readl(port_array[port_id]);
++ temp = readl(port->addr);
+ temp = xhci_port_state_to_neutral(temp);
+ temp &= ~PORT_PLS_MASK;
+ temp |= PORT_LINK_STROBE | link_state;
+- writel(temp, port_array[port_id]);
++ writel(temp, port->addr);
+ }
+
+ static void xhci_set_remote_wake_mask(struct xhci_hcd *xhci,
+@@ -932,8 +932,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
+
+ xhci_test_and_clear_bit(xhci, port_array, wIndex,
+ PORT_PLC);
+- xhci_set_link_state(xhci, port_array, wIndex,
+- XDEV_U0);
++ xhci_set_link_state(xhci, port, XDEV_U0);
+
+ spin_unlock_irqrestore(&xhci->lock, flags);
+ time_left = wait_for_completion_timeout(
+@@ -1142,7 +1141,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ temp = readl(ports[wIndex]->addr);
+ if ((temp & PORT_PLS_MASK) != XDEV_U0) {
+ /* Resume the port to U0 first */
+- xhci_set_link_state(xhci, port_array, wIndex,
++ xhci_set_link_state(xhci, ports[wIndex],
+ XDEV_U0);
+ spin_unlock_irqrestore(&xhci->lock, flags);
+ msleep(10);
+@@ -1170,7 +1169,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ xhci_stop_device(xhci, slot_id, 1);
+ spin_lock_irqsave(&xhci->lock, flags);
+
+- xhci_set_link_state(xhci, port_array, wIndex, XDEV_U3);
++ xhci_set_link_state(xhci, ports[wIndex], XDEV_U3);
+
+ spin_unlock_irqrestore(&xhci->lock, flags);
+ msleep(10); /* wait device to enter */
+@@ -1200,8 +1199,8 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ /* Put link in RxDetect (enable port) */
+ if (link_state == USB_SS_PORT_LS_RX_DETECT) {
+ xhci_dbg(xhci, "Enable port %d\n", wIndex);
+- xhci_set_link_state(xhci, port_array, wIndex,
+- link_state);
++ xhci_set_link_state(xhci, ports[wIndex],
++ link_state);
+ temp = readl(ports[wIndex]->addr);
+ break;
+ }
+@@ -1233,8 +1232,9 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+
+ xhci_dbg(xhci, "Enable compliance mode transition for port %d\n",
+ wIndex);
+- xhci_set_link_state(xhci, port_array, wIndex,
++ xhci_set_link_state(xhci, ports[wIndex],
+ link_state);
++
+ temp = readl(ports[wIndex]->addr);
+ break;
+ }
+@@ -1262,8 +1262,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ }
+ }
+
+- xhci_set_link_state(xhci, port_array, wIndex,
+- link_state);
++ xhci_set_link_state(xhci, ports[wIndex], link_state);
+
+ spin_unlock_irqrestore(&xhci->lock, flags);
+ msleep(20); /* wait device to enter */
+@@ -1357,12 +1356,12 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
+ goto error;
+
+ set_bit(wIndex, &bus_state->resuming_ports);
+- xhci_set_link_state(xhci, port_array, wIndex,
+- XDEV_RESUME);
++ xhci_set_link_state(xhci, ports[wIndex],
++ XDEV_RESUME);
+ spin_unlock_irqrestore(&xhci->lock, flags);
+ msleep(USB_RESUME_TIMEOUT);
+ spin_lock_irqsave(&xhci->lock, flags);
+- xhci_set_link_state(xhci, port_array, wIndex,
++ xhci_set_link_state(xhci, ports[wIndex],
+ XDEV_U0);
+ clear_bit(wIndex, &bus_state->resuming_ports);
+ }
+@@ -1676,8 +1675,7 @@ int xhci_bus_resume(struct usb_hcd *hcd)
+ /* Clear PLC to poll it later for U0 transition */
+ xhci_test_and_clear_bit(xhci, port_array, port_index,
+ PORT_PLC);
+- xhci_set_link_state(xhci, port_array, port_index,
+- XDEV_U0);
++ xhci_set_link_state(xhci, ports[port_index], XDEV_U0);
+ }
+ }
+
+diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
+index 31b72133d7a3..6e4211eea0e2 100644
+--- a/drivers/usb/host/xhci-ring.c
++++ b/drivers/usb/host/xhci-ring.c
+@@ -1591,8 +1591,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
+ bus_state->port_remote_wakeup |= 1 << hcd_portnum;
+ xhci_test_and_clear_bit(xhci, port_array,
+ hcd_portnum, PORT_PLC);
+- xhci_set_link_state(xhci, port_array, hcd_portnum,
+- XDEV_U0);
++ xhci_set_link_state(xhci, port, XDEV_U0);
+ /* Need to wait until the next link state change
+ * indicates the device is actually in U0.
+ */
+diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
+index d90b97ec20a2..11f8f747fe56 100644
+--- a/drivers/usb/host/xhci.h
++++ b/drivers/usb/host/xhci.h
+@@ -2106,8 +2106,8 @@ void inc_deq(struct xhci_hcd *xhci, struct xhci_ring *ring);
+ unsigned int count_trbs(u64 addr, u64 len);
+
+ /* xHCI roothub code */
+-void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array,
+- int port_id, u32 link_state);
++void xhci_set_link_state(struct xhci_hcd *xhci, struct xhci_port *port,
++ u32 link_state);
+ void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array,
+ int port_id, u32 port_bit);
+ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex,
+--
+2.19.0
+