78 lines
1.2 KiB
ArmAsm
78 lines
1.2 KiB
ArmAsm
|
/* 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
|