23 Nov, 2016

1 commit

  • enter_freeze() callback is expected atleast to do the same as enter()
    but it has to guarantee that interrupts aren't enabled at any point
    in its execution, as the tick is frozen.

    CPUs execute ->enter_freeze with the local tick or entire timekeeping
    suspended, so it must not re-enable interrupts at any point (even
    temporarily) or attempt to change states of clock event devices.

    It will be called when the system goes to suspend-to-idle and will
    reduce power usage because CPUs won't be awaken for unnecessary IRQs
    (i.e. woken up only on IRQs from "wakeup sources")

    We can reuse the same code for both the enter() and enter_freeze()
    callbacks as along as they don't re-enable interrupts. Only "coupled"
    cpuidle mechanism enables interrupts and doing that with timekeeping
    suspended is generally not safe.

    Since this generic DT based idle driver doesn't support "coupled"
    states, it is safe to assume that the interrupts are not re-enabled.

    This patch assign enter_freeze to same as enter callback function which
    helps to save power without any intermittent spurious wakeups from
    suspend-to-idle.

    Signed-off-by: Sudeep Holla
    Tested-by: Andy Gross
    Signed-off-by: Rafael J. Wysocki

    Sudeep Holla
     

21 Nov, 2014

1 commit


19 Nov, 2014

2 commits

  • On ARM machines, where generally speaking the idle state numbering has
    no fixed and standard meaning it is useful to provide a description
    of the idle state inner workings for benchmarking and monitoring purposes.

    This patch adds a property to the idle states bindings that if present
    gives platform firmware a means of describing the idle state and export
    the string description to user space.

    The patch updates the DT parsing code accordingly to take the description,
    if present, into consideration.

    Acked-by: Kevin Hilman
    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Daniel Lezcano

    Lorenzo Pieralisi
     
  • On some platforms the device tree bindings must provide the kernel
    with a status flag for idle states, that defines whether the idle
    state is operational or not in the current configuration.

    This patch adds a status property to the ARM idle states compliant
    with ePAPR v1.1 and updates the DT parsing code accordingly.

    Acked-by: Kevin Hilman
    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Daniel Lezcano

    Lorenzo Pieralisi
     

13 Nov, 2014

1 commit

  • The only place where the time is invalid is when the ACPI_CSTATE_FFH entry
    method is not set. Otherwise for all the drivers, the time can be correctly
    measured.

    Instead of duplicating the CPUIDLE_FLAG_TIME_VALID flag in all the drivers
    for all the states, just invert the logic by replacing it by the flag
    CPUIDLE_FLAG_TIME_INVALID, hence we can set this flag only for the acpi idle
    driver, remove the former flag from all the drivers and invert the logic with
    this flag in the different governor.

    Signed-off-by: Daniel Lezcano
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

25 Sep, 2014

1 commit

  • On most common ARM systems, the low-power states a CPU can be put into are
    not discoverable in HW and require device tree bindings to describe
    power down suspend operations and idle states parameters.

    In order to enable DT based idle states and configure idle drivers, this
    patch implements the bulk infrastructure required to parse the device tree
    idle states bindings and initialize the corresponding CPUidle driver states
    data.

    The parsing API accepts a start index that defines the first idle state
    that should be initialized by the parsing code in order to give new and
    legacy driver flexibility over which states should be parsed using the
    new DT mechanism.

    The idle states node(s) is obtained from the phandle list of the first cpu
    in the driver cpumask; the kernel checks that the idle state node phandle
    is the same for all CPUs in the driver cpumask before declaring the idle state
    as valid and start parsing its content.

    The idle state enter function pointer is initialized through DT match
    structures passed in by the CPUidle driver, so that ARM legacy code can
    cope with platform specific idle entry method based on compatible
    string matching and the code used to initialize the enter function pointer
    can be moved to the DT generic layer.

    Acked-by: Catalin Marinas
    Acked-by: Daniel Lezcano
    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Daniel Lezcano

    Lorenzo Pieralisi