OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [src/] [drivers/] [irq/] [omap3/] [omap3_intc.c] - Rev 2

Compare with Previous | Blame | View Log

/*
 * Interrupt Controller - Beagleboard
 *
 * Copyright 2010 B Labs Ltd.
 */
 
#include <l4/drivers/irq/omap3/omap3_intc.h>
#include INC_PLAT(offsets.h)
#include INC_PLAT(irq.h)
 
void omap3_intc_ack_irq(l4id_t irq)
{
	write(0x1, PLATFORM_INTC_VBASE + OMAP3_INTC_CONTROL);
}
 
void omap3_intc_mask_irq(l4id_t irq)
{
	omap3_intc_set_irq_status(PLATFORM_INTC_VBASE, OMAP3_INTC_MIR_SET, irq);
}
 
void omap3_intc_unmask_irq(l4id_t irq)
{
	omap3_intc_set_irq_status(PLATFORM_INTC_VBASE, OMAP3_INTC_MIR_CLR, irq);
}
 
/* End of Interrupt */
void omap3_intc_ack_and_mask(l4id_t irq)
{
	omap3_intc_mask_irq(irq);
	omap3_intc_ack_irq(irq);
}
 
l4id_t omap3_intc_read_irq(void *data)
{
	unsigned int irq = 0;
 
	if ((irq = (read(PLATFORM_INTC_VBASE + OMAP3_INTC_SIR_IRQ) & 0x7F)))
		return irq;
 
	return -1;
}
 
void omap3_intc_reset(unsigned long base)
{
	/* Assert Reset */
	write(OMAP_INTC_SOFTRESET, (base + OMAP3_INTC_SYSCONFIG));
 
	/* wait for completion */
	 while (!(read((base + OMAP3_INTC_SYSSTATUS)) & 0x1));
}
 
void omap3_intc_init(void)
{
	int i;
 
	/* Do Soft-Reset */
	omap3_intc_reset(PLATFORM_INTC_VBASE);
 
	/*
	 * Set All IRQ to IRQ type and
	 * Priority as 0x0A- some random value
	 */
	for (i = 0; i < IRQS_MAX; i++)
		omap3_intc_set_ilr(PLATFORM_INTC_VBASE, i, (0x0A << 2));
 
	/* Mask(set mask) all interrupts */
	for (i = 0; i < IRQS_MAX; i++)
		omap3_intc_set_irq_status(PLATFORM_INTC_VBASE,
					  OMAP3_INTC_MIR_SET, i);
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.