mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-23 21:44:15 +00:00
Tegra: memctrl: clean MC INT status before exit to bootloader
This patch cleans the Memory controller's interrupt status register, before exiting to the non-secure world during cold boot. This is required as we observed that the MC's arbitration bit is set before exiting the secure world. Change-Id: Iacd01994d03b3b9cbd7b8a57fe7ab5b04e607a9f Signed-off-by: Harvey Hsieh <hhsieh@nvidia.com>
This commit is contained in:
parent
b627d0837c
commit
650d9c521e
6 changed files with 34 additions and 0 deletions
|
@ -209,3 +209,16 @@ void tegra_memctrl_disable_ahb_redirection(void)
|
||||||
/* lock the aperture registers */
|
/* lock the aperture registers */
|
||||||
tegra_mc_write_32(MC_IRAM_REG_CTRL, MC_DISABLE_IRAM_CFG_WRITES);
|
tegra_mc_write_32(MC_IRAM_REG_CTRL, MC_DISABLE_IRAM_CFG_WRITES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tegra_memctrl_clear_pending_interrupts(void)
|
||||||
|
{
|
||||||
|
uint32_t mcerr;
|
||||||
|
|
||||||
|
/* check if there are any pending interrupts */
|
||||||
|
mcerr = mmio_read_32(TEGRA_MC_BASE + MC_INTSTATUS);
|
||||||
|
|
||||||
|
if (mcerr != (uint32_t)0U) { /* should not see error here */
|
||||||
|
WARN("MC_INTSTATUS = 0x%x (should be zero)\n", mcerr);
|
||||||
|
mmio_write_32((TEGRA_MC_BASE + MC_INTSTATUS), mcerr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -712,3 +712,8 @@ void tegra_memctrl_disable_ahb_redirection(void)
|
||||||
{
|
{
|
||||||
; /* do nothing */
|
; /* do nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tegra_memctrl_clear_pending_interrupts(void)
|
||||||
|
{
|
||||||
|
; /* do nothing */
|
||||||
|
}
|
||||||
|
|
|
@ -341,6 +341,15 @@ 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
|
||||||
|
* 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
|
* During boot, USB3 and flash media (SDMMC/SATA) devices need
|
||||||
* access to IRAM. Because these clients connect to the MC and
|
* access to IRAM. Because these clients connect to the MC and
|
||||||
|
|
|
@ -13,5 +13,6 @@ void tegra_memctrl_tzdram_setup(uint64_t phys_base, uint32_t size_in_bytes);
|
||||||
void tegra_memctrl_tzram_setup(uint64_t phys_base, uint32_t size_in_bytes);
|
void tegra_memctrl_tzram_setup(uint64_t phys_base, uint32_t size_in_bytes);
|
||||||
void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes);
|
void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes);
|
||||||
void tegra_memctrl_disable_ahb_redirection(void);
|
void tegra_memctrl_disable_ahb_redirection(void);
|
||||||
|
void tegra_memctrl_clear_pending_interrupts(void);
|
||||||
|
|
||||||
#endif /* MEMCTRL_H */
|
#endif /* MEMCTRL_H */
|
||||||
|
|
|
@ -83,6 +83,9 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define TEGRA_MC_BASE U(0x70019000)
|
#define TEGRA_MC_BASE U(0x70019000)
|
||||||
|
|
||||||
|
/* Memory Controller Interrupt Status */
|
||||||
|
#define MC_INTSTATUS 0x00U
|
||||||
|
|
||||||
/* TZDRAM carveout configuration registers */
|
/* TZDRAM carveout configuration registers */
|
||||||
#define MC_SECURITY_CFG0_0 U(0x70)
|
#define MC_SECURITY_CFG0_0 U(0x70)
|
||||||
#define MC_SECURITY_CFG1_0 U(0x74)
|
#define MC_SECURITY_CFG1_0 U(0x74)
|
||||||
|
|
|
@ -163,6 +163,9 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define TEGRA_MC_BASE U(0x70019000)
|
#define TEGRA_MC_BASE U(0x70019000)
|
||||||
|
|
||||||
|
/* Memory Controller Interrupt Status */
|
||||||
|
#define MC_INTSTATUS 0x00U
|
||||||
|
|
||||||
/* TZDRAM carveout configuration registers */
|
/* TZDRAM carveout configuration registers */
|
||||||
#define MC_SECURITY_CFG0_0 U(0x70)
|
#define MC_SECURITY_CFG0_0 U(0x70)
|
||||||
#define MC_SECURITY_CFG1_0 U(0x74)
|
#define MC_SECURITY_CFG1_0 U(0x74)
|
||||||
|
|
Loading…
Add table
Reference in a new issue