• Simon Glass's avatar
    serial: Fix wakeup init logic to speed up startup · 77359835
    Simon Glass authored
    The synchronize_rcu() call resulting from making every serial driver
    wake-up capable (commit b3b708fa) slows boot down on my Tegra2x system
    (with CONFIG_PREEMPT disabled).
    
    But this is avoidable since it is the device_set_wakeup_enable() and then
    subsequence disable which causes the delay. We might as well just make
    the device wakeup capable but not actually enable it for wakeup until
    needed.
    
    Effectively the current code does this:
    
    	device_set_wakeup_capable(dev, 1);
    	device_set_wakeup_enable(dev, 1);
    	device_set_wakeup_enable(dev, 0);
    
    We can just drop the last two lines.
    
    Before this change my boot log says:
    [    0.227062] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
    [    0.702928] serial8250.0: ttyS0 at MMIO 0x70006040 (irq = 69) is a Tegra
    
    after:
    [    0.227264] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
    [    0.227983] serial8250.0: ttyS0 at MMIO 0x70006040 (irq = 69) is a Tegra
    
    for saving of 450ms.
    Suggested-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Acked-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    77359835
serial_core.c 63 KB