Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
[sfrench/cifs-2.6.git] / arch / mips / include / asm / mach-loongson64 / kernel-entry-init.h
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)
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)
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 */