Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
5 years ago
by
Manish Pandey
Committed by
TrustedFirmware Code Review
5 years ago
Browse files
Options
Download
Plain Diff
Merge "Simplify PMF helper macro definitions across header files" into integration
parents
1ab2dc1a
daa9b6ea
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
include/lib/pmf/pmf.h
+0
-102
include/lib/pmf/pmf.h
include/lib/pmf/pmf_helpers.h
+102
-10
include/lib/pmf/pmf_helpers.h
plat/common/plat_psci_common.c
+2
-0
plat/common/plat_psci_common.c
with
104 additions
and
112 deletions
+104
-112
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
******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
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)\
{ \
...
...
This diff is collapsed.
Click to expand it.
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
)
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help