mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-11-16 12:34:45 +00:00
LEON3: CPU index intialization moved to bspstart.c
2009/bsps All LEON3/4 systems have a CPU-id, if on a single-CPU system the ID is always zero. On a multicore system it ranges from 0 to 15. The CPU index should always by updated even in a non-MP RTEMS OS since the CPU running RTEMS may not always be CPU0. For example when RTEMS runs on CPU1 and Linux on CPU0 in a mixed ASMP system. The old code executed within the IRQ controller initialization code makes no sense since the ASR register is a CPU register, it has nothing to do with AMBA initialization either. Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
This commit is contained in:
@@ -21,8 +21,6 @@ amba_confarea_type amba_conf;
|
||||
/* Pointers to Interrupt Controller configuration registers */
|
||||
volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs;
|
||||
|
||||
int LEON3_Cpu_Index = 0;
|
||||
|
||||
/*
|
||||
* amba_initialize
|
||||
*
|
||||
@@ -33,16 +31,6 @@ int LEON3_Cpu_Index = 0;
|
||||
* amba_ahb_masters, amba_ahb_slaves and amba.
|
||||
*/
|
||||
|
||||
unsigned int getasr17(void);
|
||||
|
||||
asm(" .text \n"
|
||||
"getasr17: \n"
|
||||
"retl \n"
|
||||
"mov %asr17, %o0\n"
|
||||
);
|
||||
|
||||
|
||||
extern rtems_configuration_table Configuration;
|
||||
extern int scan_uarts(void);
|
||||
|
||||
void amba_initialize(void)
|
||||
@@ -58,12 +46,6 @@ void amba_initialize(void)
|
||||
if ( i > 0 ){
|
||||
/* Found APB IRQ_MP Interrupt Controller */
|
||||
LEON3_IrqCtrl_Regs = (volatile LEON3_IrqCtrl_Regs_Map *) dev.start;
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
if (rtems_configuration_get_user_multiprocessing_table() != NULL) {
|
||||
unsigned int tmp = getasr17();
|
||||
LEON3_Cpu_Index = (tmp >> 28) & 3;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* find GP Timer */
|
||||
|
||||
@@ -27,6 +27,9 @@
|
||||
*/
|
||||
int CPU_SPARC_HAS_SNOOPING;
|
||||
|
||||
/* Index of CPU, in an AMP system CPU-index may be non-zero */
|
||||
int LEON3_Cpu_Index = 0;
|
||||
|
||||
extern void amba_initialize(void);
|
||||
|
||||
/*
|
||||
@@ -48,6 +51,14 @@ static inline int set_snooping(void)
|
||||
return (tmp >> 27) & 1;
|
||||
}
|
||||
|
||||
/* ASM-function used to get the CPU-Index on calling LEON3 CPUs */
|
||||
static inline unsigned int get_asr17(void)
|
||||
{
|
||||
unsigned int reg;
|
||||
__asm__ (" mov %%asr17, %0 " : "=r"(reg) :);
|
||||
return reg;
|
||||
}
|
||||
|
||||
/*
|
||||
* bsp_start
|
||||
*
|
||||
@@ -57,6 +68,13 @@ void bsp_start( void )
|
||||
{
|
||||
CPU_SPARC_HAS_SNOOPING = set_snooping();
|
||||
|
||||
/* Get the LEON3 CPU index, normally 0, but for MP systems we do
|
||||
* _not_ assume that this is CPU0. One may run another OS on CPU0
|
||||
* and RTEMS on this CPU, and AMP system with mixed operating
|
||||
* systems
|
||||
*/
|
||||
LEON3_Cpu_Index = (get_asr17() >> 28) & 3;
|
||||
|
||||
/* Find UARTs */
|
||||
amba_initialize();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user