summaryrefslogtreecommitdiffstats
path: root/bsps/riscv/griscv/start/bspstart.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/riscv/griscv/start/bspstart.c')
-rw-r--r--bsps/riscv/griscv/start/bspstart.c24
1 files changed, 18 insertions, 6 deletions
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(