All of lore.kernel.org
 help / color / mirror / Atom feed
From: dwalker@codeaurora.org (Daniel Walker)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC 04/18] arm: cache-l2x0: add l2x0 suspend and resume functions
Date: Mon, 11 Jan 2010 14:47:23 -0800	[thread overview]
Message-ID: <1263250057-26692-5-git-send-email-dwalker@codeaurora.org> (raw)
In-Reply-To: <1263250057-26692-1-git-send-email-dwalker@codeaurora.org>

From: Willie Ruan <wruan@quicinc.com>

Suspend function should be called before L2 cache power is turned off
to save power. Resume function should be called when the power is
reapplied.

Signed-off-by: Willie Ruan <wruan@quicinc.com>
Signed-off-by: Daniel Walker <dwalker@codeaurora.org>
---
 arch/arm/include/asm/hardware/cache-l2x0.h |    3 ++
 arch/arm/mm/cache-l2x0.c                   |   29 ++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/arch/arm/include/asm/hardware/cache-l2x0.h b/arch/arm/include/asm/hardware/cache-l2x0.h
index cdb9022..a86b948 100644
--- a/arch/arm/include/asm/hardware/cache-l2x0.h
+++ b/arch/arm/include/asm/hardware/cache-l2x0.h
@@ -55,4 +55,7 @@
 extern void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask);
 #endif
 
+extern void l2x0_suspend(void);
+extern void l2x0_resume(int collapsed);
+
 #endif
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
index cb8fc65..05765f6 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -2,6 +2,7 @@
  * arch/arm/mm/cache-l2x0.c - L210/L220 cache controller support
  *
  * Copyright (C) 2007 ARM Limited
+ * Copyright (c) 2009, Code Aurora Forum. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -26,6 +27,7 @@
 #define CACHE_LINE_SIZE		32
 
 static void __iomem *l2x0_base;
+static uint32_t aux_ctrl_save;
 static DEFINE_SPINLOCK(l2x0_lock);
 
 static inline void cache_wait(void __iomem *reg, unsigned long mask)
@@ -54,6 +56,13 @@ static inline void l2x0_inv_all(void)
 	spin_unlock_irqrestore(&l2x0_lock, flags);
 }
 
+static inline void l2x0_flush_all(void)
+{
+	/* clean and invalidate all ways */
+	sync_writel(0xff, L2X0_CLEAN_INV_WAY, 0xff);
+	cache_sync();
+}
+
 static void l2x0_inv_range(unsigned long start, unsigned long end)
 {
 	void __iomem *base = l2x0_base;
@@ -176,3 +185,23 @@ void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)
 
 	printk(KERN_INFO "L2X0 cache controller enabled\n");
 }
+
+void l2x0_suspend(void)
+{
+	/* Save aux control register value */
+	aux_ctrl_save = readl(l2x0_base + L2X0_AUX_CTRL);
+	/* Flush all cache */
+	l2x0_flush_all();
+	/* Disable the cache */
+	writel(0, l2x0_base + L2X0_CTRL);
+}
+
+void l2x0_resume(int collapsed)
+{
+	if (collapsed)
+		/* Restore aux control register value */
+		writel(aux_ctrl_save, l2x0_base + L2X0_AUX_CTRL);
+
+	/* Enable the cache */
+	writel(1, l2x0_base + L2X0_CTRL);
+}
-- 
1.6.3.3

  parent reply	other threads:[~2010-01-11 22:47 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-11 22:47 [RFC 00/18] generic arm needed for msm Daniel Walker
2010-01-11 22:47 ` [RFC 01/18] arm: msm: allow ARCH_MSM to have v7 cpus Daniel Walker
2010-01-11 22:47 ` [RFC 02/18] arm: msm: add oprofile pmu support Daniel Walker
2010-01-11 22:47 ` [RFC 03/18] arm: boot: remove old ARM ID for QSD Daniel Walker
2010-01-15 21:26   ` Russell King - ARM Linux
2010-01-11 22:47 ` Daniel Walker [this message]
2010-01-11 23:44   ` [RFC 04/18] arm: cache-l2x0: add l2x0 suspend and resume functions Russell King - ARM Linux
2010-01-12  0:52     ` Ruan, Willie
2010-01-11 22:47 ` [RFC 05/18] arm: msm: implement ioremap_strongly_ordered Daniel Walker
2010-01-11 23:37   ` Russell King - ARM Linux
2010-01-28 23:04     ` Larry Bassel
2010-02-03 14:59       ` Russell King - ARM Linux
2010-01-11 22:47 ` [RFC 06/18] arm: msm: implement proper dmb() for 7x27 Daniel Walker
2010-01-11 23:39   ` Russell King - ARM Linux
2010-01-11 23:45     ` Daniel Walker
2010-01-12  0:01       ` Russell King - ARM Linux
2010-01-19 17:28         ` Jamie Lokier
2010-01-19 18:04           ` Russell King - ARM Linux
2010-01-19 21:12             ` Jamie Lokier
2010-01-19 23:11               ` Russell King - ARM Linux
2010-01-19 17:16   ` Jamie Lokier
2010-01-11 22:47 ` [RFC 07/18] arm: mm: retry on QSD icache parity errors Daniel Walker
2010-01-18 18:42   ` Ashwin Chaugule
2010-01-19 16:16     ` Ashwin Chaugule
2010-01-11 22:47 ` [RFC 08/18] arm: msm: set L2CR1 to enable prefetch and burst on Scorpion Daniel Walker
2010-01-11 23:45   ` Russell King - ARM Linux
2010-01-12 10:51     ` [RFC 08/18] arm: msm: set L2CR1 to enable prefetch and burston Scorpion Catalin Marinas
2010-01-12 11:23       ` Shilimkar, Santosh
2010-01-12 11:44       ` Russell King - ARM Linux
2010-01-12 13:32         ` [RFC 08/18] arm: msm: set L2CR1 to enable prefetch and burstonScorpion Catalin Marinas
2010-01-12 13:58           ` Russell King - ARM Linux
2010-01-12 14:41             ` [RFC 08/18] arm: msm: set L2CR1 to enable prefetch andburstonScorpion Catalin Marinas
2010-01-12 18:23               ` Daniel Walker
2010-01-13 10:36                 ` Catalin Marinas
2010-01-19 17:38                   ` Jamie Lokier
2010-01-13  6:14           ` [RFC 08/18] arm: msm: set L2CR1 to enable prefetch and burstonScorpion Shilimkar, Santosh
2010-01-12 20:21         ` [RFC 08/18] arm: msm: set L2CR1 to enable prefetch and burston Scorpion Nicolas Pitre
2010-01-11 22:47 ` [RFC 09/18] arm: mm: support error reporting in L1/L2 caches on QSD Daniel Walker
2010-01-11 22:47 ` [RFC 10/18] arm: mm: enable L2X0 to use L2 cache on MSM7X27 Daniel Walker
2010-01-11 22:47 ` [RFC 11/18] arm: msm: add ARCH_MSM_SCORPION to CPU_V7 Daniel Walker
2010-01-11 23:13   ` Russell King - ARM Linux
2010-01-11 23:17     ` Daniel Walker
2010-01-11 22:47 ` [RFC 12/18] arm: msm: Enable frequency scaling Daniel Walker
2010-01-11 22:47 ` [RFC 13/18] arm: msm: define HAVE_CLK for ARCH_MSM Daniel Walker
2010-01-11 22:47 ` [RFC 14/18] arm: msm: add v7 support for compiler version-4.1.1 Daniel Walker
2010-01-11 23:07   ` Russell King - ARM Linux
2010-01-11 22:47 ` [RFC 15/18] arm: vfp: Add additional vfp interfaces Daniel Walker
2010-01-11 22:47 ` [RFC 16/18] arm: msm: add arch_has_speculative_dfetch() Daniel Walker
2010-01-11 23:33   ` Russell King - ARM Linux
2010-01-12  0:28     ` Daniel Walker
2010-01-12  8:59       ` Russell King - ARM Linux
2010-01-11 22:47 ` [RFC 17/18] arm: mm: Add SW emulation for ARM domain manager feature Daniel Walker
2010-01-25 16:40   ` Catalin Marinas
2010-01-25 17:04     ` Nicolas Pitre
2010-01-25 18:25     ` Daniel Walker
2010-03-22 18:11     ` Daniel Walker
2010-03-22 18:58       ` Nicolas Pitre
2010-03-22 20:01         ` Daniel Walker
2010-03-22 20:32           ` Nicolas Pitre
2010-03-23 10:04             ` Catalin Marinas
2010-01-11 22:47 ` [RFC 18/18] arm: mm: qsd8x50: Fix incorrect permission faults Daniel Walker
2010-01-11 23:11   ` Russell King - ARM Linux
2010-01-19 17:10     ` Jamie Lokier
2010-01-19 17:33       ` Daniel Walker
2010-01-19 17:43         ` Jamie Lokier
2010-01-19 17:49           ` Daniel Walker
2010-01-19 18:09           ` Russell King - ARM Linux
2010-02-04  0:09       ` David Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1263250057-26692-5-git-send-email-dwalker@codeaurora.org \
    --to=dwalker@codeaurora.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.