blob: 4cb625b7c7a61569c77c1bdfd4e00c27ad54f229 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*
* This set of routines are the BSP specific initialization
* support routines.
*
* COPYRIGHT (c) 1989-2008.
* 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.com/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.
*
* $Id$
*/
#include <string.h>
#include <bsp.h>
#include <rtems/libio.h>
#include <rtems/libcsupport.h>
#include <rtems/bspIo.h>
/*
* LEON2 Cache Snooping Support
*/
#ifdef LEON2
/*
* 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 */
}
#endif
/*
* BSP pretasking hook. Called just before drivers are initialized.
* Used to setup libc and install any BSP extensions.
*/
void bsp_pretasking_hook(void)
{
extern void bsp_spurious_initialize();
bsp_spurious_initialize();
}
/*
* This method returns the base address and size of the area which
* is to be allocated between the RTEMS Workspace and the C Program
* Heap.
*/
void bsp_get_workarea(
void **workarea_base,
size_t *workarea_size,
size_t *requested_heap_size
)
{
/* Tells us where to put the workspace in case remote debugger is present. */
extern uint32_t rdb_start;
/* must be identical to STACK_SIZE in start.S */
#define STACK_SIZE (16 * 1024)
*workarea_base = &end;
*workarea_size = (void *)rdb_start - (void *)&end - STACK_SIZE;
*requested_heap_size = 0;
}
/*
* bsp_start
*
* This routine does the bulk of the system initialization.
*/
void bsp_start( void )
{
#ifdef LEON2
CPU_SPARC_HAS_SNOOPING = set_snooping();
#endif
}
|