From 99648958668d3a33ee57974479b36201fe303f34 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 20 Apr 2018 10:35:35 +0200 Subject: bsps: Move startup files to bsps Adjust build support files to new directory layout. This patch is a part of the BSP source reorganization. Update #3285. --- bsps/sparc/leon2/start/bspstart.c | 127 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 bsps/sparc/leon2/start/bspstart.c (limited to 'bsps/sparc/leon2/start/bspstart.c') diff --git a/bsps/sparc/leon2/start/bspstart.c b/bsps/sparc/leon2/start/bspstart.c new file mode 100644 index 0000000000..f2ed8ae16c --- /dev/null +++ b/bsps/sparc/leon2/start/bspstart.c @@ -0,0 +1,127 @@ +/** + * @file + * @ingroup sparc_leon2 + * @brief LEON2 Cache Snooping Support + */ + +/* + * LEON2 Cache Snooping Support + * + * COPYRIGHT (c) 2011 + * Aeroflex Gaisler + * + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + * + * Ported to ERC32 implementation of the SPARC by On-Line Applications + * Research Corporation (OAR) under contract to the European Space + * Agency (ESA). + * + * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995. + * European Space Agency. + */ + +#include +#include +#include + +/* + * Tells us if data cache snooping is available + */ +int CPU_SPARC_HAS_SNOOPING; + +/* + * set_snooping + * + * Read the data cache configuration register to determine if + * bus snooping is available. This is needed for some drivers so + * that they can select the most efficient copy routines. + */ +static inline int set_snooping(void) +{ + unsigned int tmp = *(unsigned int *)0x80000014; /* Cache control register */ + return ((tmp>>23) & 1); /* Data cache snooping enabled */ +} + +void bsp_start( void ) +{ + CPU_SPARC_HAS_SNOOPING = set_snooping(); +} + +/* 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 +#include + +/* 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. + */ +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 = { + DRVMGR_RES_EMPTY + }, +}; +#endif /* RTEMS_DRVMGR_STARTUP */ + +/* + * Called just before drivers are initialized. Is used to initialize shared + * interrupt handling. + */ +static void leon2_pre_driver_hook( void ) +{ + bsp_spurious_initialize(); + + /* 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 +} + +RTEMS_SYSINIT_ITEM( + leon2_pre_driver_hook, + RTEMS_SYSINIT_BSP_PRE_DRIVERS, + RTEMS_SYSINIT_ORDER_MIDDLE +); -- cgit v1.2.3