lkml.org 
[lkml]   [2016]   [Sep]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.7 028/143] usb: ehci: change order of register cleanup during shutdown
    Date
    4.7-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Marc Ohlf <ohlf@mkt-sys.de>

    commit bc337b51508beb2d039aff5074a76cfe1c212030 upstream.

    In ehci_turn_off_all_ports() all EHCI port registers are cleared to zero.
    On some hardware, this can lead to an system hang,
    when ehci_port_power() accesses the already cleared registers.

    This patch changes the order of cleanup.
    First call ehci_port_power() which respects the current bits in
    port status registers
    and afterwards cleanup the hard way by setting everything to zero.

    Signed-off-by: Marc Ohlf <ohlf@mkt-sys.de>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/host/ehci-hcd.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/drivers/usb/host/ehci-hcd.c
    +++ b/drivers/usb/host/ehci-hcd.c
    @@ -332,11 +332,11 @@ static void ehci_turn_off_all_ports(stru
    int port = HCS_N_PORTS(ehci->hcs_params);

    while (port--) {
    - ehci_writel(ehci, PORT_RWC_BITS,
    - &ehci->regs->port_status[port]);
    spin_unlock_irq(&ehci->lock);
    ehci_port_power(ehci, port, false);
    spin_lock_irq(&ehci->lock);
    + ehci_writel(ehci, PORT_RWC_BITS,
    + &ehci->regs->port_status[port]);
    }
    }


    \
     
     \ /
      Last update: 2016-09-17 09:58    [W:3.197 / U:0.500 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site