[PATCH 31] LEON3: added IRQAMP support
Joel Sherrill
joel.sherrill at OARcorp.com
Fri Apr 6 14:08:40 UTC 2012
Committed.
Thanks.
On 04/05/2012 10:23 AM, Daniel Hellstrom wrote:
> ---
> c/src/lib/libbsp/sparc/leon3/amba/amba.c | 14 ++++++++++++++
> c/src/lib/libbsp/sparc/shared/include/ambapp.h | 7 ++++---
> 2 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/c/src/lib/libbsp/sparc/leon3/amba/amba.c b/c/src/lib/libbsp/sparc/leon3/amba/amba.c
> index e334aec..56ff57f 100644
> --- a/c/src/lib/libbsp/sparc/leon3/amba/amba.c
> +++ b/c/src/lib/libbsp/sparc/leon3/amba/amba.c
> @@ -39,6 +39,7 @@ extern int scan_uarts(void);
> void amba_initialize(void)
> {
> int i;
> + int icsel;
> amba_apb_device dev;
>
> /* Scan the AMBA Plug&Play info at the default LEON3 area */
> @@ -55,6 +56,19 @@ void amba_initialize(void)
> }
>
> LEON3_IrqCtrl_Regs = (volatile LEON3_IrqCtrl_Regs_Map *) dev.start;
> + if ((LEON3_IrqCtrl_Regs->ampctrl>> 28)> 0) {
> + /* IRQ Controller has support for multiple IRQ Controllers, each
> + * CPU can be routed to different Controllers, we find out which
> + * controller by looking at the IRQCTRL Select Register for this CPU.
> + * Each Controller is located at a 4KByte offset.
> + */
> + icsel = LEON3_IrqCtrl_Regs->icsel[LEON3_Cpu_Index/8];
> + icsel = (icsel>> ((7 - (LEON3_Cpu_Index& 0x7)) * 4))& 0xf;
> + LEON3_IrqCtrl_Regs += icsel;
> + LEON3_IrqCtrl_Regs->mask[LEON3_Cpu_Index] = 0;
> + LEON3_IrqCtrl_Regs->force[LEON3_Cpu_Index] = 0;
> + LEON3_IrqCtrl_Regs->iclear = 0xffffffff;
> + }
>
> /* Init Extended IRQ controller if available */
> leon3_ext_irq_init();
> diff --git a/c/src/lib/libbsp/sparc/shared/include/ambapp.h b/c/src/lib/libbsp/sparc/shared/include/ambapp.h
> index cc8e120..7ca2d13 100644
> --- a/c/src/lib/libbsp/sparc/shared/include/ambapp.h
> +++ b/c/src/lib/libbsp/sparc/shared/include/ambapp.h
> @@ -262,9 +262,8 @@ typedef struct {
> volatile unsigned int notused01;
> volatile unsigned int notused02;
> volatile unsigned int notused03;
> - volatile unsigned int notused10;
> - volatile unsigned int notused11;
> - volatile unsigned int notused12;
> + volatile unsigned int ampctrl;
> + volatile unsigned int icsel[2];
> volatile unsigned int notused13;
> volatile unsigned int notused20;
> volatile unsigned int notused21;
> @@ -274,6 +273,8 @@ typedef struct {
> volatile unsigned int force[16];
> /* Extended IRQ registers */
> volatile unsigned int intid[16];
> + /* 0x100, align to 4Kb boundary */
> + volatile unsigned int resv1[(0x1000-0x100)/4];
> } LEON3_IrqCtrl_Regs_Map;
>
> /*****************************/
--
Joel Sherrill, Ph.D. Director of Research& Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the devel
mailing list