summaryrefslogtreecommitdiffstats
path: root/bsps
diff options
context:
space:
mode:
authorChristian Mauderer <christian.mauderer@embedded-brains.de>2020-03-09 23:00:58 +0100
committerChristian Mauderer <oss@c-mauderer.de>2020-04-04 18:38:44 +0200
commitbb8ae78d36d5a32f11404d194d47d8befdbe0664 (patch)
treebfdba15ac2c5948b6e772eb05b3352147c94d643 /bsps
parentcpukit/rfs: fix typo in header guard (diff)
downloadrtems-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.h3
-rw-r--r--bsps/arm/raspberrypi/start/bspstart.c24
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 };