diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-08-03 19:55:14 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-01-18 14:35:47 +0100 |
commit | 7486af949d3d2f3dbc979b0a19a7a504a7af7fa4 (patch) | |
tree | 19a75b72bd3128ceede75033553856d445a66fc9 | |
parent | 96e602adccca2e1896834769a7164be9cfe49473 (diff) |
bsp/leon3: Add LEON3_IRQAMP_EXTENDED_INTERRUPT
-rw-r--r-- | bsps/sparc/leon3/include/bsp/leon3.h | 4 | ||||
-rw-r--r-- | bsps/sparc/leon3/start/eirq.c | 8 | ||||
-rw-r--r-- | spec/build/bsps/sparc/leon3/grp.yml | 2 | ||||
-rw-r--r-- | spec/build/bsps/sparc/leon3/optirqampextirq.yml | 22 |
4 files changed, 36 insertions, 0 deletions
diff --git a/bsps/sparc/leon3/include/bsp/leon3.h b/bsps/sparc/leon3/include/bsp/leon3.h index 7a571b3bc2..9d26581d61 100644 --- a/bsps/sparc/leon3/include/bsp/leon3.h +++ b/bsps/sparc/leon3/include/bsp/leon3.h @@ -212,7 +212,11 @@ extern struct ambapp_dev *LEON3_IrqCtrl_Adev; * * This object should be read-only after initialization. */ +#if defined(LEON3_IRQAMP_EXTENDED_INTERRUPT) +#define LEON3_IrqCtrl_EIrq LEON3_IRQAMP_EXTENDED_INTERRUPT +#else extern uint32_t LEON3_IrqCtrl_EIrq; +#endif /** * @brief Initializes the interrupt controller for the boot processor. diff --git a/bsps/sparc/leon3/start/eirq.c b/bsps/sparc/leon3/start/eirq.c index f57aaf7974..0dedc66d95 100644 --- a/bsps/sparc/leon3/start/eirq.c +++ b/bsps/sparc/leon3/start/eirq.c @@ -16,8 +16,10 @@ #include <bsp/irq-generic.h> #include <bsp/leon3.h> +#if !defined(LEON3_IRQAMP_EXTENDED_INTERRUPT) /* GRLIB extended IRQ controller IRQ number */ uint32_t LEON3_IrqCtrl_EIrq; +#endif rtems_interrupt_lock LEON3_IrqCtrl_Lock = RTEMS_INTERRUPT_LOCK_INITIALIZER("LEON3 IrqCtrl"); @@ -28,7 +30,9 @@ void leon3_ext_irq_init(irqamp *regs) grlib_store_32(®s->pimask[LEON3_Cpu_Index], 0); grlib_store_32(®s->piforce[LEON3_Cpu_Index], 0); grlib_store_32(®s->iclear, 0xffffffff); +#if !defined(LEON3_IRQAMP_EXTENDED_INTERRUPT) LEON3_IrqCtrl_EIrq = IRQAMP_MPSTAT_EIRQ_GET(grlib_load_32(®s->mpstat)); +#endif } bool bsp_interrupt_is_valid_vector(rtems_vector_number vector) @@ -37,11 +41,15 @@ bool bsp_interrupt_is_valid_vector(rtems_vector_number vector) return false; } +#if defined(LEON3_IRQAMP_EXTENDED_INTERRUPT) + return vector <= BSP_INTERRUPT_VECTOR_MAX_EXT; +#else if (LEON3_IrqCtrl_EIrq > 0) { return vector <= BSP_INTERRUPT_VECTOR_MAX_EXT; } return vector <= BSP_INTERRUPT_VECTOR_MAX_STD; +#endif } #if defined(RTEMS_SMP) diff --git a/spec/build/bsps/sparc/leon3/grp.yml b/spec/build/bsps/sparc/leon3/grp.yml index fc8edaf441..3181989f6b 100644 --- a/spec/build/bsps/sparc/leon3/grp.yml +++ b/spec/build/bsps/sparc/leon3/grp.yml @@ -42,6 +42,8 @@ links: - role: build-dependency uid: optirqampbase - role: build-dependency + uid: optirqampextirq +- role: build-dependency uid: optirqampts - role: build-dependency uid: optconirq diff --git a/spec/build/bsps/sparc/leon3/optirqampextirq.yml b/spec/build/bsps/sparc/leon3/optirqampextirq.yml new file mode 100644 index 0000000000..92d9c6d4e4 --- /dev/null +++ b/spec/build/bsps/sparc/leon3/optirqampextirq.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) +actions: +- get-integer: null +- format-and-define: null +build-type: option +default: null +default-by-variant: +- value: 12 + variants: + - sparc/gr712rc +- value: 10 + variants: + - sparc/gr740 +enabled-by: true +format: '{}' +links: [] +name: LEON3_IRQAMP_EXTENDED_INTERRUPT +description: | + This option specifies the interrupt line of the IRQ(A)MP extended interrupt. +type: build |