On Tue, Feb 11, 2014 at 02:17:53PM +0000, Lorenzo Pieralisi wrote:

> +According to the Server Base System Architecture document (SBSA, [3]), the
> +power states an ARM CPU can be put into are identified by the following list:

> +1 - Running
> +2 - Idle_standby
> +3 - Idle_retention
> +4 - Sleep
> +5 - Off

> +ARM platforms implement the power states specified in the SBSA through power
> +management schemes that allow an OS PM implementation to put the processor in
> +different idle states (which include states 1 to 4 above; "off" state is not
> +an idle state since it does not have wake-up capabilities, hence it is not
> +considered in this document).

This is explicitly talking about SBSA - is there any restriction with
regard to non-SBSA systems?  I can't think of any right now and this
seems purely informational but it might be worth mentioning that
non-SBSA systems might potentially have other states if the intention is
to allow that.

> +- state node
> +
> +     Description: must be child of either the cpu-idle-states node or
> +                  a state node.
> +
> +     The state node name shall be "stateN", where N = {0, 1, ...} is
> +     the node number; state nodes which are siblings within a single common
> +     parent node must be given a unique and sequential N value, starting
> +     from 0.

This came up with the CPU bindings as well but I'm really not convinced
that making the naming of the nodes important is great - it's not normal
for DT and it makes the usual enumeration code not work.  Can we not
just have a property for state number in the node instead and allow the
name to be anything?  It seems we even have the index property
already...

> +     - compatible
> +             Usage: Required
> +             Value type: <stringlist>
> +             Definition: Must be "arm,cpu-idle-state".

Do we really need this given that the location in the tree is fixed -
what would we extend it with in future?

> +     - index
> +             Usage: Required
> +             Value type: <u32>
> +             Definition: It represents an idle state index, starting from 2.
> +                         Index 0 represents the processor state "running"
> +                         and index 1 represents processor mode
> +                         "idle_standby", entered by executing a wfi
> +                         instruction (SBSA,[3]); indexes 0 and 1 are
> +                         standard ARM states that need not be described.

...but other numbers are valid.

> +     - entry-method
> +             Usage: Required
> +             Value type: <stringlist>
> +             Definition: Describes the method by which a CPU enters the
> +                         idle state. This property is required and must be
> +                         one of:
> +
> +                         - "arm,psci-cpu-suspend"
> +                           ARM PSCI firmware interface, CPU suspend
> +                           method[2].
> +
> +                         - "[vendor],[method]"
> +                           An implementation dependent string with
> +                           format "vendor,method", where vendor is a string
> +                           denoting the name of the manufacturer and
> +                           method is a string specifying the mechanism
> +                           used to enter the idle state.

Might be worth reversing these - arm,psci-cpu-suspend is just an example
of a (hopefully very widely used) vendor method.  Given that everyone is
supposed to be using PSCI might it even be worth making it the default
and the property optional?

> +     - power-state
> +             Usage: See definition.
> +             Value type: <u32>
> +             Definition: Depends on the entry-method property value.
> +                         If entry-method is "arm,psci-cpu-suspend":
> +                             # Property is required and represents
> +                               psci-power-state parameter. Please refer to
> +                               [2] for PSCI bindings definition.

Should we just have the entry method nodes define their own properties
for this stuff?  I guess this goes back to the comment I made on some
other binding that it might be cleaner to have an explicit PSCI binding
rather than put PSCI explicitly in indiidual bindings.

> +     - entry-latency
> +             Usage: Required
> +             Value type: <prop-encoded-array>
> +             Definition: u32 value representing worst case latency
> +                         in microseconds required to enter the idle state.

Why is this defined as an array?

> +     - cache-state-retained
> +             Usage: See definition
> +             Value type: <none>
> +             Definition: if present cache memory is retained on power down,
> +                         otherwise it is lost.

Might be better to define which caches?

> +             STATE1: state1 {
> +                     compatible = "arm,cpu-idle-state";

Even if we stick with the node name being meaningful it'd be nice to
replace the STATEN here with a meaningful state name to improve
legibility.  

Attachment: signature.asc
Description: Digital signature

Reply via email to