summaryrefslogtreecommitdiffstats
path: root/bsps
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2024-01-16 19:49:18 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2024-02-27 14:13:13 +0100
commit7e990236a705b513c2c48de3f612f59f76c697b4 (patch)
treebe8f0a32b8427fcab31ab3459eb9c02bcced4eba /bsps
parentUpdate company name (diff)
downloadrtems-7e990236a705b513c2c48de3f612f59f76c697b4.tar.bz2
bsp/qoriq: Use interrupt entry
Avoid heap usage in the basic BSP.
Diffstat (limited to 'bsps')
-rw-r--r--bsps/powerpc/qoriq/clock/clock-config.c14
-rw-r--r--bsps/powerpc/qoriq/include/tm27.h37
-rw-r--r--bsps/powerpc/qoriq/start/bsprestart.c14
-rw-r--r--bsps/powerpc/qoriq/start/bspsmp.c14
4 files changed, 50 insertions, 29 deletions
diff --git a/bsps/powerpc/qoriq/clock/clock-config.c b/bsps/powerpc/qoriq/clock/clock-config.c
index 2fb6a7593f..c25db0581a 100644
--- a/bsps/powerpc/qoriq/clock/clock-config.c
+++ b/bsps/powerpc/qoriq/clock/clock-config.c
@@ -99,6 +99,8 @@ static volatile qoriq_pic_global_timer *const qoriq_timecounter =
#define CLOCK_INTERRUPT (QORIQ_IRQ_GT_BASE + QORIQ_CLOCK_TIMER)
+static rtems_interrupt_entry qoriq_clock_entry;
+
static void qoriq_clock_handler_install(void)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
@@ -121,12 +123,16 @@ static void qoriq_clock_handler_install(void)
rtems_fatal_error_occurred(0xdeadbeef);
}
- sc = rtems_interrupt_handler_install(
+ rtems_interrupt_entry_initialize(
+ &qoriq_clock_entry,
+ Clock_isr,
+ NULL,
+ "Clock"
+ );
+ sc = rtems_interrupt_entry_install(
CLOCK_INTERRUPT,
- "Clock",
RTEMS_INTERRUPT_UNIQUE,
- Clock_isr,
- NULL
+ &qoriq_clock_entry
);
if (sc != RTEMS_SUCCESSFUL) {
rtems_fatal_error_occurred(0xdeadbeef);
diff --git a/bsps/powerpc/qoriq/include/tm27.h b/bsps/powerpc/qoriq/include/tm27.h
index 197a1d1b41..0c43823f0e 100644
--- a/bsps/powerpc/qoriq/include/tm27.h
+++ b/bsps/powerpc/qoriq/include/tm27.h
@@ -40,8 +40,6 @@
#ifndef TMTESTS_TM27_H
#define TMTESTS_TM27_H
-#include <assert.h>
-
#include <libcpu/powerpc-utility.h>
#include <bsp/irq.h>
@@ -55,33 +53,38 @@
static inline void Install_tm27_vector( rtems_interrupt_handler handler )
{
- rtems_status_code sc;
+ static rtems_interrupt_entry entry_low;
+ static rtems_interrupt_entry entry_high;
rtems_vector_number low = QORIQ_IRQ_IPI_0 + IPI_INDEX_LOW;
rtems_vector_number high = QORIQ_IRQ_IPI_0 + IPI_INDEX_HIGH;
- sc = rtems_interrupt_handler_install(
+ rtems_interrupt_entry_initialize(
+ &entry_low,
+ handler,
+ NULL,
+ "tm17 low"
+ );
+ (void) rtems_interrupt_entry_install(
low,
- "tm17 low",
RTEMS_INTERRUPT_UNIQUE,
- handler,
- NULL
+ &entry_low
);
- assert(sc == RTEMS_SUCCESSFUL);
- sc = qoriq_pic_set_priority(low, 1, NULL);
- assert(sc == RTEMS_SUCCESSFUL);
+ (void) qoriq_pic_set_priority(low, 1, NULL);
- sc = rtems_interrupt_handler_install(
+ rtems_interrupt_entry_initialize(
+ &entry_high,
+ handler,
+ NULL,
+ "tm17 high"
+ );
+ (void) rtems_interrupt_entry_install(
high,
- "tm17 high",
RTEMS_INTERRUPT_UNIQUE,
- handler,
- NULL
+ &entry_high
);
- assert(sc == RTEMS_SUCCESSFUL);
- sc = qoriq_pic_set_priority(high, 2, NULL);
- assert(sc == RTEMS_SUCCESSFUL);
+ (void) qoriq_pic_set_priority(high, 2, NULL);
}
static inline void qoriq_tm27_cause(uint32_t ipi_index)
diff --git a/bsps/powerpc/qoriq/start/bsprestart.c b/bsps/powerpc/qoriq/start/bsprestart.c
index 940a4db5fa..eefa34d6d9 100644
--- a/bsps/powerpc/qoriq/start/bsprestart.c
+++ b/bsps/powerpc/qoriq/start/bsprestart.c
@@ -117,6 +117,8 @@ static void raise_restart_interrupt(void)
ppc_synchronize_instructions();
}
+static rtems_interrupt_entry restart_entry;
+
void bsp_restart(void *addr)
{
rtems_status_code sc;
@@ -130,12 +132,16 @@ void bsp_restart(void *addr)
rtems_cache_flush_multiple_data_lines(spin_table, sizeof(*spin_table));
}
- sc = rtems_interrupt_handler_install(
+ rtems_interrupt_entry_initialize(
+ &restart_entry,
+ restart_interrupt,
+ addr,
+ "Restart"
+ );
+ sc = rtems_interrupt_entry_install(
QORIQ_IRQ_IPI_0 + RESTART_IPI_INDEX,
- "Restart",
RTEMS_INTERRUPT_UNIQUE,
- restart_interrupt,
- addr
+ &restart_entry
);
if (sc != RTEMS_SUCCESSFUL) {
bsp_fatal(QORIQ_FATAL_RESTART_INSTALL_INTERRUPT);
diff --git a/bsps/powerpc/qoriq/start/bspsmp.c b/bsps/powerpc/qoriq/start/bspsmp.c
index d4287692fb..2b85ba7a88 100644
--- a/bsps/powerpc/qoriq/start/bspsmp.c
+++ b/bsps/powerpc/qoriq/start/bspsmp.c
@@ -216,17 +216,23 @@ bool _CPU_SMP_Start_processor(uint32_t cpu_index)
#endif
}
+static rtems_interrupt_entry qoriq_ipi_entry;
+
void _CPU_SMP_Finalize_initialization(uint32_t cpu_count)
{
#ifndef QORIQ_IS_HYPERVISOR_GUEST
rtems_status_code sc;
- sc = rtems_interrupt_handler_install(
+ rtems_interrupt_entry_initialize(
+ &qoriq_ipi_entry,
+ bsp_inter_processor_interrupt,
+ NULL,
+ "IPI"
+ );
+ sc = rtems_interrupt_entry_install(
QORIQ_IRQ_IPI_0 + IPI_INDEX,
- "IPI",
RTEMS_INTERRUPT_UNIQUE,
- bsp_inter_processor_interrupt,
- NULL
+ &qoriq_ipi_entry
);
if (sc != RTEMS_SUCCESSFUL) {
bsp_fatal(QORIQ_FATAL_SMP_IPI_HANDLER_INSTALL);