Tegra: add 'late' platform setup handler
authorDilan Lee <dilee@nvidia.com>
Fri, 27 Oct 2017 01:51:09 +0000 (09:51 +0800)
committerVarun Wadekar <vwadekar@nvidia.com>
Wed, 23 Jan 2019 18:33:08 +0000 (10:33 -0800)
This patch adds a platform setup handler that gets called after
the MMU is enabled. Platforms wanting to make use of this handler
should declare 'plat_late_platform_setup' handler in their platform
files, to override the default weakly defined handler.

Change-Id: Ibc97a2e5a24608ddea856d0bd543a9d5876f604c
Signed-off-by: Dilan Lee <dilee@nvidia.com>
plat/nvidia/tegra/common/tegra_bl31_setup.c
plat/nvidia/tegra/include/tegra_private.h

index 4712b8ab6fc636065246b33c15a6aeb5346f05fc..908e4f2dd4d51a6101996bdbff3982ebb5b3a488 100644 (file)
@@ -70,6 +70,7 @@ extern uint64_t ns_image_entrypoint;
 #pragma weak plat_early_platform_setup
 #pragma weak plat_get_bl31_params
 #pragma weak plat_get_bl31_plat_params
+#pragma weak plat_late_platform_setup
 
 void plat_early_platform_setup(void)
 {
@@ -86,6 +87,11 @@ plat_params_from_bl2_t *plat_get_bl31_plat_params(void)
        return NULL;
 }
 
+void plat_late_platform_setup(void)
+{
+       ; /* do nothing */
+}
+
 /*******************************************************************************
  * Return a pointer to the 'entry_point_info' structure of the next image for
  * security state specified. BL33 corresponds to the non-secure image type
@@ -328,6 +334,13 @@ void bl31_platform_setup(void)
         */
        tegra_memctrl_tzram_setup(TEGRA_TZRAM_BASE, TEGRA_TZRAM_SIZE);
 
+       /*
+        * Late setup handler to allow platforms to performs additional
+        * functionality.
+        * This handler gets called with MMU enabled.
+        */
+       plat_late_platform_setup();
+
        /*
         * Add timestamp for platform setup exit.
         */
index f55f5df604e1eb85def7820fafbf94299fa23d4d..68b462425e014f3996ab5dc251be5d460cf72d64 100644 (file)
@@ -75,6 +75,8 @@ uint32_t plat_get_console_from_id(int32_t id);
 void plat_gic_setup(void);
 struct tegra_bl31_params *plat_get_bl31_params(void);
 plat_params_from_bl2_t *plat_get_bl31_plat_params(void);
+void plat_early_platform_setup(void);
+void plat_late_platform_setup(void);
 
 /* Declarations for plat_secondary.c */
 void plat_secondary_setup(void);
@@ -126,7 +128,6 @@ int tegra_prepare_cpu_on_finish(unsigned long mpidr);
 /* Declarations for tegra_bl31_setup.c */
 plat_params_from_bl2_t *bl31_get_plat_params(void);
 int32_t bl31_check_ns_address(uint64_t base, uint64_t size_in_bytes);
-void plat_early_platform_setup(void);
 
 /* Declarations for tegra_delay_timer.c */
 void tegra_delay_timer_init(void);