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
122af7dd
Unverified
Commit
122af7dd
authored
Nov 01, 2017
by
davidcunado-arm
Committed by
GitHub
Nov 01, 2017
Browse files
Merge pull request #1150 from dp-arm/dp/events
aarch64: Add PubSub events to capture security state transitions
parents
5b5e6cb7
17b4c0dd
Changes
3
Hide whitespace changes
Inline
Side-by-side
docs/firmware-design.rst
View file @
122af7dd
...
...
@@ -2309,6 +2309,12 @@ PE only; it won't cause handlers to execute on a different PE.
Note that publishing an event on a PE blocks until all the subscribed handlers
finish executing on the PE.
ARM Trusted Firmware generic code publishes and subscribes to some events
within. Platform ports are discouraged from subscribing to them. These events
may be withdrawn, renamed, or have their semantics altered in the future.
Platforms may however register, publish, and subscribe to platform-specific
events.
Publish and Subscribe Example
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
...
@@ -2339,22 +2345,6 @@ implement:
SUBSCRIBE_TO_EVENT(foo, foo_handler);
Available Events
~~~~~~~~~~~~~~~~
ARM Trusted Firmware core makes some events available by default. They're listed
below, along with information as to when they're published, and the arguments
passed to subscribed handlers.
Other EL3 components that are conditionally compiled in may make their own
events available, but aren't documented here.
- ``psci_cpu_on_finish``
- When: Published on a PE after it's finished its power-up sequence.
- Argument: ``NULL``.
Performance Measurement Framework
---------------------------------
...
...
include/lib/el3_runtime/pubsub_events.h
View file @
122af7dd
...
...
@@ -16,3 +16,21 @@
* initialization.
*/
REGISTER_PUBSUB_EVENT
(
psci_cpu_on_finish
);
#ifdef AARCH64
/*
* These events are published by the AArch64 context management framework
* after the secure context is restored/saved via
* cm_el1_sysregs_context_{restore,save}() API.
*/
REGISTER_PUBSUB_EVENT
(
cm_entering_secure_world
);
REGISTER_PUBSUB_EVENT
(
cm_exited_secure_world
);
/*
* These events are published by the AArch64 context management framework
* after the normal context is restored/saved via
* cm_el1_sysregs_context_{restore,save}() API.
*/
REGISTER_PUBSUB_EVENT
(
cm_entering_normal_world
);
REGISTER_PUBSUB_EVENT
(
cm_exited_normal_world
);
#endif
/* AARCH64 */
lib/el3_runtime/aarch64/context_mgmt.c
View file @
122af7dd
...
...
@@ -13,6 +13,7 @@
#include <interrupt_mgmt.h>
#include <platform.h>
#include <platform_def.h>
#include <pubsub_events.h>
#include <smcc_helpers.h>
#include <string.h>
#include <utils.h>
...
...
@@ -421,9 +422,8 @@ void cm_prepare_el3_exit(uint32_t security_state)
}
}
el1_sysregs_context_restore
(
get_sysregs_ctx
(
ctx
));
cm_set_next_context
(
ctx
);
cm_el1_sysregs_context_restore
(
security_state
);
cm_set_next_eret_context
(
security_state
);
}
/*******************************************************************************
...
...
@@ -440,6 +440,13 @@ void cm_el1_sysregs_context_save(uint32_t security_state)
el1_sysregs_context_save
(
get_sysregs_ctx
(
ctx
));
el1_sysregs_context_save_post_ops
();
#if IMAGE_BL31
if
(
security_state
==
SECURE
)
PUBLISH_EVENT
(
cm_exited_secure_world
);
else
PUBLISH_EVENT
(
cm_exited_normal_world
);
#endif
}
void
cm_el1_sysregs_context_restore
(
uint32_t
security_state
)
...
...
@@ -450,6 +457,13 @@ void cm_el1_sysregs_context_restore(uint32_t security_state)
assert
(
ctx
);
el1_sysregs_context_restore
(
get_sysregs_ctx
(
ctx
));
#if IMAGE_BL31
if
(
security_state
==
SECURE
)
PUBLISH_EVENT
(
cm_entering_secure_world
);
else
PUBLISH_EVENT
(
cm_entering_normal_world
);
#endif
}
/*******************************************************************************
...
...
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