diff mbox

[2/4] serial: omap: enable PM runtime only when its fully configured

Message ID 1374487277-26099-3-git-send-email-rnayak@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Rajendra Nayak July 22, 2013, 10:01 a.m. UTC
From: Grygorii Strashko <grygorii.strashko@ti.com>

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>

Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
---
 drivers/tty/serial/omap-serial.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Paul Walmsley July 29, 2013, 8:44 a.m. UTC | #1
Rajendra,

On Mon, 22 Jul 2013, Rajendra Nayak wrote:

> From: Grygorii Strashko <grygorii.strashko@ti.com>
> 
> 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:

...

> CC: Tony Lindgren <tony@atomide.com>
> CC: Rajendra Nayak <rnayak@ti.com>
> CC: Felipe Balbi <balbi@ti.com>
> CC: Kevin Hilman <khilman@linaro.org>
> 
> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>

Did you intend to add your Signed-off-by: to this patch?  Since you're 
formally submitting it, it needs to have your Signed-off-by: for me to 
take it.  Let me know and I'll add it if needed -

- Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rajendra Nayak July 29, 2013, 8:50 a.m. UTC | #2
On Monday 29 July 2013 02:14 PM, Paul Walmsley wrote:
> Rajendra,
> 
> On Mon, 22 Jul 2013, Rajendra Nayak wrote:
> 
>> From: Grygorii Strashko <grygorii.strashko@ti.com>
>>
>> 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:
> 
> ...
> 
>> CC: Tony Lindgren <tony@atomide.com>
>> CC: Rajendra Nayak <rnayak@ti.com>
>> CC: Felipe Balbi <balbi@ti.com>
>> CC: Kevin Hilman <khilman@linaro.org>
>>
>> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
> 
> Did you intend to add your Signed-off-by: to this patch?  Since you're 
> formally submitting it, it needs to have your Signed-off-by: for me to 
> take it.  Let me know and I'll add it if needed -

Sorry about that Paul. I indeed missed adding my SoB for this one.

Signed-off-by: Rajendra Nayak <rnayak@ti.com>

> 
> - Paul
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rajendra Nayak July 30, 2013, 5:16 a.m. UTC | #3
On Monday 29 July 2013 02:20 PM, Rajendra Nayak wrote:
> On Monday 29 July 2013 02:14 PM, Paul Walmsley wrote:
>> Rajendra,
>>
>> On Mon, 22 Jul 2013, Rajendra Nayak wrote:
>>
>>> From: Grygorii Strashko <grygorii.strashko@ti.com>
>>>
>>> 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:
>>
>> ...
>>
>>> CC: Tony Lindgren <tony@atomide.com>
>>> CC: Rajendra Nayak <rnayak@ti.com>
>>> CC: Felipe Balbi <balbi@ti.com>
>>> CC: Kevin Hilman <khilman@linaro.org>
>>>
>>> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
>>
>> Did you intend to add your Signed-off-by: to this patch?  Since you're 
>> formally submitting it, it needs to have your Signed-off-by: for me to 
>> take it.  Let me know and I'll add it if needed -
> 
> Sorry about that Paul. I indeed missed adding my SoB for this one.
> 
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>

Paul,

Looks like this one is already been queued by Greg.

regards,
Rajendra

> 
>>
>> - Paul
>>
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Paul Walmsley July 30, 2013, 10:20 a.m. UTC | #4
On Tue, 30 Jul 2013, Rajendra Nayak wrote:

> Looks like this one is already been queued by Greg.

OK, thanks for letting me know; I've dropped it.

- Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index b6d1728..f39bf0c 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -1501,7 +1501,6 @@  static int serial_omap_probe(struct platform_device *pdev)
 	INIT_WORK(&up->qos_work, serial_omap_uart_qos_work);
 
 	platform_set_drvdata(pdev, up);
-	pm_runtime_enable(&pdev->dev);
 	if (omap_up_info->autosuspend_timeout == 0)
 		omap_up_info->autosuspend_timeout = -1;
 	device_init_wakeup(up->dev, true);
@@ -1510,6 +1509,8 @@  static int serial_omap_probe(struct platform_device *pdev)
 			omap_up_info->autosuspend_timeout);
 
 	pm_runtime_irq_safe(&pdev->dev);
+	pm_runtime_enable(&pdev->dev);
+
 	pm_runtime_get_sync(&pdev->dev);
 
 	omap_serial_fill_features_erratas(up);