spl: at91: add support for SPL_AT91_MCK_BYPASS
[oweals/u-boot.git] / common / spl / spl_atf.c
index 63557c01e8c33417f13c1292bed11ed083a3def4..cddab6a73584e3565c2c8a177160fb1351418065 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: BSD-3-Clause
 /*
  * Reference to the ARM TF Project,
  * plat/arm/common/arm_bl2_setup.c
@@ -6,8 +7,6 @@
  * Copyright (C) 2016 Rockchip Electronic Co.,Ltd
  * Written by Kever Yang <kever.yang@rock-chips.com>
  * Copyright (C) 2017 Theobroma Systems Design und Consulting GmbH
- *
- * SPDX-License-Identifier:     BSD-3-Clause
  */
 
 #include <common.h>
@@ -50,13 +49,14 @@ static struct bl31_params *bl2_plat_get_bl31_params(uintptr_t bl33_entry)
                       ATF_PARAM_IMAGE_BINARY, ATF_VERSION_1, 0);
 
        /* Fill BL32 related information if it exists */
-#ifdef BL32_BASE
        bl2_to_bl31_params->bl32_ep_info = &bl31_params_mem.bl32_ep_info;
        SET_PARAM_HEAD(bl2_to_bl31_params->bl32_ep_info, ATF_PARAM_EP,
                       ATF_VERSION_1, 0);
        bl2_to_bl31_params->bl32_image_info = &bl31_params_mem.bl32_image_info;
        SET_PARAM_HEAD(bl2_to_bl31_params->bl32_image_info,
                       ATF_PARAM_IMAGE_BINARY, ATF_VERSION_1, 0);
+#ifndef BL32_BASE
+       bl2_to_bl31_params->bl32_ep_info->pc = 0;
 #endif /* BL32_BASE */
 
        /* Fill BL33 related information */
@@ -144,6 +144,7 @@ void spl_invoke_atf(struct spl_image_info *spl_image)
 {
        uintptr_t  bl33_entry = CONFIG_SYS_TEXT_BASE;
        void *blob = spl_image->fdt_addr;
+       uintptr_t platform_param = (uintptr_t)blob;
        int node;
 
        /*
@@ -157,9 +158,18 @@ void spl_invoke_atf(struct spl_image_info *spl_image)
        if (node >= 0)
                bl33_entry = spl_fit_images_get_entry(blob, node);
 
+       /*
+        * If ATF_NO_PLATFORM_PARAM is set, we override the platform
+        * parameter and always pass 0.  This is a workaround for
+        * older ATF versions that have insufficiently robust (or
+        * overzealous) argument validation.
+        */
+       if (CONFIG_IS_ENABLED(ATF_NO_PLATFORM_PARAM))
+               platform_param = 0;
+
        /*
         * We don't provide a BL3-2 entry yet, but this will be possible
         * using similar logic.
         */
-       bl31_entry(spl_image->entry_point, bl33_entry, (uintptr_t)blob);
+       bl31_entry(spl_image->entry_point, bl33_entry, platform_param);
 }