xref: /linux/arch/mips/include/asm/mach-loongson64/kernel-entry-init.h (revision bd628c1bed7902ec1f24ba0fe70758949146abbe)
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2005 Embedded Alley Solutions, Inc
7  * Copyright (C) 2005 Ralf Baechle (ralf@linux-mips.org)
8  * Copyright (C) 2009 Jiajie Chen (chenjiajie@cse.buaa.edu.cn)
9  * Copyright (C) 2012 Huacai Chen (chenhc@lemote.com)
10  */
11 #ifndef __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H
12 #define __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H
13 
14 #include <asm/cpu.h>
15 
16 /*
17  * Override macros used in arch/mips/kernel/head.S.
18  */
19 	.macro	kernel_entry_setup
20 #ifdef CONFIG_CPU_LOONGSON3
21 	.set	push
22 	.set	mips64
23 	/* Set LPA on LOONGSON3 config3 */
24 	mfc0	t0, CP0_CONFIG3
25 	or	t0, (0x1 << 7)
26 	mtc0	t0, CP0_CONFIG3
27 	/* Set ELPA on LOONGSON3 pagegrain */
28 	mfc0	t0, CP0_PAGEGRAIN
29 	or	t0, (0x1 << 29)
30 	mtc0	t0, CP0_PAGEGRAIN
31 	/* Enable STFill Buffer */
32 	mfc0	t0, CP0_PRID
33 	andi	t0, (PRID_IMP_MASK | PRID_REV_MASK)
34 	slti	t0, (PRID_IMP_LOONGSON_64 | PRID_REV_LOONGSON3A_R2_0)
35 	bnez	t0, 1f
36 	mfc0	t0, CP0_CONFIG6
37 	or	t0, 0x100
38 	mtc0	t0, CP0_CONFIG6
39 1:
40 	_ehb
41 	.set	pop
42 #endif
43 	.endm
44 
45 /*
46  * Do SMP slave processor setup.
47  */
48 	.macro	smp_slave_setup
49 #ifdef CONFIG_CPU_LOONGSON3
50 	.set	push
51 	.set	mips64
52 	/* Set LPA on LOONGSON3 config3 */
53 	mfc0	t0, CP0_CONFIG3
54 	or	t0, (0x1 << 7)
55 	mtc0	t0, CP0_CONFIG3
56 	/* Set ELPA on LOONGSON3 pagegrain */
57 	mfc0	t0, CP0_PAGEGRAIN
58 	or	t0, (0x1 << 29)
59 	mtc0	t0, CP0_PAGEGRAIN
60 	/* Enable STFill Buffer */
61 	mfc0	t0, CP0_PRID
62 	andi	t0, (PRID_IMP_MASK | PRID_REV_MASK)
63 	slti	t0, (PRID_IMP_LOONGSON_64 | PRID_REV_LOONGSON3A_R2_0)
64 	bnez	t0, 1f
65 	mfc0	t0, CP0_CONFIG6
66 	or	t0, 0x100
67 	mtc0	t0, CP0_CONFIG6
68 1:
69 	_ehb
70 	.set	pop
71 #endif
72 	.endm
73 
74 #endif /* __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H */
75