From: Kevin Hilman <khilman@deeprootsystems.com> To: linux-omap@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, Rajendra Nayak <rnayak@ti.com> 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
WARNING: multiple messages have this Message-ID (diff)
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
next prev parent reply other threads:[~2009-10-22 23:10 UTC|newest] Thread overview: 78+ 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 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 01/32] OMAP3: PM: GPMC context save/restore Kevin Hilman 2009-10-22 23:09 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 02/32] OMAP3: PM: GPIO " Kevin Hilman 2009-10-22 23:09 ` Kevin Hilman 2009-10-22 23:09 ` Kevin Hilman [this message] 2009-10-22 23:09 ` [PATCH v2 03/32] OMAP3: PM: INTC " Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 04/32] OMAP3: PM: PRCM " Kevin Hilman 2009-10-22 23:09 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 05/32] OMAP3: PM: Populate scratchpad contents Kevin Hilman 2009-10-22 23:09 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 06/32] OMAP3: PM: SCM context save/restore Kevin Hilman 2009-10-22 23:09 ` 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 ` 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 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 09/32] OMAP3: PM: Restore MMU table entry Kevin Hilman 2009-10-22 23:09 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 10/32] OMAP3: PM: MPU off-mode support Kevin Hilman 2009-10-22 23:09 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 11/32] OMAP3: PM: CORE domain " Kevin Hilman 2009-10-22 23:09 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` 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 ` Kevin Hilman 2009-10-22 23:09 ` [PATCH v2 31/32] OMAP3: PM: Enable IO-CHAIN wakeup Kevin Hilman 2009-10-22 23:09 ` 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-10-22 23:09 ` Kevin Hilman 2009-11-13 10:05 ` [PATCH v2 26/32] OMAP3: PM debug: allow runtime toggle of PM features Gopinath, Thara 2009-11-13 10:05 ` Gopinath, Thara 2009-11-16 18:31 ` Kevin Hilman 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 8:32 ` Grazvydas Ignotas 2009-10-23 17:33 ` Kevin Hilman 2009-10-23 17:33 ` Kevin Hilman 2009-10-23 13:54 ` Venkatraman S 2009-10-23 13:54 ` Venkatraman S 2009-10-23 17:57 ` Kevin Hilman 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 \ --cc=linux-omap@vger.kernel.org \ --cc=rnayak@ti.com \ /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: linkBe 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.