• Grygorii Strashko's avatar
    serial: omap: enable PM runtime only when its fully configured · 3026d14a
    Grygorii Strashko authored
    If earlyprintk is enabled and current UART is console port the platform
    code can mark it as RPM_ACTIVE to sync real IP state with PM Runtime and
    avoid resuming of already active device, but now, driver initialization
    will be performed in the wrong way:
    
    	pm_runtime_enable(&pdev->dev);
        <-- PM runtime alowed (device state RPM_ACTIVE)
    	if (omap_up_info->autosuspend_timeout == 0)
    		omap_up_info->autosuspend_timeout = -1;
    	device_init_wakeup(up->dev, true);
    	pm_runtime_use_autosuspend(&pdev->dev);
    	<-- update_autosuspend() will be called and it will disable device
            (device state RPM_SUSPENDED)
    	pm_runtime_set_autosuspend_delay(&pdev->dev,
    			omap_up_info->autosuspend_timeout);
    	<-- update_autosuspend() will be called which will re-enable device
            (device state RPM_ACTIVE), because autosuspend_timeout < 0
    
    	pm_runtime_irq_safe(&pdev->dev);
    	pm_runtime_get_sync(&pdev->dev);
    	<-- will do nothing
    
    Such behavior isn't expected by OMAP serial drivers and causes
    unpredictable calls of serial_omap_runtime_suspend() and
    serial_omap_runtime_resume().
    
    Hence, fix it by allowing PM runtime only after all its parameters are
    configured.
    
    CC: Tony Lindgren <tony@atomide.com>
    CC: Rajendra Nayak <rnayak@ti.com>
    CC: Felipe Balbi <balbi@ti.com>
    CC: Kevin Hilman <khilman@linaro.org>
    Tested-by: default avatarMark Jackson <mpfj-list@newflow.co.uk>
    Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3026d14a
omap-serial.c 43.7 KB