|
@@ -10,14 +10,15 @@
|
|
|
#ifndef __ASM_MACH_MIPS_KERNEL_ENTRY_INIT_H
|
|
|
#define __ASM_MACH_MIPS_KERNEL_ENTRY_INIT_H
|
|
|
|
|
|
+#include <asm/regdef.h>
|
|
|
+#include <asm/mipsregs.h>
|
|
|
+
|
|
|
/*
|
|
|
* Prepare segments for EVA boot:
|
|
|
*
|
|
|
* This is in case the processor boots in legacy configuration
|
|
|
* (SI_EVAReset is de-asserted and CONFIG5.K == 0)
|
|
|
*
|
|
|
- * On entry, t1 is loaded with CP0_CONFIG
|
|
|
- *
|
|
|
* ========================= Mappings =============================
|
|
|
* Virtual memory Physical memory Mapping
|
|
|
* 0x00000000 - 0x7fffffff 0x80000000 - 0xfffffffff MUSUK (kuseg)
|
|
@@ -30,12 +31,20 @@
|
|
|
*
|
|
|
*
|
|
|
* Lowmem is expanded to 2GB
|
|
|
+ *
|
|
|
+ * The following code uses the t0, t1, t2 and ra registers without
|
|
|
+ * previously preserving them.
|
|
|
+ *
|
|
|
*/
|
|
|
- .macro eva_entry
|
|
|
+ .macro platform_eva_init
|
|
|
+
|
|
|
+ .set push
|
|
|
+ .set reorder
|
|
|
/*
|
|
|
* Get Config.K0 value and use it to program
|
|
|
* the segmentation registers
|
|
|
*/
|
|
|
+ mfc0 t1, CP0_CONFIG
|
|
|
andi t1, 0x7 /* CCA */
|
|
|
move t2, t1
|
|
|
ins t2, t1, 16, 3
|
|
@@ -77,6 +86,8 @@
|
|
|
mtc0 t0, $16, 5
|
|
|
sync
|
|
|
jal mips_ihb
|
|
|
+
|
|
|
+ .set pop
|
|
|
.endm
|
|
|
|
|
|
.macro kernel_entry_setup
|
|
@@ -95,7 +106,7 @@
|
|
|
sll t0, t0, 6 /* SC bit */
|
|
|
bgez t0, 9f
|
|
|
|
|
|
- eva_entry
|
|
|
+ platform_eva_init
|
|
|
b 0f
|
|
|
9:
|
|
|
/* Assume we came from YAMON... */
|
|
@@ -127,8 +138,7 @@ nonsc_processor:
|
|
|
#ifdef CONFIG_EVA
|
|
|
sync
|
|
|
ehb
|
|
|
- mfc0 t1, CP0_CONFIG
|
|
|
- eva_entry
|
|
|
+ platform_eva_init
|
|
|
#endif
|
|
|
.endm
|
|
|
|