]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
Merge branch 'for-rmk' of git://linux-arm.org/linux-2.6-wd into devel-stable
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 8 Jul 2011 08:54:29 +0000 (09:54 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 8 Jul 2011 08:54:29 +0000 (09:54 +0100)
46 files changed:
arch/arm/include/asm/assembler.h
arch/arm/include/asm/hwcap.h
arch/arm/include/asm/perf_event.h
arch/arm/kernel/perf_event.c
arch/arm/kernel/perf_event_v7.c
arch/arm/kernel/setup.c
arch/arm/mm/cache-fa.S
arch/arm/mm/cache-v3.S
arch/arm/mm/cache-v4.S
arch/arm/mm/cache-v4wb.S
arch/arm/mm/cache-v4wt.S
arch/arm/mm/cache-v6.S
arch/arm/mm/cache-v7.S
arch/arm/mm/proc-arm1020.S
arch/arm/mm/proc-arm1020e.S
arch/arm/mm/proc-arm1022.S
arch/arm/mm/proc-arm1026.S
arch/arm/mm/proc-arm6_7.S
arch/arm/mm/proc-arm720.S
arch/arm/mm/proc-arm740.S
arch/arm/mm/proc-arm7tdmi.S
arch/arm/mm/proc-arm920.S
arch/arm/mm/proc-arm922.S
arch/arm/mm/proc-arm925.S
arch/arm/mm/proc-arm926.S
arch/arm/mm/proc-arm940.S
arch/arm/mm/proc-arm946.S
arch/arm/mm/proc-arm9tdmi.S
arch/arm/mm/proc-fa526.S
arch/arm/mm/proc-feroceon.S
arch/arm/mm/proc-macros.S
arch/arm/mm/proc-mohawk.S
arch/arm/mm/proc-sa110.S
arch/arm/mm/proc-sa1100.S
arch/arm/mm/proc-v6.S
arch/arm/mm/proc-v7.S
arch/arm/mm/proc-xsc3.S
arch/arm/mm/proc-xscale.S
arch/arm/mm/tlb-fa.S
arch/arm/mm/tlb-v3.S
arch/arm/mm/tlb-v4.S
arch/arm/mm/tlb-v4wb.S
arch/arm/mm/tlb-v4wbi.S
arch/arm/mm/tlb-v6.S
arch/arm/mm/tlb-v7.S
arch/arm/vfp/vfpmodule.c

index 65c3f2474f5e3333142952b4dc7a1f445bcaedb4..29035e86a59db0d4c46ab315a9350780dbfe2999 100644 (file)
        .macro  ldrusr, reg, ptr, inc, cond=al, rept=1, abort=9001f
        usracc  ldr, \reg, \ptr, \inc, \cond, \rept, \abort
        .endm
+
+/* Utility macro for declaring string literals */
+       .macro  string name:req, string
+       .type \name , #object
+\name:
+       .asciz "\string"
+       .size \name , . - \name
+       .endm
+
 #endif /* __ASM_ASSEMBLER_H__ */
index c1062c317103f706b9b2209fe8a5146c9ea4e7bf..c93a22a8b924737730edaf17ef3e5ceb7b94afc5 100644 (file)
@@ -4,22 +4,26 @@
 /*
  * HWCAP flags - for elf_hwcap (in kernel) and AT_HWCAP
  */
-#define HWCAP_SWP      1
-#define HWCAP_HALF     2
-#define HWCAP_THUMB    4
-#define HWCAP_26BIT    8       /* Play it safe */
-#define HWCAP_FAST_MULT        16
-#define HWCAP_FPA      32
-#define HWCAP_VFP      64
-#define HWCAP_EDSP     128
-#define HWCAP_JAVA     256
-#define HWCAP_IWMMXT   512
-#define HWCAP_CRUNCH   1024
-#define HWCAP_THUMBEE  2048
-#define HWCAP_NEON     4096
-#define HWCAP_VFPv3    8192
-#define HWCAP_VFPv3D16 16384
-#define HWCAP_TLS      32768
+#define HWCAP_SWP      (1 << 0)
+#define HWCAP_HALF     (1 << 1)
+#define HWCAP_THUMB    (1 << 2)
+#define HWCAP_26BIT    (1 << 3)        /* Play it safe */
+#define HWCAP_FAST_MULT        (1 << 4)
+#define HWCAP_FPA      (1 << 5)
+#define HWCAP_VFP      (1 << 6)
+#define HWCAP_EDSP     (1 << 7)
+#define HWCAP_JAVA     (1 << 8)
+#define HWCAP_IWMMXT   (1 << 9)
+#define HWCAP_CRUNCH   (1 << 10)
+#define HWCAP_THUMBEE  (1 << 11)
+#define HWCAP_NEON     (1 << 12)
+#define HWCAP_VFPv3    (1 << 13)
+#define HWCAP_VFPv3D16 (1 << 14)
+#define HWCAP_TLS      (1 << 15)
+#define HWCAP_VFPv4    (1 << 16)
+#define HWCAP_IDIVA    (1 << 17)
+#define HWCAP_IDIVT    (1 << 18)
+#define HWCAP_IDIV     (HWCAP_IDIVA | HWCAP_IDIVT)
 
 #if defined(__KERNEL__) && !defined(__ASSEMBLY__)
 /*
index c4aa4e8c6af9cda0b7e88a46cbed94dc6e3b565d..0f8e3827a89b314aa47ea827e9d109cbeb8406d9 100644 (file)
@@ -24,6 +24,8 @@ enum arm_perf_pmu_ids {
        ARM_PERF_PMU_ID_V6MP,
        ARM_PERF_PMU_ID_CA8,
        ARM_PERF_PMU_ID_CA9,
+       ARM_PERF_PMU_ID_CA5,
+       ARM_PERF_PMU_ID_CA15,
        ARM_NUM_PMU_IDS,
 };
 
index d53c0abc4dd3aaa375595fcd4d54527f013b41f8..262ea67f60ae4661a3ebe8cef178335b1ae648a9 100644 (file)
@@ -660,6 +660,12 @@ init_hw_perf_events(void)
                case 0xC090:    /* Cortex-A9 */
                        armpmu = armv7_a9_pmu_init();
                        break;
+               case 0xC050:    /* Cortex-A5 */
+                       armpmu = armv7_a5_pmu_init();
+                       break;
+               case 0xC0F0:    /* Cortex-A15 */
+                       armpmu = armv7_a15_pmu_init();
+                       break;
                }
        /* Intel CPUs [xscale]. */
        } else if (0x69 == implementor) {
index 4960686afb5815c2b54d1258e41bc6ab81a9adde..963317896c803fa867c465de5e2725ef28126159 100644 (file)
  */
 
 #ifdef CONFIG_CPU_V7
-/* Common ARMv7 event types */
+/*
+ * Common ARMv7 event types
+ *
+ * Note: An implementation may not be able to count all of these events
+ * but the encodings are considered to be `reserved' in the case that
+ * they are not available.
+ */
 enum armv7_perf_types {
        ARMV7_PERFCTR_PMNC_SW_INCR              = 0x00,
        ARMV7_PERFCTR_IFETCH_MISS               = 0x01,
        ARMV7_PERFCTR_ITLB_MISS                 = 0x02,
-       ARMV7_PERFCTR_DCACHE_REFILL             = 0x03,
-       ARMV7_PERFCTR_DCACHE_ACCESS             = 0x04,
+       ARMV7_PERFCTR_DCACHE_REFILL             = 0x03, /* L1 */
+       ARMV7_PERFCTR_DCACHE_ACCESS             = 0x04, /* L1 */
        ARMV7_PERFCTR_DTLB_REFILL               = 0x05,
        ARMV7_PERFCTR_DREAD                     = 0x06,
        ARMV7_PERFCTR_DWRITE                    = 0x07,
-
+       ARMV7_PERFCTR_INSTR_EXECUTED            = 0x08,
        ARMV7_PERFCTR_EXC_TAKEN                 = 0x09,
        ARMV7_PERFCTR_EXC_EXECUTED              = 0x0A,
        ARMV7_PERFCTR_CID_WRITE                 = 0x0B,
@@ -39,21 +45,30 @@ enum armv7_perf_types {
         */
        ARMV7_PERFCTR_PC_WRITE                  = 0x0C,
        ARMV7_PERFCTR_PC_IMM_BRANCH             = 0x0D,
+       ARMV7_PERFCTR_PC_PROC_RETURN            = 0x0E,
        ARMV7_PERFCTR_UNALIGNED_ACCESS          = 0x0F,
+
+       /* These events are defined by the PMUv2 supplement (ARM DDI 0457A). */
        ARMV7_PERFCTR_PC_BRANCH_MIS_PRED        = 0x10,
        ARMV7_PERFCTR_CLOCK_CYCLES              = 0x11,
-
-       ARMV7_PERFCTR_PC_BRANCH_MIS_USED        = 0x12,
+       ARMV7_PERFCTR_PC_BRANCH_PRED            = 0x12,
+       ARMV7_PERFCTR_MEM_ACCESS                = 0x13,
+       ARMV7_PERFCTR_L1_ICACHE_ACCESS          = 0x14,
+       ARMV7_PERFCTR_L1_DCACHE_WB              = 0x15,
+       ARMV7_PERFCTR_L2_DCACHE_ACCESS          = 0x16,
+       ARMV7_PERFCTR_L2_DCACHE_REFILL          = 0x17,
+       ARMV7_PERFCTR_L2_DCACHE_WB              = 0x18,
+       ARMV7_PERFCTR_BUS_ACCESS                = 0x19,
+       ARMV7_PERFCTR_MEMORY_ERROR              = 0x1A,
+       ARMV7_PERFCTR_INSTR_SPEC                = 0x1B,
+       ARMV7_PERFCTR_TTBR_WRITE                = 0x1C,
+       ARMV7_PERFCTR_BUS_CYCLES                = 0x1D,
 
        ARMV7_PERFCTR_CPU_CYCLES                = 0xFF
 };
 
 /* ARMv7 Cortex-A8 specific event types */
 enum armv7_a8_perf_types {
-       ARMV7_PERFCTR_INSTR_EXECUTED            = 0x08,
-
-       ARMV7_PERFCTR_PC_PROC_RETURN            = 0x0E,
-
        ARMV7_PERFCTR_WRITE_BUFFER_FULL         = 0x40,
        ARMV7_PERFCTR_L2_STORE_MERGED           = 0x41,
        ARMV7_PERFCTR_L2_STORE_BUFF             = 0x42,
@@ -138,6 +153,39 @@ enum armv7_a9_perf_types {
        ARMV7_PERFCTR_PLE_RQST_PROG             = 0xA5
 };
 
+/* ARMv7 Cortex-A5 specific event types */
+enum armv7_a5_perf_types {
+       ARMV7_PERFCTR_IRQ_TAKEN                 = 0x86,
+       ARMV7_PERFCTR_FIQ_TAKEN                 = 0x87,
+
+       ARMV7_PERFCTR_EXT_MEM_RQST              = 0xc0,
+       ARMV7_PERFCTR_NC_EXT_MEM_RQST           = 0xc1,
+       ARMV7_PERFCTR_PREFETCH_LINEFILL         = 0xc2,
+       ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP    = 0xc3,
+       ARMV7_PERFCTR_ENTER_READ_ALLOC          = 0xc4,
+       ARMV7_PERFCTR_READ_ALLOC                = 0xc5,
+
+       ARMV7_PERFCTR_STALL_SB_FULL             = 0xc9,
+};
+
+/* ARMv7 Cortex-A15 specific event types */
+enum armv7_a15_perf_types {
+       ARMV7_PERFCTR_L1_DCACHE_READ_ACCESS     = 0x40,
+       ARMV7_PERFCTR_L1_DCACHE_WRITE_ACCESS    = 0x41,
+       ARMV7_PERFCTR_L1_DCACHE_READ_REFILL     = 0x42,
+       ARMV7_PERFCTR_L1_DCACHE_WRITE_REFILL    = 0x43,
+
+       ARMV7_PERFCTR_L1_DTLB_READ_REFILL       = 0x4C,
+       ARMV7_PERFCTR_L1_DTLB_WRITE_REFILL      = 0x4D,
+
+       ARMV7_PERFCTR_L2_DCACHE_READ_ACCESS     = 0x50,
+       ARMV7_PERFCTR_L2_DCACHE_WRITE_ACCESS    = 0x51,
+       ARMV7_PERFCTR_L2_DCACHE_READ_REFILL     = 0x52,
+       ARMV7_PERFCTR_L2_DCACHE_WRITE_REFILL    = 0x53,
+
+       ARMV7_PERFCTR_SPEC_PC_WRITE             = 0x76,
+};
+
 /*
  * Cortex-A8 HW events mapping
  *
@@ -207,11 +255,6 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
                },
        },
        [C(DTLB)] = {
-               /*
-                * Only ITLB misses and DTLB refills are supported.
-                * If users want the DTLB refills misses a raw counter
-                * must be used.
-                */
                [C(OP_READ)] = {
                        [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
                        [C(RESULT_MISS)]        = ARMV7_PERFCTR_DTLB_REFILL,
@@ -323,11 +366,6 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
                },
        },
        [C(DTLB)] = {
-               /*
-                * Only ITLB misses and DTLB refills are supported.
-                * If users want the DTLB refills misses a raw counter
-                * must be used.
-                */
                [C(OP_READ)] = {
                        [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
                        [C(RESULT_MISS)]        = ARMV7_PERFCTR_DTLB_REFILL,
@@ -373,6 +411,242 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
        },
 };
 
+/*
+ * Cortex-A5 HW events mapping
+ */
+static const unsigned armv7_a5_perf_map[PERF_COUNT_HW_MAX] = {
+       [PERF_COUNT_HW_CPU_CYCLES]          = ARMV7_PERFCTR_CPU_CYCLES,
+       [PERF_COUNT_HW_INSTRUCTIONS]        = ARMV7_PERFCTR_INSTR_EXECUTED,
+       [PERF_COUNT_HW_CACHE_REFERENCES]    = HW_OP_UNSUPPORTED,
+       [PERF_COUNT_HW_CACHE_MISSES]        = HW_OP_UNSUPPORTED,
+       [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE,
+       [PERF_COUNT_HW_BRANCH_MISSES]       = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+       [PERF_COUNT_HW_BUS_CYCLES]          = HW_OP_UNSUPPORTED,
+};
+
+static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
+                                       [PERF_COUNT_HW_CACHE_OP_MAX]
+                                       [PERF_COUNT_HW_CACHE_RESULT_MAX] = {
+       [C(L1D)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_DCACHE_ACCESS,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_DCACHE_REFILL,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_DCACHE_ACCESS,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_DCACHE_REFILL,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_PREFETCH_LINEFILL,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP,
+               },
+       },
+       [C(L1I)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_IFETCH_MISS,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_IFETCH_MISS,
+               },
+               /*
+                * The prefetch counters don't differentiate between the I
+                * side and the D side.
+                */
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_PREFETCH_LINEFILL,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP,
+               },
+       },
+       [C(LL)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(DTLB)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_DTLB_REFILL,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_DTLB_REFILL,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(ITLB)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_ITLB_MISS,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_ITLB_MISS,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(BPU)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_PC_BRANCH_PRED,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_PC_BRANCH_PRED,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+};
+
+/*
+ * Cortex-A15 HW events mapping
+ */
+static const unsigned armv7_a15_perf_map[PERF_COUNT_HW_MAX] = {
+       [PERF_COUNT_HW_CPU_CYCLES]          = ARMV7_PERFCTR_CPU_CYCLES,
+       [PERF_COUNT_HW_INSTRUCTIONS]        = ARMV7_PERFCTR_INSTR_EXECUTED,
+       [PERF_COUNT_HW_CACHE_REFERENCES]    = HW_OP_UNSUPPORTED,
+       [PERF_COUNT_HW_CACHE_MISSES]        = HW_OP_UNSUPPORTED,
+       [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_SPEC_PC_WRITE,
+       [PERF_COUNT_HW_BRANCH_MISSES]       = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+       [PERF_COUNT_HW_BUS_CYCLES]          = ARMV7_PERFCTR_BUS_CYCLES,
+};
+
+static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
+                                       [PERF_COUNT_HW_CACHE_OP_MAX]
+                                       [PERF_COUNT_HW_CACHE_RESULT_MAX] = {
+       [C(L1D)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_L1_DCACHE_READ_ACCESS,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_L1_DCACHE_READ_REFILL,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_L1_DCACHE_WRITE_ACCESS,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_L1_DCACHE_WRITE_REFILL,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(L1I)] = {
+               /*
+                * Not all performance counters differentiate between read
+                * and write accesses/misses so we're not always strictly
+                * correct, but it's the best we can do. Writes and reads get
+                * combined in these cases.
+                */
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_IFETCH_MISS,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_IFETCH_MISS,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(LL)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_L2_DCACHE_READ_ACCESS,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_L2_DCACHE_READ_REFILL,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]
+                                       = ARMV7_PERFCTR_L2_DCACHE_WRITE_ACCESS,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_L2_DCACHE_WRITE_REFILL,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(DTLB)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_L1_DTLB_READ_REFILL,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_L1_DTLB_WRITE_REFILL,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(ITLB)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_ITLB_MISS,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = ARMV7_PERFCTR_ITLB_MISS,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+       [C(BPU)] = {
+               [C(OP_READ)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_PC_BRANCH_PRED,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+               },
+               [C(OP_WRITE)] = {
+                       [C(RESULT_ACCESS)]      = ARMV7_PERFCTR_PC_BRANCH_PRED,
+                       [C(RESULT_MISS)]
+                                       = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+               },
+               [C(OP_PREFETCH)] = {
+                       [C(RESULT_ACCESS)]      = CACHE_OP_UNSUPPORTED,
+                       [C(RESULT_MISS)]        = CACHE_OP_UNSUPPORTED,
+               },
+       },
+};
+
 /*
  * Perf Events counters
  */
@@ -905,6 +1179,26 @@ static const struct arm_pmu *__init armv7_a9_pmu_init(void)
        armv7pmu.num_events     = armv7_read_num_pmnc_events();
        return &armv7pmu;
 }
+
+static const struct arm_pmu *__init armv7_a5_pmu_init(void)
+{
+       armv7pmu.id             = ARM_PERF_PMU_ID_CA5;
+       armv7pmu.name           = "ARMv7 Cortex-A5";
+       armv7pmu.cache_map      = &armv7_a5_perf_cache_map;
+       armv7pmu.event_map      = &armv7_a5_perf_map;
+       armv7pmu.num_events     = armv7_read_num_pmnc_events();
+       return &armv7pmu;
+}
+
+static const struct arm_pmu *__init armv7_a15_pmu_init(void)
+{
+       armv7pmu.id             = ARM_PERF_PMU_ID_CA15;
+       armv7pmu.name           = "ARMv7 Cortex-A15";
+       armv7pmu.cache_map      = &armv7_a15_perf_cache_map;
+       armv7pmu.event_map      = &armv7_a15_perf_map;
+       armv7pmu.num_events     = armv7_read_num_pmnc_events();
+       return &armv7pmu;
+}
 #else
 static const struct arm_pmu *__init armv7_a8_pmu_init(void)
 {
@@ -915,4 +1209,14 @@ static const struct arm_pmu *__init armv7_a9_pmu_init(void)
 {
        return NULL;
 }
+
+static const struct arm_pmu *__init armv7_a5_pmu_init(void)
+{
+       return NULL;
+}
+
+static const struct arm_pmu *__init armv7_a15_pmu_init(void)
+{
+       return NULL;
+}
 #endif /* CONFIG_CPU_V7 */
index ed11fb08b05a5b2d3fd022d981970c01c9fdc088..699df68fc840aafe2de12acf584193b40049d831 100644 (file)
@@ -977,6 +977,10 @@ static const char *hwcap_str[] = {
        "neon",
        "vfpv3",
        "vfpv3d16",
+       "tls",
+       "vfpv4",
+       "idiva",
+       "idivt",
        NULL
 };
 
index 1fa6f71470de52458208eecc20223921b632146d..072016371093546cc95519289b30a66b381d79a9 100644 (file)
@@ -242,16 +242,5 @@ ENDPROC(fa_dma_unmap_area)
 
        __INITDATA
 
-       .type   fa_cache_fns, #object
-ENTRY(fa_cache_fns)
-       .long   fa_flush_icache_all
-       .long   fa_flush_kern_cache_all
-       .long   fa_flush_user_cache_all
-       .long   fa_flush_user_cache_range
-       .long   fa_coherent_kern_range
-       .long   fa_coherent_user_range
-       .long   fa_flush_kern_dcache_area
-       .long   fa_dma_map_area
-       .long   fa_dma_unmap_area
-       .long   fa_dma_flush_range
-       .size   fa_cache_fns, . - fa_cache_fns
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions fa
index 2e2bc406a18d69f93de13600732bb3d6fa329135..c2301f226100e371e72c46cde695c186a84b240b 100644 (file)
@@ -129,16 +129,5 @@ ENDPROC(v3_dma_map_area)
 
        __INITDATA
 
-       .type   v3_cache_fns, #object
-ENTRY(v3_cache_fns)
-       .long   v3_flush_icache_all
-       .long   v3_flush_kern_cache_all
-       .long   v3_flush_user_cache_all
-       .long   v3_flush_user_cache_range
-       .long   v3_coherent_kern_range
-       .long   v3_coherent_user_range
-       .long   v3_flush_kern_dcache_area
-       .long   v3_dma_map_area
-       .long   v3_dma_unmap_area
-       .long   v3_dma_flush_range
-       .size   v3_cache_fns, . - v3_cache_fns
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions v3
index a8fefb523f194ab97e950af7bf1d9e906c666013..fd9bb7addc8d0cb1e6e7ca7014a8a9079b0f9ca1 100644 (file)
@@ -141,16 +141,5 @@ ENDPROC(v4_dma_map_area)
 
        __INITDATA
 
-       .type   v4_cache_fns, #object
-ENTRY(v4_cache_fns)
-       .long   v4_flush_icache_all
-       .long   v4_flush_kern_cache_all
-       .long   v4_flush_user_cache_all
-       .long   v4_flush_user_cache_range
-       .long   v4_coherent_kern_range
-       .long   v4_coherent_user_range
-       .long   v4_flush_kern_dcache_area
-       .long   v4_dma_map_area
-       .long   v4_dma_unmap_area
-       .long   v4_dma_flush_range
-       .size   v4_cache_fns, . - v4_cache_fns
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions v4
index f40c69656d8dc2f79d0fa26b91b885b0a2d97e0d..4f2c14151ccb78b7dcba40ebb826a05f05209a25 100644 (file)
@@ -253,16 +253,5 @@ ENDPROC(v4wb_dma_unmap_area)
 
        __INITDATA
 
-       .type   v4wb_cache_fns, #object
-ENTRY(v4wb_cache_fns)
-       .long   v4wb_flush_icache_all
-       .long   v4wb_flush_kern_cache_all
-       .long   v4wb_flush_user_cache_all
-       .long   v4wb_flush_user_cache_range
-       .long   v4wb_coherent_kern_range
-       .long   v4wb_coherent_user_range
-       .long   v4wb_flush_kern_dcache_area
-       .long   v4wb_dma_map_area
-       .long   v4wb_dma_unmap_area
-       .long   v4wb_dma_flush_range
-       .size   v4wb_cache_fns, . - v4wb_cache_fns
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions v4wb
index a7b276dbda11e020aeb104dc8643d7e20982efe9..4d7b467631cee24bfae1b1acbd0b66f39373bca2 100644 (file)
@@ -197,16 +197,5 @@ ENDPROC(v4wt_dma_map_area)
 
        __INITDATA
 
-       .type   v4wt_cache_fns, #object
-ENTRY(v4wt_cache_fns)
-       .long   v4wt_flush_icache_all
-       .long   v4wt_flush_kern_cache_all
-       .long   v4wt_flush_user_cache_all
-       .long   v4wt_flush_user_cache_range
-       .long   v4wt_coherent_kern_range
-       .long   v4wt_coherent_user_range
-       .long   v4wt_flush_kern_dcache_area
-       .long   v4wt_dma_map_area
-       .long   v4wt_dma_unmap_area
-       .long   v4wt_dma_flush_range
-       .size   v4wt_cache_fns, . - v4wt_cache_fns
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions v4wt
index 73b4a8b66a575cabbbac35cf3611b2991777e640..74c2e5a33a4d4aa9e0f347e4b45d3959cc9a68fb 100644 (file)
@@ -330,16 +330,5 @@ ENDPROC(v6_dma_unmap_area)
 
        __INITDATA
 
-       .type   v6_cache_fns, #object
-ENTRY(v6_cache_fns)
-       .long   v6_flush_icache_all
-       .long   v6_flush_kern_cache_all
-       .long   v6_flush_user_cache_all
-       .long   v6_flush_user_cache_range
-       .long   v6_coherent_kern_range
-       .long   v6_coherent_user_range
-       .long   v6_flush_kern_dcache_area
-       .long   v6_dma_map_area
-       .long   v6_dma_unmap_area
-       .long   v6_dma_flush_range
-       .size   v6_cache_fns, . - v6_cache_fns
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions v6
index d32f02b618663d985b90b61d9a91996997c85433..3b24bfa3b828d7f4d89bd5ffd58a1785546fa622 100644 (file)
@@ -325,16 +325,5 @@ ENDPROC(v7_dma_unmap_area)
 
        __INITDATA
 
-       .type   v7_cache_fns, #object
-ENTRY(v7_cache_fns)
-       .long   v7_flush_icache_all
-       .long   v7_flush_kern_cache_all
-       .long   v7_flush_user_cache_all
-       .long   v7_flush_user_cache_range
-       .long   v7_coherent_kern_range
-       .long   v7_coherent_user_range
-       .long   v7_flush_kern_dcache_area
-       .long   v7_dma_map_area
-       .long   v7_dma_unmap_area
-       .long   v7_dma_flush_range
-       .size   v7_cache_fns, . - v7_cache_fns
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions v7
index 6c4e7fd6c8afbe4650f2d2a79015ce87a128d3fc..67469665d47ab48a4d8684f2d881af0df4c12e28 100644 (file)
@@ -364,17 +364,8 @@ ENTRY(arm1020_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm1020_dma_unmap_area)
 
-ENTRY(arm1020_cache_fns)
-       .long   arm1020_flush_icache_all
-       .long   arm1020_flush_kern_cache_all
-       .long   arm1020_flush_user_cache_all
-       .long   arm1020_flush_user_cache_range
-       .long   arm1020_coherent_kern_range
-       .long   arm1020_coherent_user_range
-       .long   arm1020_flush_kern_dcache_area
-       .long   arm1020_dma_map_area
-       .long   arm1020_dma_unmap_area
-       .long   arm1020_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm1020
 
        .align  5
 ENTRY(cpu_arm1020_dcache_clean_area)
@@ -477,38 +468,14 @@ arm1020_crval:
        crval   clear=0x0000593f, mmuset=0x00003935, ucset=0x00001930
 
        __INITDATA
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm1020, dabort=v4t_early_abort, pabort=legacy_pabort
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm1020_processor_functions, #object
-arm1020_processor_functions:
-       .word   v4t_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm1020_proc_init
-       .word   cpu_arm1020_proc_fin
-       .word   cpu_arm1020_reset
-       .word   cpu_arm1020_do_idle
-       .word   cpu_arm1020_dcache_clean_area
-       .word   cpu_arm1020_switch_mm
-       .word   cpu_arm1020_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   arm1020_processor_functions, . - arm1020_processor_functions
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5t"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
+       string  cpu_arch_name, "armv5t"
+       string  cpu_elf_name, "v5"
 
        .type   cpu_arm1020_name, #object
 cpu_arm1020_name:
index 4ce947c19623d34733393f5fadccb1327e220440..4251421c0ed50c1af75f320b509ae7faff38b833 100644 (file)
@@ -350,17 +350,8 @@ ENTRY(arm1020e_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm1020e_dma_unmap_area)
 
-ENTRY(arm1020e_cache_fns)
-       .long   arm1020e_flush_icache_all
-       .long   arm1020e_flush_kern_cache_all
-       .long   arm1020e_flush_user_cache_all
-       .long   arm1020e_flush_user_cache_range
-       .long   arm1020e_coherent_kern_range
-       .long   arm1020e_coherent_user_range
-       .long   arm1020e_flush_kern_dcache_area
-       .long   arm1020e_dma_map_area
-       .long   arm1020e_dma_unmap_area
-       .long   arm1020e_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm1020e
 
        .align  5
 ENTRY(cpu_arm1020e_dcache_clean_area)
@@ -458,43 +449,14 @@ arm1020e_crval:
        crval   clear=0x00007f3f, mmuset=0x00003935, ucset=0x00001930
 
        __INITDATA
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm1020e_processor_functions, #object
-arm1020e_processor_functions:
-       .word   v4t_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm1020e_proc_init
-       .word   cpu_arm1020e_proc_fin
-       .word   cpu_arm1020e_reset
-       .word   cpu_arm1020e_do_idle
-       .word   cpu_arm1020e_dcache_clean_area
-       .word   cpu_arm1020e_switch_mm
-       .word   cpu_arm1020e_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   arm1020e_processor_functions, . - arm1020e_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm1020e, dabort=v4t_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5te"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm1020e_name, #object
-cpu_arm1020e_name:
-       .asciz  "ARM1020E"
-       .size   cpu_arm1020e_name, . - cpu_arm1020e_name
+       string  cpu_arch_name, "armv5te"
+       string  cpu_elf_name, "v5"
+       string  cpu_arm1020e_name, "ARM1020E"
 
        .align
 
index c8884c5413a223620d08b42f701442137e2ff5bc..d283cf3d06e3a51481724fa1bafe5d27798ed7b0 100644 (file)
@@ -339,17 +339,8 @@ ENTRY(arm1022_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm1022_dma_unmap_area)
 
-ENTRY(arm1022_cache_fns)
-       .long   arm1022_flush_icache_all
-       .long   arm1022_flush_kern_cache_all
-       .long   arm1022_flush_user_cache_all
-       .long   arm1022_flush_user_cache_range
-       .long   arm1022_coherent_kern_range
-       .long   arm1022_coherent_user_range
-       .long   arm1022_flush_kern_dcache_area
-       .long   arm1022_dma_map_area
-       .long   arm1022_dma_unmap_area
-       .long   arm1022_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm1022
 
        .align  5
 ENTRY(cpu_arm1022_dcache_clean_area)
@@ -441,43 +432,14 @@ arm1022_crval:
        crval   clear=0x00007f3f, mmuset=0x00003935, ucset=0x00001930
 
        __INITDATA
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm1022_processor_functions, #object
-arm1022_processor_functions:
-       .word   v4t_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm1022_proc_init
-       .word   cpu_arm1022_proc_fin
-       .word   cpu_arm1022_reset
-       .word   cpu_arm1022_do_idle
-       .word   cpu_arm1022_dcache_clean_area
-       .word   cpu_arm1022_switch_mm
-       .word   cpu_arm1022_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   arm1022_processor_functions, . - arm1022_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm1022, dabort=v4t_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5te"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm1022_name, #object
-cpu_arm1022_name:
-       .asciz  "ARM1022"
-       .size   cpu_arm1022_name, . - cpu_arm1022_name
+       string  cpu_arch_name, "armv5te"
+       string  cpu_elf_name, "v5"
+       string  cpu_arm1022_name, "ARM1022"
 
        .align
 
index 413684660aad22d4d94f1ceffe1c6ca43be20f74..678a1ceafed239ab10651bb2ae556b08e35a2d29 100644 (file)
@@ -333,17 +333,8 @@ ENTRY(arm1026_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm1026_dma_unmap_area)
 
-ENTRY(arm1026_cache_fns)
-       .long   arm1026_flush_icache_all
-       .long   arm1026_flush_kern_cache_all
-       .long   arm1026_flush_user_cache_all
-       .long   arm1026_flush_user_cache_range
-       .long   arm1026_coherent_kern_range
-       .long   arm1026_coherent_user_range
-       .long   arm1026_flush_kern_dcache_area
-       .long   arm1026_dma_map_area
-       .long   arm1026_dma_unmap_area
-       .long   arm1026_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm1026
 
        .align  5
 ENTRY(cpu_arm1026_dcache_clean_area)
@@ -436,45 +427,15 @@ arm1026_crval:
        crval   clear=0x00007f3f, mmuset=0x00003935, ucset=0x00001934
 
        __INITDATA
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm1026_processor_functions, #object
-arm1026_processor_functions:
-       .word   v5t_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm1026_proc_init
-       .word   cpu_arm1026_proc_fin
-       .word   cpu_arm1026_reset
-       .word   cpu_arm1026_do_idle
-       .word   cpu_arm1026_dcache_clean_area
-       .word   cpu_arm1026_switch_mm
-       .word   cpu_arm1026_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   arm1026_processor_functions, . - arm1026_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm1026, dabort=v5t_early_abort, pabort=legacy_pabort
 
        .section .rodata
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5tej"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
+       string  cpu_arch_name, "armv5tej"
+       string  cpu_elf_name, "v5"
        .align
-
-       .type   cpu_arm1026_name, #object
-cpu_arm1026_name:
-       .asciz  "ARM1026EJ-S"
-       .size   cpu_arm1026_name, . - cpu_arm1026_name
-
+       string  cpu_arm1026_name, "ARM1026EJ-S"
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
index 5f79dc4ce3fbc98d76d32423b7b0dcb619ffe778..ebc0ca7f1a1565e8cafef0ee556ce9d93a0f21c4 100644 (file)
@@ -269,159 +269,57 @@ __arm7_setup:    mov     r0, #0
 
                __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-               .type   arm6_processor_functions, #object
-ENTRY(arm6_processor_functions)
-               .word   cpu_arm6_data_abort
-               .word   legacy_pabort
-               .word   cpu_arm6_proc_init
-               .word   cpu_arm6_proc_fin
-               .word   cpu_arm6_reset
-               .word   cpu_arm6_do_idle
-               .word   cpu_arm6_dcache_clean_area
-               .word   cpu_arm6_switch_mm
-               .word   cpu_arm6_set_pte_ext
-               .word   0
-               .word   0
-               .word   0
-               .size   arm6_processor_functions, . - arm6_processor_functions
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-               .type   arm7_processor_functions, #object
-ENTRY(arm7_processor_functions)
-               .word   cpu_arm7_data_abort
-               .word   legacy_pabort
-               .word   cpu_arm7_proc_init
-               .word   cpu_arm7_proc_fin
-               .word   cpu_arm7_reset
-               .word   cpu_arm7_do_idle
-               .word   cpu_arm7_dcache_clean_area
-               .word   cpu_arm7_switch_mm
-               .word   cpu_arm7_set_pte_ext
-               .word   0
-               .word   0
-               .word   0
-               .size   arm7_processor_functions, . - arm7_processor_functions
+               @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+               define_processor_functions arm6, dabort=cpu_arm6_data_abort, pabort=legacy_pabort
+               define_processor_functions arm7, dabort=cpu_arm7_data_abort, pabort=legacy_pabort
 
                .section ".rodata"
 
-               .type   cpu_arch_name, #object
-cpu_arch_name: .asciz  "armv3"
-               .size   cpu_arch_name, . - cpu_arch_name
-
-               .type   cpu_elf_name, #object
-cpu_elf_name:  .asciz  "v3"
-               .size   cpu_elf_name, . - cpu_elf_name
-
-               .type   cpu_arm6_name, #object
-cpu_arm6_name: .asciz  "ARM6"
-               .size   cpu_arm6_name, . - cpu_arm6_name
-
-               .type   cpu_arm610_name, #object
-cpu_arm610_name:
-               .asciz  "ARM610"
-               .size   cpu_arm610_name, . - cpu_arm610_name
-
-               .type   cpu_arm7_name, #object
-cpu_arm7_name: .asciz  "ARM7"
-               .size   cpu_arm7_name, . - cpu_arm7_name
-
-               .type   cpu_arm710_name, #object
-cpu_arm710_name:
-               .asciz  "ARM710"
-               .size   cpu_arm710_name, . - cpu_arm710_name
+               string  cpu_arch_name, "armv3"
+               string  cpu_elf_name, "v3"
+               string  cpu_arm6_name, "ARM6"
+               string  cpu_arm610_name, "ARM610"
+               string  cpu_arm7_name, "ARM7"
+               string  cpu_arm710_name, "ARM710"
 
                .align
 
                .section ".proc.info.init", #alloc, #execinstr
 
-               .type   __arm6_proc_info, #object
-__arm6_proc_info:
-               .long   0x41560600
-               .long   0xfffffff0
-               .long   0x00000c1e
+.macro arm67_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \
+       cpu_mm_mmu_flags:req, cpu_flush:req, cpu_proc_funcs:req
+               .type   __\name\()_proc_info, #object
+__\name\()_proc_info:
+               .long   \cpu_val
+               .long   \cpu_mask
+               .long   \cpu_mm_mmu_flags
                .long   PMD_TYPE_SECT | \
                        PMD_BIT4 | \
                        PMD_SECT_AP_WRITE | \
                        PMD_SECT_AP_READ
-               b       __arm6_setup
+               b       \cpu_flush
                .long   cpu_arch_name
                .long   cpu_elf_name
                .long   HWCAP_SWP | HWCAP_26BIT
-               .long   cpu_arm6_name
-               .long   arm6_processor_functions
+               .long   \cpu_name
+               .long   \cpu_proc_funcs
                .long   v3_tlb_fns
                .long   v3_user_fns
                .long   v3_cache_fns
-               .size   __arm6_proc_info, . - __arm6_proc_info
-
-               .type   __arm610_proc_info, #object
-__arm610_proc_info:
-               .long   0x41560610
-               .long   0xfffffff0
-               .long   0x00000c1e
-               .long   PMD_TYPE_SECT | \
-                       PMD_BIT4 | \
-                       PMD_SECT_AP_WRITE | \
-                       PMD_SECT_AP_READ
-               b       __arm6_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_26BIT
-               .long   cpu_arm610_name
-               .long   arm6_processor_functions
-               .long   v3_tlb_fns
-               .long   v3_user_fns
-               .long   v3_cache_fns
-               .size   __arm610_proc_info, . - __arm610_proc_info
-
-               .type   __arm7_proc_info, #object
-__arm7_proc_info:
-               .long   0x41007000
-               .long   0xffffff00
-               .long   0x00000c1e
-               .long   PMD_TYPE_SECT | \
-                       PMD_BIT4 | \
-                       PMD_SECT_AP_WRITE | \
-                       PMD_SECT_AP_READ
-               b       __arm7_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_26BIT
-               .long   cpu_arm7_name
-               .long   arm7_processor_functions
-               .long   v3_tlb_fns
-               .long   v3_user_fns
-               .long   v3_cache_fns
-               .size   __arm7_proc_info, . - __arm7_proc_info
-
-               .type   __arm710_proc_info, #object
-__arm710_proc_info:
-               .long   0x41007100
-               .long   0xfff8ff00
-               .long   PMD_TYPE_SECT | \
+               .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
+
+       arm67_proc_info arm6,   0x41560600, 0xfffffff0, cpu_arm6_name, \
+               0x00000c1e, __arm6_setup, arm6_processor_functions
+       arm67_proc_info arm610, 0x41560610, 0xfffffff0, cpu_arm610_name, \
+               0x00000c1e, __arm6_setup, arm6_processor_functions
+       arm67_proc_info arm7,   0x41007000, 0xffffff00, cpu_arm7_name, \
+               0x00000c1e, __arm7_setup, arm7_processor_functions
+       arm67_proc_info arm710, 0x41007100, 0xfff8ff00, cpu_arm710_name, \
+                       PMD_TYPE_SECT | \
                        PMD_SECT_BUFFERABLE | \
                        PMD_SECT_CACHEABLE | \
                        PMD_BIT4 | \
                        PMD_SECT_AP_WRITE | \
-                       PMD_SECT_AP_READ
-               .long   PMD_TYPE_SECT | \
-                       PMD_BIT4 | \
-                       PMD_SECT_AP_WRITE | \
-                       PMD_SECT_AP_READ
-               b       __arm7_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_26BIT
-               .long   cpu_arm710_name
-               .long   arm7_processor_functions
-               .long   v3_tlb_fns
-               .long   v3_user_fns
-               .long   v3_cache_fns
-               .size   __arm710_proc_info, . - __arm710_proc_info
+                       PMD_SECT_AP_READ, \
+               __arm7_setup, arm7_processor_functions
index 7a06e5964f59a316e56368cec216d9c5d9df138a..55f4e290665a61e65599faba6392d10988f577f0 100644 (file)
@@ -169,46 +169,15 @@ arm720_crval:
        crval   clear=0x00002f3f, mmuset=0x0000213d, ucset=0x00000130
 
                __INITDATA
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-               .type   arm720_processor_functions, #object
-ENTRY(arm720_processor_functions)
-               .word   v4t_late_abort
-               .word   legacy_pabort
-               .word   cpu_arm720_proc_init
-               .word   cpu_arm720_proc_fin
-               .word   cpu_arm720_reset
-               .word   cpu_arm720_do_idle
-               .word   cpu_arm720_dcache_clean_area
-               .word   cpu_arm720_switch_mm
-               .word   cpu_arm720_set_pte_ext
-               .word   0
-               .word   0
-               .word   0
-               .size   arm720_processor_functions, . - arm720_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm720, dabort=v4t_late_abort, pabort=legacy_pabort
 
                .section ".rodata"
 
-               .type   cpu_arch_name, #object
-cpu_arch_name: .asciz  "armv4t"
-               .size   cpu_arch_name, . - cpu_arch_name
-
-               .type   cpu_elf_name, #object
-cpu_elf_name:  .asciz  "v4"
-               .size   cpu_elf_name, . - cpu_elf_name
-
-               .type   cpu_arm710_name, #object
-cpu_arm710_name:
-               .asciz  "ARM710T"
-               .size   cpu_arm710_name, . - cpu_arm710_name
-
-               .type   cpu_arm720_name, #object
-cpu_arm720_name:
-               .asciz  "ARM720T"
-               .size   cpu_arm720_name, . - cpu_arm720_name
+       string  cpu_arch_name, "armv4t"
+       string  cpu_elf_name, "v4"
+       string  cpu_arm710_name, "ARM710T"
+       string  cpu_arm720_name, "ARM720T"
 
                .align
 
@@ -218,10 +187,11 @@ cpu_arm720_name:
        
                .section ".proc.info.init", #alloc, #execinstr
 
-               .type   __arm710_proc_info, #object
-__arm710_proc_info:
-               .long   0x41807100                              @ cpu_val
-               .long   0xffffff00                              @ cpu_mask
+.macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req
+               .type   __\name\()_proc_info,#object
+__\name\()_proc_info:
+               .long   \cpu_val
+               .long   \cpu_mask
                .long   PMD_TYPE_SECT | \
                        PMD_SECT_BUFFERABLE | \
                        PMD_SECT_CACHEABLE | \
@@ -232,38 +202,17 @@ __arm710_proc_info:
                        PMD_BIT4 | \
                        PMD_SECT_AP_WRITE | \
                        PMD_SECT_AP_READ
-               b       __arm710_setup                          @ cpu_flush
+               b       \cpu_flush                              @ cpu_flush
                .long   cpu_arch_name                           @ arch_name
                .long   cpu_elf_name                            @ elf_name
                .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB    @ elf_hwcap
-               .long   cpu_arm710_name                         @ name
+               .long   \cpu_name
                .long   arm720_processor_functions
                .long   v4_tlb_fns
                .long   v4wt_user_fns
                .long   v4_cache_fns
-               .size   __arm710_proc_info, . - __arm710_proc_info
+               .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
 
-               .type   __arm720_proc_info, #object
-__arm720_proc_info:
-               .long   0x41807200                              @ cpu_val
-               .long   0xffffff00                              @ cpu_mask
-               .long   PMD_TYPE_SECT | \
-                       PMD_SECT_BUFFERABLE | \
-                       PMD_SECT_CACHEABLE | \
-                       PMD_BIT4 | \
-                       PMD_SECT_AP_WRITE | \
-                       PMD_SECT_AP_READ
-               .long   PMD_TYPE_SECT | \
-                       PMD_BIT4 | \
-                       PMD_SECT_AP_WRITE | \
-                       PMD_SECT_AP_READ
-               b       __arm720_setup                          @ cpu_flush
-               .long   cpu_arch_name                           @ arch_name
-               .long   cpu_elf_name                            @ elf_name
-               .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB    @ elf_hwcap
-               .long   cpu_arm720_name                         @ name
-               .long   arm720_processor_functions
-               .long   v4_tlb_fns
-               .long   v4wt_user_fns
-               .long   v4_cache_fns
-               .size   __arm720_proc_info, . - __arm720_proc_info
+       arm720_proc_info arm710, 0x41807100, 0xffffff00, cpu_arm710_name, __arm710_setup
+       arm720_proc_info arm720, 0x41807200, 0xffffff00, cpu_arm720_name, __arm720_setup
index 6f9d12effee18ccd1bceefa1490093702090c602..4506be3adda6f48d7921f06cdccc3c44a40aef50 100644 (file)
@@ -17,6 +17,8 @@
 #include <asm/pgtable.h>
 #include <asm/ptrace.h>
 
+#include "proc-macros.S"
+
        .text
 /*
  * cpu_arm740_proc_init()
@@ -115,42 +117,14 @@ __arm740_setup:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm740_processor_functions, #object
-ENTRY(arm740_processor_functions)
-       .word   v4t_late_abort
-       .word   legacy_pabort
-       .word   cpu_arm740_proc_init
-       .word   cpu_arm740_proc_fin
-       .word   cpu_arm740_reset
-       .word   cpu_arm740_do_idle
-       .word   cpu_arm740_dcache_clean_area
-       .word   cpu_arm740_switch_mm
-       .word   0                       @ cpu_*_set_pte
-       .word   0
-       .word   0
-       .word   0
-       .size   arm740_processor_functions, . - arm740_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm740, dabort=v4t_late_abort, pabort=legacy_pabort, nommu=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm740_name, #object
-cpu_arm740_name:
-       .ascii  "ARM740T"
-       .size   cpu_arm740_name, . - cpu_arm740_name
+       string  cpu_arch_name, "armv4"
+       string  cpu_elf_name, "v4"
+       string  cpu_arm740_name, "ARM740T"
 
        .align
 
@@ -170,5 +144,3 @@ __arm740_proc_info:
        .long   0
        .long   v3_cache_fns                    @ cache model
        .size   __arm740_proc_info, . - __arm740_proc_info
-
-
index 537ffcb0646d5e0c77ef8a336f4b39b07937beab..7e0e1fe4ed4d7843f0a1226843c83f61891a7aee 100644 (file)
@@ -17,6 +17,8 @@
 #include <asm/pgtable.h>
 #include <asm/ptrace.h>
 
+#include "proc-macros.S"
+
        .text
 /*
  * cpu_arm7tdmi_proc_init()
@@ -55,197 +57,57 @@ __arm7tdmi_setup:
 
                __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-               .type   arm7tdmi_processor_functions, #object
-ENTRY(arm7tdmi_processor_functions)
-               .word   v4t_late_abort
-               .word   legacy_pabort
-               .word   cpu_arm7tdmi_proc_init
-               .word   cpu_arm7tdmi_proc_fin
-               .word   cpu_arm7tdmi_reset
-               .word   cpu_arm7tdmi_do_idle
-               .word   cpu_arm7tdmi_dcache_clean_area
-               .word   cpu_arm7tdmi_switch_mm
-               .word   0               @ cpu_*_set_pte
-               .word   0
-               .word   0
-               .word   0
-               .size   arm7tdmi_processor_functions, . - arm7tdmi_processor_functions
+               @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+               define_processor_functions arm7tdmi, dabort=v4t_late_abort, pabort=legacy_pabort, nommu=1
 
                .section ".rodata"
 
-               .type   cpu_arch_name, #object
-cpu_arch_name:
-               .asciz  "armv4t"
-               .size   cpu_arch_name, . - cpu_arch_name
-
-               .type   cpu_elf_name, #object
-cpu_elf_name:
-               .asciz  "v4"
-               .size   cpu_elf_name, . - cpu_elf_name
-
-               .type   cpu_arm7tdmi_name, #object
-cpu_arm7tdmi_name:
-               .asciz  "ARM7TDMI"
-               .size   cpu_arm7tdmi_name, . - cpu_arm7tdmi_name
-
-               .type   cpu_triscenda7_name, #object
-cpu_triscenda7_name:
-               .asciz  "Triscend-A7x"
-               .size   cpu_triscenda7_name, . - cpu_triscenda7_name
-
-               .type   cpu_at91_name, #object
-cpu_at91_name:
-               .asciz  "Atmel-AT91M40xxx"
-               .size   cpu_at91_name, . - cpu_at91_name
-
-               .type   cpu_s3c3410_name, #object
-cpu_s3c3410_name:
-               .asciz  "Samsung-S3C3410"
-               .size   cpu_s3c3410_name, . - cpu_s3c3410_name
-
-               .type   cpu_s3c44b0x_name, #object
-cpu_s3c44b0x_name:
-               .asciz  "Samsung-S3C44B0x"
-               .size   cpu_s3c44b0x_name, . - cpu_s3c44b0x_name
-
-               .type   cpu_s3c4510b, #object
-cpu_s3c4510b_name:
-               .asciz  "Samsung-S3C4510B"
-               .size   cpu_s3c4510b_name, . - cpu_s3c4510b_name
-
-               .type   cpu_s3c4530_name, #object
-cpu_s3c4530_name:
-               .asciz  "Samsung-S3C4530"
-               .size   cpu_s3c4530_name, . - cpu_s3c4530_name
-
-               .type   cpu_netarm_name, #object
-cpu_netarm_name:
-               .asciz  "NETARM"
-               .size   cpu_netarm_name, . - cpu_netarm_name
+               string  cpu_arch_name, "armv4t"
+               string  cpu_elf_name, "v4"
+               string  cpu_arm7tdmi_name, "ARM7TDMI"
+               string  cpu_triscenda7_name, "Triscend-A7x"
+               string  cpu_at91_name, "Atmel-AT91M40xxx"
+               string  cpu_s3c3410_name, "Samsung-S3C3410"
+               string  cpu_s3c44b0x_name, "Samsung-S3C44B0x"
+               string  cpu_s3c4510b_name, "Samsung-S3C4510B"
+               string  cpu_s3c4530_name, "Samsung-S3C4530"
+               string  cpu_netarm_name, "NETARM"
 
                .align
 
                .section ".proc.info.init", #alloc, #execinstr
 
-               .type   __arm7tdmi_proc_info, #object
-__arm7tdmi_proc_info:
-               .long   0x41007700
-               .long   0xfff8ff00
-               .long   0
-               .long   0
-               b       __arm7tdmi_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_26BIT
-               .long   cpu_arm7tdmi_name
-               .long   arm7tdmi_processor_functions
-               .long   0
-               .long   0
-               .long   v4_cache_fns
-               .size   __arm7tdmi_proc_info, . - __arm7tdmi_proc_info
-
-               .type   __triscenda7_proc_info, #object
-__triscenda7_proc_info:
-               .long   0x0001d2ff
-               .long   0x0001ffff
-               .long   0
-               .long   0
-               b       __arm7tdmi_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_triscenda7_name
-               .long   arm7tdmi_processor_functions
-               .long   0
-               .long   0
-               .long   v4_cache_fns
-               .size   __triscenda7_proc_info, . - __triscenda7_proc_info
-
-               .type   __at91_proc_info, #object
-__at91_proc_info:
-               .long   0x14000040
-               .long   0xfff000e0
-               .long   0
-               .long   0
-               b       __arm7tdmi_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_at91_name
-               .long   arm7tdmi_processor_functions
-               .long   0
-               .long   0
-               .long   v4_cache_fns
-               .size   __at91_proc_info, . - __at91_proc_info
-
-               .type   __s3c4510b_proc_info, #object
-__s3c4510b_proc_info:
-               .long   0x36365000
-               .long   0xfffff000
-               .long   0
-               .long   0
-               b       __arm7tdmi_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_s3c4510b_name
-               .long   arm7tdmi_processor_functions
-               .long   0
-               .long   0
-               .long   v4_cache_fns
-               .size   __s3c4510b_proc_info, . - __s3c4510b_proc_info
-
-               .type   __s3c4530_proc_info, #object
-__s3c4530_proc_info:
-               .long   0x4c000000
-               .long   0xfff000e0
-               .long   0
-               .long   0
-               b       __arm7tdmi_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_s3c4530_name
-               .long   arm7tdmi_processor_functions
-               .long   0
-               .long   0
-               .long   v4_cache_fns
-               .size   __s3c4530_proc_info, . - __s3c4530_proc_info
-
-               .type   __s3c3410_proc_info, #object
-__s3c3410_proc_info:
-               .long   0x34100000
-               .long   0xffff0000
-               .long   0
-               .long   0
-               b       __arm7tdmi_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_s3c3410_name
-               .long   arm7tdmi_processor_functions
-               .long   0
-               .long   0
-               .long   v4_cache_fns
-               .size   __s3c3410_proc_info, . - __s3c3410_proc_info
-
-               .type   __s3c44b0x_proc_info, #object
-__s3c44b0x_proc_info:
-               .long   0x44b00000
-               .long   0xffff0000
+.macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \
+       extra_hwcaps=0
+               .type   __\name\()_proc_info, #object
+__\name\()_proc_info:
+               .long   \cpu_val
+               .long   \cpu_mask
                .long   0
                .long   0
                b       __arm7tdmi_setup
                .long   cpu_arch_name
                .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_s3c44b0x_name
+               .long   HWCAP_SWP | HWCAP_26BIT | ( \extra_hwcaps )
+               .long   \cpu_name
                .long   arm7tdmi_processor_functions
                .long   0
                .long   0
                .long   v4_cache_fns
-               .size   __s3c44b0x_proc_info, . - __s3c44b0x_proc_info
+               .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
+
+               arm7tdmi_proc_info arm7tdmi, 0x41007700, 0xfff8ff00, \
+                       cpu_arm7tdmi_name
+               arm7tdmi_proc_info triscenda7, 0x0001d2ff, 0x0001ffff, \
+                       cpu_triscenda7_name, extra_hwcaps=HWCAP_THUMB
+               arm7tdmi_proc_info at91, 0x14000040, 0xfff000e0, \
+                       cpu_at91_name, extra_hwcaps=HWCAP_THUMB
+               arm7tdmi_proc_info s3c4510b, 0x36365000, 0xfffff000, \
+                       cpu_s3c4510b_name, extra_hwcaps=HWCAP_THUMB
+               arm7tdmi_proc_info s3c4530, 0x4c000000, 0xfff000e0, \
+                       cpu_s3c4530_name, extra_hwcaps=HWCAP_THUMB
+               arm7tdmi_proc_info s3c3410, 0x34100000, 0xffff0000, \
+                       cpu_s3c3410_name, extra_hwcaps=HWCAP_THUMB
+               arm7tdmi_proc_info s3c44b0x, 0x44b00000, 0xffff0000, \
+                       cpu_s3c44b0x_name, extra_hwcaps=HWCAP_THUMB
index bf8a1d1cccb6c33b26412264a2f05228657e49aa..0dea376feaaab52013eebe3aadffe98efd8a1386 100644 (file)
@@ -315,18 +315,8 @@ ENTRY(arm920_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm920_dma_unmap_area)
 
-ENTRY(arm920_cache_fns)
-       .long   arm920_flush_icache_all
-       .long   arm920_flush_kern_cache_all
-       .long   arm920_flush_user_cache_all
-       .long   arm920_flush_user_cache_range
-       .long   arm920_coherent_kern_range
-       .long   arm920_coherent_user_range
-       .long   arm920_flush_kern_dcache_area
-       .long   arm920_dma_map_area
-       .long   arm920_dma_unmap_area
-       .long   arm920_dma_flush_range
-
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm920
 #endif
 
 
@@ -450,43 +440,14 @@ arm920_crval:
        crval   clear=0x00003f3f, mmuset=0x00003135, ucset=0x00001130
 
        __INITDATA
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm920_processor_functions, #object
-arm920_processor_functions:
-       .word   v4t_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm920_proc_init
-       .word   cpu_arm920_proc_fin
-       .word   cpu_arm920_reset
-       .word   cpu_arm920_do_idle
-       .word   cpu_arm920_dcache_clean_area
-       .word   cpu_arm920_switch_mm
-       .word   cpu_arm920_set_pte_ext
-       .word   cpu_arm920_suspend_size
-       .word   cpu_arm920_do_suspend
-       .word   cpu_arm920_do_resume
-       .size   arm920_processor_functions, . - arm920_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm920, dabort=v4t_early_abort, pabort=legacy_pabort, suspend=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4t"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm920_name, #object
-cpu_arm920_name:
-       .asciz  "ARM920T"
-       .size   cpu_arm920_name, . - cpu_arm920_name
+       string  cpu_arch_name, "armv4t"
+       string  cpu_elf_name, "v4"
+       string  cpu_arm920_name, "ARM920T"
 
        .align
 
index 95ba1fc56e4d325a7d4f1772210837112f8ef0f5..490e18833857208e84f0ad4bb233bcdef1fee1b1 100644 (file)
@@ -317,18 +317,8 @@ ENTRY(arm922_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm922_dma_unmap_area)
 
-ENTRY(arm922_cache_fns)
-       .long   arm922_flush_icache_all
-       .long   arm922_flush_kern_cache_all
-       .long   arm922_flush_user_cache_all
-       .long   arm922_flush_user_cache_range
-       .long   arm922_coherent_kern_range
-       .long   arm922_coherent_user_range
-       .long   arm922_flush_kern_dcache_area
-       .long   arm922_dma_map_area
-       .long   arm922_dma_unmap_area
-       .long   arm922_dma_flush_range
-
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm922
 #endif
 
 
@@ -420,43 +410,14 @@ arm922_crval:
        crval   clear=0x00003f3f, mmuset=0x00003135, ucset=0x00001130
 
        __INITDATA
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm922_processor_functions, #object
-arm922_processor_functions:
-       .word   v4t_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm922_proc_init
-       .word   cpu_arm922_proc_fin
-       .word   cpu_arm922_reset
-       .word   cpu_arm922_do_idle
-       .word   cpu_arm922_dcache_clean_area
-       .word   cpu_arm922_switch_mm
-       .word   cpu_arm922_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   arm922_processor_functions, . - arm922_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm922, dabort=v4t_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4t"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm922_name, #object
-cpu_arm922_name:
-       .asciz  "ARM922T"
-       .size   cpu_arm922_name, . - cpu_arm922_name
+       string  cpu_arch_name, "armv4t"
+       string  cpu_elf_name, "v4"
+       string  cpu_arm922_name, "ARM922T"
 
        .align
 
index 541e4774eea13cdbb80fadbb496dc300d5ae0140..51d494be057eb149c95b1d0b47b36c6f54bd7843 100644 (file)
@@ -372,17 +372,8 @@ ENTRY(arm925_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm925_dma_unmap_area)
 
-ENTRY(arm925_cache_fns)
-       .long   arm925_flush_icache_all
-       .long   arm925_flush_kern_cache_all
-       .long   arm925_flush_user_cache_all
-       .long   arm925_flush_user_cache_range
-       .long   arm925_coherent_kern_range
-       .long   arm925_coherent_user_range
-       .long   arm925_flush_kern_dcache_area
-       .long   arm925_dma_map_area
-       .long   arm925_dma_unmap_area
-       .long   arm925_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm925
 
 ENTRY(cpu_arm925_dcache_clean_area)
 #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
@@ -487,52 +478,24 @@ arm925_crval:
        crval   clear=0x00007f3f, mmuset=0x0000313d, ucset=0x00001130
 
        __INITDATA
-
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm925_processor_functions, #object
-arm925_processor_functions:
-       .word   v4t_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm925_proc_init
-       .word   cpu_arm925_proc_fin
-       .word   cpu_arm925_reset
-       .word   cpu_arm925_do_idle
-       .word   cpu_arm925_dcache_clean_area
-       .word   cpu_arm925_switch_mm
-       .word   cpu_arm925_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   arm925_processor_functions, . - arm925_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm925, dabort=v4t_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4t"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm925_name, #object
-cpu_arm925_name:
-       .asciz  "ARM925T"
-       .size   cpu_arm925_name, . - cpu_arm925_name
+       string  cpu_arch_name, "armv4t"
+       string  cpu_elf_name, "v4"
+       string  cpu_arm925_name, "ARM925T"
 
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
 
-       .type   __arm925_proc_info,#object
-__arm925_proc_info:
-       .long   0x54029250
-       .long   0xfffffff0
+.macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
+       .type   __\name\()_proc_info,#object
+__\name\()_proc_info:
+       .long   \cpu_val
+       .long   \cpu_mask
        .long   PMD_TYPE_SECT | \
                PMD_BIT4 | \
                PMD_SECT_AP_WRITE | \
@@ -550,27 +513,8 @@ __arm925_proc_info:
        .long   v4wbi_tlb_fns
        .long   v4wb_user_fns
        .long   arm925_cache_fns
-       .size   __arm925_proc_info, . - __arm925_proc_info
+       .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
 
-       .type   __arm915_proc_info,#object
-__arm915_proc_info:
-       .long   0x54029150
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __arm925_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB
-       .long   cpu_arm925_name
-       .long   arm925_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   v4wb_user_fns
-       .long   arm925_cache_fns
-       .size   __arm925_proc_info, . - __arm925_proc_info
+       arm925_proc_info arm925, 0x54029250, 0xfffffff0, cpu_arm925_name
+       arm925_proc_info arm915, 0x54029150, 0xfffffff0, cpu_arm925_name
index 0ed85d930c095e3280f7f029973e1530a7fcd4aa..b2f9bde8ecef1357d1cba3235f675ee0de642006 100644 (file)
@@ -335,17 +335,8 @@ ENTRY(arm926_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm926_dma_unmap_area)
 
-ENTRY(arm926_cache_fns)
-       .long   arm926_flush_icache_all
-       .long   arm926_flush_kern_cache_all
-       .long   arm926_flush_user_cache_all
-       .long   arm926_flush_user_cache_range
-       .long   arm926_coherent_kern_range
-       .long   arm926_coherent_user_range
-       .long   arm926_flush_kern_dcache_area
-       .long   arm926_dma_map_area
-       .long   arm926_dma_unmap_area
-       .long   arm926_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm926
 
 ENTRY(cpu_arm926_dcache_clean_area)
 #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
@@ -475,42 +466,14 @@ arm926_crval:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm926_processor_functions, #object
-arm926_processor_functions:
-       .word   v5tj_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm926_proc_init
-       .word   cpu_arm926_proc_fin
-       .word   cpu_arm926_reset
-       .word   cpu_arm926_do_idle
-       .word   cpu_arm926_dcache_clean_area
-       .word   cpu_arm926_switch_mm
-       .word   cpu_arm926_set_pte_ext
-       .word   cpu_arm926_suspend_size
-       .word   cpu_arm926_do_suspend
-       .word   cpu_arm926_do_resume
-       .size   arm926_processor_functions, . - arm926_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm926, dabort=v5tj_early_abort, pabort=legacy_pabort, suspend=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5tej"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm926_name, #object
-cpu_arm926_name:
-       .asciz  "ARM926EJ-S"
-       .size   cpu_arm926_name, . - cpu_arm926_name
+       string  cpu_arch_name, "armv5tej"
+       string  cpu_elf_name, "v5"
+       string  cpu_arm926_name, "ARM926EJ-S"
 
        .align
 
index 26aea3f71c26feaeb62a5721824fe62e6714e414..ac750d50615333d40bf9b3218ff66a01fe0400f2 100644 (file)
@@ -264,17 +264,8 @@ ENTRY(arm940_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm940_dma_unmap_area)
 
-ENTRY(arm940_cache_fns)
-       .long   arm940_flush_icache_all
-       .long   arm940_flush_kern_cache_all
-       .long   arm940_flush_user_cache_all
-       .long   arm940_flush_user_cache_range
-       .long   arm940_coherent_kern_range
-       .long   arm940_coherent_user_range
-       .long   arm940_flush_kern_dcache_area
-       .long   arm940_dma_map_area
-       .long   arm940_dma_unmap_area
-       .long   arm940_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm940
 
        __CPUINIT
 
@@ -348,42 +339,14 @@ __arm940_setup:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm940_processor_functions, #object
-ENTRY(arm940_processor_functions)
-       .word   nommu_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm940_proc_init
-       .word   cpu_arm940_proc_fin
-       .word   cpu_arm940_reset
-       .word   cpu_arm940_do_idle
-       .word   cpu_arm940_dcache_clean_area
-       .word   cpu_arm940_switch_mm
-       .word   0               @ cpu_*_set_pte
-       .word   0
-       .word   0
-       .word   0
-       .size   arm940_processor_functions, . - arm940_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm940, dabort=nommu_early_abort, pabort=legacy_pabort, nommu=1
 
        .section ".rodata"
 
-.type  cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4t"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm940_name, #object
-cpu_arm940_name:
-       .ascii  "ARM940T"
-       .size   cpu_arm940_name, . - cpu_arm940_name
+       string  cpu_arch_name, "armv4t"
+       string  cpu_elf_name, "v4"
+       string  cpu_arm940_name, "ARM940T"
 
        .align
 
index 8063345406fe58b3282b7f2b5afbdcc30d90917c..f8f7ea34bfc57f6429d7a25c196ed555a5567394 100644 (file)
@@ -306,18 +306,8 @@ ENTRY(arm946_dma_unmap_area)
        mov     pc, lr
 ENDPROC(arm946_dma_unmap_area)
 
-ENTRY(arm946_cache_fns)
-       .long   arm946_flush_icache_all
-       .long   arm946_flush_kern_cache_all
-       .long   arm946_flush_user_cache_all
-       .long   arm946_flush_user_cache_range
-       .long   arm946_coherent_kern_range
-       .long   arm946_coherent_user_range
-       .long   arm946_flush_kern_dcache_area
-       .long   arm946_dma_map_area
-       .long   arm946_dma_unmap_area
-       .long   arm946_dma_flush_range
-
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions arm946
 
 ENTRY(cpu_arm946_dcache_clean_area)
 #ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
@@ -403,43 +393,14 @@ __arm946_setup:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   arm946_processor_functions, #object
-ENTRY(arm946_processor_functions)
-       .word   nommu_early_abort
-       .word   legacy_pabort
-       .word   cpu_arm946_proc_init
-       .word   cpu_arm946_proc_fin
-       .word   cpu_arm946_reset
-       .word   cpu_arm946_do_idle
-
-       .word   cpu_arm946_dcache_clean_area
-       .word   cpu_arm946_switch_mm
-       .word   0               @ cpu_*_set_pte
-       .word   0
-       .word   0
-       .word   0
-       .size   arm946_processor_functions, . - arm946_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions arm946, dabort=nommu_early_abort, pabort=legacy_pabort, nommu=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5te"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5t"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_arm946_name, #object
-cpu_arm946_name:
-       .ascii  "ARM946E-S"
-       .size   cpu_arm946_name, . - cpu_arm946_name
+       string  cpu_arch_name, "armv5te"
+       string  cpu_elf_name, "v5t"
+       string  cpu_arm946_name, "ARM946E-S"
 
        .align
 
index 546b54da10059752195476dc6bd9fc0b1b243775..2120f9e2af7fab7cc42d9b6d9d205cab092b0ee9 100644 (file)
@@ -17,6 +17,8 @@
 #include <asm/pgtable.h>
 #include <asm/ptrace.h>
 
+#include "proc-macros.S"
+
        .text
 /*
  * cpu_arm9tdmi_proc_init()
@@ -55,82 +57,38 @@ __arm9tdmi_setup:
 
                __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-               .type   arm9tdmi_processor_functions, #object
-ENTRY(arm9tdmi_processor_functions)
-               .word   nommu_early_abort
-               .word   legacy_pabort
-               .word   cpu_arm9tdmi_proc_init
-               .word   cpu_arm9tdmi_proc_fin
-               .word   cpu_arm9tdmi_reset
-               .word   cpu_arm9tdmi_do_idle
-               .word   cpu_arm9tdmi_dcache_clean_area
-               .word   cpu_arm9tdmi_switch_mm
-               .word   0               @ cpu_*_set_pte
-               .word   0
-               .word   0
-               .word   0
-               .size   arm9tdmi_processor_functions, . - arm9tdmi_processor_functions
+               @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+               define_processor_functions arm9tdmi, dabort=nommu_early_abort, pabort=legacy_pabort, nommu=1
 
                .section ".rodata"
 
-               .type   cpu_arch_name, #object
-cpu_arch_name:
-               .asciz  "armv4t"
-               .size   cpu_arch_name, . - cpu_arch_name
-
-               .type   cpu_elf_name, #object
-cpu_elf_name:
-               .asciz  "v4"
-               .size   cpu_elf_name, . - cpu_elf_name
-
-               .type   cpu_arm9tdmi_name, #object
-cpu_arm9tdmi_name:
-               .asciz  "ARM9TDMI"
-               .size   cpu_arm9tdmi_name, . - cpu_arm9tdmi_name
-
-               .type   cpu_p2001_name, #object
-cpu_p2001_name:
-               .asciz  "P2001"
-               .size   cpu_p2001_name, . - cpu_p2001_name
+               string  cpu_arch_name, "armv4t"
+               string  cpu_elf_name, "v4"
+               string  cpu_arm9tdmi_name, "ARM9TDMI"
+               string  cpu_p2001_name, "P2001"
 
                .align
 
                .section ".proc.info.init", #alloc, #execinstr
 
-               .type   __arm9tdmi_proc_info, #object
-__arm9tdmi_proc_info:
-               .long   0x41009900
-               .long   0xfff8ff00
+.macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
+               .type   __\name\()_proc_info, #object
+__\name\()_proc_info:
+               .long   \cpu_val
+               .long   \cpu_mask
                .long   0
                .long   0
                b       __arm9tdmi_setup
                .long   cpu_arch_name
                .long   cpu_elf_name
                .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_arm9tdmi_name
+               .long   \cpu_name
                .long   arm9tdmi_processor_functions
                .long   0
                .long   0
                .long   v4_cache_fns
-               .size   __arm9tdmi_proc_info, . - __arm9tdmi_proc_info
+               .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
 
-               .type   __p2001_proc_info, #object
-__p2001_proc_info:
-               .long   0x41029000
-               .long   0xffffffff
-               .long   0
-               .long   0
-               b       __arm9tdmi_setup
-               .long   cpu_arch_name
-               .long   cpu_elf_name
-               .long   HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT
-               .long   cpu_p2001_name
-               .long   arm9tdmi_processor_functions
-               .long   0
-               .long   0
-               .long   v4_cache_fns
-               .size   __p2001_proc_info, . - __p2001_proc_info
+       arm9tdmi_proc_info arm9tdmi, 0x41009900, 0xfff8ff00, cpu_arm9tdmi_name
+       arm9tdmi_proc_info p2001, 0x41029000, 0xffffffff, cpu_p2001_name
index fc2a4ae15cf4689b69f9cbff2ac2013d3159f619..4c7a5710472b8a4f92007fd443fce65acff2a639 100644 (file)
@@ -180,42 +180,14 @@ fa526_cr1_set:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   fa526_processor_functions, #object
-fa526_processor_functions:
-       .word   v4_early_abort
-       .word   legacy_pabort
-       .word   cpu_fa526_proc_init
-       .word   cpu_fa526_proc_fin
-       .word   cpu_fa526_reset
-       .word   cpu_fa526_do_idle
-       .word   cpu_fa526_dcache_clean_area
-       .word   cpu_fa526_switch_mm
-       .word   cpu_fa526_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   fa526_processor_functions, . - fa526_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions fa526, dabort=v4_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_fa526_name, #object
-cpu_fa526_name:
-       .asciz  "FA526"
-       .size   cpu_fa526_name, . - cpu_fa526_name
+       string  cpu_arch_name, "armv4"
+       string  cpu_elf_name, "v4"
+       string  cpu_fa526_name, "FA526"
 
        .align
 
index d3883eed7a4a222420e7b3df4ab32fc1e6c51589..8a6c2f78c1c303c26d851580f472d0058c7ec6b3 100644 (file)
@@ -411,29 +411,28 @@ ENTRY(feroceon_dma_unmap_area)
        mov     pc, lr
 ENDPROC(feroceon_dma_unmap_area)
 
-ENTRY(feroceon_cache_fns)
-       .long   feroceon_flush_icache_all
-       .long   feroceon_flush_kern_cache_all
-       .long   feroceon_flush_user_cache_all
-       .long   feroceon_flush_user_cache_range
-       .long   feroceon_coherent_kern_range
-       .long   feroceon_coherent_user_range
-       .long   feroceon_flush_kern_dcache_area
-       .long   feroceon_dma_map_area
-       .long   feroceon_dma_unmap_area
-       .long   feroceon_dma_flush_range
-
-ENTRY(feroceon_range_cache_fns)
-       .long   feroceon_flush_icache_all
-       .long   feroceon_flush_kern_cache_all
-       .long   feroceon_flush_user_cache_all
-       .long   feroceon_flush_user_cache_range
-       .long   feroceon_coherent_kern_range
-       .long   feroceon_coherent_user_range
-       .long   feroceon_range_flush_kern_dcache_area
-       .long   feroceon_range_dma_map_area
-       .long   feroceon_dma_unmap_area
-       .long   feroceon_range_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions feroceon
+
+.macro range_alias basename
+       .globl feroceon_range_\basename
+       .type feroceon_range_\basename , %function
+       .equ feroceon_range_\basename , feroceon_\basename
+.endm
+
+/*
+ * Most of the cache functions are unchanged for this case.
+ * Export suitable alias symbols for the unchanged functions:
+ */
+       range_alias flush_icache_all
+       range_alias flush_user_cache_all
+       range_alias flush_kern_cache_all
+       range_alias flush_user_cache_range
+       range_alias coherent_kern_range
+       range_alias coherent_user_range
+       range_alias dma_unmap_area
+
+       define_cache_functions feroceon_range
 
        .align  5
 ENTRY(cpu_feroceon_dcache_clean_area)
@@ -539,93 +538,27 @@ feroceon_crval:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   feroceon_processor_functions, #object
-feroceon_processor_functions:
-       .word   v5t_early_abort
-       .word   legacy_pabort
-       .word   cpu_feroceon_proc_init
-       .word   cpu_feroceon_proc_fin
-       .word   cpu_feroceon_reset
-       .word   cpu_feroceon_do_idle
-       .word   cpu_feroceon_dcache_clean_area
-       .word   cpu_feroceon_switch_mm
-       .word   cpu_feroceon_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   feroceon_processor_functions, . - feroceon_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions feroceon, dabort=v5t_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5te"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_feroceon_name, #object
-cpu_feroceon_name:
-       .asciz  "Feroceon"
-       .size   cpu_feroceon_name, . - cpu_feroceon_name
-
-       .type   cpu_88fr531_name, #object
-cpu_88fr531_name:
-       .asciz  "Feroceon 88FR531-vd"
-       .size   cpu_88fr531_name, . - cpu_88fr531_name
-
-       .type   cpu_88fr571_name, #object
-cpu_88fr571_name:
-       .asciz  "Feroceon 88FR571-vd"
-       .size   cpu_88fr571_name, . - cpu_88fr571_name
-
-       .type   cpu_88fr131_name, #object
-cpu_88fr131_name:
-       .asciz  "Feroceon 88FR131"
-       .size   cpu_88fr131_name, . - cpu_88fr131_name
+       string  cpu_arch_name, "armv5te"
+       string  cpu_elf_name, "v5"
+       string  cpu_feroceon_name, "Feroceon"
+       string  cpu_88fr531_name, "Feroceon 88FR531-vd"
+       string  cpu_88fr571_name, "Feroceon 88FR571-vd"
+       string  cpu_88fr131_name, "Feroceon 88FR131"
 
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
 
-#ifdef CONFIG_CPU_FEROCEON_OLD_ID
-       .type   __feroceon_old_id_proc_info,#object
-__feroceon_old_id_proc_info:
-       .long   0x41009260
-       .long   0xff00fff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __feroceon_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_feroceon_name
-       .long   feroceon_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   feroceon_user_fns
-       .long   feroceon_cache_fns
-       .size   __feroceon_old_id_proc_info, . - __feroceon_old_id_proc_info
-#endif
-
-       .type   __88fr531_proc_info,#object
-__88fr531_proc_info:
-       .long   0x56055310
-       .long   0xfffffff0
+.macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req
+       .type   __\name\()_proc_info,#object
+__\name\()_proc_info:
+       .long   \cpu_val
+       .long   \cpu_mask
        .long   PMD_TYPE_SECT | \
                PMD_SECT_BUFFERABLE | \
                PMD_SECT_CACHEABLE | \
@@ -640,59 +573,22 @@ __88fr531_proc_info:
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_88fr531_name
+       .long   \cpu_name
        .long   feroceon_processor_functions
        .long   v4wbi_tlb_fns
        .long   feroceon_user_fns
-       .long   feroceon_cache_fns
-       .size   __88fr531_proc_info, . - __88fr531_proc_info
+       .long   \cache
+        .size  __\name\()_proc_info, . - __\name\()_proc_info
+.endm
 
-       .type   __88fr571_proc_info,#object
-__88fr571_proc_info:
-       .long   0x56155710
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __feroceon_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_88fr571_name
-       .long   feroceon_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   feroceon_user_fns
-       .long   feroceon_range_cache_fns
-       .size   __88fr571_proc_info, . - __88fr571_proc_info
+#ifdef CONFIG_CPU_FEROCEON_OLD_ID
+       feroceon_proc_info feroceon_old_id, 0x41009260, 0xff00fff0, \
+               cpu_name=cpu_feroceon_name, cache=feroceon_cache_fns
+#endif
 
-       .type   __88fr131_proc_info,#object
-__88fr131_proc_info:
-       .long   0x56251310
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_BIT4 | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __feroceon_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_88fr131_name
-       .long   feroceon_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   feroceon_user_fns
-       .long   feroceon_range_cache_fns
-       .size   __88fr131_proc_info, . - __88fr131_proc_info
+       feroceon_proc_info 88fr531, 0x56055310, 0xfffffff0, cpu_88fr531_name, \
+               cache=feroceon_cache_fns
+       feroceon_proc_info 88fr571, 0x56155710, 0xfffffff0, cpu_88fr571_name, \
+               cache=feroceon_range_cache_fns
+       feroceon_proc_info 88fr131, 0x56251310, 0xfffffff0, cpu_88fr131_name, \
+               cache=feroceon_range_cache_fns
index 34261f9486b9236e96804820ee7e83dff4c7151e..4ae9b4407074b4e8679833e48294889c7bd205de 100644 (file)
        mcr     p15, 0, r0, c7, c10, 1          @ clean L1 D line
        mcr     p15, 0, ip, c7, c10, 4          @ data write barrier
        .endm
+
+.macro define_processor_functions name:req, dabort:req, pabort:req, nommu=0, suspend=0
+       .type   \name\()_processor_functions, #object
+       .align 2
+ENTRY(\name\()_processor_functions)
+       .word   \dabort
+       .word   \pabort
+       .word   cpu_\name\()_proc_init
+       .word   cpu_\name\()_proc_fin
+       .word   cpu_\name\()_reset
+       .word   cpu_\name\()_do_idle
+       .word   cpu_\name\()_dcache_clean_area
+       .word   cpu_\name\()_switch_mm
+
+       .if \nommu
+       .word   0
+       .else
+       .word   cpu_\name\()_set_pte_ext
+       .endif
+
+       .if \suspend
+       .word   cpu_\name\()_suspend_size
+       .word   cpu_\name\()_do_suspend
+       .word   cpu_\name\()_do_resume
+       .else
+       .word   0
+       .word   0
+       .word   0
+       .endif
+
+       .size   \name\()_processor_functions, . - \name\()_processor_functions
+.endm
+
+.macro define_cache_functions name:req
+       .align 2
+       .type   \name\()_cache_fns, #object
+ENTRY(\name\()_cache_fns)
+       .long   \name\()_flush_icache_all
+       .long   \name\()_flush_kern_cache_all
+       .long   \name\()_flush_user_cache_all
+       .long   \name\()_flush_user_cache_range
+       .long   \name\()_coherent_kern_range
+       .long   \name\()_coherent_user_range
+       .long   \name\()_flush_kern_dcache_area
+       .long   \name\()_dma_map_area
+       .long   \name\()_dma_unmap_area
+       .long   \name\()_dma_flush_range
+       .size   \name\()_cache_fns, . - \name\()_cache_fns
+.endm
+
+.macro define_tlb_functions name:req, flags_up:req, flags_smp
+       .type   \name\()_tlb_fns, #object
+ENTRY(\name\()_tlb_fns)
+       .long   \name\()_flush_user_tlb_range
+       .long   \name\()_flush_kern_tlb_range
+       .ifnb \flags_smp
+               ALT_SMP(.long   \flags_smp )
+               ALT_UP(.long    \flags_up )
+       .else
+               .long   \flags_up
+       .endif
+       .size   \name\()_tlb_fns, . - \name\()_tlb_fns
+.endm
index 9d4f2ae63370ab2fb0897944c36a391ebf968103..db52b0fb14a080cdc9356e7942c50b1691fb6738 100644 (file)
@@ -92,6 +92,17 @@ ENTRY(cpu_mohawk_do_idle)
        mcr     p15, 0, r0, c7, c0, 4           @ wait for interrupt
        mov     pc, lr
 
+/*
+ *     flush_icache_all()
+ *
+ *     Unconditionally clean and invalidate the entire icache.
+ */
+ENTRY(mohawk_flush_icache_all)
+       mov     r0, #0
+       mcr     p15, 0, r0, c7, c5, 0           @ invalidate I cache
+       mov     pc, lr
+ENDPROC(mohawk_flush_icache_all)
+
 /*
  *     flush_user_cache_all()
  *
@@ -288,16 +299,8 @@ ENTRY(mohawk_dma_unmap_area)
        mov     pc, lr
 ENDPROC(mohawk_dma_unmap_area)
 
-ENTRY(mohawk_cache_fns)
-       .long   mohawk_flush_kern_cache_all
-       .long   mohawk_flush_user_cache_all
-       .long   mohawk_flush_user_cache_range
-       .long   mohawk_coherent_kern_range
-       .long   mohawk_coherent_user_range
-       .long   mohawk_flush_kern_dcache_area
-       .long   mohawk_dma_map_area
-       .long   mohawk_dma_unmap_area
-       .long   mohawk_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions mohawk
 
 ENTRY(cpu_mohawk_dcache_clean_area)
 1:     mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
@@ -373,42 +376,14 @@ mohawk_crval:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-       .type   mohawk_processor_functions, #object
-mohawk_processor_functions:
-       .word   v5t_early_abort
-       .word   legacy_pabort
-       .word   cpu_mohawk_proc_init
-       .word   cpu_mohawk_proc_fin
-       .word   cpu_mohawk_reset
-       .word   cpu_mohawk_do_idle
-       .word   cpu_mohawk_dcache_clean_area
-       .word   cpu_mohawk_switch_mm
-       .word   cpu_mohawk_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   mohawk_processor_functions, . - mohawk_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions mohawk, dabort=v5t_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5te"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_mohawk_name, #object
-cpu_mohawk_name:
-       .asciz  "Marvell 88SV331x"
-       .size   cpu_mohawk_name, . - cpu_mohawk_name
+       string  cpu_arch_name, "armv5te"
+       string  cpu_elf_name, "v5"
+       string  cpu_mohawk_name, "Marvell 88SV331x"
 
        .align
 
index 46f09ed16b98842df396a44b8005fbedadfaba7b..d50ada26edd61ad68057bca0c3a654b7af4d5be1 100644 (file)
@@ -187,43 +187,14 @@ sa110_crval:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-
-       .type   sa110_processor_functions, #object
-ENTRY(sa110_processor_functions)
-       .word   v4_early_abort
-       .word   legacy_pabort
-       .word   cpu_sa110_proc_init
-       .word   cpu_sa110_proc_fin
-       .word   cpu_sa110_reset
-       .word   cpu_sa110_do_idle
-       .word   cpu_sa110_dcache_clean_area
-       .word   cpu_sa110_switch_mm
-       .word   cpu_sa110_set_pte_ext
-       .word   0
-       .word   0
-       .word   0
-       .size   sa110_processor_functions, . - sa110_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions sa110, dabort=v4_early_abort, pabort=legacy_pabort
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_sa110_name, #object
-cpu_sa110_name:
-       .asciz  "StrongARM-110"
-       .size   cpu_sa110_name, . - cpu_sa110_name
+       string  cpu_arch_name, "armv4"
+       string  cpu_elf_name, "v4"
+       string  cpu_sa110_name, "StrongARM-110"
 
        .align
 
index 184a9c997e36616dcc6819418d380f9d9e439291..c7e08cab55a866e38632c7fdc1fbc42b32bbc73c 100644 (file)
@@ -235,60 +235,29 @@ sa1100_crval:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-
 /*
  * SA1100 and SA1110 share the same function calls
  */
-       .type   sa1100_processor_functions, #object
-ENTRY(sa1100_processor_functions)
-       .word   v4_early_abort
-       .word   legacy_pabort
-       .word   cpu_sa1100_proc_init
-       .word   cpu_sa1100_proc_fin
-       .word   cpu_sa1100_reset
-       .word   cpu_sa1100_do_idle
-       .word   cpu_sa1100_dcache_clean_area
-       .word   cpu_sa1100_switch_mm
-       .word   cpu_sa1100_set_pte_ext
-       .word   cpu_sa1100_suspend_size
-       .word   cpu_sa1100_do_suspend
-       .word   cpu_sa1100_do_resume
-       .size   sa1100_processor_functions, . - sa1100_processor_functions
-
-       .section ".rodata"
-
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv4"
-       .size   cpu_arch_name, . - cpu_arch_name
 
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v4"
-       .size   cpu_elf_name, . - cpu_elf_name
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions sa1100, dabort=v4_early_abort, pabort=legacy_pabort, suspend=1
 
-       .type   cpu_sa1100_name, #object
-cpu_sa1100_name:
-       .asciz  "StrongARM-1100"
-       .size   cpu_sa1100_name, . - cpu_sa1100_name
+       .section ".rodata"
 
-       .type   cpu_sa1110_name, #object
-cpu_sa1110_name:
-       .asciz  "StrongARM-1110"
-       .size   cpu_sa1110_name, . - cpu_sa1110_name
+       string  cpu_arch_name, "armv4"
+       string  cpu_elf_name, "v4"
+       string  cpu_sa1100_name, "StrongARM-1100"
+       string  cpu_sa1110_name, "StrongARM-1110"
 
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
 
-       .type   __sa1100_proc_info,#object
-__sa1100_proc_info:
-       .long   0x4401a110
-       .long   0xfffffff0
+.macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
+       .type   __\name\()_proc_info,#object
+__\name\()_proc_info:
+       .long   \cpu_val
+       .long   \cpu_mask
        .long   PMD_TYPE_SECT | \
                PMD_SECT_BUFFERABLE | \
                PMD_SECT_CACHEABLE | \
@@ -301,32 +270,13 @@ __sa1100_proc_info:
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT | HWCAP_FAST_MULT
-       .long   cpu_sa1100_name
+       .long   \cpu_name
        .long   sa1100_processor_functions
        .long   v4wb_tlb_fns
        .long   v4_mc_user_fns
        .long   v4wb_cache_fns
-       .size   __sa1100_proc_info, . - __sa1100_proc_info
+       .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
 
-       .type   __sa1110_proc_info,#object
-__sa1110_proc_info:
-       .long   0x6901b110
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __sa1100_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT | HWCAP_FAST_MULT
-       .long   cpu_sa1110_name
-       .long   sa1100_processor_functions
-       .long   v4wb_tlb_fns
-       .long   v4_mc_user_fns
-       .long   v4wb_cache_fns
-       .size   __sa1110_proc_info, . - __sa1110_proc_info
+       sa1100_proc_info sa1100, 0x4401a110, 0xfffffff0, cpu_sa1100_name
+       sa1100_proc_info sa1110, 0x6901b110, 0xfffffff0, cpu_sa1110_name
index 1d2b8451bf25c24f9e66ac10f83faf54ebcdc401..aedf3c5dbe4eb88a3602ad3c4b6dc666517061e4 100644 (file)
@@ -56,6 +56,11 @@ ENTRY(cpu_v6_proc_fin)
  */
        .align  5
 ENTRY(cpu_v6_reset)
+       mrc     p15, 0, r1, c1, c0, 0           @ ctrl register
+       bic     r1, r1, #0x1                    @ ...............m
+       mcr     p15, 0, r1, c1, c0, 0           @ disable MMU
+       mov     r1, #0
+       mcr     p15, 0, r1, c7, c5, 4           @ ISB
        mov     pc, r0
 
 /*
@@ -169,11 +174,7 @@ cpu_resume_l1_flags:
 #define cpu_v6_do_resume 0
 #endif
 
-
-       .type   cpu_v6_name, #object
-cpu_v6_name:
-       .asciz  "ARMv6-compatible processor"
-       .size   cpu_v6_name, . - cpu_v6_name
+       string  cpu_v6_name, "ARMv6-compatible processor"
 
        .align
 
@@ -239,33 +240,13 @@ v6_crval:
 
        __INITDATA
 
-       .type   v6_processor_functions, #object
-ENTRY(v6_processor_functions)
-       .word   v6_early_abort
-       .word   v6_pabort
-       .word   cpu_v6_proc_init
-       .word   cpu_v6_proc_fin
-       .word   cpu_v6_reset
-       .word   cpu_v6_do_idle
-       .word   cpu_v6_dcache_clean_area
-       .word   cpu_v6_switch_mm
-       .word   cpu_v6_set_pte_ext
-       .word   cpu_v6_suspend_size
-       .word   cpu_v6_do_suspend
-       .word   cpu_v6_do_resume
-       .size   v6_processor_functions, . - v6_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions v6, dabort=v6_early_abort, pabort=v6_pabort, suspend=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv6"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v6"
-       .size   cpu_elf_name, . - cpu_elf_name
+       string  cpu_arch_name, "armv6"
+       string  cpu_elf_name, "v6"
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
index 089c0b5e454fccbdbc63a4d4e9d72d15baa7075a..54d1a63517c5e482ae8d71a58eeeed2584007203 100644 (file)
@@ -58,9 +58,16 @@ ENDPROC(cpu_v7_proc_fin)
  *     to what would be the reset vector.
  *
  *     - loc   - location to jump to for soft reset
+ *
+ *     This code must be executed using a flat identity mapping with
+ *      caches disabled.
  */
        .align  5
 ENTRY(cpu_v7_reset)
+       mrc     p15, 0, r1, c1, c0, 0           @ ctrl register
+       bic     r1, r1, #0x1                    @ ...............m
+       mcr     p15, 0, r1, c1, c0, 0           @ disable MMU
+       isb
        mov     pc, r0
 ENDPROC(cpu_v7_reset)
 
@@ -173,8 +180,7 @@ ENTRY(cpu_v7_set_pte_ext)
        mov     pc, lr
 ENDPROC(cpu_v7_set_pte_ext)
 
-cpu_v7_name:
-       .ascii  "ARMv7 Processor"
+       string  cpu_v7_name, "ARMv7 Processor"
        .align
 
        /*
@@ -279,13 +285,20 @@ cpu_resume_l1_flags:
  *     It is assumed that:
  *     - cache type register is implemented
  */
+__v7_ca5mp_setup:
 __v7_ca9mp_setup:
+       mov     r10, #(1 << 0)                  @ TLB ops broadcasting
+       b       1f
+__v7_ca15mp_setup:
+       mov     r10, #0
+1:
 #ifdef CONFIG_SMP
        ALT_SMP(mrc     p15, 0, r0, c1, c0, 1)
        ALT_UP(mov      r0, #(1 << 6))          @ fake it for UP
        tst     r0, #(1 << 6)                   @ SMP/nAMP mode enabled?
-       orreq   r0, r0, #(1 << 6) | (1 << 0)    @ Enable SMP/nAMP mode and
-       mcreq   p15, 0, r0, c1, c0, 1           @ TLB ops broadcasting
+       orreq   r0, r0, #(1 << 6)               @ Enable SMP/nAMP mode
+       orreq   r0, r0, r10                     @ Enable CPU-specific SMP bits
+       mcreq   p15, 0, r0, c1, c0, 1
 #endif
 __v7_setup:
        adr     r12, __v7_setup_stack           @ the local stack
@@ -411,66 +424,69 @@ __v7_setup_stack:
 
        __INITDATA
 
-       .type   v7_processor_functions, #object
-ENTRY(v7_processor_functions)
-       .word   v7_early_abort
-       .word   v7_pabort
-       .word   cpu_v7_proc_init
-       .word   cpu_v7_proc_fin
-       .word   cpu_v7_reset
-       .word   cpu_v7_do_idle
-       .word   cpu_v7_dcache_clean_area
-       .word   cpu_v7_switch_mm
-       .word   cpu_v7_set_pte_ext
-       .word   cpu_v7_suspend_size
-       .word   cpu_v7_do_suspend
-       .word   cpu_v7_do_resume
-       .size   v7_processor_functions, . - v7_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions v7, dabort=v7_early_abort, pabort=v7_pabort, suspend=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv7"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v7"
-       .size   cpu_elf_name, . - cpu_elf_name
+       string  cpu_arch_name, "armv7"
+       string  cpu_elf_name, "v7"
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
 
-       .type   __v7_ca9mp_proc_info, #object
-__v7_ca9mp_proc_info:
-       .long   0x410fc090              @ Required ID value
-       .long   0xff0ffff0              @ Mask for ID
-       ALT_SMP(.long \
-               PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ | \
-               PMD_FLAGS_SMP)
-       ALT_UP(.long \
-               PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ | \
-               PMD_FLAGS_UP)
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_XN | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       W(b)    __v7_ca9mp_setup
+       /*
+        * Standard v7 proc info content
+        */
+.macro __v7_proc initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0
+       ALT_SMP(.long   PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
+                       PMD_FLAGS_SMP | \mm_mmuflags)
+       ALT_UP(.long    PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
+                       PMD_FLAGS_UP | \mm_mmuflags)
+       .long   PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_AP_WRITE | \
+               PMD_SECT_AP_READ | \io_mmuflags
+       W(b)    \initfunc
        .long   cpu_arch_name
        .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_TLS
+       .long   HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT | \
+               HWCAP_EDSP | HWCAP_TLS | \hwcaps
        .long   cpu_v7_name
        .long   v7_processor_functions
        .long   v7wbi_tlb_fns
        .long   v6_user_fns
        .long   v7_cache_fns
+.endm
+
+       /*
+        * ARM Ltd. Cortex A5 processor.
+        */
+       .type   __v7_ca5mp_proc_info, #object
+__v7_ca5mp_proc_info:
+       .long   0x410fc050
+       .long   0xff0ffff0
+       __v7_proc __v7_ca5mp_setup
+       .size   __v7_ca5mp_proc_info, . - __v7_ca5mp_proc_info
+
+       /*
+        * ARM Ltd. Cortex A9 processor.
+        */
+       .type   __v7_ca9mp_proc_info, #object
+__v7_ca9mp_proc_info:
+       .long   0x410fc090
+       .long   0xff0ffff0
+       __v7_proc __v7_ca9mp_setup
        .size   __v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info
 
+       /*
+        * ARM Ltd. Cortex A15 processor.
+        */
+       .type   __v7_ca15mp_proc_info, #object
+__v7_ca15mp_proc_info:
+       .long   0x410fc0f0
+       .long   0xff0ffff0
+       __v7_proc __v7_ca15mp_setup, hwcaps = HWCAP_IDIV
+       .size   __v7_ca15mp_proc_info, . - __v7_ca15mp_proc_info
+
        /*
         * Match any ARMv7 processor core.
         */
@@ -478,27 +494,5 @@ __v7_ca9mp_proc_info:
 __v7_proc_info:
        .long   0x000f0000              @ Required ID value
        .long   0x000f0000              @ Mask for ID
-       ALT_SMP(.long \
-               PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ | \
-               PMD_FLAGS_SMP)
-       ALT_UP(.long \
-               PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ | \
-               PMD_FLAGS_UP)
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_XN | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       W(b)    __v7_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_TLS
-       .long   cpu_v7_name
-       .long   v7_processor_functions
-       .long   v7wbi_tlb_fns
-       .long   v6_user_fns
-       .long   v7_cache_fns
+       __v7_proc __v7_setup
        .size   __v7_proc_info, . - __v7_proc_info
index 596213699f37ac8a52d580ae70df8303bc344c94..1508f9bc526a2553a6f967052eca8cb7f2b45969 100644 (file)
@@ -335,17 +335,8 @@ ENTRY(xsc3_dma_unmap_area)
        mov     pc, lr
 ENDPROC(xsc3_dma_unmap_area)
 
-ENTRY(xsc3_cache_fns)
-       .long   xsc3_flush_icache_all
-       .long   xsc3_flush_kern_cache_all
-       .long   xsc3_flush_user_cache_all
-       .long   xsc3_flush_user_cache_range
-       .long   xsc3_coherent_kern_range
-       .long   xsc3_coherent_user_range
-       .long   xsc3_flush_kern_dcache_area
-       .long   xsc3_dma_map_area
-       .long   xsc3_dma_unmap_area
-       .long   xsc3_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions xsc3
 
 ENTRY(cpu_xsc3_dcache_clean_area)
 1:     mcr     p15, 0, r0, c7, c10, 1          @ clean L1 D line
@@ -503,52 +494,24 @@ xsc3_crval:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-
-       .type   xsc3_processor_functions, #object
-ENTRY(xsc3_processor_functions)
-       .word   v5t_early_abort
-       .word   legacy_pabort
-       .word   cpu_xsc3_proc_init
-       .word   cpu_xsc3_proc_fin
-       .word   cpu_xsc3_reset
-       .word   cpu_xsc3_do_idle
-       .word   cpu_xsc3_dcache_clean_area
-       .word   cpu_xsc3_switch_mm
-       .word   cpu_xsc3_set_pte_ext
-       .word   cpu_xsc3_suspend_size
-       .word   cpu_xsc3_do_suspend
-       .word   cpu_xsc3_do_resume
-       .size   xsc3_processor_functions, . - xsc3_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions xsc3, dabort=v5t_early_abort, pabort=legacy_pabort, suspend=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5te"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_xsc3_name, #object
-cpu_xsc3_name:
-       .asciz  "XScale-V3 based processor"
-       .size   cpu_xsc3_name, . - cpu_xsc3_name
+       string  cpu_arch_name, "armv5te"
+       string  cpu_elf_name, "v5"
+       string  cpu_xsc3_name, "XScale-V3 based processor"
 
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
 
-       .type   __xsc3_proc_info,#object
-__xsc3_proc_info:
-       .long   0x69056000
-       .long   0xffffe000
+.macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req
+       .type   __\name\()_proc_info,#object
+__\name\()_proc_info:
+       .long   \cpu_val
+       .long   \cpu_mask
        .long   PMD_TYPE_SECT | \
                PMD_SECT_BUFFERABLE | \
                PMD_SECT_CACHEABLE | \
@@ -566,29 +529,10 @@ __xsc3_proc_info:
        .long   v4wbi_tlb_fns
        .long   xsc3_mc_user_fns
        .long   xsc3_cache_fns
-       .size   __xsc3_proc_info, . - __xsc3_proc_info
+       .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
 
-/* Note: PXA935 changed its implementor ID from Intel to Marvell */
+       xsc3_proc_info xsc3, 0x69056000, 0xffffe000
 
-       .type   __xsc3_pxa935_proc_info,#object
-__xsc3_pxa935_proc_info:
-       .long   0x56056000
-       .long   0xffffe000
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xsc3_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_xsc3_name
-       .long   xsc3_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xsc3_mc_user_fns
-       .long   xsc3_cache_fns
-       .size   __xsc3_pxa935_proc_info, . - __xsc3_pxa935_proc_info
+/* Note: PXA935 changed its implementor ID from Intel to Marvell */
+       xsc3_proc_info xsc3_pxa935, 0x56056000, 0xffffe000
index 42af97664c9d844f156789f23a8c1fac7a643b68..76a8046050109867c146c9bb1522c1b6672d64f0 100644 (file)
@@ -390,12 +390,12 @@ ENDPROC(xscale_dma_map_area)
  *     - size  - size of region
  *     - dir   - DMA direction
  */
-ENTRY(xscale_dma_a0_map_area)
+ENTRY(xscale_80200_A0_A1_dma_map_area)
        add     r1, r1, r0
        teq     r2, #DMA_TO_DEVICE
        beq     xscale_dma_clean_range
        b       xscale_dma_flush_range
-ENDPROC(xscale_dma_a0_map_area)
+ENDPROC(xscale_80200_A0_A1_dma_map_area)
 
 /*
  *     dma_unmap_area(start, size, dir)
@@ -407,17 +407,8 @@ ENTRY(xscale_dma_unmap_area)
        mov     pc, lr
 ENDPROC(xscale_dma_unmap_area)
 
-ENTRY(xscale_cache_fns)
-       .long   xscale_flush_icache_all
-       .long   xscale_flush_kern_cache_all
-       .long   xscale_flush_user_cache_all
-       .long   xscale_flush_user_cache_range
-       .long   xscale_coherent_kern_range
-       .long   xscale_coherent_user_range
-       .long   xscale_flush_kern_dcache_area
-       .long   xscale_dma_map_area
-       .long   xscale_dma_unmap_area
-       .long   xscale_dma_flush_range
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions xscale
 
 /*
  * On stepping A0/A1 of the 80200, invalidating D-cache by line doesn't
@@ -432,16 +423,28 @@ ENTRY(xscale_cache_fns)
  * revision January 22, 2003, available at:
  *     http://www.intel.com/design/iio/specupdt/273415.htm
  */
-ENTRY(xscale_80200_A0_A1_cache_fns)
-       .long   xscale_flush_kern_cache_all
-       .long   xscale_flush_user_cache_all
-       .long   xscale_flush_user_cache_range
-       .long   xscale_coherent_kern_range
-       .long   xscale_coherent_user_range
-       .long   xscale_flush_kern_dcache_area
-       .long   xscale_dma_a0_map_area
-       .long   xscale_dma_unmap_area
-       .long   xscale_dma_flush_range
+.macro a0_alias basename
+       .globl xscale_80200_A0_A1_\basename
+       .type xscale_80200_A0_A1_\basename , %function
+       .equ xscale_80200_A0_A1_\basename , xscale_\basename
+.endm
+
+/*
+ * Most of the cache functions are unchanged for these processor revisions.
+ * Export suitable alias symbols for the unchanged functions:
+ */
+       a0_alias flush_icache_all
+       a0_alias flush_user_cache_all
+       a0_alias flush_kern_cache_all
+       a0_alias flush_user_cache_range
+       a0_alias coherent_kern_range
+       a0_alias coherent_user_range
+       a0_alias flush_kern_dcache_area
+       a0_alias dma_flush_range
+       a0_alias dma_unmap_area
+
+       @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
+       define_cache_functions xscale_80200_A0_A1
 
 ENTRY(cpu_xscale_dcache_clean_area)
 1:     mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
@@ -587,432 +590,74 @@ xscale_crval:
 
        __INITDATA
 
-/*
- * Purpose : Function pointers used to access above functions - all calls
- *          come through these
- */
-
-       .type   xscale_processor_functions, #object
-ENTRY(xscale_processor_functions)
-       .word   v5t_early_abort
-       .word   legacy_pabort
-       .word   cpu_xscale_proc_init
-       .word   cpu_xscale_proc_fin
-       .word   cpu_xscale_reset
-       .word   cpu_xscale_do_idle
-       .word   cpu_xscale_dcache_clean_area
-       .word   cpu_xscale_switch_mm
-       .word   cpu_xscale_set_pte_ext
-       .word   cpu_xscale_suspend_size
-       .word   cpu_xscale_do_suspend
-       .word   cpu_xscale_do_resume
-       .size   xscale_processor_functions, . - xscale_processor_functions
+       @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
+       define_processor_functions xscale, dabort=v5t_early_abort, pabort=legacy_pabort, suspend=1
 
        .section ".rodata"
 
-       .type   cpu_arch_name, #object
-cpu_arch_name:
-       .asciz  "armv5te"
-       .size   cpu_arch_name, . - cpu_arch_name
-
-       .type   cpu_elf_name, #object
-cpu_elf_name:
-       .asciz  "v5"
-       .size   cpu_elf_name, . - cpu_elf_name
-
-       .type   cpu_80200_A0_A1_name, #object
-cpu_80200_A0_A1_name:
-       .asciz  "XScale-80200 A0/A1"
-       .size   cpu_80200_A0_A1_name, . - cpu_80200_A0_A1_name
-
-       .type   cpu_80200_name, #object
-cpu_80200_name:
-       .asciz  "XScale-80200"
-       .size   cpu_80200_name, . - cpu_80200_name
-
-       .type   cpu_80219_name, #object
-cpu_80219_name:
-       .asciz  "XScale-80219"
-       .size   cpu_80219_name, . - cpu_80219_name
-
-       .type   cpu_8032x_name, #object
-cpu_8032x_name:
-       .asciz  "XScale-IOP8032x Family"
-       .size   cpu_8032x_name, . - cpu_8032x_name
-
-       .type   cpu_8033x_name, #object
-cpu_8033x_name:
-       .asciz  "XScale-IOP8033x Family"
-       .size   cpu_8033x_name, . - cpu_8033x_name
-
-       .type   cpu_pxa250_name, #object
-cpu_pxa250_name:
-       .asciz  "XScale-PXA250"
-       .size   cpu_pxa250_name, . - cpu_pxa250_name
-
-       .type   cpu_pxa210_name, #object
-cpu_pxa210_name:
-       .asciz  "XScale-PXA210"
-       .size   cpu_pxa210_name, . - cpu_pxa210_name
-
-       .type   cpu_ixp42x_name, #object
-cpu_ixp42x_name:
-       .asciz  "XScale-IXP42x Family"
-       .size   cpu_ixp42x_name, . - cpu_ixp42x_name
-
-       .type   cpu_ixp43x_name, #object
-cpu_ixp43x_name:
-       .asciz  "XScale-IXP43x Family"
-       .size   cpu_ixp43x_name, . - cpu_ixp43x_name
-
-       .type   cpu_ixp46x_name, #object
-cpu_ixp46x_name:
-       .asciz  "XScale-IXP46x Family"
-       .size   cpu_ixp46x_name, . - cpu_ixp46x_name
-
-       .type   cpu_ixp2400_name, #object
-cpu_ixp2400_name:
-       .asciz  "XScale-IXP2400"
-       .size   cpu_ixp2400_name, . - cpu_ixp2400_name
-
-       .type   cpu_ixp2800_name, #object
-cpu_ixp2800_name:
-       .asciz  "XScale-IXP2800"
-       .size   cpu_ixp2800_name, . - cpu_ixp2800_name
-
-       .type   cpu_pxa255_name, #object
-cpu_pxa255_name:
-       .asciz  "XScale-PXA255"
-       .size   cpu_pxa255_name, . - cpu_pxa255_name
-
-       .type   cpu_pxa270_name, #object
-cpu_pxa270_name:
-       .asciz  "XScale-PXA270"
-       .size   cpu_pxa270_name, . - cpu_pxa270_name
+       string  cpu_arch_name, "armv5te"
+       string  cpu_elf_name, "v5"
+
+       string  cpu_80200_A0_A1_name, "XScale-80200 A0/A1"
+       string  cpu_80200_name, "XScale-80200"
+       string  cpu_80219_name, "XScale-80219"
+       string  cpu_8032x_name, "XScale-IOP8032x Family"
+       string  cpu_8033x_name, "XScale-IOP8033x Family"
+       string  cpu_pxa250_name, "XScale-PXA250"
+       string  cpu_pxa210_name, "XScale-PXA210"
+       string  cpu_ixp42x_name, "XScale-IXP42x Family"
+       string  cpu_ixp43x_name, "XScale-IXP43x Family"
+       string  cpu_ixp46x_name, "XScale-IXP46x Family"
+       string  cpu_ixp2400_name, "XScale-IXP2400"
+       string  cpu_ixp2800_name, "XScale-IXP2800"
+       string  cpu_pxa255_name, "XScale-PXA255"
+       string  cpu_pxa270_name, "XScale-PXA270"
 
        .align
 
        .section ".proc.info.init", #alloc, #execinstr
 
-       .type   __80200_A0_A1_proc_info,#object
-__80200_A0_A1_proc_info:
-       .long   0x69052000
-       .long   0xfffffffe
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_80200_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_80200_A0_A1_cache_fns
-       .size   __80200_A0_A1_proc_info, . - __80200_A0_A1_proc_info
-
-       .type   __80200_proc_info,#object
-__80200_proc_info:
-       .long   0x69052000
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
+.macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
+       .type   __\name\()_proc_info,#object
+__\name\()_proc_info:
+       .long   \cpu_val
+       .long   \cpu_mask
+       .long   PMD_TYPE_SECT | \
                PMD_SECT_BUFFERABLE | \
                PMD_SECT_CACHEABLE | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
+       .long   PMD_TYPE_SECT | \
                PMD_SECT_AP_WRITE | \
                PMD_SECT_AP_READ
        b       __xscale_setup
        .long   cpu_arch_name
        .long   cpu_elf_name
        .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_80200_name
+       .long   \cpu_name
        .long   xscale_processor_functions
        .long   v4wbi_tlb_fns
        .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __80200_proc_info, . - __80200_proc_info
-
-       .type   __80219_proc_info,#object
-__80219_proc_info:
-       .long   0x69052e20
-       .long   0xffffffe0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_80219_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __80219_proc_info, . - __80219_proc_info
-
-       .type   __8032x_proc_info,#object
-__8032x_proc_info:
-       .long   0x69052420
-       .long   0xfffff7e0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_8032x_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __8032x_proc_info, . - __8032x_proc_info
-
-       .type   __8033x_proc_info,#object
-__8033x_proc_info:
-       .long   0x69054010
-       .long   0xfffffd30
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_8033x_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __8033x_proc_info, . - __8033x_proc_info
-
-       .type   __pxa250_proc_info,#object
-__pxa250_proc_info:
-       .long   0x69052100
-       .long   0xfffff7f0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_pxa250_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __pxa250_proc_info, . - __pxa250_proc_info
-
-       .type   __pxa210_proc_info,#object
-__pxa210_proc_info:
-       .long   0x69052120
-       .long   0xfffff3f0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_pxa210_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __pxa210_proc_info, . - __pxa210_proc_info
-
-       .type   __ixp2400_proc_info, #object
-__ixp2400_proc_info:
-       .long   0x69054190
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_ixp2400_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __ixp2400_proc_info, . - __ixp2400_proc_info                
-
-       .type   __ixp2800_proc_info, #object
-__ixp2800_proc_info:
-       .long   0x690541a0
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_ixp2800_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __ixp2800_proc_info, . - __ixp2800_proc_info                
-
-       .type   __ixp42x_proc_info, #object
-__ixp42x_proc_info:
-       .long   0x690541c0
-       .long   0xffffffc0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_ixp42x_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __ixp42x_proc_info, . - __ixp42x_proc_info                
-
-       .type   __ixp43x_proc_info, #object
-__ixp43x_proc_info:
-       .long   0x69054040
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_ixp43x_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __ixp43x_proc_info, . - __ixp43x_proc_info
-
-       .type   __ixp46x_proc_info, #object
-__ixp46x_proc_info:
-       .long   0x69054200
-       .long   0xffffff00
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_ixp46x_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __ixp46x_proc_info, . - __ixp46x_proc_info
-
-       .type   __pxa255_proc_info,#object
-__pxa255_proc_info:
-       .long   0x69052d00
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_pxa255_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __pxa255_proc_info, . - __pxa255_proc_info
-
-       .type   __pxa270_proc_info,#object
-__pxa270_proc_info:
-       .long   0x69054110
-       .long   0xfffffff0
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_BUFFERABLE | \
-               PMD_SECT_CACHEABLE | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       .long   PMD_TYPE_SECT | \
-               PMD_SECT_AP_WRITE | \
-               PMD_SECT_AP_READ
-       b       __xscale_setup
-       .long   cpu_arch_name
-       .long   cpu_elf_name
-       .long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
-       .long   cpu_pxa270_name
-       .long   xscale_processor_functions
-       .long   v4wbi_tlb_fns
-       .long   xscale_mc_user_fns
-       .long   xscale_cache_fns
-       .size   __pxa270_proc_info, . - __pxa270_proc_info
-
+       .ifb \cache
+               .long   xscale_cache_fns
+       .else
+               .long   \cache
+       .endif
+       .size   __\name\()_proc_info, . - __\name\()_proc_info
+.endm
+
+       xscale_proc_info 80200_A0_A1, 0x69052000, 0xfffffffe, cpu_80200_name, \
+               cache=xscale_80200_A0_A1_cache_fns
+       xscale_proc_info 80200, 0x69052000, 0xfffffff0, cpu_80200_name
+       xscale_proc_info 80219, 0x69052e20, 0xffffffe0, cpu_80219_name
+       xscale_proc_info 8032x, 0x69052420, 0xfffff7e0, cpu_8032x_name
+       xscale_proc_info 8033x, 0x69054010, 0xfffffd30, cpu_8033x_name
+       xscale_proc_info pxa250, 0x69052100, 0xfffff7f0, cpu_pxa250_name
+       xscale_proc_info pxa210, 0x69052120, 0xfffff3f0, cpu_pxa210_name
+       xscale_proc_info ixp2400, 0x69054190, 0xfffffff0, cpu_ixp2400_name
+       xscale_proc_info ixp2800, 0x690541a0, 0xfffffff0, cpu_ixp2800_name
+       xscale_proc_info ixp42x, 0x690541c0, 0xffffffc0, cpu_ixp42x_name
+       xscale_proc_info ixp43x, 0x69054040, 0xfffffff0, cpu_ixp43x_name
+       xscale_proc_info ixp46x, 0x69054200, 0xffffff00, cpu_ixp46x_name
+       xscale_proc_info pxa255, 0x69052d00, 0xfffffff0, cpu_pxa255_name
+       xscale_proc_info pxa270, 0x69054110, 0xfffffff0, cpu_pxa270_name
index 9694f1f6f4854a7261853f5d6329684f9dd98ba4..7a2e56c5d89a5f5642a8b04d32e01d604c377a3c 100644 (file)
@@ -67,9 +67,5 @@ ENTRY(fa_flush_kern_tlb_range)
 
        __INITDATA
 
-       .type   fa_tlb_fns, #object
-ENTRY(fa_tlb_fns)
-       .long   fa_flush_user_tlb_range
-       .long   fa_flush_kern_tlb_range
-       .long   fa_tlb_flags
-       .size   fa_tlb_fns, . - fa_tlb_fns
+       /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
+       define_tlb_functions fa, fa_tlb_flags
index c10786ec8e0a41b1036d4403bd4e3db94a1a108c..d253995ec4cac3f4a6e07fd1cd6b41f3cee0b8a3 100644 (file)
@@ -44,9 +44,5 @@ ENTRY(v3_flush_kern_tlb_range)
 
        __INITDATA
 
-       .type   v3_tlb_fns, #object
-ENTRY(v3_tlb_fns)
-       .long   v3_flush_user_tlb_range
-       .long   v3_flush_kern_tlb_range
-       .long   v3_tlb_flags
-       .size   v3_tlb_fns, . - v3_tlb_fns
+       /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
+       define_tlb_functions v3, v3_tlb_flags
index d6c94457c2b9d7b0949d97c02406e806038b5303..17a025ade5733c39d0be6c01f7e6db9cf2ad4445 100644 (file)
@@ -57,9 +57,5 @@ ENTRY(v4_flush_user_tlb_range)
 
        __INITDATA
 
-       .type   v4_tlb_fns, #object
-ENTRY(v4_tlb_fns)
-       .long   v4_flush_user_tlb_range
-       .long   v4_flush_kern_tlb_range
-       .long   v4_tlb_flags
-       .size   v4_tlb_fns, . - v4_tlb_fns
+       /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
+       define_tlb_functions v4, v4_tlb_flags
index cb829ca7845d0d48293b4ff8c2eb71c4e751ddc3..c04598fa4d4aaa4043274381b36e65fb799990cf 100644 (file)
@@ -69,9 +69,5 @@ ENTRY(v4wb_flush_kern_tlb_range)
 
        __INITDATA
 
-       .type   v4wb_tlb_fns, #object
-ENTRY(v4wb_tlb_fns)
-       .long   v4wb_flush_user_tlb_range
-       .long   v4wb_flush_kern_tlb_range
-       .long   v4wb_tlb_flags
-       .size   v4wb_tlb_fns, . - v4wb_tlb_fns
+       /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
+       define_tlb_functions v4wb, v4wb_tlb_flags
index 60cfc4a25dd5bff8e75855739ea6af3d1297e517..1f6062b6c1c170c9a5e1ab3f482ca16843637a98 100644 (file)
@@ -60,9 +60,5 @@ ENTRY(v4wbi_flush_kern_tlb_range)
 
        __INITDATA
 
-       .type   v4wbi_tlb_fns, #object
-ENTRY(v4wbi_tlb_fns)
-       .long   v4wbi_flush_user_tlb_range
-       .long   v4wbi_flush_kern_tlb_range
-       .long   v4wbi_tlb_flags
-       .size   v4wbi_tlb_fns, . - v4wbi_tlb_fns
+       /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
+       define_tlb_functions v4wbi, v4wbi_tlb_flags
index 73d7d89b04c48a93c13d3f1e204853065fbcdc7c..a685944735c92aa23b8011c48802c7e8bde08aae 100644 (file)
@@ -90,9 +90,5 @@ ENTRY(v6wbi_flush_kern_tlb_range)
 
        __INIT
 
-       .type   v6wbi_tlb_fns, #object
-ENTRY(v6wbi_tlb_fns)
-       .long   v6wbi_flush_user_tlb_range
-       .long   v6wbi_flush_kern_tlb_range
-       .long   v6wbi_tlb_flags
-       .size   v6wbi_tlb_fns, . - v6wbi_tlb_fns
+       /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
+       define_tlb_functions v6wbi, v6wbi_tlb_flags
index 53cd5b45467318e7fae97127bcdead01e3f4e8eb..ebd4290ce1e744fabba3708dbff4bf965c5e3225 100644 (file)
@@ -85,10 +85,5 @@ ENDPROC(v7wbi_flush_kern_tlb_range)
 
        __INIT
 
-       .type   v7wbi_tlb_fns, #object
-ENTRY(v7wbi_tlb_fns)
-       .long   v7wbi_flush_user_tlb_range
-       .long   v7wbi_flush_kern_tlb_range
-       ALT_SMP(.long   v7wbi_tlb_flags_smp)
-       ALT_UP(.long    v7wbi_tlb_flags_up)
-       .size   v7wbi_tlb_fns, . - v7wbi_tlb_fns
+       /* define struct cpu_tlb_fns (see <asm/tlbflush.h> and proc-macros.S) */
+       define_tlb_functions v7wbi, v7wbi_tlb_flags_up, flags_smp=v7wbi_tlb_flags_smp
index f25e7ec8941696f3bd10b765d387b6ea7936d4c0..650d90be0f9f19a0b46f77eb8876f1c766d70aab 100644 (file)
@@ -582,7 +582,6 @@ static int __init vfp_init(void)
                                elf_hwcap |= HWCAP_VFPv3D16;
                }
 #endif
-#ifdef CONFIG_NEON
                /*
                 * Check for the presence of the Advanced SIMD
                 * load/store instructions, integer and single
@@ -590,10 +589,13 @@ static int __init vfp_init(void)
                 * for NEON if the hardware has the MVFR registers.
                 */
                if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) {
+#ifdef CONFIG_NEON
                        if ((fmrx(MVFR1) & 0x000fff00) == 0x00011100)
                                elf_hwcap |= HWCAP_NEON;
-               }
 #endif
+                       if ((fmrx(MVFR1) & 0xf0000000) == 0x10000000)
+                               elf_hwcap |= HWCAP_VFPv4;
+               }
        }
        return 0;
 }