| 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 |
| |