• Ning Jiang's avatar
    serial-core: power up uart port early before we do set_termios when resuming · 3e9efdd4
    Ning Jiang authored
    commit 94abc56f upstream.
    
    The following patch removed uart_change_pm() in uart_resume_port():
    
    commit 5933a161
    Author: Yin Kangkai <kangkai.yin@linux.intel.com>
        serial-core: reset the console speed on resume
    
    It will break the pxa serial driver when the system resumes from suspend mode
    as it will try to set baud rate divider register in set_termios but with
    clock off. The register value can not be set correctly on some platform if
    the clock is disabled. The pxa driver will check the value and report the
    following warning:
    
    ------------[ cut here ]------------
    WARNING: at drivers/tty/serial/pxa.c:545 serial_pxa_set_termios+0x1dc/0x250()
    Modules linked in:
    [<c0281f30>] (unwind_backtrace+0x0/0xf0) from [<c029341c>] (warn_slowpath_common+0x4c/0x64)
    [<c029341c>] (warn_slowpath_common+0x4c/0x64) from [<c029344c>] (warn_slowpath_null+0x18/0x1c)
    [<c029344c>] (warn_slowpath_null+0x18/0x1c) from [<c044b1e4>] (serial_pxa_set_termios+0x1dc/0x250)
    [<c044b1e4>] (serial_pxa_set_termios+0x1dc/0x250) from [<c044a840>] (uart_resume_port+0x128/0x2dc)
    [<c044a840>] (uart_resume_port+0x128/0x2dc) from [<c044bbe0>] (serial_pxa_resume+0x18/0x24)
    [<c044bbe0>] (serial_pxa_resume+0x18/0x24) from [<c0454d34>] (platform_pm_resume+0x40/0x4c)
    [<c0454d34>] (platform_pm_resume+0x40/0x4c) from [<c0457ebc>] (pm_op+0x68/0xb4)
    [<c0457ebc>] (pm_op+0x68/0xb4) from [<c0458368>] (device_resume+0xb0/0xec)
    [<c0458368>] (device_resume+0xb0/0xec) from [<c04584c8>] (dpm_resume+0xe0/0x194)
    [<c04584c8>] (dpm_resume+0xe0/0x194) from [<c0458588>] (dpm_resume_end+0xc/0x18)
    [<c0458588>] (dpm_resume_end+0xc/0x18) from [<c02c518c>] (suspend_devices_and_enter+0x16c/0x1ac)
    [<c02c518c>] (suspend_devices_and_enter+0x16c/0x1ac) from [<c02c5278>] (enter_state+0xac/0xdc)
    [<c02c5278>] (enter_state+0xac/0xdc) from [<c02c48ec>] (state_store+0xa0/0xbc)
    [<c02c48ec>] (state_store+0xa0/0xbc) from [<c0408f7c>] (kobj_attr_store+0x18/0x1c)
    [<c0408f7c>] (kobj_attr_store+0x18/0x1c) from [<c034a6a4>] (sysfs_write_file+0x108/0x140)
    [<c034a6a4>] (sysfs_write_file+0x108/0x140) from [<c02fb798>] (vfs_write+0xac/0x134)
    [<c02fb798>] (vfs_write+0xac/0x134) from [<c02fb8cc>] (sys_write+0x3c/0x68)
    [<c02fb8cc>] (sys_write+0x3c/0x68) from [<c027c700>] (ret_fast_syscall+0x0/0x2c)
    ---[ end trace 88289eceb4675b04 ]---
    
    This patch fix the problem by adding the power on opertion back for uart
    console when console_suspend_enabled is true.
    Signed-off-by: default avatarNing Jiang <ning.jiang@marvell.com>
    Tested-by: default avatarMayank Rana <mrana@codeaurora.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    3e9efdd4
serial_core.c 61.6 KB