ARM: tegra3: Make MC early ack feature configurable.
Manoj Chourasia [Wed, 21 Mar 2012 08:58:58 +0000 (13:58 +0530)]
Add a config option to configure early acknowlegement
from memory controller.

Early acknowledgement is feature of memory controller
where MC acknowledged immediately to any write requests
from CPU. To maintain mermory coherency all the read
requests are blocked till all the early-acked writes
have reached to a point of coherency.

bug 943638

Change-Id: I97f30261c4711fc338b007502b6eef7217ddb6cb
Signed-off-by: Manoj Chourasia <mchourasia@nvidia.com>
Reviewed-on: http://git-master/r/91477
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>

arch/arm/mach-tegra/Kconfig
arch/arm/mach-tegra/common-t3.c

index fc3e755..90d66a1 100644 (file)
@@ -361,6 +361,15 @@ config TEGRA_AUTO_HOTPLUG
          high/low power CPU clusters automatically, corresponding to
          CPU frequency scaling.
 
+config TEGRA_MC_EARLY_ACK
+       bool "Enable early acknowledgement from mermory controller"
+       depends on ARCH_TEGRA_3x_SOC
+       default y
+       help
+         This option enables early acknowledgement from memory
+         controller. This feature is used to improve CPU memory
+         write performance.
+
 config TEGRA_MC_PROFILE
        tristate "Enable profiling memory controller utilization"
        default y
index 1a9bd75..2da656f 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Tegra 3 SoC-specific initialization (memory controller, etc.)
  *
- * Copyright (c) 2010-2011, NVIDIA Corporation.
+ * Copyright (c) 2010-2012, NVIDIA Corporation.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -248,10 +248,11 @@ int __init tegra_mc_init(void)
        reg = 0x0F7F1010;
        writel(reg, mc + MC_RESERVED_RSV);
 
+#if defined(CONFIG_TEGRA_MC_EARLY_ACK)
        reg = readl(mc + MC_EMEM_ARB_OVERRIDE);
        reg |= 3;
        writel(reg, mc + MC_EMEM_ARB_OVERRIDE);
-
+#endif
        if (request_irq(INT_MC_GENERAL, tegra_mc_error_isr, 0,
                        "mc_status", NULL)) {
                pr_err("%s: unable to register MC error interrupt\n", __func__);