All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rajendra Nayak <rnayak@ti.com>
To: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: balbi@ti.com, Tony Lindgren <tony@atomide.com>,
	Kevin Hilman <khilman@linaro.org>,
	"Bedia, Vaibhav" <vaibhav.bedia@ti.com>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	Mark Jackson <mpfj-list@newflow.co.uk>,
	Sourav Poddar <sourav.poddar@ti.com>,
	Paul Walmsley <paul@pwsan.com>
Subject: Re: Boot hang regression 3.10.0-rc4 -> 3.10.0
Date: Wed, 17 Jul 2013 12:40:39 +0530	[thread overview]
Message-ID: <51E6436F.5010301@ti.com> (raw)
In-Reply-To: <51E51FF6.60608@ti.com>

On Tuesday 16 July 2013 03:57 PM, Grygorii Strashko wrote:
> Hi Rajendra,
> 
> On 07/11/2013 12:17 PM, Rajendra Nayak wrote:
>> On Wednesday 10 July 2013 09:37 PM, Felipe Balbi wrote:
>>> how about something like below ? It makes omap_device/hwmod and
>>> pm_runtime agree on the initial state of the device and will prevent
>>> ->runtime_resume() from being called on first pm_runtime_get*() done
>>> during probe.
>>>
>>> This is similar to what PCI bus does (if you look at pci_pm_init()).
>>
>> I tried something similar [1] but what I found is that the serial
>> runtime resume was called despite it being marked as active using
>> pm_runtime_set_active().
>>
>> That seems to be because of the pm_runtime_set_autosuspend_delay()
>> because we have the autosuspend_delay = -1
>>
>> -----
>> static void update_autosuspend(struct device *dev, int old_delay, int old_use)
>> {
>>          int delay = dev->power.autosuspend_delay;
>>
>>          /* Should runtime suspend be prevented now? */
>>          if (dev->power.use_autosuspend && delay < 0) {
>>
>>                  /* If it used to be allowed then prevent it. */
>>                  if (!old_use || old_delay >= 0) {
>>                          atomic_inc(&dev->power.usage_count);
>>                          rpm_resume(dev, 0); <------------------------------- calls serial runtime resume.
>>                  }
>>          }
>> -----
>>
>> So we end up with the same issue with serial resume being called before set_termios()
>>
>> [1]
>>
>> diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
>> index 5cc9287..c71d47d 100644
>> --- a/arch/arm/mach-omap2/omap_device.c
>> +++ b/arch/arm/mach-omap2/omap_device.c
>> @@ -129,6 +129,7 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
>>          struct device_node *node = pdev->dev.of_node;
>>          const char *oh_name;
>>          int oh_cnt, i, ret = 0;
>> +       bool device_active = false;
>>
>>          oh_cnt = of_property_count_strings(node, "ti,hwmods");
>>          if (oh_cnt <= 0) {
>> @@ -152,6 +153,9 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
>>                          goto odbfd_exit1;
>>                  }
>>                  hwmods[i] = oh;
>> +               if (oh->flags & HWMOD_INIT_NO_IDLE)
>> +                       device_active = true;
>> +
>>          }
>>
>>          od = omap_device_alloc(pdev, hwmods, oh_cnt);
>> @@ -172,6 +176,11 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
>>
>>          pdev->dev.pm_domain = &omap_device_pm_domain;
>>
>> +       if (device_active) {
>> +               omap_device_enable(pdev);
>> +               pm_runtime_set_active(&pdev->dev);
>> +       }
>> +
>>   odbfd_exit1:
>>          kfree(hwmods);
>>   odbfd_exit:
> 
> This solution works good for me in combination with
> "serial: omap: enable PM runtime only when its fully configured"
> http://www.spinics.net/lists/linux-serial/msg10317.html
> (earlyprintk use case)
> 
> And I think the best way would be to move forward with yours solution.
> - it will affect only on needed IPs drivers - not on all, so no issues with iommu and etc.

Ok, good to know that this solution works. Anyone has any other thoughts on whats the best
way to fix this for the -rcs? (Note that we have bootup broken on all OMAPs with DEBUG_LL
for now, atleast for all DT only platforms)

The other option of course is to use the patch posted by Felipe [1], thought that had issues
handling processor IPs as pointed out by Grygorii and Suman [2], the fix I posted [3] to make
omap_device aware of hwmod bypassing these IPs might fix some of those, but this solution in
general would need more testing as it affects all modules on the bus.

[1] http://www.spinics.net/lists/arm-kernel/msg258062.html
[2] http://www.spinics.net/lists/arm-kernel/msg258061.html
[3] http://www.spinics.net/lists/arm-kernel/msg258465.html

> 
> But issue with *non console" UARTs will still be here and, I think,
> there are no way ti solve it from OMAP device/hwmod frameworks side,
> because only driver can know when his context is ready.
> To test do: #echo 0xDEAD > dev/ttyO3
> 
> Regards,
> -grygorii


WARNING: multiple messages have this Message-ID (diff)
From: rnayak@ti.com (Rajendra Nayak)
To: linux-arm-kernel@lists.infradead.org
Subject: Boot hang regression 3.10.0-rc4 -> 3.10.0
Date: Wed, 17 Jul 2013 12:40:39 +0530	[thread overview]
Message-ID: <51E6436F.5010301@ti.com> (raw)
In-Reply-To: <51E51FF6.60608@ti.com>

On Tuesday 16 July 2013 03:57 PM, Grygorii Strashko wrote:
> Hi Rajendra,
> 
> On 07/11/2013 12:17 PM, Rajendra Nayak wrote:
>> On Wednesday 10 July 2013 09:37 PM, Felipe Balbi wrote:
>>> how about something like below ? It makes omap_device/hwmod and
>>> pm_runtime agree on the initial state of the device and will prevent
>>> ->runtime_resume() from being called on first pm_runtime_get*() done
>>> during probe.
>>>
>>> This is similar to what PCI bus does (if you look at pci_pm_init()).
>>
>> I tried something similar [1] but what I found is that the serial
>> runtime resume was called despite it being marked as active using
>> pm_runtime_set_active().
>>
>> That seems to be because of the pm_runtime_set_autosuspend_delay()
>> because we have the autosuspend_delay = -1
>>
>> -----
>> static void update_autosuspend(struct device *dev, int old_delay, int old_use)
>> {
>>          int delay = dev->power.autosuspend_delay;
>>
>>          /* Should runtime suspend be prevented now? */
>>          if (dev->power.use_autosuspend && delay < 0) {
>>
>>                  /* If it used to be allowed then prevent it. */
>>                  if (!old_use || old_delay >= 0) {
>>                          atomic_inc(&dev->power.usage_count);
>>                          rpm_resume(dev, 0); <------------------------------- calls serial runtime resume.
>>                  }
>>          }
>> -----
>>
>> So we end up with the same issue with serial resume being called before set_termios()
>>
>> [1]
>>
>> diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
>> index 5cc9287..c71d47d 100644
>> --- a/arch/arm/mach-omap2/omap_device.c
>> +++ b/arch/arm/mach-omap2/omap_device.c
>> @@ -129,6 +129,7 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
>>          struct device_node *node = pdev->dev.of_node;
>>          const char *oh_name;
>>          int oh_cnt, i, ret = 0;
>> +       bool device_active = false;
>>
>>          oh_cnt = of_property_count_strings(node, "ti,hwmods");
>>          if (oh_cnt <= 0) {
>> @@ -152,6 +153,9 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
>>                          goto odbfd_exit1;
>>                  }
>>                  hwmods[i] = oh;
>> +               if (oh->flags & HWMOD_INIT_NO_IDLE)
>> +                       device_active = true;
>> +
>>          }
>>
>>          od = omap_device_alloc(pdev, hwmods, oh_cnt);
>> @@ -172,6 +176,11 @@ static int omap_device_build_from_dt(struct platform_device *pdev)
>>
>>          pdev->dev.pm_domain = &omap_device_pm_domain;
>>
>> +       if (device_active) {
>> +               omap_device_enable(pdev);
>> +               pm_runtime_set_active(&pdev->dev);
>> +       }
>> +
>>   odbfd_exit1:
>>          kfree(hwmods);
>>   odbfd_exit:
> 
> This solution works good for me in combination with
> "serial: omap: enable PM runtime only when its fully configured"
> http://www.spinics.net/lists/linux-serial/msg10317.html
> (earlyprintk use case)
> 
> And I think the best way would be to move forward with yours solution.
> - it will affect only on needed IPs drivers - not on all, so no issues with iommu and etc.

Ok, good to know that this solution works. Anyone has any other thoughts on whats the best
way to fix this for the -rcs? (Note that we have bootup broken on all OMAPs with DEBUG_LL
for now, atleast for all DT only platforms)

The other option of course is to use the patch posted by Felipe [1], thought that had issues
handling processor IPs as pointed out by Grygorii and Suman [2], the fix I posted [3] to make
omap_device aware of hwmod bypassing these IPs might fix some of those, but this solution in
general would need more testing as it affects all modules on the bus.

[1] http://www.spinics.net/lists/arm-kernel/msg258062.html
[2] http://www.spinics.net/lists/arm-kernel/msg258061.html
[3] http://www.spinics.net/lists/arm-kernel/msg258465.html

> 
> But issue with *non console" UARTs will still be here and, I think,
> there are no way ti solve it from OMAP device/hwmod frameworks side,
> because only driver can know when his context is ready.
> To test do: #echo 0xDEAD > dev/ttyO3
> 
> Regards,
> -grygorii

  reply	other threads:[~2013-07-17  7:11 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-04 13:25 Boot hang regression 3.10.0-rc4 -> 3.10.0 Mark Jackson
2013-07-04 13:25 ` Mark Jackson
2013-07-04 15:14 ` Mark Jackson
2013-07-04 15:14   ` Mark Jackson
2013-07-04 16:00   ` Mark Jackson
2013-07-04 16:00     ` Mark Jackson
2013-07-05  8:11     ` Bedia, Vaibhav
2013-07-05  8:11       ` Bedia, Vaibhav
2013-07-05 11:59       ` Tony Lindgren
2013-07-05 11:59         ` Tony Lindgren
2013-07-05 13:20         ` Bedia, Vaibhav
2013-07-05 13:20           ` Bedia, Vaibhav
2013-07-05 13:31           ` Bedia, Vaibhav
2013-07-05 13:31             ` Bedia, Vaibhav
2013-07-08 11:25             ` Tony Lindgren
2013-07-08 11:25               ` Tony Lindgren
2013-07-08 12:16               ` Tony Lindgren
2013-07-08 12:16                 ` Tony Lindgren
2013-07-08 12:41               ` Rajendra Nayak
2013-07-08 12:41                 ` Rajendra Nayak
2013-07-08 13:10                 ` Tony Lindgren
2013-07-08 13:10                   ` Tony Lindgren
2013-07-08 13:20                   ` Rajendra Nayak
2013-07-08 13:20                     ` Rajendra Nayak
2013-07-08 13:25                     ` Rajendra Nayak
2013-07-08 13:25                       ` Rajendra Nayak
2013-07-08 13:35                     ` Felipe Balbi
2013-07-08 13:35                       ` Felipe Balbi
2013-07-09  5:33                       ` Rajendra Nayak
2013-07-09  5:33                         ` Rajendra Nayak
2013-07-09  6:42                         ` Felipe Balbi
2013-07-09  6:42                           ` Felipe Balbi
2013-07-09  7:19                           ` Rajendra Nayak
2013-07-09  7:19                             ` Rajendra Nayak
2013-07-09  7:40                             ` Felipe Balbi
2013-07-09  7:40                               ` Felipe Balbi
2013-07-09 18:59                           ` Grygorii Strashko
2013-07-09 18:59                             ` Grygorii Strashko
2013-07-09 19:41                             ` Felipe Balbi
2013-07-09 19:41                               ` Felipe Balbi
2013-07-10 12:16                               ` Grygorii Strashko
2013-07-10 12:16                                 ` Grygorii Strashko
2013-07-10 12:25                                 ` Felipe Balbi
2013-07-10 12:25                                   ` Felipe Balbi
2013-07-10  8:22                       ` Kevin Hilman
2013-07-10  8:22                         ` Kevin Hilman
2013-07-10 12:10                         ` Tony Lindgren
2013-07-10 12:10                           ` Tony Lindgren
2013-07-10 12:27                           ` Tony Lindgren
2013-07-10 12:27                             ` Tony Lindgren
2013-07-10 14:26                         ` Tony Lindgren
2013-07-10 14:26                           ` Tony Lindgren
2013-07-10 16:07                           ` Felipe Balbi
2013-07-10 16:07                             ` Felipe Balbi
2013-07-10 16:11                             ` Felipe Balbi
2013-07-10 16:11                               ` Felipe Balbi
2013-07-11  6:32                               ` Tony Lindgren
2013-07-11  6:32                                 ` Tony Lindgren
2013-07-11  9:59                                 ` Grygorii Strashko
2013-07-11  9:59                                   ` Grygorii Strashko
2013-07-12  0:40                                   ` Suman Anna
2013-07-12  0:40                                     ` Suman Anna
2013-07-15  6:44                                     ` Rajendra Nayak
2013-07-15  6:44                                       ` Rajendra Nayak
2013-07-15 10:01                                       ` Rajendra Nayak
2013-07-15 10:01                                         ` Rajendra Nayak
2013-07-15 19:23                                         ` Suman Anna
2013-07-15 19:23                                           ` Suman Anna
2013-07-16  6:30                                           ` Rajendra Nayak
2013-07-16  6:30                                             ` Rajendra Nayak
2013-07-11  9:17                             ` Rajendra Nayak
2013-07-11  9:17                               ` Rajendra Nayak
2013-07-11  9:26                               ` Felipe Balbi
2013-07-11  9:26                                 ` Felipe Balbi
2013-07-11 10:16                                 ` [PATCH] arm: omap2plus: unidle devices which are about to probe Felipe Balbi
2013-07-11 10:16                                   ` Felipe Balbi
2013-07-12 11:58                                   ` Grygorii Strashko
2013-07-12 11:58                                     ` Grygorii Strashko
2013-07-12 12:10                                     ` Felipe Balbi
2013-07-12 12:10                                       ` Felipe Balbi
2013-07-12 12:27                                       ` Rajendra Nayak
2013-07-12 12:27                                         ` Rajendra Nayak
2013-07-13 22:21                                   ` Kevin Hilman
2013-07-13 22:21                                     ` Kevin Hilman
2013-07-11  9:59                               ` Boot hang regression 3.10.0-rc4 -> 3.10.0 Grygorii Strashko
2013-07-11  9:59                                 ` Grygorii Strashko
2013-07-16 10:27                               ` Grygorii Strashko
2013-07-16 10:27                                 ` Grygorii Strashko
2013-07-17  7:10                                 ` Rajendra Nayak [this message]
2013-07-17  7:10                                   ` Rajendra Nayak
2013-07-11  6:18                           ` Rajendra Nayak
2013-07-11  6:18                             ` Rajendra Nayak
2013-07-11  6:24                             ` Tony Lindgren
2013-07-11  6:24                               ` Tony Lindgren
2013-07-11  9:11                               ` Rajendra Nayak
2013-07-11  9:11                                 ` Rajendra Nayak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51E6436F.5010301@ti.com \
    --to=rnayak@ti.com \
    --cc=balbi@ti.com \
    --cc=grygorii.strashko@ti.com \
    --cc=khilman@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=mpfj-list@newflow.co.uk \
    --cc=paul@pwsan.com \
    --cc=sourav.poddar@ti.com \
    --cc=tony@atomide.com \
    --cc=vaibhav.bedia@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.