diff --git a/include/lib/pmf/pmf.h b/include/lib/pmf/pmf.h index df7c9ff..3fc8e38 100644 --- a/include/lib/pmf/pmf.h +++ b/include/lib/pmf/pmf.h @@ -54,108 +54,6 @@ #define PMF_PSCI_STAT_SVC_ID 0 #define PMF_RT_INSTR_SVC_ID 1 -#if ENABLE_PMF -/* - * Convenience macros for capturing time-stamp. - */ -#define PMF_DECLARE_CAPTURE_TIMESTAMP(_name) \ - void pmf_capture_timestamp_with_cache_maint_ ## _name( \ - unsigned int tid, \ - unsigned long long ts); \ - void pmf_capture_timestamp_ ## _name( \ - unsigned int tid, \ - unsigned long long ts); - -#define PMF_CAPTURE_TIMESTAMP(_name, _tid, _flags) \ - do { \ - unsigned long long ts = read_cntpct_el0(); \ - if (((_flags) & PMF_CACHE_MAINT) != 0U) \ - pmf_capture_timestamp_with_cache_maint_ ## _name((_tid), ts);\ - else \ - pmf_capture_timestamp_ ## _name((_tid), ts); \ - } while (0) - -#define PMF_CAPTURE_AND_GET_TIMESTAMP(_name, _tid, _flags, _tsval) \ - do { \ - (_tsval) = read_cntpct_el0(); \ - CASSERT(sizeof(_tsval) == sizeof(unsigned long long), invalid_tsval_size);\ - if (((_flags) & PMF_CACHE_MAINT) != 0U) \ - pmf_capture_timestamp_with_cache_maint_ ## _name((_tid), (_tsval));\ - else \ - pmf_capture_timestamp_ ## _name((_tid), (_tsval));\ - } while (0) - -#define PMF_WRITE_TIMESTAMP(_name, _tid, _flags, _wrval) \ - do { \ - CASSERT(sizeof(_wrval) == sizeof(unsigned long long), invalid_wrval_size);\ - if (((_flags) & PMF_CACHE_MAINT) != 0U) \ - pmf_capture_timestamp_with_cache_maint_ ## _name((_tid), (_wrval));\ - else \ - pmf_capture_timestamp_ ## _name((_tid), (_wrval));\ - } while (0) - -/* - * Convenience macros for retrieving time-stamp. - */ -#define PMF_DECLARE_GET_TIMESTAMP(_name) \ - unsigned long long pmf_get_timestamp_by_index_ ## _name(\ - unsigned int tid, \ - unsigned int cpuid, \ - unsigned int flags); \ - unsigned long long pmf_get_timestamp_by_mpidr_ ## _name(\ - unsigned int tid, \ - u_register_t mpidr, \ - unsigned int flags); - -#define PMF_GET_TIMESTAMP_BY_MPIDR(_name, _tid, _mpidr, _flags, _tsval)\ - _tsval = pmf_get_timestamp_by_mpidr_ ## _name(_tid, _mpidr, _flags) - -#define PMF_GET_TIMESTAMP_BY_INDEX(_name, _tid, _cpuid, _flags, _tsval)\ - _tsval = pmf_get_timestamp_by_index_ ## _name(_tid, _cpuid, _flags) - -/* Convenience macros to register a PMF service.*/ -/* - * This macro is used to register a PMF Service. It allocates PMF memory - * and defines default service-specific PMF functions. - */ -#define PMF_REGISTER_SERVICE(_name, _svcid, _totalid, _flags) \ - PMF_ALLOCATE_TIMESTAMP_MEMORY(_name, _totalid) \ - PMF_DEFINE_CAPTURE_TIMESTAMP(_name, _flags) \ - PMF_DEFINE_GET_TIMESTAMP(_name) - -/* - * This macro is used to register a PMF service, including an - * SMC interface to that service. - */ -#define PMF_REGISTER_SERVICE_SMC(_name, _svcid, _totalid, _flags)\ - PMF_REGISTER_SERVICE(_name, _svcid, _totalid, _flags) \ - PMF_DEFINE_SERVICE_DESC(_name, PMF_ARM_TIF_IMPL_ID, \ - _svcid, _totalid, NULL, \ - pmf_get_timestamp_by_mpidr_ ## _name) - -/* - * This macro is used to register a PMF service that has an SMC interface - * but provides its own service-specific PMF functions. - */ -#define PMF_REGISTER_SERVICE_SMC_OWN(_name, _implid, _svcid, _totalid, \ - _init, _getts) \ - PMF_DEFINE_SERVICE_DESC(_name, _implid, _svcid, _totalid, \ - _init, _getts) - -#else - -#define PMF_REGISTER_SERVICE(_name, _svcid, _totalid, _flags) -#define PMF_REGISTER_SERVICE_SMC(_name, _svcid, _totalid, _flags) -#define PMF_REGISTER_SERVICE_SMC_OWN(_name, _implid, _svcid, _totalid, \ - _init, _getts) -#define PMF_DECLARE_CAPTURE_TIMESTAMP(_name) -#define PMF_DECLARE_GET_TIMESTAMP(_name) -#define PMF_CAPTURE_TIMESTAMP(_name, _tid, _flags) -#define PMF_GET_TIMESTAMP_BY_MPIDR(_name, _tid, _mpidr, _flags, _tsval) -#define PMF_GET_TIMESTAMP_BY_INDEX(_name, _tid, _cpuid, _flags, _tsval) - -#endif /* ENABLE_PMF */ - /******************************************************************************* * Function & variable prototypes ******************************************************************************/ diff --git a/include/lib/pmf/pmf_helpers.h b/include/lib/pmf/pmf_helpers.h index e6798a7..db38e55 100644 --- a/include/lib/pmf/pmf_helpers.h +++ b/include/lib/pmf/pmf_helpers.h @@ -43,6 +43,108 @@ pmf_svc_get_ts_t get_ts; } pmf_svc_desc_t; +#if ENABLE_PMF +/* + * Convenience macros for capturing time-stamp. + */ +#define PMF_DECLARE_CAPTURE_TIMESTAMP(_name) \ + void pmf_capture_timestamp_with_cache_maint_ ## _name( \ + unsigned int tid, \ + unsigned long long ts); \ + void pmf_capture_timestamp_ ## _name( \ + unsigned int tid, \ + unsigned long long ts); + +#define PMF_CAPTURE_TIMESTAMP(_name, _tid, _flags) \ + do { \ + unsigned long long ts = read_cntpct_el0(); \ + if (((_flags) & PMF_CACHE_MAINT) != 0U) \ + pmf_capture_timestamp_with_cache_maint_ ## _name((_tid), ts);\ + else \ + pmf_capture_timestamp_ ## _name((_tid), ts); \ + } while (0) + +#define PMF_CAPTURE_AND_GET_TIMESTAMP(_name, _tid, _flags, _tsval) \ + do { \ + (_tsval) = read_cntpct_el0(); \ + CASSERT(sizeof(_tsval) == sizeof(unsigned long long), invalid_tsval_size);\ + if (((_flags) & PMF_CACHE_MAINT) != 0U) \ + pmf_capture_timestamp_with_cache_maint_ ## _name((_tid), (_tsval));\ + else \ + pmf_capture_timestamp_ ## _name((_tid), (_tsval));\ + } while (0) + +#define PMF_WRITE_TIMESTAMP(_name, _tid, _flags, _wrval) \ + do { \ + CASSERT(sizeof(_wrval) == sizeof(unsigned long long), invalid_wrval_size);\ + if (((_flags) & PMF_CACHE_MAINT) != 0U) \ + pmf_capture_timestamp_with_cache_maint_ ## _name((_tid), (_wrval));\ + else \ + pmf_capture_timestamp_ ## _name((_tid), (_wrval));\ + } while (0) + +/* + * Convenience macros for retrieving time-stamp. + */ +#define PMF_DECLARE_GET_TIMESTAMP(_name) \ + unsigned long long pmf_get_timestamp_by_index_ ## _name(\ + unsigned int tid, \ + unsigned int cpuid, \ + unsigned int flags); \ + unsigned long long pmf_get_timestamp_by_mpidr_ ## _name(\ + unsigned int tid, \ + u_register_t mpidr, \ + unsigned int flags); + +#define PMF_GET_TIMESTAMP_BY_MPIDR(_name, _tid, _mpidr, _flags, _tsval)\ + _tsval = pmf_get_timestamp_by_mpidr_ ## _name(_tid, _mpidr, _flags) + +#define PMF_GET_TIMESTAMP_BY_INDEX(_name, _tid, _cpuid, _flags, _tsval)\ + _tsval = pmf_get_timestamp_by_index_ ## _name(_tid, _cpuid, _flags) + +/* Convenience macros to register a PMF service.*/ +/* + * This macro is used to register a PMF Service. It allocates PMF memory + * and defines default service-specific PMF functions. + */ +#define PMF_REGISTER_SERVICE(_name, _svcid, _totalid, _flags) \ + PMF_ALLOCATE_TIMESTAMP_MEMORY(_name, _totalid) \ + PMF_DEFINE_CAPTURE_TIMESTAMP(_name, _flags) \ + PMF_DEFINE_GET_TIMESTAMP(_name) + +/* + * This macro is used to register a PMF service, including an + * SMC interface to that service. + */ +#define PMF_REGISTER_SERVICE_SMC(_name, _svcid, _totalid, _flags)\ + PMF_REGISTER_SERVICE(_name, _svcid, _totalid, _flags) \ + PMF_DEFINE_SERVICE_DESC(_name, PMF_ARM_TIF_IMPL_ID, \ + _svcid, _totalid, NULL, \ + pmf_get_timestamp_by_mpidr_ ## _name) + +/* + * This macro is used to register a PMF service that has an SMC interface + * but provides its own service-specific PMF functions. + */ +#define PMF_REGISTER_SERVICE_SMC_OWN(_name, _implid, _svcid, _totalid, \ + _init, _getts) \ + PMF_DEFINE_SERVICE_DESC(_name, _implid, _svcid, _totalid, \ + _init, _getts) + +#else + +#define PMF_REGISTER_SERVICE(_name, _svcid, _totalid, _flags) +#define PMF_REGISTER_SERVICE_SMC(_name, _svcid, _totalid, _flags) +#define PMF_REGISTER_SERVICE_SMC_OWN(_name, _implid, _svcid, _totalid, \ + _init, _getts) +#define PMF_DECLARE_CAPTURE_TIMESTAMP(_name) +#define PMF_DECLARE_GET_TIMESTAMP(_name) +#define PMF_CAPTURE_TIMESTAMP(_name, _tid, _flags) +#define PMF_GET_TIMESTAMP_BY_MPIDR(_name, _tid, _mpidr, _flags, _tsval) +#define PMF_GET_TIMESTAMP_BY_INDEX(_name, _tid, _cpuid, _flags, _tsval) + +#endif /* ENABLE_PMF */ + /* * Convenience macro to allocate memory for a PMF service. * @@ -69,9 +171,6 @@ #define PMF_DEFINE_CAPTURE_TIMESTAMP(_name, _flags) \ void pmf_capture_timestamp_ ## _name( \ unsigned int tid, \ - unsigned long long ts); \ - void pmf_capture_timestamp_ ## _name( \ - unsigned int tid, \ unsigned long long ts) \ { \ CASSERT(_flags, select_proper_config); \ @@ -84,9 +183,6 @@ } \ void pmf_capture_timestamp_with_cache_maint_ ## _name( \ unsigned int tid, \ - unsigned long long ts); \ - void pmf_capture_timestamp_with_cache_maint_ ## _name( \ - unsigned int tid, \ unsigned long long ts) \ { \ CASSERT(_flags, select_proper_config); \ @@ -105,8 +201,6 @@ */ #define PMF_DEFINE_GET_TIMESTAMP(_name) \ unsigned long long pmf_get_timestamp_by_index_ ## _name( \ - unsigned int tid, unsigned int cpuid, unsigned int flags);\ - unsigned long long pmf_get_timestamp_by_index_ ## _name( \ unsigned int tid, unsigned int cpuid, unsigned int flags)\ { \ PMF_VALIDATE_TID(_name, tid); \ @@ -114,8 +208,6 @@ return __pmf_get_timestamp(base_addr, tid, cpuid, flags);\ } \ unsigned long long pmf_get_timestamp_by_mpidr_ ## _name( \ - unsigned int tid, u_register_t mpidr, unsigned int flags);\ - unsigned long long pmf_get_timestamp_by_mpidr_ ## _name( \ unsigned int tid, u_register_t mpidr, unsigned int flags)\ { \ PMF_VALIDATE_TID(_name, tid); \ diff --git a/plat/common/plat_psci_common.c b/plat/common/plat_psci_common.c index 16bec79..a756d5e 100644 --- a/plat/common/plat_psci_common.c +++ b/plat/common/plat_psci_common.c @@ -31,6 +31,8 @@ #define PSCI_STAT_ID_EXIT_LOW_PWR 1 #define PSCI_STAT_TOTAL_IDS 2 +PMF_DECLARE_CAPTURE_TIMESTAMP(psci_svc) +PMF_DECLARE_GET_TIMESTAMP(psci_svc) PMF_REGISTER_SERVICE(psci_svc, PMF_PSCI_STAT_SVC_ID, PSCI_STAT_TOTAL_IDS, PMF_STORE_ENABLE)