Commit 3ff448f9 authored by Kalyani Chidambaram Vaidyanathan's avatar Kalyani Chidambaram Vaidyanathan Committed by Varun Wadekar
Browse files

Tegra: add platform specific 'runtime_setup' handler



Tegra SoCs would like the flexibility to perform chip specific actions
before we complete cold boot. This patch introduces a platform specific
'runtime_setup' handler to provide that flexibility.

Change-Id: I13b2489f631f775cae6f92acf51a240cd036ef11
Signed-off-by: default avatarKalyani Chidambaram Vaidyanathan <kalyanic@nvidia.com>
parent 0da7e2dd
...@@ -253,31 +253,9 @@ void bl31_platform_setup(void) ...@@ -253,31 +253,9 @@ void bl31_platform_setup(void)
void bl31_plat_runtime_setup(void) void bl31_plat_runtime_setup(void)
{ {
/* /*
* During cold boot, it is observed that the arbitration * Platform specific runtime setup
* bit is set in the Memory controller leading to false
* error interrupts in the non-secure world. To avoid
* this, clean the interrupt status register before
* booting into the non-secure world
*/ */
tegra_memctrl_clear_pending_interrupts(); plat_runtime_setup();
/*
* During boot, USB3 and flash media (SDMMC/SATA) devices need
* access to IRAM. Because these clients connect to the MC and
* do not have a direct path to the IRAM, the MC implements AHB
* redirection during boot to allow path to IRAM. In this mode
* accesses to a programmed memory address aperture are directed
* to the AHB bus, allowing access to the IRAM. This mode must be
* disabled before we jump to the non-secure world.
*/
tegra_memctrl_disable_ahb_redirection();
#if defined(TEGRA_SMMU0_BASE)
/*
* Verify the integrity of the previously configured SMMU(s) settings
*/
tegra_smmu_verify();
#endif
/* /*
* Add final timestamp before exiting BL31. * Add final timestamp before exiting BL31.
......
...@@ -87,6 +87,7 @@ void plat_early_platform_setup(void); ...@@ -87,6 +87,7 @@ void plat_early_platform_setup(void);
void plat_late_platform_setup(void); void plat_late_platform_setup(void);
void plat_relocate_bl32_image(const image_info_t *bl32_img_info); void plat_relocate_bl32_image(const image_info_t *bl32_img_info);
bool plat_supports_system_suspend(void); bool plat_supports_system_suspend(void);
void plat_runtime_setup(void);
/* Declarations for plat_secondary.c */ /* Declarations for plat_secondary.c */
void plat_secondary_setup(void); void plat_secondary_setup(void);
......
...@@ -173,3 +173,29 @@ bool plat_supports_system_suspend(void) ...@@ -173,3 +173,29 @@ bool plat_supports_system_suspend(void)
{ {
return true; return true;
} }
/*******************************************************************************
* Platform specific runtime setup.
******************************************************************************/
void plat_runtime_setup(void)
{
/*
* During cold boot, it is observed that the arbitration
* bit is set in the Memory controller leading to false
* error interrupts in the non-secure world. To avoid
* this, clean the interrupt status register before
* booting into the non-secure world
*/
tegra_memctrl_clear_pending_interrupts();
/*
* During boot, USB3 and flash media (SDMMC/SATA) devices need
* access to IRAM. Because these clients connect to the MC and
* do not have a direct path to the IRAM, the MC implements AHB
* redirection during boot to allow path to IRAM. In this mode
* accesses to a programmed memory address aperture are directed
* to the AHB bus, allowing access to the IRAM. This mode must be
* disabled before we jump to the non-secure world.
*/
tegra_memctrl_disable_ahb_redirection();
}
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <mce.h> #include <mce.h>
#include <memctrl.h> #include <memctrl.h>
#include <smmu.h>
#include <tegra_def.h> #include <tegra_def.h>
#include <tegra_platform.h> #include <tegra_platform.h>
#include <tegra_private.h> #include <tegra_private.h>
...@@ -363,3 +364,34 @@ bool plat_supports_system_suspend(void) ...@@ -363,3 +364,34 @@ bool plat_supports_system_suspend(void)
{ {
return true; return true;
} }
/*******************************************************************************
* Platform specific runtime setup.
******************************************************************************/
void plat_runtime_setup(void)
{
/*
* During cold boot, it is observed that the arbitration
* bit is set in the Memory controller leading to false
* error interrupts in the non-secure world. To avoid
* this, clean the interrupt status register before
* booting into the non-secure world
*/
tegra_memctrl_clear_pending_interrupts();
/*
* During boot, USB3 and flash media (SDMMC/SATA) devices need
* access to IRAM. Because these clients connect to the MC and
* do not have a direct path to the IRAM, the MC implements AHB
* redirection during boot to allow path to IRAM. In this mode
* accesses to a programmed memory address aperture are directed
* to the AHB bus, allowing access to the IRAM. This mode must be
* disabled before we jump to the non-secure world.
*/
tegra_memctrl_disable_ahb_redirection();
/*
* Verify the integrity of the previously configured SMMU(s)
* settings
*/
tegra_smmu_verify();
}
...@@ -20,7 +20,9 @@ ...@@ -20,7 +20,9 @@
#include <bl31/interrupt_mgmt.h> #include <bl31/interrupt_mgmt.h>
#include <mce.h> #include <mce.h>
#include <mce_private.h> #include <mce_private.h>
#include <memctrl.h>
#include <plat/common/platform.h> #include <plat/common/platform.h>
#include <smmu.h>
#include <spe.h> #include <spe.h>
#include <tegra_def.h> #include <tegra_def.h>
#include <tegra_platform.h> #include <tegra_platform.h>
...@@ -414,3 +416,34 @@ bool plat_supports_system_suspend(void) ...@@ -414,3 +416,34 @@ bool plat_supports_system_suspend(void)
{ {
return true; return true;
} }
/*******************************************************************************
* Platform specific runtime setup.
******************************************************************************/
void plat_runtime_setup(void)
{
/*
* During cold boot, it is observed that the arbitration
* bit is set in the Memory controller leading to false
* error interrupts in the non-secure world. To avoid
* this, clean the interrupt status register before
* booting into the non-secure world
*/
tegra_memctrl_clear_pending_interrupts();
/*
* During boot, USB3 and flash media (SDMMC/SATA) devices need
* access to IRAM. Because these clients connect to the MC and
* do not have a direct path to the IRAM, the MC implements AHB
* redirection during boot to allow path to IRAM. In this mode
* accesses to a programmed memory address aperture are directed
* to the AHB bus, allowing access to the IRAM. This mode must be
* disabled before we jump to the non-secure world.
*/
tegra_memctrl_disable_ahb_redirection();
/*
* Verify the integrity of the previously configured SMMU(s) settings
*/
tegra_smmu_verify();
}
...@@ -291,3 +291,28 @@ bool plat_supports_system_suspend(void) ...@@ -291,3 +291,28 @@ bool plat_supports_system_suspend(void)
return false; return false;
} }
} }
/*******************************************************************************
* Platform specific runtime setup.
******************************************************************************/
void plat_runtime_setup(void)
{
/*
* During cold boot, it is observed that the arbitration
* bit is set in the Memory controller leading to false
* error interrupts in the non-secure world. To avoid
* this, clean the interrupt status register before
* booting into the non-secure world
*/
tegra_memctrl_clear_pending_interrupts();
/*
* During boot, USB3 and flash media (SDMMC/SATA) devices need
* access to IRAM. Because these clients connect to the MC and
* do not have a direct path to the IRAM, the MC implements AHB
* redirection during boot to allow path to IRAM. In this mode
* accesses to a programmed memory address aperture are directed
* to the AHB bus, allowing access to the IRAM. This mode must be
* disabled before we jump to the non-secure world.
*/
tegra_memctrl_disable_ahb_redirection();
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment