]> git.hungrycats.org Git - linux/commitdiff
Tidy up abort handler selection. Use new glue.h to select relevant
authorRussell King <rmk@flint.arm.linux.org.uk>
Sun, 10 Mar 2002 16:07:51 +0000 (16:07 +0000)
committerRussell King <rmk@flint.arm.linux.org.uk>
Sun, 10 Mar 2002 16:07:51 +0000 (16:07 +0000)
handler to allow for better optimisation.

16 files changed:
arch/arm/kernel/entry-armv.S
arch/arm/mm/abort-ev4.S
arch/arm/mm/abort-ev4t.S
arch/arm/mm/abort-ev5ej.S
arch/arm/mm/abort-lv4t.S
arch/arm/mm/proc-arm1020.S
arch/arm/mm/proc-arm720.S
arch/arm/mm/proc-arm920.S
arch/arm/mm/proc-arm922.S
arch/arm/mm/proc-arm926.S
arch/arm/mm/proc-sa110.S
arch/arm/mm/proc-xscale.S
include/asm-arm/cpu-multi32.h
include/asm-arm/cpu-single.h
include/asm-arm/glue.h
include/asm-arm/proc-fns.h

index bab87ea3d69fed3543672b9b5ae5a5399fb95720..dbec0fa34090d4ec07c637164f658a981022ddfc 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/config.h>
 #include "entry-header.S"
 #include <asm/thread_info.h>
+#include <asm/glue.h>
 
 
 #ifdef IOC_BASE
@@ -681,12 +682,12 @@ __dabt_svc:       sub     sp, sp, #S_FRAME_SIZE
 /*
  * This routine must not corrupt r9
  */
-#ifdef MULTI_CPU
+#ifdef MULTI_ABORT
                ldr     r4, .LCprocfns                  @ pass r0, r3 to
                mov     lr, pc                          @ processor code
                ldr     pc, [r4]                        @ call processor specific code
 #else
-               bl      cpu_data_abort
+               bl      CPU_ABORT_HANDLER
 #endif
                msr     cpsr_c, r9
                mov     r2, sp
@@ -799,7 +800,7 @@ __pabt_svc: sub     sp, sp, #S_FRAME_SIZE
 .LCirq:                .word   __temp_irq
 .LCund:                .word   __temp_und
 .LCabt:                .word   __temp_abt
-#ifdef MULTI_CPU
+#ifdef MULTI_ABORT
 .LCprocfns:    .word   SYMBOL_NAME(processor)
 #endif
 .LCfp:         .word   SYMBOL_NAME(fp_enter)
@@ -823,12 +824,12 @@ __dabt_usr:       sub     sp, sp, #S_FRAME_SIZE           @ Allocate frame size in one go
                alignment_trap r7, r7, __temp_abt
                zero_fp
                mov     r0, r2                          @ remove once everyones in sync
-#ifdef MULTI_CPU
+#ifdef MULTI_ABORT
                ldr     r4, .LCprocfns                  @ pass r0, r3 to
                mov     lr, pc                          @ processor code
                ldr     pc, [r4]                        @ call processor specific code
 #else
-               bl      cpu_data_abort
+               bl      CPU_ABORT_HANDLER
 #endif
                set_cpsr_c r2, #MODE_SVC                @ Enable interrupts
                mov     r2, sp
index 8b3e6679748542f7603de3675527181a8b279f60..4eb0823da945a73a3967bd5ecc8d2859183fcf14 100644 (file)
@@ -1,7 +1,7 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 /*
- * Function: armv4_early_abort
+ * Function: v4_early_abort
  *
  * Params  : r2 = address of aborted instruction
  *         : r3 = saved SPSR
@@ -18,7 +18,7 @@
  * picture.  Unfortunately, this does happen.  We live with it.
  */
        .align  5
-ENTRY(armv4_early_abort)
+ENTRY(v4_early_abort)
        mrc     p15, 0, r1, c5, c0, 0           @ get FSR
        mrc     p15, 0, r0, c6, c0, 0           @ get FAR
        ldr     r3, [r2]                        @ read aborted ARM instruction
index dd72ad8c1d83e7538e21c79cdbc033610d1294d4..31a38f1ed0c0c881ba9da812b7e507069761759e 100644 (file)
@@ -1,7 +1,7 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 /*
- * Function: armv4t_early_abort
+ * Function: v4t_early_abort
  *
  * Params  : r2 = address of aborted instruction
  *         : r3 = saved SPSR
@@ -18,7 +18,7 @@
  * picture.  Unfortunately, this does happen.  We live with it.
  */
        .align  5
-ENTRY(armv4t_early_abort)
+ENTRY(v4t_early_abort)
        mrc     p15, 0, r1, c5, c0, 0           @ get FSR
        mrc     p15, 0, r0, c6, c0, 0           @ get FAR
        tst     r3, #PSR_T_BIT
index 618a6cb1f41410992990e6b10bcb2d126d0c3ac3..0f7cd37331324694b156903329b6260a8ce4c76b 100644 (file)
@@ -1,7 +1,7 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 /*
- * Function: armv5ej_early_abort
+ * Function: v5ej_early_abort
  *
  * Params  : r2 = address of aborted instruction
  *         : r3 = saved SPSR
@@ -18,7 +18,7 @@
  * picture.  Unfortunately, this does happen.  We live with it.
  */
        .align  5
-ENTRY(armv5ej_early_abort)
+ENTRY(v5ej_early_abort)
        mrc     p15, 0, r1, c5, c0, 0           @ get FSR
        mrc     p15, 0, r0, c6, c0, 0           @ get FAR
        tst     r3, #PSR_J_BIT
index 6cbe9e349fa1b5460af17512b9c98b0bad7879ab..6b768df8fab20bb4d9251f193c209d19f5571e92 100644 (file)
@@ -1,7 +1,7 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 /*
- * Function: armv4t_late_abort
+ * Function: v4t_late_abort
  *
  * Params  : r2 = address of aborted instruction
  *         : r3 = saved SPSR
@@ -17,7 +17,7 @@
  * abort here if the I-TLB and D-TLB aren't seeing the same
  * picture.  Unfortunately, this does happen.  We live with it.
  */
-ENTRY(armv4t_late_abort)
+ENTRY(v4t_late_abort)
        tst     r3, #PSR_T_BIT                  @ check for thumb mode
        mrc     p15, 0, r1, c5, c0, 0           @ get FSR
        mrc     p15, 0, r0, c6, c0, 0           @ get FAR
index dd1d04b62f8c4c56c88f18e1f2861af391b7cd86..26ec28fd216129072a59d67a420a3b100e0cd7f8 100644 (file)
@@ -608,7 +608,7 @@ __arm1020_setup:
  */
        .type   arm1020_processor_functions, #object
 arm1020_processor_functions:
-       .word   armv4t_early_abort
+       .word   v4t_early_abort
        .word   cpu_arm1020_check_bugs
        .word   cpu_arm1020_proc_init
        .word   cpu_arm1020_proc_fin
index 7efb11dea5aac2a3c84dca34c1a877f9f9d7f145..f97ea054d26fa9cbd6f4ead5e02d2991442ba3f7 100644 (file)
@@ -199,7 +199,7 @@ __arm720_setup:     mov     r0, #0
  */
                .type   arm720_processor_functions, #object
 ENTRY(arm720_processor_functions)
-               .word   armv4t_late_abort
+               .word   v4t_late_abort
                .word   cpu_arm720_check_bugs
                .word   cpu_arm720_proc_init
                .word   cpu_arm720_proc_fin
index a91dc901ec92375ace216fb3addd628366dc451d..b739b74b57cc5286df95720ad7f45f672997f359 100644 (file)
@@ -511,7 +511,7 @@ __arm920_setup:
  */
        .type   arm920_processor_functions, #object
 arm920_processor_functions:
-       .word   armv4t_early_abort
+       .word   v4t_early_abort
        .word   cpu_arm920_check_bugs
        .word   cpu_arm920_proc_init
        .word   cpu_arm920_proc_fin
index 5a92d6a2f5bfa4e973c5ac2b9d23732c4eddc8ad..1ad1910c14be28f8ead786b71f55f24ecd5b18b6 100644 (file)
@@ -512,7 +512,7 @@ __arm922_setup:
  */
        .type   arm922_processor_functions, #object
 arm922_processor_functions:
-       .word   armv4t_early_abort
+       .word   v4t_early_abort
        .word   cpu_arm922_check_bugs
        .word   cpu_arm922_proc_init
        .word   cpu_arm922_proc_fin
index 96c9c535c44947e95ff6ac6b778f828952395dbd..a047c309bb150c783f194bef1357626aa533dd58 100644 (file)
@@ -549,7 +549,7 @@ __arm926_setup:
  */
        .type   arm926_processor_functions, #object
 arm926_processor_functions:
-       .word   armv5ej_early_abort
+       .word   v5ej_early_abort
        .word   cpu_arm926_check_bugs
        .word   cpu_arm926_proc_init
        .word   cpu_arm926_proc_fin
index 06e683496413bc4bf43bccee20185829069f1836..f7ff2aaba8167647768c3dfb157761b5646911ca 100644 (file)
@@ -538,7 +538,7 @@ __setup_common:
 
        .type   sa110_processor_functions, #object
 ENTRY(sa110_processor_functions)
-       .word   armv4_early_abort
+       .word   v4_early_abort
        .word   cpu_sa110_check_bugs
        .word   cpu_sa110_proc_init
        .word   cpu_sa110_proc_fin
index 3e67f274c60ad1f43a15784d2655664358694ddb..fbb776f796afb026fc4ccaf7d3ffd82dfaacd4b3 100644 (file)
@@ -695,7 +695,7 @@ __xscale_setup:
 
        .type   xscale_processor_functions, #object
 ENTRY(xscale_processor_functions)
-       .word   armv4t_early_abort
+       .word   v4t_early_abort
        .word   cpu_xscale_check_bugs
        .word   cpu_xscale_proc_init
        .word   cpu_xscale_proc_fin
index 9db83322ea544e71dd35d6dec30c59dad8c193ed..9b432cfa23e8bf8d8c53d63daa18b72f449669f5 100644 (file)
@@ -118,7 +118,6 @@ extern const struct processor arm6_processor_functions;
 extern const struct processor arm7_processor_functions;
 extern const struct processor sa110_processor_functions;
 
-#define cpu_data_abort(pc)                     processor._data_abort(pc)
 #define cpu_check_bugs()                       processor._check_bugs()
 #define cpu_proc_init()                                processor._proc_init()
 #define cpu_proc_fin()                         processor._proc_fin()
index 6f794bb570fe0c552170fd5b5e53245abdf64622..19a2d2b0f014baed483624a18736280fb4e3d8fd 100644 (file)
@@ -22,7 +22,6 @@
  * function pointers for this lot.  Otherwise, we can optimise the
  * table away.
  */
-#define cpu_data_abort                 __cpu_fn(CPU_ABRT,_abort)
 #define cpu_check_bugs                 __cpu_fn(CPU_NAME,_check_bugs)
 #define cpu_proc_init                  __cpu_fn(CPU_NAME,_proc_init)
 #define cpu_proc_fin                   __cpu_fn(CPU_NAME,_proc_fin)
index a4f098d8aabb680da9d271f125ec48922da2e9b6..62a95e7a361dd789b53f42136a5e2aef676c6336 100644 (file)
 #endif
 #define __glue(name,fn)                ____glue(name,fn)
 
-/*
- * Select MMU TLB handling.
- */
+
 
 /*
- * ARMv3 MMU
+ *     MMU TLB Model
+ *     =============
+ *
+ *     We have the following to choose from:
+ *       v3    - ARMv3
+ *       v4    - ARMv4 without write buffer
+ *       v4wb  - ARMv4 with write buffer without I TLB flush entry instruction
+ *       v4wbi - ARMv4 with write buffer with I TLB flush entry instruction
  */
 #undef _TLB
+#undef MULTI_TLB
+
 #if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710)
 # ifdef _TLB
 #  define MULTI_TLB 1
@@ -40,9 +47,6 @@
 # endif
 #endif
 
-/*
- * ARMv4 MMU without write buffer
- */
 #if defined(CONFIG_CPU_ARM720T)
 # ifdef _TLB
 #  define MULTI_TLB 1
@@ -51,9 +55,6 @@
 # endif
 #endif
 
-/*
- * ARMv4 MMU with write buffer, with invalidate I TLB entry instruction
- */
 #if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \
     defined(CONFIG_CPU_ARM926T) || defined(CONFIG_CPU_ARM1020) || \
     defined(CONFIG_CPU_XSCALE)
@@ -64,9 +65,6 @@
 # endif
 #endif
 
-/*
- * ARMv4 MMU with write buffer, without invalidate I TLB entry instruction
- */
 #if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100)
 # ifdef _TLB
 #  define MULTI_TLB 1
 # endif
 #endif
 
+#ifndef _TLB
+#error Unknown TLB model
+#endif
+
+
+
+/*
+ *     Data Abort Model
+ *     ================
+ *
+ *     We have the following to choose from:
+ *       arm6          - ARM6 style
+ *       arm7          - ARM7 style
+ *       v4_early      - ARMv4 without Thumb early abort handler
+ *       v4t_late      - ARMv4 with Thumb late abort handler
+ *       v4t_early     - ARMv4 with Thumb early abort handler
+ *       v5ej_early    - ARMv5 with Thumb and Java early abort handler
+ */
+#undef CPU_ABORT_HANDLER
+#undef MULTI_ABORT
+
+#if defined(CONFIG_CPU_ARM610)
+# ifdef CPU_ABORT_HANDLER
+#  define MULTI_ABORT 1
+# else
+#  define CPU_ABORT_HANDLER cpu_arm6_data_abort
+# endif
+#endif
+
+#if defined(CONFIG_CPU_ARM710)
+# ifdef CPU_ABORT_HANDLER
+#  define MULTI_ABORT 1
+# else
+#  define CPU_ABORT_HANDLER cpu_arm7_data_abort
+# endif
+#endif
+
+#if defined(CONFIG_CPU_ARM720T)
+# ifdef CPU_ABORT_HANDLER
+#  define MULTI_ABORT 1
+# else
+#  define CPU_ABORT_HANDLER v4t_late_abort
+# endif
+#endif
+
+#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100)
+# ifdef CPU_ABORT_HANDLER
+#  define MULTI_ABORT 1
+# else
+#  define CPU_ABORT_HANDLER v4_early_abort
+# endif
+#endif
+
+#if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \
+    defined(CONFIG_CPU_ARM1020) || defined(CONFIG_CPU_XSCALE)
+# ifdef CPU_ABORT_HANDLER
+#  define MULTI_ABORT 1
+# else
+#  define CPU_ABORT_HANDLER v4t_early_abort
+# endif
+#endif
+
+#if defined(CONFIG_CPU_ARM926T)
+# ifdef CPU_ABORT_HANDLER
+#  define MULTI_ABORT 1
+# else
+#  define CPU_ABORT_HANDLER v5ej_early_abort
+# endif
+#endif
+
+#ifndef CPU_ABORT_HANDLER
+#error Unknown data abort handler type
+#endif
+
 #endif
index 1f212216a757b585028ee8a2726b67a424cc14f1..a62ca087e35c9551bff230e8d1c17179a15e5336 100644 (file)
@@ -28,7 +28,6 @@
 
 /*
  * CPU_NAME - the prefix for CPU related functions
- * CPU_ABRT - the prefix for the CPU abort decoding function
  * MMU_ARCH - the prefix for copy_user_page/clear_user_page
  */
 
@@ -40,7 +39,6 @@
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_arm6
-#   define CPU_ABRT cpu_arm6
 #   define MMU_ARCH armv3
 #  endif
 # endif
@@ -50,7 +48,6 @@
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_arm7
-#   define CPU_ABRT cpu_arm7
 #   define MMU_ARCH armv3
 #  endif
 # endif
@@ -60,7 +57,6 @@
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_arm720
-#   define CPU_ABRT armv4t_late
 #   define MMU_ARCH armv4
 #  endif
 # endif
@@ -70,7 +66,6 @@
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_arm920
-#   define CPU_ABRT armv4t_early
 #   define MMU_ARCH armv4
 #  endif
 # endif
@@ -80,7 +75,6 @@
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_arm922
-#   define CPU_ABRT armv4t_early
 #   define MMU_ARCH armv4
 #  endif
 # endif
@@ -90,7 +84,6 @@
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_arm926
-#   define CPU_ABRT armv5ej_early
 #   define MMU_ARCH armv4
 #  endif
 # endif
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_sa110
-#   define CPU_ABRT armv4_early
 #   define MMU_ARCH armv4
 #  endif
 # endif
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_sa1100
-#   define CPU_ABRT armv4_early
 #   define MMU_ARCH armv4_mc
 #  endif
 # endif
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_arm1020
-#   define CPU_ABRT armv4t_early
 #   define MMU_ARCH armv4
 #  endif
 # endif
 #   define MULTI_CPU
 #  else
 #   define CPU_NAME cpu_xscale
-#   define CPU_ABRT armv4t_early
 #   define MMU_ARCH armv5te
 #  endif
 # endif