diff options
author | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2020-03-09 23:00:58 +0100 |
---|---|---|
committer | Christian Mauderer <oss@c-mauderer.de> | 2020-04-04 18:38:44 +0200 |
commit | bb8ae78d36d5a32f11404d194d47d8befdbe0664 (patch) | |
tree | bfdba15ac2c5948b6e772eb05b3352147c94d643 /bsps | |
parent | cpukit/rfs: fix typo in header guard (diff) | |
download | rtems-bb8ae78d36d5a32f11404d194d47d8befdbe0664.tar.bz2 |
bsp/raspberry: Add a bsp_fdt_map_intr().
Fixes #3903
Diffstat (limited to 'bsps')
-rw-r--r-- | bsps/arm/raspberrypi/include/bsp/irq.h | 3 | ||||
-rw-r--r-- | bsps/arm/raspberrypi/start/bspstart.c | 24 |
2 files changed, 27 insertions, 0 deletions
diff --git a/bsps/arm/raspberrypi/include/bsp/irq.h b/bsps/arm/raspberrypi/include/bsp/irq.h index 6a9d05cba6..17e4472b34 100644 --- a/bsps/arm/raspberrypi/include/bsp/irq.h +++ b/bsps/arm/raspberrypi/include/bsp/irq.h @@ -35,6 +35,8 @@ #define BCM2835_INTC_TOTAL_IRQ 64 + 8 +#define BCM2835_IRQ_SET1_MIN 0 +#define BCM2835_IRQ_SET2_MIN 32 #define BCM2835_IRQ_ID_GPU_TIMER_M0 0 #define BCM2835_IRQ_ID_GPU_TIMER_M1 1 @@ -69,6 +71,7 @@ #define BSP_INTERRUPT_VECTOR_MIN (0) #define BSP_INTERRUPT_VECTOR_MAX (BCM2835_INTC_TOTAL_IRQ - 1) +#define BSP_INTERRUPT_VECTOR_INVALID (UINT32_MAX) #define BSP_IRQ_COUNT (BCM2835_INTC_TOTAL_IRQ) diff --git a/bsps/arm/raspberrypi/start/bspstart.c b/bsps/arm/raspberrypi/start/bspstart.c index 49896e4d47..8d7f6aa503 100644 --- a/bsps/arm/raspberrypi/start/bspstart.c +++ b/bsps/arm/raspberrypi/start/bspstart.c @@ -23,6 +23,7 @@ #include <bsp/stackalloc.h> #include <bsp/raspberrypi.h> #include <bsp/vc.h> +#include <bsp/fdt.h> #include <libfdt.h> @@ -101,6 +102,29 @@ void *raspberrypi_get_reg_of_node(const void *fdt, int node) return (BUS_TO_PHY((void *) fdt32_to_cpu(val[0]))); } +#ifdef BSP_FDT_IS_SUPPORTED +uint32_t bsp_fdt_map_intr(const uint32_t *intr, size_t icells) +{ + uint32_t controller = intr[0]; + uint32_t source = intr[1]; + + switch ( controller ) { + case 0: + return source + BCM2835_IRQ_ID_BASIC_BASE_ID; + break; + case 1: + return source + BCM2835_IRQ_SET1_MIN; + break; + case 2: + return source + BCM2835_IRQ_SET2_MIN; + break; + default: + return BSP_INTERRUPT_VECTOR_INVALID; + break; + } +} +#endif /* BSP_FDT_IS_SUPPORTED */ + void bsp_start(void) { bcm2835_get_board_spec_entries spec = { 0 }; |