sh: CPU flags in AT_HWCAP in ELF auxvt.
authorPaul Mundt <lethal@linux-sh.org>
Wed, 27 Sep 2006 09:22:53 +0000 (18:22 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 27 Sep 2006 09:22:53 +0000 (18:22 +0900)
Encode processor flags in AT_HWCAP in the ELF auxiliary vector.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/cpu/sh4/probe.c
include/asm-sh/cpu-features.h [new file with mode: 0644]
include/asm-sh/elf.h
include/asm-sh/processor.h

index 6e8a2b5268e80d5d36de43ed612cf6167f56cf76..0e65aa6ddcaace738d05600827a08c8a2d3ed002 100644 (file)
@@ -76,6 +76,7 @@ int __init detect_cpu_and_cache_system(void)
                cpu_data->type = CPU_SH73180;
                cpu_data->icache.ways = 4;
                cpu_data->dcache.ways = 4;
+               cpu_data->flags |= CPU_HAS_LLSC;
                break;
        case 0x2001:
        case 0x2004:
@@ -83,7 +84,7 @@ int __init detect_cpu_and_cache_system(void)
                cpu_data->icache.ways = 4;
                cpu_data->dcache.ways = 4;
 
-               cpu_data->flags |= CPU_HAS_FPU;
+               cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_LLSC;
                break;
        case 0x2006:
        case 0x200A:
@@ -95,13 +96,15 @@ int __init detect_cpu_and_cache_system(void)
                cpu_data->icache.ways = 4;
                cpu_data->dcache.ways = 4;
 
-               cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER;
+               cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER |
+                                  CPU_HAS_LLSC;
                break;
        case 0x3000:
        case 0x3003:
                cpu_data->type = CPU_SH7343;
                cpu_data->icache.ways = 4;
                cpu_data->dcache.ways = 4;
+               cpu_data->flags |= CPU_HAS_LLSC;
                break;
        case 0x8000:
                cpu_data->type = CPU_ST40RA;
@@ -180,4 +183,3 @@ int __init detect_cpu_and_cache_system(void)
 
        return 0;
 }
-
diff --git a/include/asm-sh/cpu-features.h b/include/asm-sh/cpu-features.h
new file mode 100644 (file)
index 0000000..e398947
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __ASM_SH_CPU_FEATURES_H
+#define __ASM_SH_CPU_FEATURES_H
+
+/*
+ * Processor flags
+ */
+#define CPU_HAS_FPU            0x0001  /* Hardware FPU support */
+#define CPU_HAS_P2_FLUSH_BUG   0x0002  /* Need to flush the cache in P2 area */
+#define CPU_HAS_MMU_PAGE_ASSOC 0x0004  /* SH3: TLB way selection bit support */
+#define CPU_HAS_DSP            0x0008  /* SH-DSP: DSP support */
+#define CPU_HAS_PERF_COUNTER   0x0010  /* Hardware performance counters */
+#define CPU_HAS_PTEA           0x0020  /* PTEA register */
+#define CPU_HAS_LLSC           0x0040  /* movli.l/movco.l */
+
+#endif /* __ASM_SH_CPU_FEATURES_H */
index 1b63dfeea4f2b3e165a4689e80c130a46b6eb1c0..cc8e5e767345bfad53279b80645aa32ba311fabd 100644 (file)
@@ -1,6 +1,11 @@
 #ifndef __ASM_SH_ELF_H
 #define __ASM_SH_ELF_H
 
+#include <asm/processor.h>
+#include <asm/auxvec.h>
+#include <asm/ptrace.h>
+#include <asm/user.h>
+
 /* SH relocation types  */
 #define        R_SH_NONE               0
 #define        R_SH_DIR32              1
@@ -46,9 +51,6 @@
  * ELF register definitions..
  */
 
-#include <asm/ptrace.h>
-#include <asm/user.h>
-
 typedef unsigned long elf_greg_t;
 
 #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t))
@@ -91,7 +93,7 @@ typedef struct user_fpu_struct elf_fpregset_t;
    instruction set this CPU supports.  This could be done in user space,
    but it's not easy, and we've already done it here.  */
 
-#define ELF_HWCAP      (0)
+#define ELF_HWCAP      (boot_cpu_data.flags)
 
 /* This yields a string that ld.so will use to load implementation
    specific libraries for optimization.  This is more specific in
index 3b3ef4f2bf3181634eb2b39e1978b545176b0ec6..bdd472705546fd18e7de45888a2e48c9fa3db4fb 100644 (file)
@@ -14,6 +14,7 @@
 #include <asm/types.h>
 #include <asm/cache.h>
 #include <asm/ptrace.h>
+#include <asm/cpu-features.h>
 
 /*
  * Default implementation of macro that returns current
@@ -127,17 +128,6 @@ union sh_fpu_union {
        struct sh_fpu_soft_struct soft;
 };
 
-/*
- * Processor flags
- */
-
-#define CPU_HAS_FPU            0x0001  /* Hardware FPU support */
-#define CPU_HAS_P2_FLUSH_BUG   0x0002  /* Need to flush the cache in P2 area */
-#define CPU_HAS_MMU_PAGE_ASSOC 0x0004  /* SH3: TLB way selection bit support */
-#define CPU_HAS_DSP            0x0008  /* SH-DSP: DSP support */
-#define CPU_HAS_PERF_COUNTER   0x0010  /* Hardware performance counters */
-#define CPU_HAS_PTEA           0x0020  /* PTEA register */
-
 struct thread_struct {
        unsigned long sp;
        unsigned long pc;