Mark BL31 initialization functions
authorDaniel Boulby <daniel.boulby@arm.com>
Thu, 20 Sep 2018 13:12:46 +0000 (14:12 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Wed, 3 Oct 2018 10:47:30 +0000 (11:47 +0100)
Mark the initialization functions in BL31, such as context management,
EHF, RAS and PSCI as __init so that they can be reclaimed by the
platform when no longer needed

Change-Id: I7446aeee3dde8950b0f410cb766b7a2312c20130
Signed-off-by: Daniel Boulby <daniel.boulby@arm.com>
bl31/bl31_main.c
bl31/ehf.c
common/runtime_svc.c
lib/el3_runtime/aarch64/context_mgmt.c
lib/extensions/ras/ras_common.c
lib/psci/psci_common.c
lib/psci/psci_setup.c

index 4b7f63c21099a33d8a9351b448bb977d52cbe4da..62bea010bd53dd990bc65ff5a153a30980a833d3 100644 (file)
@@ -57,7 +57,7 @@ uintptr_t get_arm_std_svc_args(unsigned int svc_mask)
 /*******************************************************************************
  * Simple function to initialise all BL31 helper libraries.
  ******************************************************************************/
-void bl31_lib_init(void)
+void __init bl31_lib_init(void)
 {
        cm_init();
 }
@@ -149,7 +149,7 @@ uint32_t bl31_get_next_image_type(void)
  * This function programs EL3 registers and performs other setup to enable entry
  * into the next image after BL31 at the next ERET.
  ******************************************************************************/
-void bl31_prepare_next_image_entry(void)
+void __init bl31_prepare_next_image_entry(void)
 {
        entry_point_info_t *next_image_info;
        uint32_t image_type;
index 3d6d674bf66a3f9a867cbb6a05b8117c4d9ab775..fa036cb1c99873242a2c1261b05b1901a0931c22 100644 (file)
@@ -451,7 +451,7 @@ static uint64_t ehf_el3_interrupt_handler(uint32_t id, uint32_t flags,
 /*
  * Initialize the EL3 exception handling.
  */
-void ehf_init(void)
+void __init ehf_init(void)
 {
        unsigned int flags = 0;
        int ret __unused;
index ad564f566b7a31a87b3ba6816e13e018f043a04e..03f7f7ef32d78087ffe0b4ef29cdcc5c9032fd3a 100644 (file)
@@ -93,7 +93,7 @@ static int32_t validate_rt_svc_desc(const rt_svc_desc_t *desc)
  * The unique oen is used as an index into the 'rt_svc_descs_indices' array.
  * The index of the runtime service descriptor is stored at this index.
  ******************************************************************************/
-void runtime_svc_init(void)
+void __init runtime_svc_init(void)
 {
        int rc = 0;
        unsigned int index, start_idx, end_idx;
index ee5fe4f9d05b71d68a800591476dab51619ecf6e..acc8d6d26c61b14954c7041095fa835389785a76 100644 (file)
@@ -36,7 +36,7 @@
  * which will used for programming an entry into a lower EL. The same context
  * will used to save state upon exception entry from that EL.
  ******************************************************************************/
-void cm_init(void)
+void __init cm_init(void)
 {
        /*
         * The context management library has only global data to intialize, but
index 2e65eebb9aa970b36c62a53eb6a4e9b58f25705b..f39e5f5f1b28b21cc7e2a93ebaf2a6539b549bc5 100644 (file)
@@ -128,7 +128,7 @@ static int ras_interrupt_handler(uint32_t intr_raw, uint32_t flags,
        return 0;
 }
 
-void ras_init(void)
+void __init ras_init(void)
 {
 #if ENABLE_ASSERTIONS
        /* Check RAS interrupts are sorted */
index b877b4ba2eb647045932f899bb305bde0494b797..adce843aa60daf648532cfcfc71f69e93d9eda2c 100644 (file)
@@ -216,7 +216,7 @@ static void psci_set_req_local_pwr_state(unsigned int pwrlvl,
 /******************************************************************************
  * This function initializes the psci_req_local_pwr_states.
  *****************************************************************************/
-void psci_init_req_local_pwr_states(void)
+void __init psci_init_req_local_pwr_states(void)
 {
        /* Initialize the requested state of all non CPU power domains as OFF */
        unsigned int pwrlvl;
index e59e163ead70a2e1e322e20cd8c56f0bd14e8e41..6b3081eb58c97ab8a39c4ed7811fa8e234496bba 100644 (file)
@@ -32,7 +32,7 @@ unsigned int psci_caps;
  * Function which initializes the 'psci_non_cpu_pd_nodes' or the
  * 'psci_cpu_pd_nodes' corresponding to the power level.
  ******************************************************************************/
-static void psci_init_pwr_domain_node(unsigned char node_idx,
+static void __init psci_init_pwr_domain_node(unsigned char node_idx,
                                        unsigned int parent_idx,
                                        unsigned char level)
 {
@@ -80,7 +80,7 @@ static void psci_init_pwr_domain_node(unsigned char node_idx,
  * mapping of the CPUs to indices via plat_core_pos_by_mpidr() and
  * plat_my_core_pos() APIs.
  *******************************************************************************/
-static void psci_update_pwrlvl_limits(void)
+static void __init psci_update_pwrlvl_limits(void)
 {
        int j, cpu_idx;
        unsigned int nodes_idx[PLAT_MAX_PWR_LVL] = {0};
@@ -107,7 +107,7 @@ static void psci_update_pwrlvl_limits(void)
  * informs the number of root power domains. The parent nodes of the root nodes
  * will point to an invalid entry(-1).
  ******************************************************************************/
-static void populate_power_domain_tree(const unsigned char *topology)
+static void __init populate_power_domain_tree(const unsigned char *topology)
 {
        unsigned int i, j = 0U, num_nodes_at_lvl = 1U, num_nodes_at_next_lvl;
        unsigned int node_index = 0U, num_children;
@@ -184,7 +184,7 @@ static void populate_power_domain_tree(const unsigned char *topology)
  * |   CPU 0   |   CPU 1   |   CPU 2   |   CPU 3  |
  * ------------------------------------------------
  ******************************************************************************/
-int psci_setup(const psci_lib_args_t *lib_args)
+int __init psci_setup(const psci_lib_args_t *lib_args)
 {
        const unsigned char *topology_tree;