diff options
author | Daniel Hellstrom <daniel@gaisler.com> | 2011-12-15 17:31:17 +0100 |
---|---|---|
committer | Daniel Hellstrom <daniel@gaisler.com> | 2015-04-17 01:10:16 +0200 |
commit | 3db9e5b03dc8cf115f1796d45fa9f1e432d4389b (patch) | |
tree | 093eb18c22765b7c40879fc3e5c004fe8df66069 /c/src/lib/libbsp/sparc/leon2 | |
parent | LEON3: implemented AMBA PnP Bus Driver for Driver Manager (diff) | |
download | rtems-3db9e5b03dc8cf115f1796d45fa9f1e432d4389b.tar.bz2 |
LEON2: implemented AMBA Bus Driver for Driver Manager
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon2')
-rw-r--r-- | c/src/lib/libbsp/sparc/leon2/Makefile.am | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/leon2/include/bsp.h | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/leon2/preinstall.am | 13 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/leon2/startup/bsppredriver.c | 70 |
4 files changed, 97 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/leon2/Makefile.am b/c/src/lib/libbsp/sparc/leon2/Makefile.am index efcb286601..bb30517dd0 100644 --- a/c/src/lib/libbsp/sparc/leon2/Makefile.am +++ b/c/src/lib/libbsp/sparc/leon2/Makefile.am @@ -131,6 +131,13 @@ libbsp_a_SOURCES += ../../sparc/shared/i2c/i2cmst.c # timer libbsp_a_SOURCES += timer/timer.c +# Driver Manager +include_drvmgrdir = $(includedir)/drvmgr +include_drvmgr_HEADERS = ../../sparc/shared/include/drvmgr/ambapp_bus.h +include_drvmgr_HEADERS += ../../sparc/shared/include/drvmgr/leon2_amba_bus.h +libbsp_a_SOURCES += ../../sparc/shared/drvmgr/ambapp_bus.c +libbsp_a_SOURCES += ../../sparc/shared/drvmgr/leon2_amba_bus.c + if HAS_SMP libbsp_a_SOURCES += ../../shared/bspsmp.c libbsp_a_SOURCES += ../../shared/bspsmpgetcurrentprocessor.c diff --git a/c/src/lib/libbsp/sparc/leon2/include/bsp.h b/c/src/lib/libbsp/sparc/leon2/include/bsp.h index 48c4b680cf..dce8bea661 100644 --- a/c/src/lib/libbsp/sparc/leon2/include/bsp.h +++ b/c/src/lib/libbsp/sparc/leon2/include/bsp.h @@ -220,6 +220,13 @@ int cchip1_register(void); /* AT697 has PCI defined as big endian */ #define BSP_PCI_BIG_ENDIAN +/* Common driver build-time configurations. On small systems undefine + * [DRIVER]_INFO_AVAIL to avoid info routines get dragged in. It is good + * for debugging and printing information about the system, but makes the + * image bigger. + */ +#define AMBAPPBUS_INFO_AVAIL /* AMBAPP Bus driver */ + #ifdef __cplusplus } #endif diff --git a/c/src/lib/libbsp/sparc/leon2/preinstall.am b/c/src/lib/libbsp/sparc/leon2/preinstall.am index a3bcae5683..7260f63767 100644 --- a/c/src/lib/libbsp/sparc/leon2/preinstall.am +++ b/c/src/lib/libbsp/sparc/leon2/preinstall.am @@ -173,3 +173,16 @@ $(PROJECT_INCLUDE)/i2cmst.h: ../../sparc/shared/include/i2cmst.h $(PROJECT_INCLU $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/i2cmst.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/i2cmst.h +$(PROJECT_INCLUDE)/drvmgr/$(dirstamp): + @$(MKDIR_P) $(PROJECT_INCLUDE)/drvmgr + @: > $(PROJECT_INCLUDE)/drvmgr/$(dirstamp) +PREINSTALL_DIRS += $(PROJECT_INCLUDE)/drvmgr/$(dirstamp) + +$(PROJECT_INCLUDE)/drvmgr/ambapp_bus.h: ../../sparc/shared/include/drvmgr/ambapp_bus.h $(PROJECT_INCLUDE)/drvmgr/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/drvmgr/ambapp_bus.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/drvmgr/ambapp_bus.h + +$(PROJECT_INCLUDE)/drvmgr/leon2_amba_bus.h: ../../sparc/shared/include/drvmgr/leon2_amba_bus.h $(PROJECT_INCLUDE)/drvmgr/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/drvmgr/leon2_amba_bus.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/drvmgr/leon2_amba_bus.h + diff --git a/c/src/lib/libbsp/sparc/leon2/startup/bsppredriver.c b/c/src/lib/libbsp/sparc/leon2/startup/bsppredriver.c index 58493df288..260c57f57b 100644 --- a/c/src/lib/libbsp/sparc/leon2/startup/bsppredriver.c +++ b/c/src/lib/libbsp/sparc/leon2/startup/bsppredriver.c @@ -17,10 +17,80 @@ #include <bsp.h> #include <bsp/bootcard.h> +/* If RTEMS_DRVMGR_STARTUP is defined extra code is added that + * registers the LEON2 AMBA bus driver as root driver into the + * driver manager. + * + * The structues here are declared weak so that the user can override + * the configuration and add custom cores in the RTEMS project. + */ +#ifdef RTEMS_DRVMGR_STARTUP +#include <drvmgr/leon2_amba_bus.h> + +/* All drivers included by BSP, this is overridden by the user by including + * the devmgr_confdefs.h. No specifc drivers needed by BSP since IRQ/TIMER/UART + * is not drvmgr drivers. + */ +struct drvmgr_drv_reg_func drvmgr_drivers[] __attribute__((weak)) = +{ + {NULL} /* End array with NULL */ +}; + +/* Defines what cores are avilable on the bus in addition to the standard + * LEON2 peripherals. + */ +struct leon2_core leon2_amba_custom_cores[] __attribute__((weak)) = +{ + EMPTY_LEON2_CORE +}; + +/* Configure LEON2 Root bus driver */ +struct leon2_bus leon2_bus_config __attribute__((weak)) = +{ + &leon2_std_cores[0], /* The standard cores, defined by driver */ + &leon2_amba_custom_cores[0], /* custom cores, defined by us */ + DRVMGR_TRANSLATE_ONE2ONE, + DRVMGR_TRANSLATE_ONE2ONE, +}; + +/* Driver resources on LEON2 AMBA bus. Used to set options for particular + * LEON2 cores, it is up to the driver to look at the configuration paramters + * once started. + */ +struct drvmgr_bus_res leon2_amba_res __attribute__((weak)) = +{ + .next = NULL, + .resource = { + RES_EMPTY + }, +}; + +/* + * bsp_driver_level_hook + * + * BSP driver level hook. Called just after drivers have reached initialization + * level 'level' (1,2,3,4). See exinit.c for meaning of the every level. + */ +void bsp_driver_level_hook( int level ) +{ +} + +#endif + +/* + * bsp_predriver_hook + * + * BSP predriver hook. Called just before drivers are initialized. + * Is used to initialize shared interrupt handling. + */ void bsp_predriver_hook( void ) { /* Initialize shared interrupt handling, must be done after IRQ * controller has been found and initialized. */ BSP_shared_interrupt_init(); + +#ifdef RTEMS_DRVMGR_STARTUP + leon2_root_register(&leon2_bus_config, &leon2_amba_res); +#endif } |