diff --git a/c/src/lib/libbsp/sparc/leon3/amba/amba.c b/c/src/lib/libbsp/sparc/leon3/amba/amba.c
index 1932cee..b0a43f9 100644
a
|
b
|
amba_confarea_type amba_conf; |
21 | 21 | /* Pointers to Interrupt Controller configuration registers */ |
22 | 22 | volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; |
23 | 23 | |
24 | | int LEON3_Cpu_Index = 0; |
25 | | |
26 | 24 | /* |
27 | 25 | * amba_initialize |
28 | 26 | * |
… |
… |
int LEON3_Cpu_Index = 0; |
33 | 31 | * amba_ahb_masters, amba_ahb_slaves and amba. |
34 | 32 | */ |
35 | 33 | |
36 | | unsigned int getasr17(void); |
37 | | |
38 | | __asm__ (" .text \n" |
39 | | "getasr17: \n" |
40 | | "retl \n" |
41 | | "mov %asr17, %o0\n" |
42 | | ); |
43 | | |
44 | | |
45 | | extern rtems_configuration_table Configuration; |
46 | 34 | extern int scan_uarts(void); |
47 | 35 | |
48 | 36 | void amba_initialize(void) |
… |
… |
void amba_initialize(void) |
58 | 46 | if ( i > 0 ){ |
59 | 47 | /* Found APB IRQ_MP Interrupt Controller */ |
60 | 48 | LEON3_IrqCtrl_Regs = (volatile LEON3_IrqCtrl_Regs_Map *) dev.start; |
61 | | #if defined(RTEMS_MULTIPROCESSING) |
62 | | if (rtems_configuration_get_user_multiprocessing_table() != NULL) { |
63 | | unsigned int tmp = getasr17(); |
64 | | LEON3_Cpu_Index = (tmp >> 28) & 3; |
65 | | } |
66 | | #endif |
67 | 49 | } |
68 | 50 | |
69 | 51 | /* find GP Timer */ |
diff --git a/c/src/lib/libbsp/sparc/leon3/startup/bspstart.c b/c/src/lib/libbsp/sparc/leon3/startup/bspstart.c
index a4b9ffa..82054e8 100644
a
|
b
|
|
27 | 27 | */ |
28 | 28 | int CPU_SPARC_HAS_SNOOPING; |
29 | 29 | |
| 30 | /* Index of CPU, in an AMP system CPU-index may be non-zero */ |
| 31 | int LEON3_Cpu_Index = 0; |
| 32 | |
30 | 33 | extern void amba_initialize(void); |
31 | 34 | |
32 | 35 | /* |
… |
… |
static inline int set_snooping(void) |
48 | 51 | return (tmp >> 27) & 1; |
49 | 52 | } |
50 | 53 | |
| 54 | /* ASM-function used to get the CPU-Index on calling LEON3 CPUs */ |
| 55 | static inline unsigned int get_asr17(void) |
| 56 | { |
| 57 | unsigned int reg; |
| 58 | __asm__ (" mov %%asr17, %0 " : "=r"(reg) :); |
| 59 | return reg; |
| 60 | } |
| 61 | |
51 | 62 | /* |
52 | 63 | * bsp_start |
53 | 64 | * |
… |
… |
void bsp_start( void ) |
57 | 68 | { |
58 | 69 | CPU_SPARC_HAS_SNOOPING = set_snooping(); |
59 | 70 | |
| 71 | /* Get the LEON3 CPU index, normally 0, but for MP systems we do |
| 72 | * _not_ assume that this is CPU0. One may run another OS on CPU0 |
| 73 | * and RTEMS on this CPU, and AMP system with mixed operating |
| 74 | * systems |
| 75 | */ |
| 76 | LEON3_Cpu_Index = (get_asr17() >> 28) & 3; |
| 77 | |
60 | 78 | /* Find UARTs */ |
61 | 79 | amba_initialize(); |
62 | 80 | } |