diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-06-10 13:04:13 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-06-17 12:58:33 +0200 |
commit | 2c07f24af210c4738fbe6f75a53c58fbd80fb658 (patch) | |
tree | 4d8e061e716beb451cdb45bd8761f2025ce062bb /bsps/riscv/griscv/start | |
parent | grlib: Customizable allocation in ambapp_scan() (diff) | |
download | rtems-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.c | 6 | ||||
-rw-r--r-- | bsps/riscv/griscv/start/bspstart.c | 24 |
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( |