|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  |  | 
|  | #include <linux/linkage.h> | 
|  | #include <linux/init.h> | 
|  | #include <asm/page.h> | 
|  | #include <abi/entry.h> | 
|  |  | 
|  | __HEAD | 
|  | ENTRY(_start) | 
|  | /* set super user mode */ | 
|  | lrw	a3, DEFAULT_PSR_VALUE | 
|  | mtcr    a3, psr | 
|  | psrset  ee | 
|  |  | 
|  | SETUP_MMU a3 | 
|  |  | 
|  | /* set stack point */ | 
|  | lrw     a3, init_thread_union + THREAD_SIZE | 
|  | mov	sp, a3 | 
|  |  | 
|  | jmpi	csky_start | 
|  | END(_start) | 
|  |  | 
|  | #ifdef CONFIG_SMP | 
|  | .align 10 | 
|  | ENTRY(_start_smp_secondary) | 
|  | /* Invalid I/Dcache BTB BHT */ | 
|  | movi	a3, 7 | 
|  | lsli	a3, 16 | 
|  | addi	a3, (1<<4) | 3 | 
|  | mtcr	a3, cr17 | 
|  |  | 
|  | tlbi.alls | 
|  |  | 
|  | /* setup PAGEMASK */ | 
|  | movi	a3, 0 | 
|  | mtcr	a3, cr<6, 15> | 
|  |  | 
|  | /* setup MEL0/MEL1 */ | 
|  | grs	a0, _start_smp_pc | 
|  | _start_smp_pc: | 
|  | bmaski  a1, 13 | 
|  | andn    a0, a1 | 
|  | movi    a1, 0x00000006 | 
|  | movi    a2, 0x00001006 | 
|  | or      a1, a0 | 
|  | or      a2, a0 | 
|  | mtcr	a1, cr<2, 15> | 
|  | mtcr	a2, cr<3, 15> | 
|  |  | 
|  | /* setup MEH */ | 
|  | mtcr	a0, cr<4, 15> | 
|  |  | 
|  | /* write TLB */ | 
|  | bgeni   a3, 28 | 
|  | mtcr	a3, cr<8, 15> | 
|  |  | 
|  | SETUP_MMU a3 | 
|  |  | 
|  | /* enable MMU */ | 
|  | movi	a3, 1 | 
|  | mtcr    a3, cr18 | 
|  |  | 
|  | jmpi	_goto_mmu_on | 
|  | _goto_mmu_on: | 
|  | lrw	a3, DEFAULT_PSR_VALUE | 
|  | mtcr    a3, psr | 
|  | psrset  ee | 
|  |  | 
|  | /* set stack point */ | 
|  | lrw     a3, secondary_stack | 
|  | ld.w	a3, (a3, 0) | 
|  | mov	sp, a3 | 
|  |  | 
|  | jmpi	csky_start_secondary | 
|  | END(_start_smp_secondary) | 
|  | #endif |