/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 2005 Embedded Alley Solutions , Inc
* Copyright ( C ) 2005 Ralf Baechle ( ralf @ linux - mips . org )
* Copyright ( C ) 2009 Jiajie Chen ( chenjiajie @ cse . buaa . edu . cn )
* Copyright ( C ) 2012 Huacai Chen ( chenhc @ lemote . com )
*/
#ifndef __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H
#define __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H
#include <asm /cpu.h>
/*
* Override macros used in arch / mips / kernel / head . S .
*/
.macro kernel_entry_setup
.set push
.set mips64
/* Set ELPA on LOONGSON3 pagegrain */
mfc0 t0, CP0_PAGEGRAIN
or t0, (0 x1 << 29 )
mtc0 t0, CP0_PAGEGRAIN
/* Enable STFill Buffer */
mfc0 t0, CP0_PRID
/* Loongson-3A R4+ */
andi t1, t0, PRID_IMP_MASK
li t2, PRID_IMP_LOONGSON_64G
beq t1, t2, 1 f
nop
/* Loongson-3A R2/R3 */
andi t0, (PRID_IMP_MASK | PRID_REV_MASK)
slti t0, t0, (PRID_IMP_LOONGSON_64C | PRID_REV_LOONGSON3A_R2_0)
bnez t0, 2 f
nop
1 :
mfc0 t0, CP0_CONFIG6
or t0, 0 x100
mtc0 t0, CP0_CONFIG6
2 :
_ehb
.set pop
.endm
/*
* Do SMP slave processor setup .
*/
.macro smp_slave_setup
.set push
.set mips64
/* Set ELPA on LOONGSON3 pagegrain */
mfc0 t0, CP0_PAGEGRAIN
or t0, (0 x1 << 29 )
mtc0 t0, CP0_PAGEGRAIN
/* Enable STFill Buffer */
mfc0 t0, CP0_PRID
/* Loongson-3A R4+ */
andi t1, t0, PRID_IMP_MASK
li t2, PRID_IMP_LOONGSON_64G
beq t1, t2, 1 f
nop
/* Loongson-3A R2/R3 */
andi t0, (PRID_IMP_MASK | PRID_REV_MASK)
slti t0, t0, (PRID_IMP_LOONGSON_64C | PRID_REV_LOONGSON3A_R2_0)
bnez t0, 2 f
nop
1 :
mfc0 t0, CP0_CONFIG6
or t0, 0 x100
mtc0 t0, CP0_CONFIG6
2 :
_ehb
.set pop
.endm
#define USE_KEXEC_SMP_WAIT_FINAL
.macro kexec_smp_wait_final
/* s0:prid s1:initfn */
/* a0:base t1:cpuid t2:node t9:count */
mfc0 t1, CP0_EBASE
andi t1, MIPS_EBASE_CPUNUM
dins a0, t1, 8 , 2 /* insert core id*/
dext t2, t1, 2 , 2
dins a0, t2, 44 , 2 /* insert node id */
mfc0 s0, CP0_PRID
andi s0, s0, (PRID_IMP_MASK | PRID_REV_MASK)
beq s0, (PRID_IMP_LOONGSON_64C | PRID_REV_LOONGSON3B_R1), 1 f
beq s0, (PRID_IMP_LOONGSON_64C | PRID_REV_LOONGSON3B_R2), 1 f
b 2 f /* Loongson-3A1000/3A2000/3A3000/3A4000 */
1 : dins a0, t2, 14 , 2 /* Loongson-3B1000/3B1500 need bit 15~14 */
2 : li t9, 0 x100 /* wait for init loop */
3 : addiu t9, -1 /* limit mailbox access */
bnez t9, 3 b
lw s1, 0 x20(a0) /* check PC as an indicator */
beqz s1, 2 b
ld s1, 0 x20(a0) /* get PC via mailbox reg0 */
ld sp, 0 x28(a0) /* get SP via mailbox reg1 */
ld gp, 0 x30(a0) /* get GP via mailbox reg2 */
ld a1, 0 x38(a0)
jr s1 /* jump to initial PC */
.endm
#endif /* __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H */
Messung V0.5 in Prozent C=77 H=60 G=68
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-02)
¤
*© Formatika GbR, Deutschland