mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
bsp/qoriq: Use interrupt entry
Avoid heap usage in the basic BSP.
This commit is contained in:
@@ -99,6 +99,8 @@ static volatile qoriq_pic_global_timer *const qoriq_timecounter =
|
|||||||
|
|
||||||
#define CLOCK_INTERRUPT (QORIQ_IRQ_GT_BASE + QORIQ_CLOCK_TIMER)
|
#define CLOCK_INTERRUPT (QORIQ_IRQ_GT_BASE + QORIQ_CLOCK_TIMER)
|
||||||
|
|
||||||
|
static rtems_interrupt_entry qoriq_clock_entry;
|
||||||
|
|
||||||
static void qoriq_clock_handler_install(void)
|
static void qoriq_clock_handler_install(void)
|
||||||
{
|
{
|
||||||
rtems_status_code sc = RTEMS_SUCCESSFUL;
|
rtems_status_code sc = RTEMS_SUCCESSFUL;
|
||||||
@@ -121,12 +123,16 @@ static void qoriq_clock_handler_install(void)
|
|||||||
rtems_fatal_error_occurred(0xdeadbeef);
|
rtems_fatal_error_occurred(0xdeadbeef);
|
||||||
}
|
}
|
||||||
|
|
||||||
sc = rtems_interrupt_handler_install(
|
rtems_interrupt_entry_initialize(
|
||||||
CLOCK_INTERRUPT,
|
&qoriq_clock_entry,
|
||||||
"Clock",
|
|
||||||
RTEMS_INTERRUPT_UNIQUE,
|
|
||||||
Clock_isr,
|
Clock_isr,
|
||||||
NULL
|
NULL,
|
||||||
|
"Clock"
|
||||||
|
);
|
||||||
|
sc = rtems_interrupt_entry_install(
|
||||||
|
CLOCK_INTERRUPT,
|
||||||
|
RTEMS_INTERRUPT_UNIQUE,
|
||||||
|
&qoriq_clock_entry
|
||||||
);
|
);
|
||||||
if (sc != RTEMS_SUCCESSFUL) {
|
if (sc != RTEMS_SUCCESSFUL) {
|
||||||
rtems_fatal_error_occurred(0xdeadbeef);
|
rtems_fatal_error_occurred(0xdeadbeef);
|
||||||
|
|||||||
@@ -40,8 +40,6 @@
|
|||||||
#ifndef TMTESTS_TM27_H
|
#ifndef TMTESTS_TM27_H
|
||||||
#define TMTESTS_TM27_H
|
#define TMTESTS_TM27_H
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <libcpu/powerpc-utility.h>
|
#include <libcpu/powerpc-utility.h>
|
||||||
|
|
||||||
#include <bsp/irq.h>
|
#include <bsp/irq.h>
|
||||||
@@ -55,33 +53,38 @@
|
|||||||
|
|
||||||
static inline void Install_tm27_vector( rtems_interrupt_handler handler )
|
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 low = QORIQ_IRQ_IPI_0 + IPI_INDEX_LOW;
|
||||||
rtems_vector_number high = QORIQ_IRQ_IPI_0 + IPI_INDEX_HIGH;
|
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,
|
low,
|
||||||
"tm17 low",
|
|
||||||
RTEMS_INTERRUPT_UNIQUE,
|
RTEMS_INTERRUPT_UNIQUE,
|
||||||
handler,
|
&entry_low
|
||||||
NULL
|
|
||||||
);
|
);
|
||||||
assert(sc == RTEMS_SUCCESSFUL);
|
|
||||||
|
|
||||||
sc = qoriq_pic_set_priority(low, 1, NULL);
|
(void) qoriq_pic_set_priority(low, 1, NULL);
|
||||||
assert(sc == RTEMS_SUCCESSFUL);
|
|
||||||
|
|
||||||
sc = rtems_interrupt_handler_install(
|
rtems_interrupt_entry_initialize(
|
||||||
|
&entry_high,
|
||||||
|
handler,
|
||||||
|
NULL,
|
||||||
|
"tm17 high"
|
||||||
|
);
|
||||||
|
(void) rtems_interrupt_entry_install(
|
||||||
high,
|
high,
|
||||||
"tm17 high",
|
|
||||||
RTEMS_INTERRUPT_UNIQUE,
|
RTEMS_INTERRUPT_UNIQUE,
|
||||||
handler,
|
&entry_high
|
||||||
NULL
|
|
||||||
);
|
);
|
||||||
assert(sc == RTEMS_SUCCESSFUL);
|
|
||||||
|
|
||||||
sc = qoriq_pic_set_priority(high, 2, NULL);
|
(void) qoriq_pic_set_priority(high, 2, NULL);
|
||||||
assert(sc == RTEMS_SUCCESSFUL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void qoriq_tm27_cause(uint32_t ipi_index)
|
static inline void qoriq_tm27_cause(uint32_t ipi_index)
|
||||||
|
|||||||
@@ -117,6 +117,8 @@ static void raise_restart_interrupt(void)
|
|||||||
ppc_synchronize_instructions();
|
ppc_synchronize_instructions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static rtems_interrupt_entry restart_entry;
|
||||||
|
|
||||||
void bsp_restart(void *addr)
|
void bsp_restart(void *addr)
|
||||||
{
|
{
|
||||||
rtems_status_code sc;
|
rtems_status_code sc;
|
||||||
@@ -130,12 +132,16 @@ void bsp_restart(void *addr)
|
|||||||
rtems_cache_flush_multiple_data_lines(spin_table, sizeof(*spin_table));
|
rtems_cache_flush_multiple_data_lines(spin_table, sizeof(*spin_table));
|
||||||
}
|
}
|
||||||
|
|
||||||
sc = rtems_interrupt_handler_install(
|
rtems_interrupt_entry_initialize(
|
||||||
QORIQ_IRQ_IPI_0 + RESTART_IPI_INDEX,
|
&restart_entry,
|
||||||
"Restart",
|
|
||||||
RTEMS_INTERRUPT_UNIQUE,
|
|
||||||
restart_interrupt,
|
restart_interrupt,
|
||||||
addr
|
addr,
|
||||||
|
"Restart"
|
||||||
|
);
|
||||||
|
sc = rtems_interrupt_entry_install(
|
||||||
|
QORIQ_IRQ_IPI_0 + RESTART_IPI_INDEX,
|
||||||
|
RTEMS_INTERRUPT_UNIQUE,
|
||||||
|
&restart_entry
|
||||||
);
|
);
|
||||||
if (sc != RTEMS_SUCCESSFUL) {
|
if (sc != RTEMS_SUCCESSFUL) {
|
||||||
bsp_fatal(QORIQ_FATAL_RESTART_INSTALL_INTERRUPT);
|
bsp_fatal(QORIQ_FATAL_RESTART_INSTALL_INTERRUPT);
|
||||||
|
|||||||
@@ -216,17 +216,23 @@ bool _CPU_SMP_Start_processor(uint32_t cpu_index)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static rtems_interrupt_entry qoriq_ipi_entry;
|
||||||
|
|
||||||
void _CPU_SMP_Finalize_initialization(uint32_t cpu_count)
|
void _CPU_SMP_Finalize_initialization(uint32_t cpu_count)
|
||||||
{
|
{
|
||||||
#ifndef QORIQ_IS_HYPERVISOR_GUEST
|
#ifndef QORIQ_IS_HYPERVISOR_GUEST
|
||||||
rtems_status_code sc;
|
rtems_status_code sc;
|
||||||
|
|
||||||
sc = rtems_interrupt_handler_install(
|
rtems_interrupt_entry_initialize(
|
||||||
QORIQ_IRQ_IPI_0 + IPI_INDEX,
|
&qoriq_ipi_entry,
|
||||||
"IPI",
|
|
||||||
RTEMS_INTERRUPT_UNIQUE,
|
|
||||||
bsp_inter_processor_interrupt,
|
bsp_inter_processor_interrupt,
|
||||||
NULL
|
NULL,
|
||||||
|
"IPI"
|
||||||
|
);
|
||||||
|
sc = rtems_interrupt_entry_install(
|
||||||
|
QORIQ_IRQ_IPI_0 + IPI_INDEX,
|
||||||
|
RTEMS_INTERRUPT_UNIQUE,
|
||||||
|
&qoriq_ipi_entry
|
||||||
);
|
);
|
||||||
if (sc != RTEMS_SUCCESSFUL) {
|
if (sc != RTEMS_SUCCESSFUL) {
|
||||||
bsp_fatal(QORIQ_FATAL_SMP_IPI_HANDLER_INSTALL);
|
bsp_fatal(QORIQ_FATAL_SMP_IPI_HANDLER_INSTALL);
|
||||||
|
|||||||
Reference in New Issue
Block a user