diff options
author | danh-arm <dan.handley@arm.com> | 2016-12-19 15:39:33 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-19 15:39:33 +0000 |
commit | 5d93484ab53bcf58b00c51c9ed800d3f527e9e72 (patch) | |
tree | 4bd983bfa49631ee9343d846e1ce65e5b3d4d9e5 | |
parent | 78b4c5b0785f73eb95a58ac9fe8d696f3fef5224 (diff) | |
parent | 7941816a3428f015a9f4a6c5dc978b4fca568f4b (diff) |
Merge pull request #779 from dp-arm/dp/rtinstr-cache
Add two timestamps to measure PSCI cache flush overhead
-rw-r--r-- | include/lib/runtime_instr.h | 4 | ||||
-rw-r--r-- | lib/psci/psci_off.c | 17 | ||||
-rw-r--r-- | lib/psci/psci_suspend.c | 17 |
3 files changed, 37 insertions, 1 deletions
diff --git a/include/lib/runtime_instr.h b/include/lib/runtime_instr.h index d4090027..4d05ba4b 100644 --- a/include/lib/runtime_instr.h +++ b/include/lib/runtime_instr.h @@ -31,11 +31,13 @@ #ifndef __RUNTIME_INSTR_H__ #define __RUNTIME_INSTR_H__ -#define RT_INSTR_TOTAL_IDS 4 #define RT_INSTR_ENTER_PSCI 0 #define RT_INSTR_EXIT_PSCI 1 #define RT_INSTR_ENTER_HW_LOW_PWR 2 #define RT_INSTR_EXIT_HW_LOW_PWR 3 +#define RT_INSTR_ENTER_CFLUSH 4 +#define RT_INSTR_EXIT_CFLUSH 5 +#define RT_INSTR_TOTAL_IDS 6 #ifndef __ASSEMBLY__ PMF_DECLARE_CAPTURE_TIMESTAMP(rt_instr_svc) diff --git a/lib/psci/psci_off.c b/lib/psci/psci_off.c index 1cc6ede3..897bf319 100644 --- a/lib/psci/psci_off.c +++ b/lib/psci/psci_off.c @@ -107,12 +107,29 @@ int psci_do_cpu_off(unsigned int end_pwrlvl) psci_stats_update_pwr_down(end_pwrlvl, &state_info); #endif +#if ENABLE_RUNTIME_INSTRUMENTATION + + /* + * Flush cache line so that even if CPU power down happens + * the timestamp update is reflected in memory. + */ + PMF_CAPTURE_TIMESTAMP(rt_instr_svc, + RT_INSTR_ENTER_CFLUSH, + PMF_CACHE_MAINT); +#endif + /* * Arch. management. Perform the necessary steps to flush all * cpu caches. */ psci_do_pwrdown_cache_maintenance(psci_find_max_off_lvl(&state_info)); +#if ENABLE_RUNTIME_INSTRUMENTATION + PMF_CAPTURE_TIMESTAMP(rt_instr_svc, + RT_INSTR_EXIT_CFLUSH, + PMF_NO_CACHE_MAINT); +#endif + /* * Plat. management: Perform platform specific actions to turn this * cpu off e.g. exit cpu coherency, program the power controller etc. diff --git a/lib/psci/psci_suspend.c b/lib/psci/psci_suspend.c index 10d2481d..dc2ab774 100644 --- a/lib/psci/psci_suspend.c +++ b/lib/psci/psci_suspend.c @@ -109,6 +109,17 @@ static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl, */ cm_init_my_context(ep); +#if ENABLE_RUNTIME_INSTRUMENTATION + + /* + * Flush cache line so that even if CPU power down happens + * the timestamp update is reflected in memory. + */ + PMF_CAPTURE_TIMESTAMP(rt_instr_svc, + RT_INSTR_ENTER_CFLUSH, + PMF_CACHE_MAINT); +#endif + /* * Arch. management. Perform the necessary steps to flush all * cpu caches. Currently we assume that the power level correspond @@ -117,6 +128,12 @@ static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl, * and the cpu-ops power down to perform from the platform. */ psci_do_pwrdown_cache_maintenance(max_off_lvl); + +#if ENABLE_RUNTIME_INSTRUMENTATION + PMF_CAPTURE_TIMESTAMP(rt_instr_svc, + RT_INSTR_EXIT_CFLUSH, + PMF_NO_CACHE_MAINT); +#endif } /******************************************************************************* |