summaryrefslogtreecommitdiffstats
path: root/bsps/riscv/griscv/start
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-06-10 13:04:13 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-06-17 12:58:33 +0200
commit2c07f24af210c4738fbe6f75a53c58fbd80fb658 (patch)
tree4d8e061e716beb451cdb45bd8761f2025ce062bb /bsps/riscv/griscv/start
parentgrlib: Customizable allocation in ambapp_scan() (diff)
downloadrtems-2c07f24af210c4738fbe6f75a53c58fbd80fb658.tar.bz2
grlib: Add ambapp_plb()
Replace the global variable ambapp_plb with a function to allow an automatic on demand initialization.
Diffstat (limited to 'bsps/riscv/griscv/start')
-rw-r--r--bsps/riscv/griscv/start/amba.c6
-rw-r--r--bsps/riscv/griscv/start/bspstart.c24
2 files changed, 21 insertions, 9 deletions
diff --git a/bsps/riscv/griscv/start/amba.c b/bsps/riscv/griscv/start/amba.c
index 182f659d69..ffb609dc38 100644
--- a/bsps/riscv/griscv/start/amba.c
+++ b/bsps/riscv/griscv/start/amba.c
@@ -42,7 +42,7 @@ void irqmp_initialize(void)
struct ambapp_dev *adev;
/* Find GRLIB Interrupt controller */
- adev = (void *)ambapp_for_each(&ambapp_plb, (OPTIONS_ALL|OPTIONS_APB_SLVS),
+ adev = (void *)ambapp_for_each(ambapp_plb(), (OPTIONS_ALL|OPTIONS_APB_SLVS),
VENDOR_GAISLER, GAISLER_IRQMP,
ambapp_find_by_idx, NULL);
if (adev != NULL) {
@@ -89,7 +89,7 @@ void gptimer_initialize(void)
struct ambapp_dev *adev;
/* find GP Timer */
- adev = (void *)ambapp_for_each(&ambapp_plb, (OPTIONS_ALL|OPTIONS_APB_SLVS),
+ adev = (void *)ambapp_for_each(ambapp_plb(), (OPTIONS_ALL|OPTIONS_APB_SLVS),
VENDOR_GAISLER, GAISLER_GPTIMER,
ambapp_find_by_idx, &grlib_timer_core_index);
if (adev) {
@@ -98,7 +98,7 @@ void gptimer_initialize(void)
/* Register AMBA Bus Frequency */
ambapp_freq_init(
- &ambapp_plb,
+ ambapp_plb(),
GRLIB_Timer_Adev,
(GRLIB_Timer_Regs->scaler_reload + 1)
* GRLIB_GPTIMER_0_FREQUENCY_SET_BY_BOOT_LOADER
diff --git a/bsps/riscv/griscv/start/bspstart.c b/bsps/riscv/griscv/start/bspstart.c
index dd83c80818..26c214caac 100644
--- a/bsps/riscv/griscv/start/bspstart.c
+++ b/bsps/riscv/griscv/start/bspstart.c
@@ -53,14 +53,26 @@ void bsp_start(void)
#endif
}
-void amba_initialize(void);
-struct ambapp_bus ambapp_plb;
+static struct ambapp_bus ambapp_plb_instance;
-void amba_initialize(void)
+struct ambapp_bus *ambapp_plb( void )
{
- ambapp_scan(&ambapp_plb, GRLIB_IO_AREA, NULL, NULL);
- gptimer_initialize();
- irqmp_initialize();
+ struct ambapp_bus *plb;
+
+ plb = &ambapp_plb_instance;
+
+ if ( plb->root == NULL ) {
+ ambapp_scan( plb, GRLIB_IO_AREA, NULL, NULL );
+ gptimer_initialize();
+ irqmp_initialize();
+ }
+
+ return plb;
+}
+
+static void amba_initialize( void )
+{
+ (void) ambapp_plb();
}
RTEMS_SYSINIT_ITEM(