| .. | .. |
|---|
| 11 | 11 | #ifndef __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H |
|---|
| 12 | 12 | #define __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H |
|---|
| 13 | 13 | |
|---|
| 14 | +#include <asm/cpu.h> |
|---|
| 15 | + |
|---|
| 14 | 16 | /* |
|---|
| 15 | 17 | * Override macros used in arch/mips/kernel/head.S. |
|---|
| 16 | 18 | */ |
|---|
| 17 | 19 | .macro kernel_entry_setup |
|---|
| 18 | | -#ifdef CONFIG_CPU_LOONGSON3 |
|---|
| 19 | 20 | .set push |
|---|
| 20 | 21 | .set mips64 |
|---|
| 21 | 22 | /* Set LPA on LOONGSON3 config3 */ |
|---|
| .. | .. |
|---|
| 26 | 27 | mfc0 t0, CP0_PAGEGRAIN |
|---|
| 27 | 28 | or t0, (0x1 << 29) |
|---|
| 28 | 29 | mtc0 t0, CP0_PAGEGRAIN |
|---|
| 29 | | -#ifdef CONFIG_LOONGSON3_ENHANCEMENT |
|---|
| 30 | 30 | /* Enable STFill Buffer */ |
|---|
| 31 | + mfc0 t0, CP0_PRID |
|---|
| 32 | + /* Loongson-3A R4+ */ |
|---|
| 33 | + andi t1, t0, PRID_IMP_MASK |
|---|
| 34 | + li t2, PRID_IMP_LOONGSON_64G |
|---|
| 35 | + beq t1, t2, 1f |
|---|
| 36 | + nop |
|---|
| 37 | + /* Loongson-3A R2/R3 */ |
|---|
| 38 | + andi t0, (PRID_IMP_MASK | PRID_REV_MASK) |
|---|
| 39 | + slti t0, t0, (PRID_IMP_LOONGSON_64C | PRID_REV_LOONGSON3A_R2_0) |
|---|
| 40 | + bnez t0, 2f |
|---|
| 41 | + nop |
|---|
| 42 | +1: |
|---|
| 31 | 43 | mfc0 t0, CP0_CONFIG6 |
|---|
| 32 | 44 | or t0, 0x100 |
|---|
| 33 | 45 | mtc0 t0, CP0_CONFIG6 |
|---|
| 34 | | -#endif |
|---|
| 46 | +2: |
|---|
| 35 | 47 | _ehb |
|---|
| 36 | 48 | .set pop |
|---|
| 37 | | -#endif |
|---|
| 38 | 49 | .endm |
|---|
| 39 | 50 | |
|---|
| 40 | 51 | /* |
|---|
| 41 | 52 | * Do SMP slave processor setup. |
|---|
| 42 | 53 | */ |
|---|
| 43 | 54 | .macro smp_slave_setup |
|---|
| 44 | | -#ifdef CONFIG_CPU_LOONGSON3 |
|---|
| 45 | 55 | .set push |
|---|
| 46 | 56 | .set mips64 |
|---|
| 47 | 57 | /* Set LPA on LOONGSON3 config3 */ |
|---|
| .. | .. |
|---|
| 52 | 62 | mfc0 t0, CP0_PAGEGRAIN |
|---|
| 53 | 63 | or t0, (0x1 << 29) |
|---|
| 54 | 64 | mtc0 t0, CP0_PAGEGRAIN |
|---|
| 55 | | -#ifdef CONFIG_LOONGSON3_ENHANCEMENT |
|---|
| 56 | 65 | /* Enable STFill Buffer */ |
|---|
| 66 | + mfc0 t0, CP0_PRID |
|---|
| 67 | + /* Loongson-3A R4+ */ |
|---|
| 68 | + andi t1, t0, PRID_IMP_MASK |
|---|
| 69 | + li t2, PRID_IMP_LOONGSON_64G |
|---|
| 70 | + beq t1, t2, 1f |
|---|
| 71 | + nop |
|---|
| 72 | + /* Loongson-3A R2/R3 */ |
|---|
| 73 | + andi t0, (PRID_IMP_MASK | PRID_REV_MASK) |
|---|
| 74 | + slti t0, t0, (PRID_IMP_LOONGSON_64C | PRID_REV_LOONGSON3A_R2_0) |
|---|
| 75 | + bnez t0, 2f |
|---|
| 76 | + nop |
|---|
| 77 | +1: |
|---|
| 57 | 78 | mfc0 t0, CP0_CONFIG6 |
|---|
| 58 | 79 | or t0, 0x100 |
|---|
| 59 | 80 | mtc0 t0, CP0_CONFIG6 |
|---|
| 60 | | -#endif |
|---|
| 81 | +2: |
|---|
| 61 | 82 | _ehb |
|---|
| 62 | 83 | .set pop |
|---|
| 63 | | -#endif |
|---|
| 64 | 84 | .endm |
|---|
| 65 | 85 | |
|---|
| 66 | 86 | #endif /* __ASM_MACH_LOONGSON64_KERNEL_ENTRY_H */ |
|---|