PSCI: Fix MISRA defects in ON/OFF/SUSPEND/SYSTEM_OFF
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Mon, 16 Jul 2018 22:19:25 +0000 (23:19 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Tue, 24 Jul 2018 08:19:04 +0000 (09:19 +0100)
Fix violations of MISRA C-2012 Rules 8.13, 10.1, 10.3, 17.7 and 20.7.

Change-Id: I6f45a1069b742aebf9e1d6a403717b1522083f51
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
lib/psci/psci_off.c
lib/psci/psci_on.c
lib/psci/psci_private.h
lib/psci/psci_suspend.c
lib/psci/psci_system_off.c

index 231deea2d3b4151f63372ec99e99315788831c50..944f8bff9fa2b664e278a20b5de21b450f55e8f5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -40,14 +40,15 @@ static void psci_set_power_off_state(psci_power_state_t *state_info)
  ******************************************************************************/
 int psci_do_cpu_off(unsigned int end_pwrlvl)
 {
-       int rc = PSCI_E_SUCCESS, idx = plat_my_core_pos();
+       int rc = PSCI_E_SUCCESS;
+       int idx = (int) plat_my_core_pos();
        psci_power_state_t state_info;
 
        /*
         * This function must only be called on platforms where the
         * CPU_OFF platform hooks have been implemented.
         */
-       assert(psci_plat_pm_ops->pwr_domain_off);
+       assert(psci_plat_pm_ops->pwr_domain_off != NULL);
 
        /* Construct the psci_power_state for CPU_OFF */
        psci_set_power_off_state(&state_info);
@@ -57,17 +58,16 @@ int psci_do_cpu_off(unsigned int end_pwrlvl)
         * level so that by the time all locks are taken, the system topology
         * is snapshot and state management can be done safely.
         */
-       psci_acquire_pwr_domain_locks(end_pwrlvl,
-                                     idx);
+       psci_acquire_pwr_domain_locks(end_pwrlvl, idx);
 
        /*
         * Call the cpu off handler registered by the Secure Payload Dispatcher
         * to let it do any bookkeeping. Assume that the SPD always reports an
         * E_DENIED error if SP refuse to power down
         */
-       if (psci_spd_pm && psci_spd_pm->svc_off) {
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_off != NULL)) {
                rc = psci_spd_pm->svc_off(0);
-               if (rc)
+               if (rc != 0)
                        goto exit;
        }
 
@@ -120,8 +120,7 @@ exit:
         * Release the locks corresponding to each power level in the
         * reverse order to which they were acquired.
         */
-       psci_release_pwr_domain_locks(end_pwrlvl,
-                                     idx);
+       psci_release_pwr_domain_locks(end_pwrlvl, idx);
 
        /*
         * Check if all actions needed to safely power down this cpu have
@@ -154,7 +153,7 @@ exit:
                    PMF_NO_CACHE_MAINT);
 #endif
 
-               if (psci_plat_pm_ops->pwr_domain_pwr_down_wfi) {
+               if (psci_plat_pm_ops->pwr_domain_pwr_down_wfi != NULL) {
                        /* This function must not return */
                        psci_plat_pm_ops->pwr_domain_pwr_down_wfi(&state_info);
                } else {
index 325346e29d36485b9771fe65619ed914b3357e47..f38900cf5462c988f77ed3e8ec9cf0e55ef01698 100644 (file)
@@ -55,22 +55,22 @@ static int cpu_on_validate_state(aff_info_state_t aff_state)
  * platform handler as it can return error.
  ******************************************************************************/
 int psci_cpu_on_start(u_register_t target_cpu,
-                     entry_point_info_t *ep)
+                     const entry_point_info_t *ep)
 {
        int rc;
-       unsigned int target_idx = plat_core_pos_by_mpidr(target_cpu);
        aff_info_state_t target_aff_state;
+       int target_idx = plat_core_pos_by_mpidr(target_cpu);
 
        /* Calling function must supply valid input arguments */
-       assert((int) target_idx >= 0);
+       assert(target_idx >= 0);
        assert(ep != NULL);
 
        /*
         * This function must only be called on platforms where the
         * CPU_ON platform hooks have been implemented.
         */
-       assert(psci_plat_pm_ops->pwr_domain_on &&
-                       psci_plat_pm_ops->pwr_domain_on_finish);
+       assert((psci_plat_pm_ops->pwr_domain_on != NULL) &&
+              (psci_plat_pm_ops->pwr_domain_on_finish != NULL));
 
        /* Protect against multiple CPUs trying to turn ON the same target CPU */
        psci_spin_lock_cpu(target_idx);
@@ -91,7 +91,8 @@ int psci_cpu_on_start(u_register_t target_cpu,
         * target CPUs shutdown was not seen by the current CPU's cluster. And
         * so the cache may contain stale data for the target CPU.
         */
-       flush_cpu_data_by_index(target_idx, psci_svc_cpu_data.aff_info_state);
+       flush_cpu_data_by_index((unsigned int)target_idx,
+                               psci_svc_cpu_data.aff_info_state);
        rc = cpu_on_validate_state(psci_get_aff_info_state_by_idx(target_idx));
        if (rc != PSCI_E_SUCCESS)
                goto exit;
@@ -101,7 +102,7 @@ int psci_cpu_on_start(u_register_t target_cpu,
         * to let it do any bookeeping. If the handler encounters an error, it's
         * expected to assert within
         */
-       if (psci_spd_pm && psci_spd_pm->svc_on)
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_on != NULL))
                psci_spd_pm->svc_on(target_cpu);
 
        /*
@@ -110,7 +111,8 @@ int psci_cpu_on_start(u_register_t target_cpu,
         * turned OFF.
         */
        psci_set_aff_info_state_by_idx(target_idx, AFF_STATE_ON_PENDING);
-       flush_cpu_data_by_index(target_idx, psci_svc_cpu_data.aff_info_state);
+       flush_cpu_data_by_index((unsigned int)target_idx,
+                               psci_svc_cpu_data.aff_info_state);
 
        /*
         * The cache line invalidation by the target CPU after setting the
@@ -122,9 +124,11 @@ int psci_cpu_on_start(u_register_t target_cpu,
        if (target_aff_state != AFF_STATE_ON_PENDING) {
                assert(target_aff_state == AFF_STATE_OFF);
                psci_set_aff_info_state_by_idx(target_idx, AFF_STATE_ON_PENDING);
-               flush_cpu_data_by_index(target_idx, psci_svc_cpu_data.aff_info_state);
+               flush_cpu_data_by_index((unsigned int)target_idx,
+                                       psci_svc_cpu_data.aff_info_state);
 
-               assert(psci_get_aff_info_state_by_idx(target_idx) == AFF_STATE_ON_PENDING);
+               assert(psci_get_aff_info_state_by_idx(target_idx) ==
+                      AFF_STATE_ON_PENDING);
        }
 
        /*
@@ -136,15 +140,16 @@ int psci_cpu_on_start(u_register_t target_cpu,
         * steps to power on.
         */
        rc = psci_plat_pm_ops->pwr_domain_on(target_cpu);
-       assert(rc == PSCI_E_SUCCESS || rc == PSCI_E_INTERN_FAIL);
+       assert((rc == PSCI_E_SUCCESS) || (rc == PSCI_E_INTERN_FAIL));
 
        if (rc == PSCI_E_SUCCESS)
                /* Store the re-entry information for the non-secure world. */
-               cm_init_context_by_index(target_idx, ep);
+               cm_init_context_by_index((unsigned int)target_idx, ep);
        else {
                /* Restore the state on error. */
                psci_set_aff_info_state_by_idx(target_idx, AFF_STATE_OFF);
-               flush_cpu_data_by_index(target_idx, psci_svc_cpu_data.aff_info_state);
+               flush_cpu_data_by_index((unsigned int)target_idx,
+                                       psci_svc_cpu_data.aff_info_state);
        }
 
 exit:
@@ -157,8 +162,7 @@ exit:
  * are called by the common finisher routine in psci_common.c. The `state_info`
  * is the psci_power_state from which this CPU has woken up from.
  ******************************************************************************/
-void psci_cpu_on_finish(unsigned int cpu_idx,
-                       psci_power_state_t *state_info)
+void psci_cpu_on_finish(int cpu_idx, const psci_power_state_t *state_info)
 {
        /*
         * Plat. management: Perform the platform specific actions
@@ -199,7 +203,7 @@ void psci_cpu_on_finish(unsigned int cpu_idx,
         * Dispatcher to let it do any bookeeping. If the handler encounters an
         * error, it's expected to assert within
         */
-       if (psci_spd_pm && psci_spd_pm->svc_on_finish)
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_on_finish != NULL))
                psci_spd_pm->svc_on_finish(0);
 
        PUBLISH_EVENT(psci_cpu_on_finish);
index 7eb2fc0bc082566d2d1b88e608e6c325ad6334bc..ac99876f58b15ae7ef82bd89cd47fc687d00201f 100644 (file)
@@ -295,22 +295,20 @@ void prepare_cpu_pwr_dwn(unsigned int power_level);
 
 /* Private exported functions from psci_on.c */
 int psci_cpu_on_start(u_register_t target_cpu,
-                     entry_point_info_t *ep);
+                     const entry_point_info_t *ep);
 
-void psci_cpu_on_finish(unsigned int cpu_idx,
-                       psci_power_state_t *state_info);
+void psci_cpu_on_finish(int cpu_idx, const psci_power_state_t *state_info);
 
 /* Private exported functions from psci_off.c */
 int psci_do_cpu_off(unsigned int end_pwrlvl);
 
 /* Private exported functions from psci_suspend.c */
-void psci_cpu_suspend_start(entry_point_info_t *ep,
+void psci_cpu_suspend_start(const entry_point_info_t *ep,
                        unsigned int end_pwrlvl,
                        psci_power_state_t *state_info,
                        unsigned int is_power_down_state);
 
-void psci_cpu_suspend_finish(unsigned int cpu_idx,
-                       psci_power_state_t *state_info);
+void psci_cpu_suspend_finish(int cpu_idx, const psci_power_state_t *state_info);
 
 /* Private exported functions from psci_helpers.S */
 void psci_do_pwrdown_cache_maintenance(unsigned int pwr_level);
@@ -319,7 +317,7 @@ void psci_do_pwrup_cache_maintenance(void);
 /* Private exported functions from psci_system_off.c */
 void __dead2 psci_system_off(void);
 void __dead2 psci_system_reset(void);
-int psci_system_reset2(uint32_t reset_type, u_register_t cookie);
+u_register_t psci_system_reset2(uint32_t reset_type, u_register_t cookie);
 
 /* Private exported functions from psci_stat.c */
 void psci_stats_update_pwr_down(unsigned int end_pwrlvl,
index a77972d38c26e34863a9d5caf83597d59931333e..e00819de70354f622ec68177e793fa7e9769c112 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -23,7 +23,7 @@
  * This function does generic and platform specific operations after a wake-up
  * from standby/retention states at multiple power levels.
  ******************************************************************************/
-static void psci_suspend_to_standby_finisher(unsigned int cpu_idx,
+static void psci_suspend_to_standby_finisher(int cpu_idx,
                                             unsigned int end_pwrlvl)
 {
        psci_power_state_t state_info;
@@ -64,8 +64,8 @@ static void psci_suspend_to_standby_finisher(unsigned int cpu_idx,
  * operations.
  ******************************************************************************/
 static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl,
-                                         entry_point_info_t *ep,
-                                         psci_power_state_t *state_info)
+                                         const entry_point_info_t *ep,
+                                         const psci_power_state_t *state_info)
 {
        unsigned int max_off_lvl = psci_find_max_off_lvl(state_info);
 
@@ -85,7 +85,7 @@ static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl,
         * Dispatcher to let it do any book-keeping. If the handler encounters an
         * error, it's expected to assert within
         */
-       if (psci_spd_pm && psci_spd_pm->svc_suspend)
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_suspend != NULL))
                psci_spd_pm->svc_suspend(max_off_lvl);
 
 #if !HW_ASSISTED_COHERENCY
@@ -95,7 +95,7 @@ static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl,
         * HW_ASSISTED_COHERENCY = 0 platforms that can safely perform these
         * actions with data caches enabled.
         */
-       if (psci_plat_pm_ops->pwr_domain_suspend_pwrdown_early)
+       if (psci_plat_pm_ops->pwr_domain_suspend_pwrdown_early != NULL)
                psci_plat_pm_ops->pwr_domain_suspend_pwrdown_early(state_info);
 #endif
 
@@ -147,20 +147,20 @@ static void psci_suspend_to_pwrdown_start(unsigned int end_pwrlvl,
  * the state transition has been done, no further error is expected and it is
  * not possible to undo any of the actions taken beyond that point.
  ******************************************************************************/
-void psci_cpu_suspend_start(entry_point_info_t *ep,
+void psci_cpu_suspend_start(const entry_point_info_t *ep,
                            unsigned int end_pwrlvl,
                            psci_power_state_t *state_info,
                            unsigned int is_power_down_state)
 {
        int skip_wfi = 0;
-       unsigned int idx = plat_my_core_pos();
+       int idx = (int) plat_my_core_pos();
 
        /*
         * This function must only be called on platforms where the
         * CPU_SUSPEND platform hooks have been implemented.
         */
-       assert(psci_plat_pm_ops->pwr_domain_suspend &&
-                       psci_plat_pm_ops->pwr_domain_suspend_finish);
+       assert((psci_plat_pm_ops->pwr_domain_suspend != NULL) &&
+              (psci_plat_pm_ops->pwr_domain_suspend_finish != NULL));
 
        /*
         * This function acquires the lock corresponding to each power
@@ -175,7 +175,7 @@ void psci_cpu_suspend_start(entry_point_info_t *ep,
         * introduced by lock contention to increase the chances of early
         * detection that a wake-up interrupt has fired.
         */
-       if (read_isr_el1()) {
+       if (read_isr_el1() != 0U) {
                skip_wfi = 1;
                goto exit;
        }
@@ -192,7 +192,7 @@ void psci_cpu_suspend_start(entry_point_info_t *ep,
        psci_stats_update_pwr_down(end_pwrlvl, state_info);
 #endif
 
-       if (is_power_down_state)
+       if (is_power_down_state != 0U)
                psci_suspend_to_pwrdown_start(end_pwrlvl, ep, state_info);
 
        /*
@@ -214,10 +214,10 @@ exit:
         */
        psci_release_pwr_domain_locks(end_pwrlvl,
                                  idx);
-       if (skip_wfi)
+       if (skip_wfi == 1)
                return;
 
-       if (is_power_down_state) {
+       if (is_power_down_state != 0U) {
 #if ENABLE_RUNTIME_INSTRUMENTATION
 
                /*
@@ -232,7 +232,7 @@ exit:
 #endif
 
                /* The function calls below must not return */
-               if (psci_plat_pm_ops->pwr_domain_pwr_down_wfi)
+               if (psci_plat_pm_ops->pwr_domain_pwr_down_wfi != NULL)
                        psci_plat_pm_ops->pwr_domain_pwr_down_wfi(state_info);
                else
                        psci_power_down_wfi();
@@ -269,15 +269,15 @@ exit:
  * are called by the common finisher routine in psci_common.c. The `state_info`
  * is the psci_power_state from which this CPU has woken up from.
  ******************************************************************************/
-void psci_cpu_suspend_finish(unsigned int cpu_idx,
-                            psci_power_state_t *state_info)
+void psci_cpu_suspend_finish(int cpu_idx, const psci_power_state_t *state_info)
 {
        unsigned int counter_freq;
        unsigned int max_off_lvl;
 
        /* Ensure we have been woken up from a suspended state */
-       assert(psci_get_aff_info_state() == AFF_STATE_ON && is_local_state_off(\
-                       state_info->pwr_domain_state[PSCI_CPU_PWR_LVL]));
+       assert((psci_get_aff_info_state() == AFF_STATE_ON) &&
+               (is_local_state_off(
+                       state_info->pwr_domain_state[PSCI_CPU_PWR_LVL]) != 0));
 
        /*
         * Plat. management: Perform the platform specific actions
@@ -302,9 +302,9 @@ void psci_cpu_suspend_finish(unsigned int cpu_idx,
         * Dispatcher to let it do any bookeeping. If the handler encounters an
         * error, it's expected to assert within
         */
-       if (psci_spd_pm && psci_spd_pm->svc_suspend_finish) {
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_suspend_finish != NULL)) {
                max_off_lvl = psci_find_max_off_lvl(state_info);
-               assert (max_off_lvl != PSCI_INVALID_PWR_LVL);
+               assert(max_off_lvl != PSCI_INVALID_PWR_LVL);
                psci_spd_pm->svc_suspend_finish(max_off_lvl);
        }
 
index 13e9f4aae598f7db194aa889c4bfdacc44975967..7cac4e9376db4868f5a854d11e570ab0cdcfda67 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -16,14 +16,14 @@ void __dead2 psci_system_off(void)
 {
        psci_print_power_domain_map();
 
-       assert(psci_plat_pm_ops->system_off);
+       assert(psci_plat_pm_ops->system_off != NULL);
 
        /* Notify the Secure Payload Dispatcher */
-       if (psci_spd_pm && psci_spd_pm->svc_system_off) {
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_system_off != NULL)) {
                psci_spd_pm->svc_system_off();
        }
 
-       console_flush();
+       (void) console_flush();
 
        /* Call the platform specific hook */
        psci_plat_pm_ops->system_off();
@@ -35,14 +35,14 @@ void __dead2 psci_system_reset(void)
 {
        psci_print_power_domain_map();
 
-       assert(psci_plat_pm_ops->system_reset);
+       assert(psci_plat_pm_ops->system_reset != NULL);
 
        /* Notify the Secure Payload Dispatcher */
-       if (psci_spd_pm && psci_spd_pm->svc_system_reset) {
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_system_reset != NULL)) {
                psci_spd_pm->svc_system_reset();
        }
 
-       console_flush();
+       (void) console_flush();
 
        /* Call the platform specific hook */
        psci_plat_pm_ops->system_reset();
@@ -50,32 +50,34 @@ void __dead2 psci_system_reset(void)
        /* This function does not return. We should never get here */
 }
 
-int psci_system_reset2(uint32_t reset_type, u_register_t cookie)
+u_register_t psci_system_reset2(uint32_t reset_type, u_register_t cookie)
 {
-       int is_vendor;
+       unsigned int is_vendor;
 
        psci_print_power_domain_map();
 
-       assert(psci_plat_pm_ops->system_reset2);
+       assert(psci_plat_pm_ops->system_reset2 != NULL);
 
-       is_vendor = (reset_type >> PSCI_RESET2_TYPE_VENDOR_SHIFT) & 1;
-       if (!is_vendor) {
+       is_vendor = (reset_type >> PSCI_RESET2_TYPE_VENDOR_SHIFT) & 1U;
+       if (is_vendor == 0U) {
                /*
                 * Only WARM_RESET is allowed for architectural type resets.
                 */
                if (reset_type != PSCI_RESET2_SYSTEM_WARM_RESET)
-                       return PSCI_E_INVALID_PARAMS;
-               if (psci_plat_pm_ops->write_mem_protect &&
-                   psci_plat_pm_ops->write_mem_protect(0) < 0) {
-                       return PSCI_E_NOT_SUPPORTED;
+                       return (u_register_t) PSCI_E_INVALID_PARAMS;
+               if ((psci_plat_pm_ops->write_mem_protect != NULL) &&
+                   (psci_plat_pm_ops->write_mem_protect(0) < 0)) {
+                       return (u_register_t) PSCI_E_NOT_SUPPORTED;
                }
        }
 
        /* Notify the Secure Payload Dispatcher */
-       if (psci_spd_pm && psci_spd_pm->svc_system_reset) {
+       if ((psci_spd_pm != NULL) && (psci_spd_pm->svc_system_reset != NULL)) {
                psci_spd_pm->svc_system_reset();
        }
-       console_flush();
+       (void) console_flush();
 
-       return psci_plat_pm_ops->system_reset2(is_vendor, reset_type, cookie);
+       return (u_register_t)
+               psci_plat_pm_ops->system_reset2((int) is_vendor, reset_type,
+                                               cookie);
 }