LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com> To: Johan Hovold <johan@kernel.org> Cc: Sebastian Reichel <sre@kernel.org>, "H. Nikolaus Schaller" <hns@goldelico.com>, Andreas Kemnade <andreas@kemnade.info>, Mark Rutland <mark.rutland@arm.com>, Arnd Bergmann <arnd@arndb.de>, Pavel Machek <pavel@ucw.cz>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@vger.kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Rob Herring <robh+dt@kernel.org>, linux-serial@vger.kernel.org, linux-omap@vger.kernel.org, linux-pm@vger.kernel.org, Andy Shevchenko <andy.shevchenko@gmail.com> Subject: Re: OMAP serial runtime PM and autosuspend (was: Re: [PATCH 4/7] dt-bindings: gnss: add u-blox binding)) Date: Thu, 24 May 2018 06:32:37 -0700 [thread overview] Message-ID: <20180524133237.GA98604@atomide.com> (raw) In-Reply-To: <20180524091742.GZ30172@localhost> * Johan Hovold <johan@kernel.org> [180524 09:20]: > On Mon, May 21, 2018 at 08:48:32AM -0700, Tony Lindgren wrote: > > > > Yes the bug for closed ports needs to be fixed for sure. > > I did some forensic on this and it seems this problem has "always" been > there. Specifically, closed ports have never been runtime suspended > unless a non-negative autosuspend delay has been set by user space since > fcdca75728ac ("ARM: OMAP2+: UART: Add runtime pm support for omap-serial > driver") which was merged seven years ago. > > So while it would certainly be nice to save some more power by default, > this would really be a new feature rather than a bug or regression fix > (which reduces the urgency for this issue somewhat too). Yes it's been there since the start. > > > > > 2. aggressive serial RPM, where the controller is allowed to > > > > > suspend while the port is open even though this may result in > > > > > lost characters when waking up on incoming data > > > > > > > > In this case it seems that the only thing needed is to just > > > > configure the autosuspend delay for the parent port. The use of > > > > -1 has been around since the start of runtime PM AFAIK, so maybe > > > > we should just document it. I guess we could also introduce > > > > pm_runtime_block_autoidle_unless_configured() :) > > > > > > The implications of a negative autosuspend delay are already documented > > > (in Documentation/power/runtime_pm.txt); it's just the omap drivers that > > > gets it wrong when trying to do things which aren't currently supported > > > (and never have been). > > > > > > So I still think we need a new mechanism for this. > > > > Well if you have some better mechanism in mind let's try it out. Short of > > sprinkling pm_runtime_force_suspend/resume calls all over, I'm out of ideas > > right now. > > Yeah, that would be too much of a hack and likely wouldn't work either > (and we really should do away with those _force calls altogether). > > I've been thinking a bit too much about this already, but it may be > possible to use the pm QoS framework for this. A resume latency can be > set through sysfs where "n/a" is defined to mean "no latency accepted" > (i.e. controller remains always-on while port is open) and "0" means > "any latency accepted" (i.e. omap aggressive serial RPM is allowed). Oh yeah, PM QoS might work here! > Now, implementing this may get a little tricky as we want to be able to > change this setting on the fly (consider consoles) and we need to figure > out the interaction with serdev (user space should probably not be > allowed to request a resume latency for ports used by serdev). It sounds like Andy Shevchenko has a series of patches that just might allow us to make this all generic for Linux serial framework. So adding Andy to Cc, I don't think he has posted all the patches yet. Andy, see the PM QoS comment above for console idling :) > I'd be happy to dig into this some more, but not in my spare time I'm > afraid. Indeed. > > > > > For normal ttys, we need a user-space interface for selecting between > > > > > the two, and for serdev we may want a way to select the RPM scheme from > > > > > within the kernel. > > > > > > > > > > Note that with my serdev controller runtime PM patch, serdev core could > > > > > always opt for aggressive PM (as by default serdev core holds an RPM > > > > > reference for the controller while the port is open). > > > > > > > > So if your serdev controller was to set the parent autosuspend > > > > delay on open() and set it back on close() this should work? > > > > > > Is it really the job of a serdev driver to set the autosuspend delay of > > > a parent controller? Isn't this somethings which depends on the > > > characteristics of the controller (possibly configurable by user space) > > > such as the cost of runtime suspending and resuming? > > > > Only in some cases will the serdev driver know it's safe to configure > > the parent controller. Configuring the parent controller from userspace > > works just fine as we've seen for years now. > > Yes, user space may override the default settings provided by the serial > driver, but a serdev driver, in contrast, knows nothing about the > underlying serial hardware. > > > > The patch I posted works with what we have today; if a parent serial > > > controller driver uses aggressive runtime PM by default or after having > > > been configured through sysfs to do so. > > > > Yeah let's stick with configuring the parent controller from userspace > > for now at least. > > Yep, status quo works for the time being (since this isn't a > regression). > > > > What I'm getting at here is that the delay should be set by the serial > > > driver implementing aggressive runtime PM. Then all we need is a > > > mechanism to determine whether an extra RPM reference should be taken at > > > tty open or not (configurable by user space, defaulting to yes). > > > > OK yeah some additional on/off switch seems to be missing here. > > As mentioned above, PM QoS resume latency may possibly be used, and > otherwise me may able to define a new (generic) QoS flag for this. Good idea. > > > Specifically, the serial drivers themselves would always use > > > autosuspend and not have to deal with supporting the two RPM schemes > > > (normal vs aggressive runtime PM). > > > > OK. So if I understand your idea right, we could have autosuspend timeout > > set to 3000ms in the 8250_omap.c but still default to RPM blocked? > > Then user can enable aggressive PM via /sys as desired, right? > > Not RPM blocked; the ports must always be able to suspend when the port > is closed. But user space should be able to enable the aggressive > (active) runtime PM via sysfs independently of the autosuspend delay, > yes. Yup OK, I like the PM QoS approach. Regards, Tony
next prev parent reply other threads:[~2018-05-24 13:32 UTC|newest] Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-04-24 16:34 [PATCH 0/7] gnss: add new GNSS subsystem Johan Hovold 2018-04-24 16:34 ` [PATCH 1/7] gnss: add GNSS receiver subsystem Johan Hovold 2018-04-25 8:56 ` Greg Kroah-Hartman 2018-04-25 10:56 ` Johan Hovold 2018-04-25 12:23 ` Johan Hovold 2018-04-29 13:35 ` Greg Kroah-Hartman 2018-05-02 7:57 ` Johan Hovold 2018-04-24 16:34 ` [PATCH 2/7] dt-bindings: add generic gnss binding Johan Hovold 2018-04-25 18:26 ` Rob Herring 2018-04-24 16:34 ` [PATCH 3/7] gnss: add generic serial driver Johan Hovold 2018-04-25 8:57 ` Greg Kroah-Hartman 2018-04-25 10:58 ` Johan Hovold 2018-04-25 9:00 ` Greg Kroah-Hartman 2018-04-25 11:05 ` Johan Hovold 2018-04-24 16:34 ` [PATCH 4/7] dt-bindings: gnss: add u-blox binding Johan Hovold 2018-04-25 18:16 ` Rob Herring 2018-04-26 9:10 ` Johan Hovold 2018-05-01 14:05 ` Rob Herring 2018-05-02 8:16 ` Johan Hovold 2018-05-02 13:16 ` Rob Herring 2018-05-07 9:06 ` Johan Hovold 2018-05-03 9:35 ` H. Nikolaus Schaller 2018-05-03 18:50 ` Andreas Kemnade 2018-05-04 5:16 ` H. Nikolaus Schaller 2018-05-04 11:42 ` Sebastian Reichel 2018-05-04 12:04 ` H. Nikolaus Schaller 2018-05-04 13:37 ` Sebastian Reichel 2018-05-04 14:29 ` Tony Lindgren 2018-05-07 10:07 ` Johan Hovold 2018-05-07 10:01 ` Johan Hovold 2018-05-07 15:45 ` Tony Lindgren 2018-05-07 16:34 ` Johan Hovold 2018-05-07 17:50 ` Tony Lindgren 2018-05-08 6:58 ` Johan Hovold 2018-05-08 15:22 ` Tony Lindgren 2018-05-08 15:47 ` Tony Lindgren 2018-05-08 15:54 ` Tony Lindgren 2018-05-08 16:49 ` Tony Lindgren 2018-05-09 13:10 ` OMAP serial runtime PM and autosuspend (was: Re: [PATCH 4/7] dt-bindings: gnss: add u-blox binding)) Johan Hovold 2018-05-09 13:57 ` Tony Lindgren 2018-05-17 10:09 ` Johan Hovold 2018-05-17 17:10 ` Tony Lindgren 2018-05-21 13:48 ` Johan Hovold 2018-05-21 15:48 ` Tony Lindgren 2018-05-24 9:17 ` Johan Hovold 2018-05-24 13:32 ` Tony Lindgren [this message] 2018-05-25 14:02 ` Johan Hovold 2018-05-08 15:56 ` [PATCH 4/7] dt-bindings: gnss: add u-blox binding Sebastian Reichel 2018-05-09 9:18 ` Serdev runtime PM (was: Re: [PATCH 4/7] dt-bindings: gnss: add u-blox binding) Johan Hovold 2018-05-09 9:49 ` Johan Hovold 2018-05-09 14:05 ` Tony Lindgren 2018-05-17 10:25 ` Johan Hovold 2018-05-07 9:47 ` [PATCH 4/7] dt-bindings: gnss: add u-blox binding Johan Hovold 2018-04-24 16:34 ` [PATCH 5/7] gnss: add driver for u-blox receivers Johan Hovold 2018-04-24 16:34 ` [PATCH 6/7] dt-bindings: gnss: add sirfstar binding Johan Hovold 2018-04-25 18:25 ` Rob Herring 2018-04-26 9:12 ` Johan Hovold 2018-04-24 16:34 ` [PATCH 7/7] gnss: add driver for sirfstar-based receivers Johan Hovold 2018-04-24 17:40 ` [PATCH 0/7] gnss: add new GNSS subsystem H. Nikolaus Schaller 2018-04-24 17:50 ` Johan Hovold 2018-04-24 19:44 ` H. Nikolaus Schaller 2018-04-25 8:11 ` Johan Hovold 2018-04-26 10:10 ` H. Nikolaus Schaller 2018-04-26 18:21 ` Johan Hovold 2018-04-24 20:13 ` Pavel Machek 2018-04-24 20:59 ` Andreas Kemnade 2018-04-25 7:32 ` Johan Hovold 2018-04-25 6:49 ` Marcel Holtmann 2018-04-25 7:24 ` Johan Hovold 2018-04-24 20:38 ` Pavel Machek 2018-04-25 6:26 ` Pavel Machek 2018-04-25 6:51 ` Johan Hovold 2018-04-25 8:48 ` Greg Kroah-Hartman 2018-04-25 10:31 ` Johan Hovold 2018-05-04 13:27 ` Sebastian Reichel 2018-05-04 20:03 ` Pavel Machek 2018-05-05 17:28 ` Sebastian Reichel 2018-05-05 21:11 ` Pavel Machek 2018-05-06 6:47 ` Marcel Holtmann 2018-05-07 10:20 ` Johan Hovold 2018-05-07 19:06 ` Marcel Holtmann 2018-05-08 7:01 ` Johan Hovold 2018-05-08 7:49 ` Marcel Holtmann 2018-05-08 12:48 ` Johan Hovold 2018-05-08 20:03 ` Marcel Holtmann 2018-05-30 10:26 ` Johan Hovold
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=20180524133237.GA98604@atomide.com \ --to=tony@atomide.com \ --cc=andreas@kemnade.info \ --cc=andy.shevchenko@gmail.com \ --cc=arnd@arndb.de \ --cc=devicetree@vger.kernel.org \ --cc=gregkh@linuxfoundation.org \ --cc=hns@goldelico.com \ --cc=johan@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-omap@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=pavel@ucw.cz \ --cc=robh+dt@kernel.org \ --cc=sre@kernel.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).