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 0821005..0327c28 100644 (file)
@@ -386,6 +386,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 ccc351b..6712291 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 @@ static int __init tegra30_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__);