Commit 5d93484a authored by danh-arm's avatar danh-arm Committed by GitHub
Browse files

Merge pull request #779 from dp-arm/dp/rtinstr-cache

Add two timestamps to measure PSCI cache flush overhead
parents 78b4c5b0 7941816a
...@@ -31,11 +31,13 @@ ...@@ -31,11 +31,13 @@
#ifndef __RUNTIME_INSTR_H__ #ifndef __RUNTIME_INSTR_H__
#define __RUNTIME_INSTR_H__ #define __RUNTIME_INSTR_H__
#define RT_INSTR_TOTAL_IDS 4
#define RT_INSTR_ENTER_PSCI 0 #define RT_INSTR_ENTER_PSCI 0
#define RT_INSTR_EXIT_PSCI 1 #define RT_INSTR_EXIT_PSCI 1
#define RT_INSTR_ENTER_HW_LOW_PWR 2 #define RT_INSTR_ENTER_HW_LOW_PWR 2
#define RT_INSTR_EXIT_HW_LOW_PWR 3 #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__ #ifndef __ASSEMBLY__
PMF_DECLARE_CAPTURE_TIMESTAMP(rt_instr_svc) PMF_DECLARE_CAPTURE_TIMESTAMP(rt_instr_svc)
......
...@@ -107,12 +107,29 @@ int psci_do_cpu_off(unsigned int end_pwrlvl) ...@@ -107,12 +107,29 @@ int psci_do_cpu_off(unsigned int end_pwrlvl)
psci_stats_update_pwr_down(end_pwrlvl, &state_info); psci_stats_update_pwr_down(end_pwrlvl, &state_info);
#endif #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 * Arch. management. Perform the necessary steps to flush all
* cpu caches. * cpu caches.
*/ */
psci_do_pwrdown_cache_maintenance(psci_find_max_off_lvl(&state_info)); 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 * Plat. management: Perform platform specific actions to turn this
* cpu off e.g. exit cpu coherency, program the power controller etc. * cpu off e.g. exit cpu coherency, program the power controller etc.
......
...@@ -109,6 +109,17 @@ static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl, ...@@ -109,6 +109,17 @@ static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl,
*/ */
cm_init_my_context(ep); 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 * Arch. management. Perform the necessary steps to flush all
* cpu caches. Currently we assume that the power level correspond * 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, ...@@ -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. * and the cpu-ops power down to perform from the platform.
*/ */
psci_do_pwrdown_cache_maintenance(max_off_lvl); 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
} }
/******************************************************************************* /*******************************************************************************
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment