diff options
Diffstat (limited to 'arch/blackfin/cpu/cpu.c')
| -rw-r--r-- | arch/blackfin/cpu/cpu.c | 32 | 
1 files changed, 31 insertions, 1 deletions
| diff --git a/arch/blackfin/cpu/cpu.c b/arch/blackfin/cpu/cpu.c index 0be2e2b83..218f57ed3 100644 --- a/arch/blackfin/cpu/cpu.c +++ b/arch/blackfin/cpu/cpu.c @@ -16,13 +16,39 @@  #include <asm/mach-common/bits/core.h>  #include <asm/mach-common/bits/ebiu.h>  #include <asm/mach-common/bits/trace.h> +#include <asm/serial.h>  #include "cpu.h" -#include "serial.h"  #include "initcode.h"  ulong bfin_poweron_retx; +#if defined(CONFIG_CORE1_RUN) && defined(COREB_L1_CODE_START) +void bfin_core1_start(void) +{ +#ifdef BF561_FAMILY +	/* Enable core 1 */ +	bfin_write_SYSCR(bfin_read_SYSCR() & ~0x0020); +#else +	/* Enable core 1 */ +	bfin_write32(RCU0_SVECT1, COREB_L1_CODE_START); +	bfin_write32(RCU0_CRCTL, 0); + +	bfin_write32(RCU0_CRCTL, 0x2); + +	/* Check if core 1 starts */ +	while (!(bfin_read32(RCU0_CRSTAT) & 0x2)) +		continue; + +	bfin_write32(RCU0_CRCTL, 0); + +	/* flag to notify cces core 1 application */ +	bfin_write32(SDU0_MSG_SET, (1 << 19)); +#endif +} +#endif + +__attribute__ ((__noreturn__))  void cpu_init_f(ulong bootflag, ulong loaded_from_ldr)  {  #ifndef CONFIG_BFIN_BOOTROM_USES_EVT1 @@ -72,6 +98,10 @@ void cpu_init_f(ulong bootflag, ulong loaded_from_ldr)  # endif  #endif +#if defined(CONFIG_CORE1_RUN) && defined(COREB_L1_CODE_START) +	bfin_core1_start(); +#endif +  	serial_early_puts("Board init flash\n");  	board_init_f(bootflag);  } |