PSCI: Decouple PSCI stat residency calculation from PMF
authordp-arm <dimitris.papastamos@arm.com>
Tue, 31 Jan 2017 13:01:04 +0000 (13:01 +0000)
committerdp-arm <dimitris.papastamos@arm.com>
Mon, 13 Feb 2017 14:33:06 +0000 (14:33 +0000)
commit04c1db1e574604081bfdcec3d26e662535812eaa
treecf2764a5c729dd413c74f5d1abf5ea306957ea8e
parentbab16f9912c6a2ea7600e8d713c1eebf8f0c11d7
PSCI: Decouple PSCI stat residency calculation from PMF

This patch introduces the following three platform interfaces:

* void plat_psci_stat_accounting_start(const psci_power_state_t *state_info)

  This is an optional hook that platforms can implement in order
  to perform accounting before entering a low power state.  This
  typically involves capturing a timestamp.

* void plat_psci_stat_accounting_stop(const psci_power_state_t *state_info)

  This is an optional hook that platforms can implement in order
  to perform accounting after exiting from a low power state.  This
  typically involves capturing a timestamp.

* u_register_t plat_psci_stat_get_residency(unsigned int lvl,
const psci_power_state_t *state_info,
unsigned int last_cpu_index)

  This is an optional hook that platforms can implement in order
  to calculate the PSCI stat residency.

If any of these interfaces are overridden by the platform, it is
recommended that all of them are.

By default `ENABLE_PSCI_STAT` is disabled.  If `ENABLE_PSCI_STAT`
is set but `ENABLE_PMF` is not set then an alternative PSCI stat
collection backend must be provided.  If both are set, then default
weak definitions of these functions are provided, using PMF to
calculate the residency.

NOTE: Previously, platforms did not have to explicitly set
`ENABLE_PMF` since this was automatically done by the top-level
Makefile.

Change-Id: I17b47804dea68c77bc284df15ee1ccd66bc4b79b
Signed-off-by: dp-arm <dimitris.papastamos@arm.com>
12 files changed:
Makefile
docs/porting-guide.md
docs/user-guide.md
include/plat/common/platform.h
lib/psci/psci_common.c
lib/psci/psci_main.c
lib/psci/psci_off.c
lib/psci/psci_private.h
lib/psci/psci_stat.c
lib/psci/psci_suspend.c
plat/arm/common/arm_common.mk
plat/common/plat_psci_common.c