Thread (51 messages) 51 messages, 8 authors, 2014-12-30

[RFC 0/2] Qualcomm RPM sleep states

From: Bjorn Andersson <hidden>
Date: 2014-12-16 06:05:56
Also in: linux-arm-msm

On Mon, Dec 15, 2014 at 10:04 AM, Mark Brown [off-list ref] wrote:
On Thu, Dec 11, 2014 at 02:36:54PM -0800, Bjorn Andersson wrote:
[..]
quoted
We have to put the consumer into a state where we can "release" the regulator,
then we need to tell the RPM to update the state of the regulator and we have
to wait for the ack to come back before we can actually go idle.
None of which sounds like such a big deal, a bigger problem seemed to be
trying to suppress intermediate updates of the device state that were
being done though that can comfortably be done in the driver I think.
As I said previously, suppressing unnecessary updates is an
optimization - although an important one. The key question is how we
model the multiple states.

[..]
quoted
quoted
We already have a runtime API for specifying suspend state.  It doesn't
currently aggregate but that's a simple matter of programming.
quoted
Do you mean alter properties of a state or select between the predefined
states? I've found some apis related to the latter, but not the first.
Hrm, indeed.  Well, duplicating the existing APIs seems like a good way
forwards - the logic is all the same, it's just that we don't want to
apply the changes to the state used at runtime.
Are you suggesting that we introduce a shadow of the current API for
the purpose of affecting a certain state? Can you elaborate on how
that would look like and work?
quoted
quoted
quoted
quoted
quoted
both/sleep), the standard regulator api would have to affect the both state.
Would we then have a separate api to modify the active state?
quoted
quoted
quoted
quoted
Why would we need to introduce a new API for the active state?
quoted
quoted
quoted
It's just that I, possibly incorrectly, considered that to be the outlier and
the one that would be the easiest to model separately.
quoted
quoted
I'm sorry, I'm just not getting this at all.
quoted
Because for the overall system the active state is the outlier here. But it
probably doesn't matter for our conclusions.
I'd argue that for the purpose of running Linux it's the common state...
Does "running Linux" indicate that there's instructions flowing
through the CPU pipeline or that the hardware overall is up and
running?
quoted
quoted
I really do fear that the bodge you're using at the minute with multiple
regulators has poor abstraction and is hence too fragile - it seems like
there's too much knowledge of the system spread around different drivers
and it's all vulnerable to changes in system integration which could
potentially be made per board.
quoted
Just to make sure we're on the same page here, the way this is expressed in
downstream is like the following:

ldo12 {
      l12: l12 {
quoted
      l12_active: l12-active {
quoted
All the consumers uses the standard regulator accessor functions to operate on
their respective regulator *. Further more it's only the clock driver for the
core (krait) that references the active only regulators.
quoted
So the knowledge spread out would be contained to the dt bindings things
together.
It's not just the DT binding, it's also the regulator driver that needs
to do the aggregation that's being discussed and is going to assume a
particular arrangement of clients.
The downstream implementation sports 3 rdevs per regulator and their
requests are aggregated into the two states. So the regulator
implementation are not aware of the individual clients, it just
aggregates the 3 rdev states and programs the hardware accordingly.
quoted
What I don't like with that solution is that we above have two different rdev
and that we need to aggregate state between the various rdevs in the ldo12
grouping. (so that active only and both actually affect the active state).
Yes, that's a big part of the problem - there's things going on that the
core should know about but doesn't.
The way that the aggregation of these properties works there's no
problems doing it in stages. But it comes with code duplication and
the need of the various rdevs to share common state.

Regards,
Bjorn
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help