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

Tegra186: memctrl_v2: restore video memory settings



The memory controller loses its settings when the device enters system
suspend state.

This patch adds a handler to restore the Video Memory settings in the
memory controller, which would be called after exiting the system suspend
state.

Change-Id: I1ac12426d7290ac1452983d3c9e05fabbf3327fa
Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
parent 4122151f
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <memctrl.h> #include <memctrl.h>
#include <memctrl_v2.h> #include <memctrl_v2.h>
#include <mmio.h> #include <mmio.h>
#include <smmu.h>
#include <string.h> #include <string.h>
#include <tegra_def.h> #include <tegra_def.h>
#include <xlat_tables.h> #include <xlat_tables.h>
...@@ -234,7 +235,7 @@ const static mc_txn_override_cfg_t mc_override_cfgs[] = { ...@@ -234,7 +235,7 @@ const static mc_txn_override_cfg_t mc_override_cfgs[] = {
}; };
/* /*
* Init SMMU. * Init Memory controller during boot.
*/ */
void tegra_memctrl_setup(void) void tegra_memctrl_setup(void)
{ {
...@@ -248,9 +249,7 @@ void tegra_memctrl_setup(void) ...@@ -248,9 +249,7 @@ void tegra_memctrl_setup(void)
INFO("Tegra Memory Controller (v2)\n"); INFO("Tegra Memory Controller (v2)\n");
/* Program the SMMU pagesize */ /* Program the SMMU pagesize */
val = tegra_smmu_read_32(ARM_SMMU_GSR0_SECURE_ACR); tegra_smmu_init();
val |= ARM_SMMU_GSR0_PGSIZE_64K;
tegra_smmu_write_32(ARM_SMMU_GSR0_SECURE_ACR, val);
/* Program all the Stream ID overrides */ /* Program all the Stream ID overrides */
for (i = 0; i < num_overrides; i++) for (i = 0; i < num_overrides; i++)
...@@ -316,7 +315,13 @@ void tegra_memctrl_setup(void) ...@@ -316,7 +315,13 @@ void tegra_memctrl_setup(void)
} }
} }
}
/*
* Restore Memory Controller settings after "System Suspend"
*/
void tegra_memctrl_restore_settings(void)
{
/* video memory carveout region */ /* video memory carveout region */
if (video_mem_base) { if (video_mem_base) {
tegra_mc_write_32(MC_VIDEO_PROTECT_BASE_LO, tegra_mc_write_32(MC_VIDEO_PROTECT_BASE_LO,
......
...@@ -308,14 +308,6 @@ typedef struct mc_txn_override_cfg { ...@@ -308,14 +308,6 @@ typedef struct mc_txn_override_cfg {
.cgid_tag = MC_TXN_OVERRIDE_ ## val \ .cgid_tag = MC_TXN_OVERRIDE_ ## val \
} }
/*******************************************************************************
* Memory Controller SMMU Global Secure Aux. Configuration Register
******************************************************************************/
#define ARM_SMMU_GSR0_SECURE_ACR 0x10
#define ARM_SMMU_GSR0_PGSIZE_SHIFT 16
#define ARM_SMMU_GSR0_PGSIZE_4K (0 << ARM_SMMU_GSR0_PGSIZE_SHIFT)
#define ARM_SMMU_GSR0_PGSIZE_64K (1 << ARM_SMMU_GSR0_PGSIZE_SHIFT)
/******************************************************************************* /*******************************************************************************
* Structure to hold the Stream ID to use to override client inputs * Structure to hold the Stream ID to use to override client inputs
******************************************************************************/ ******************************************************************************/
...@@ -396,14 +388,4 @@ static inline void tegra_mc_streamid_write_32(uint32_t off, uint32_t val) ...@@ -396,14 +388,4 @@ static inline void tegra_mc_streamid_write_32(uint32_t off, uint32_t val)
mmio_write_32(TEGRA_MC_STREAMID_BASE + off, val); mmio_write_32(TEGRA_MC_STREAMID_BASE + off, val);
} }
static inline uint32_t tegra_smmu_read_32(uint32_t off)
{
return mmio_read_32(TEGRA_SMMU_BASE + off);
}
static inline void tegra_smmu_write_32(uint32_t off, uint32_t val)
{
mmio_write_32(TEGRA_SMMU_BASE + off, val);
}
#endif /* __MEMCTRLV2_H__ */ #endif /* __MEMCTRLV2_H__ */
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