linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: khilman@deeprootsystems.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 03/32] OMAP3: PM: INTC context save/restore
Date: Thu, 22 Oct 2009 16:09:24 -0700	[thread overview]
Message-ID: <1256252993-24328-4-git-send-email-khilman@deeprootsystems.com> (raw)
In-Reply-To: <1256252993-24328-3-git-send-email-khilman@deeprootsystems.com>

From: Rajendra Nayak <rnayak@ti.com>

Add context save and restore for the INTC module to support off-mode.

Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-omap2/irq.c              |   66 ++++++++++++++++++++++++++++++++
 arch/arm/plat-omap/include/plat/irqs.h |    5 ++
 2 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c
index 1db121f..ebd3538 100644
--- a/arch/arm/mach-omap2/irq.c
+++ b/arch/arm/mach-omap2/irq.c
@@ -25,6 +25,10 @@
 #define INTC_SYSSTATUS		0x0014
 #define INTC_SIR		0x0040
 #define INTC_CONTROL		0x0048
+#define INTC_PROTECTION		0x004C
+#define INTC_IDLE		0x0050
+#define INTC_THRESHOLD		0x0068
+#define INTC_MIR0		0x0084
 #define INTC_MIR_CLEAR0		0x0088
 #define INTC_MIR_SET0		0x008c
 #define INTC_PENDING_IRQ0	0x0098
@@ -48,6 +52,18 @@ static struct omap_irq_bank {
 	},
 };
 
+/* Structure to save interrupt controller context */
+struct omap3_intc_regs {
+	u32 sysconfig;
+	u32 protection;
+	u32 idle;
+	u32 threshold;
+	u32 ilr[INTCPS_NR_IRQS];
+	u32 mir[INTCPS_NR_MIR_REGS];
+};
+
+static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)];
+
 /* INTC bank register get/set */
 
 static void intc_bank_write_reg(u32 val, struct omap_irq_bank *bank, u16 reg)
@@ -209,3 +225,53 @@ void __init omap_init_irq(void)
 	}
 }
 
+#ifdef CONFIG_ARCH_OMAP3
+void omap_intc_save_context(void)
+{
+	int ind = 0, i = 0;
+	for (ind = 0; ind < ARRAY_SIZE(irq_banks); ind++) {
+		struct omap_irq_bank *bank = irq_banks + ind;
+		intc_context[ind].sysconfig =
+			intc_bank_read_reg(bank, INTC_SYSCONFIG);
+		intc_context[ind].protection =
+			intc_bank_read_reg(bank, INTC_PROTECTION);
+		intc_context[ind].idle =
+			intc_bank_read_reg(bank, INTC_IDLE);
+		intc_context[ind].threshold =
+			intc_bank_read_reg(bank, INTC_THRESHOLD);
+		for (i = 0; i < INTCPS_NR_IRQS; i++)
+			intc_context[ind].ilr[i] =
+				intc_bank_read_reg(bank, (0x100 + 0x4*ind));
+		for (i = 0; i < INTCPS_NR_MIR_REGS; i++)
+			intc_context[ind].mir[i] =
+				intc_bank_read_reg(&irq_banks[0], INTC_MIR0 +
+				(0x20 * i));
+	}
+}
+
+void omap_intc_restore_context(void)
+{
+	int ind = 0, i = 0;
+
+	for (ind = 0; ind < ARRAY_SIZE(irq_banks); ind++) {
+		struct omap_irq_bank *bank = irq_banks + ind;
+		intc_bank_write_reg(intc_context[ind].sysconfig,
+					bank, INTC_SYSCONFIG);
+		intc_bank_write_reg(intc_context[ind].sysconfig,
+					bank, INTC_SYSCONFIG);
+		intc_bank_write_reg(intc_context[ind].protection,
+					bank, INTC_PROTECTION);
+		intc_bank_write_reg(intc_context[ind].idle,
+					bank, INTC_IDLE);
+		intc_bank_write_reg(intc_context[ind].threshold,
+					bank, INTC_THRESHOLD);
+		for (i = 0; i < INTCPS_NR_IRQS; i++)
+			intc_bank_write_reg(intc_context[ind].ilr[i],
+				bank, (0x100 + 0x4*ind));
+		for (i = 0; i < INTCPS_NR_MIR_REGS; i++)
+			intc_bank_write_reg(intc_context[ind].mir[i],
+				 &irq_banks[0], INTC_MIR0 + (0x20 * i));
+	}
+	/* MIRs are saved and restore with other PRCM registers */
+}
+#endif /* CONFIG_ARCH_OMAP3 */
diff --git a/arch/arm/plat-omap/include/plat/irqs.h b/arch/arm/plat-omap/include/plat/irqs.h
index 6a6d028..ce5dd2d 100644
--- a/arch/arm/plat-omap/include/plat/irqs.h
+++ b/arch/arm/plat-omap/include/plat/irqs.h
@@ -477,9 +477,14 @@
 
 #define OMAP_IRQ_BIT(irq)	(1 << ((irq) % 32))
 
+#define INTCPS_NR_MIR_REGS	3
+#define INTCPS_NR_IRQS		96
+
 #ifndef __ASSEMBLY__
 extern void omap_init_irq(void);
 extern int omap_irq_pending(void);
+void omap_intc_save_context(void);
+void omap_intc_restore_context(void);
 #endif
 
 #include <mach/hardware.h>
-- 
1.6.4.3

  reply	other threads:[~2009-10-22 23:09 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-22 23:09 [PATCH v2 00/32] OMAP3: PM: base off-mode support Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 01/32] OMAP3: PM: GPMC context save/restore Kevin Hilman
2009-10-22 23:09   ` [PATCH v2 02/32] OMAP3: PM: GPIO " Kevin Hilman
2009-10-22 23:09     ` Kevin Hilman [this message]
2009-10-22 23:09       ` [PATCH v2 04/32] OMAP3: PM: PRCM " Kevin Hilman
2009-10-22 23:09         ` [PATCH v2 05/32] OMAP3: PM: Populate scratchpad contents Kevin Hilman
2009-10-22 23:09           ` [PATCH v2 06/32] OMAP3: PM: SCM context save/restore Kevin Hilman
2009-10-22 23:09             ` [PATCH v2 07/32] OMAP3: PM: restore SRAM functions after off-mode Kevin Hilman
2009-10-22 23:09               ` [PATCH v2 08/32] OMAP3: PM: handle PER/NEON/CORE in idle Kevin Hilman
2009-10-22 23:09                 ` [PATCH v2 09/32] OMAP3: PM: Restore MMU table entry Kevin Hilman
2009-10-22 23:09                   ` [PATCH v2 10/32] OMAP3: PM: MPU off-mode support Kevin Hilman
2009-10-22 23:09                     ` [PATCH v2 11/32] OMAP3: PM: CORE domain " Kevin Hilman
2009-10-22 23:09                       ` [PATCH v2 12/32] OMAP: PM: DMA context save/restore for " Kevin Hilman
2009-10-22 23:09                         ` [PATCH v2 13/32] OMAP3 PM: off-mode support for HS/EMU devices Kevin Hilman
2009-10-22 23:09                           ` [PATCH v2 14/32] OMAP3: PM: save secure RAM only during init Kevin Hilman
2009-10-22 23:09                             ` [PATCH v2 15/32] OMAP3: PM: Enable SDRAM auto-refresh during sleep Kevin Hilman
2009-10-22 23:09                               ` [PATCH v2 16/32] OMAP3: PM: Save and restore also CM_CLKSEL1_PLL_IVA2 Kevin Hilman
2009-10-22 23:09                                 ` [PATCH v2 17/32] OMAP3: PM: Fix secure SRAM context save/restore Kevin Hilman
2009-10-22 23:09                                   ` [PATCH v2 18/32] ARM: OMAP: SMS: save/restore of SMS_SYSCONFIG for off-mode Kevin Hilman
2009-10-22 23:09                                     ` [PATCH v2 19/32] OMAP3: PM: Fix PLL_MOD CLKEN offset in scratchpad Kevin Hilman
2009-10-22 23:09                                       ` [PATCH v2 20/32] OMAP: PM: Clear DMA channel state after a wakeup Kevin Hilman
2009-10-22 23:09                                         ` [PATCH v2 21/32] OMAP: Store reboot mode in scratchpad on OMAP34xx Kevin Hilman
2009-10-22 23:09                                           ` [PATCH v2 22/32] OMAP3: PM: SDRC auto-refresh workaround for off-mode Kevin Hilman
2009-10-22 23:09                                             ` [PATCH v2 23/32] OMAP3: PM: Fix INTC context save/restore Kevin Hilman
2009-10-22 23:09                                               ` [PATCH v2 24/32] PM: Disable usb host HW save and restore Kevin Hilman
2009-10-22 23:09                                                 ` [PATCH v2 25/32] OMAP3: PM: Wait for SDRC ready iso a blind delay Kevin Hilman
2009-10-22 23:09                                                   ` [PATCH v2 26/32] OMAP3: PM debug: allow runtime toggle of PM features Kevin Hilman
2009-10-22 23:09                                                     ` [PATCH v2 27/32] PM debug: allow configurable wakeup from suspend on OMAP GPtimer Kevin Hilman
2009-10-22 23:09                                                       ` [PATCH v2 28/32] OMAP3: PM: decouple PER and CORE context save and restore Kevin Hilman
2009-10-22 23:09                                                         ` [PATCH v2 29/32] OMAP3: PM: Prevent PER from going OFF when CORE is going INA Kevin Hilman
2009-10-22 23:09                                                           ` [PATCH v2 30/32] OMAP3: PM: MPU and CORE should stay awake if there is CAM domain ACTIVE Kevin Hilman
2009-10-22 23:09                                                             ` [PATCH v2 31/32] OMAP3: PM: Enable IO-CHAIN wakeup Kevin Hilman
2009-10-22 23:09                                                               ` [PATCH v2 32/32] OMAP3: PM: Program SDRC to send self refresh on timeout of AUTO_CNT Kevin Hilman
2009-11-13 10:05                                                     ` [PATCH v2 26/32] OMAP3: PM debug: allow runtime toggle of PM features Gopinath, Thara
2009-11-16 18:31                                                       ` Kevin Hilman
2009-10-23  8:32                         ` [PATCH v2 12/32] OMAP: PM: DMA context save/restore for off-mode support Grazvydas Ignotas
2009-10-23 17:33                           ` Kevin Hilman
2009-10-23 13:54                         ` Venkatraman S
2009-10-23 17:57                           ` Kevin Hilman

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=1256252993-24328-4-git-send-email-khilman@deeprootsystems.com \
    --to=khilman@deeprootsystems.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).