diff options
author | Ray Poudrier <rapoudrier@nvidia.com> | 2012-03-01 16:35:11 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 01:00:14 -0700 |
commit | ccb91198ab63c9650f6c0544ec10b1ee34730385 (patch) | |
tree | 386df937cf34a87fff6f47b6cb03a626f9fe8885 /arch/arm/mach-tegra/tegra3_emc.c | |
parent | 4034b95a96a52e983c9e1685548ed55a6a644c22 (diff) |
ARM: tegra: emc: add eack_disable functionality
Bug 946110
Signed-off-by: Ray Poudrier <rapoudrier@nvidia.com>
Change-Id: I0d4c716c4ab7a60011018d6c13be4265cc9f7290
Reviewed-on: http://git-master/r/87061
(cherry picked from commit a7dad880dcea36fcb8223cf0b34cc1091d725a9f)
Reviewed-on: http://git-master/r/102360
Reviewed-by: Raymond Poudrier <rapoudrier@nvidia.com>
Tested-by: Raymond Poudrier <rapoudrier@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Rebase-Id: R2a3875bc982b2e6218188f3bf9259c37d2913b54
Diffstat (limited to 'arch/arm/mach-tegra/tegra3_emc.c')
-rw-r--r-- | arch/arm/mach-tegra/tegra3_emc.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/tegra3_emc.c b/arch/arm/mach-tegra/tegra3_emc.c index f27e3e174adf..e7b63285429b 100644 --- a/arch/arm/mach-tegra/tegra3_emc.c +++ b/arch/arm/mach-tegra/tegra3_emc.c @@ -342,6 +342,12 @@ static inline void disable_early_ack(u32 mc_override) override_val |= mc_override & MC_EMEM_ARB_OVERRIDE_EACK_MASK; } +static inline void enable_early_ack(u32 mc_override) +{ + mc_writel((mc_override | MC_EMEM_ARB_OVERRIDE_EACK_MASK), + MC_EMEM_ARB_OVERRIDE); +} + static inline bool dqs_preset(const struct tegra_emc_table *next_timing, const struct tegra_emc_table *last_timing) { @@ -1194,6 +1200,24 @@ int tegra_emc_set_over_temp_state(unsigned long state) return 0; } +int tegra_emc_set_eack_state(unsigned long state) +{ + unsigned long flags; + u32 mc_override; + + spin_lock_irqsave(&emc_access_lock, flags); + + mc_override = mc_readl(MC_EMEM_ARB_OVERRIDE); + + if (state) + enable_early_ack(mc_override); + else + disable_early_ack(mc_override); + + spin_unlock_irqrestore(&emc_access_lock, flags); + return 0; +} + #ifdef CONFIG_DEBUG_FS static struct dentry *emc_debugfs_root; @@ -1253,6 +1277,27 @@ static int over_temp_state_set(void *data, u64 val) DEFINE_SIMPLE_ATTRIBUTE(over_temp_state_fops, over_temp_state_get, over_temp_state_set, "%llu\n"); +static int eack_state_get(void *data, u64 *val) +{ + unsigned long flags; + u32 mc_override; + + spin_lock_irqsave(&emc_access_lock, flags); + mc_override = mc_readl(MC_EMEM_ARB_OVERRIDE); + spin_unlock_irqrestore(&emc_access_lock, flags); + + *val = (mc_override & MC_EMEM_ARB_OVERRIDE_EACK_MASK); + return 0; +} + +static int eack_state_set(void *data, u64 val) +{ + tegra_emc_set_eack_state(val); + return 0; +} +DEFINE_SIMPLE_ATTRIBUTE(eack_state_fops, eack_state_get, + eack_state_set, "%llu\n"); + static int __init tegra_emc_debug_init(void) { if (!tegra_emc_table) @@ -1274,6 +1319,10 @@ static int __init tegra_emc_debug_init(void) emc_debugfs_root, NULL, &over_temp_state_fops)) goto err_out; + if (!debugfs_create_file( + "eack_state", S_IRUGO | S_IWUGO, emc_debugfs_root, NULL, &eack_state_fops)) + goto err_out; + return 0; err_out: |