mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 12:50:51 +07:00
OMAP: Add new function to check wether there is irq pending
Add common omap2/3 function to check wether there is irq pending. Switch to use it in omap2 pm code instead of its own. Signed-off-by: Jouni Hogander <jouni.hogander@nokia.com> Signed-off-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
This commit is contained in:
parent
8bd2294922
commit
94434535bd
@ -28,7 +28,6 @@
|
|||||||
#define INTC_MIR_CLEAR0 0x0088
|
#define INTC_MIR_CLEAR0 0x0088
|
||||||
#define INTC_MIR_SET0 0x008c
|
#define INTC_MIR_SET0 0x008c
|
||||||
#define INTC_PENDING_IRQ0 0x0098
|
#define INTC_PENDING_IRQ0 0x0098
|
||||||
|
|
||||||
/* Number of IRQ state bits in each MIR register */
|
/* Number of IRQ state bits in each MIR register */
|
||||||
#define IRQ_BITS_PER_REG 32
|
#define IRQ_BITS_PER_REG 32
|
||||||
|
|
||||||
@ -156,6 +155,22 @@ static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank)
|
|||||||
intc_bank_write_reg(1 << 0, bank, INTC_SYSCONFIG);
|
intc_bank_write_reg(1 << 0, bank, INTC_SYSCONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int omap_irq_pending(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(irq_banks); i++) {
|
||||||
|
struct omap_irq_bank *bank = irq_banks + i;
|
||||||
|
int irq;
|
||||||
|
|
||||||
|
for (irq = 0; irq < bank->nr_irqs; irq += 32)
|
||||||
|
if (intc_bank_read_reg(bank, INTC_PENDING_IRQ0 +
|
||||||
|
((irq >> 5) << 5)))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void __init omap_init_irq(void)
|
void __init omap_init_irq(void)
|
||||||
{
|
{
|
||||||
unsigned long nr_of_irqs = 0;
|
unsigned long nr_of_irqs = 0;
|
||||||
|
@ -76,19 +76,6 @@ static int omap2_fclks_active(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int omap2_irq_pending(void)
|
|
||||||
{
|
|
||||||
u32 pending_reg = 0x480fe098;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
if (omap_readl(pending_reg))
|
|
||||||
return 1;
|
|
||||||
pending_reg += 0x20;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void omap2_enter_full_retention(void)
|
static void omap2_enter_full_retention(void)
|
||||||
{
|
{
|
||||||
u32 l;
|
u32 l;
|
||||||
@ -127,7 +114,7 @@ static void omap2_enter_full_retention(void)
|
|||||||
|
|
||||||
/* One last check for pending IRQs to avoid extra latency due
|
/* One last check for pending IRQs to avoid extra latency due
|
||||||
* to sleeping unnecessarily. */
|
* to sleeping unnecessarily. */
|
||||||
if (omap2_irq_pending())
|
if (omap_irq_pending())
|
||||||
goto no_sleep;
|
goto no_sleep;
|
||||||
|
|
||||||
/* Jump to SRAM suspend code */
|
/* Jump to SRAM suspend code */
|
||||||
@ -262,13 +249,13 @@ static void omap2_pm_idle(void)
|
|||||||
local_fiq_disable();
|
local_fiq_disable();
|
||||||
|
|
||||||
if (!omap2_can_sleep()) {
|
if (!omap2_can_sleep()) {
|
||||||
if (omap2_irq_pending())
|
if (omap_irq_pending())
|
||||||
goto out;
|
goto out;
|
||||||
omap2_enter_mpu_retention();
|
omap2_enter_mpu_retention();
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (omap2_irq_pending())
|
if (omap_irq_pending())
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
omap2_enter_full_retention();
|
omap2_enter_full_retention();
|
||||||
|
@ -467,6 +467,7 @@
|
|||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
extern void omap_init_irq(void);
|
extern void omap_init_irq(void);
|
||||||
|
extern int omap_irq_pending(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user