Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
1f4b7170
Commit
1f4b7170
authored
Jan 09, 2020
by
Manish Pandey
Committed by
TrustedFirmware Code Review
Jan 09, 2020
Browse files
Merge "Simplify PMF helper macro definitions across header files" into integration
parents
1ab2dc1a
daa9b6ea
Changes
3
Hide whitespace changes
Inline
Side-by-side
include/lib/pmf/pmf.h
View file @
1f4b7170
...
...
@@ -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
******************************************************************************/
...
...
include/lib/pmf/pmf_helpers.h
View file @
1f4b7170
...
...
@@ -43,6 +43,108 @@ typedef struct pmf_svc_desc {
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.
*
...
...
@@ -67,9 +169,6 @@ typedef struct pmf_svc_desc {
* The extern declaration is there to satisfy MISRA C-2012 rule 8.4.
*/
#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) \
...
...
@@ -82,9 +181,6 @@ typedef struct pmf_svc_desc {
if (((_flags) & PMF_DUMP_ENABLE) != 0) \
__pmf_dump_timestamp(tid, ts); \
} \
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) \
...
...
@@ -104,8 +200,6 @@ typedef struct pmf_svc_desc {
* The extern declaration is there to satisfy MISRA C-2012 rule 8.4.
*/
#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)\
{ \
...
...
@@ -113,8 +207,6 @@ typedef struct pmf_svc_desc {
uintptr_t base_addr = (uintptr_t) pmf_ts_mem_ ## _name; \
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)\
{ \
...
...
plat/common/plat_psci_common.c
View file @
1f4b7170
...
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment