[rtems commit] bsp/qoriq: Use interrupt entry

Sebastian Huber sebh at rtems.org
Tue Feb 27 13:16:21 UTC 2024


Module:    rtems
Branch:    master
Commit:    7e990236a705b513c2c48de3f612f59f76c697b4
Changeset: http://git.rtems.org/rtems/commit/?id=7e990236a705b513c2c48de3f612f59f76c697b4

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jan 16 19:49:18 2024 +0100

bsp/qoriq: Use interrupt entry

Avoid heap usage in the basic BSP.

---

 bsps/powerpc/qoriq/clock/clock-config.c | 14 +++++++++----
 bsps/powerpc/qoriq/include/tm27.h       | 37 ++++++++++++++++++---------------
 bsps/powerpc/qoriq/start/bsprestart.c   | 14 +++++++++----
 bsps/powerpc/qoriq/start/bspsmp.c       | 14 +++++++++----
 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);



More information about the vc mailing list