Commit d5bd0de6 authored by Varun Wadekar's avatar Varun Wadekar
Browse files

Tegra: memctrl_v2: platform handler for TZDRAM settings



The Tegra memctrl driver sets up the TZDRAM fence during boot and
system suspend exit. This patch provides individual platforms with
handlers to perform platform specific steps, e.g. enable encryption,
save base/size to secure scratch registers.

Change-Id: Ifaa2e0eac20b50f77ec734256544c36dd511bd63
Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
parent 7191566c
...@@ -25,6 +25,16 @@ ...@@ -25,6 +25,16 @@
static uint64_t video_mem_base; static uint64_t video_mem_base;
static uint64_t video_mem_size_mb; static uint64_t video_mem_size_mb;
/*
* The following platform setup functions are weakly defined. They
* provide typical implementations that will be overridden by a SoC.
*/
#pragma weak plat_memctrl_tzdram_setup
void plat_memctrl_tzdram_setup(uint64_t phys_base, uint64_t size_in_bytes)
{
; /* do nothing */
}
/* /*
* Init Memory controller during boot. * Init Memory controller during boot.
*/ */
...@@ -144,8 +154,6 @@ void tegra_memctrl_restore_settings(void) ...@@ -144,8 +154,6 @@ void tegra_memctrl_restore_settings(void)
*/ */
void tegra_memctrl_tzdram_setup(uint64_t phys_base, uint32_t size_in_bytes) void tegra_memctrl_tzdram_setup(uint64_t phys_base, uint32_t size_in_bytes)
{ {
uint32_t val;
/* /*
* Setup the Memory controller to allow only secure accesses to * Setup the Memory controller to allow only secure accesses to
* the TZDRAM carveout * the TZDRAM carveout
...@@ -157,21 +165,9 @@ void tegra_memctrl_tzdram_setup(uint64_t phys_base, uint32_t size_in_bytes) ...@@ -157,21 +165,9 @@ void tegra_memctrl_tzdram_setup(uint64_t phys_base, uint32_t size_in_bytes)
tegra_mc_write_32(MC_SECURITY_CFG1_0, size_in_bytes >> 20); tegra_mc_write_32(MC_SECURITY_CFG1_0, size_in_bytes >> 20);
/* /*
* When TZ encryption enabled, * Perform platform specific steps.
* We need setup TZDRAM before CPU to access TZ Carveout,
* otherwise CPU will fetch non-decrypted data.
* So save TZDRAM setting for restore by SC7 resume FW.
* Scratch registers map:
* RSV55_0 = CFG1[12:0] | CFG0[31:20]
* RSV55_1 = CFG3[1:0]
*/ */
plat_memctrl_tzdram_setup(phys_base, size_in_bytes);
val = tegra_mc_read_32(MC_SECURITY_CFG1_0) & MC_SECURITY_SIZE_MB_MASK;
val |= tegra_mc_read_32(MC_SECURITY_CFG0_0) & MC_SECURITY_BOM_MASK;
mmio_write_32(TEGRA_SCRATCH_BASE + SECURE_SCRATCH_RSV55_LO, val);
val = tegra_mc_read_32(MC_SECURITY_CFG3_0) & MC_SECURITY_BOM_HI_MASK;
mmio_write_32(TEGRA_SCRATCH_BASE + SECURE_SCRATCH_RSV55_HI, val);
/* /*
* MCE propagates the security configuration values across the * MCE propagates the security configuration values across the
......
...@@ -165,6 +165,14 @@ static inline void tegra_mc_streamid_write_32(uint32_t off, uint32_t val) ...@@ -165,6 +165,14 @@ static inline void tegra_mc_streamid_write_32(uint32_t off, uint32_t val)
******************************************************************************/ ******************************************************************************/
tegra_mc_settings_t *tegra_get_mc_settings(void); tegra_mc_settings_t *tegra_get_mc_settings(void);
#endif /* __ASSMEBLY__ */ /*******************************************************************************
* Handler to program the scratch registers with TZDRAM settings for the
* resume firmware.
*
* Implemented by SoCs under tegra/soc/txxx
******************************************************************************/
void plat_memctrl_tzdram_setup(uint64_t phys_base, uint64_t size_in_bytes);
#endif /* __ASSEMBLY__ */
#endif /* MEMCTRL_V2_H */ #endif /* MEMCTRL_V2_H */
...@@ -537,3 +537,32 @@ tegra_mc_settings_t *tegra_get_mc_settings(void) ...@@ -537,3 +537,32 @@ tegra_mc_settings_t *tegra_get_mc_settings(void)
{ {
return &tegra186_mc_settings; return &tegra186_mc_settings;
} }
/*******************************************************************************
* Handler to program the scratch registers with TZDRAM settings for the
* resume firmware
******************************************************************************/
void plat_memctrl_tzdram_setup(uint64_t phys_base, uint64_t size_in_bytes)
{
uint32_t val;
(void)phys_base;
(void)size_in_bytes;
/*
* When TZ encryption is enabled, we need to setup TZDRAM
* before CPU accesses TZ Carveout, else CPU will fetch
* non-decrypted data. So save TZDRAM setting for SC7 resume
* FW to restore.
*
* Scratch registers map:
* RSV55_0 = CFG1[12:0] | CFG0[31:20]
* RSV55_1 = CFG3[1:0]
*/
val = tegra_mc_read_32(MC_SECURITY_CFG1_0) & MC_SECURITY_SIZE_MB_MASK;
val |= tegra_mc_read_32(MC_SECURITY_CFG0_0) & MC_SECURITY_BOM_MASK;
mmio_write_32(TEGRA_SCRATCH_BASE + SECURE_SCRATCH_RSV55_LO, val);
val = tegra_mc_read_32(MC_SECURITY_CFG3_0) & MC_SECURITY_BOM_HI_MASK;
mmio_write_32(TEGRA_SCRATCH_BASE + SECURE_SCRATCH_RSV55_HI, val);
}
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