diff options
Diffstat (limited to 'arch/arm/include')
-rw-r--r-- | arch/arm/include/asm/cp15.h | 16 | ||||
-rw-r--r-- | arch/arm/include/asm/cputype.h | 61 | ||||
-rw-r--r-- | arch/arm/include/asm/delay.h | 1 | ||||
-rw-r--r-- | arch/arm/include/asm/glue-df.h | 20 | ||||
-rw-r--r-- | arch/arm/include/asm/pgtable.h | 3 |
5 files changed, 70 insertions, 31 deletions
diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h index 5ef4d8015a60..1f3262e99d81 100644 --- a/arch/arm/include/asm/cp15.h +++ b/arch/arm/include/asm/cp15.h | |||
@@ -42,6 +42,8 @@ | |||
42 | #define vectors_high() (0) | 42 | #define vectors_high() (0) |
43 | #endif | 43 | #endif |
44 | 44 | ||
45 | #ifdef CONFIG_CPU_CP15 | ||
46 | |||
45 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ | 47 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ |
46 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ | 48 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ |
47 | 49 | ||
@@ -82,6 +84,18 @@ static inline void set_copro_access(unsigned int val) | |||
82 | isb(); | 84 | isb(); |
83 | } | 85 | } |
84 | 86 | ||
85 | #endif | 87 | #else /* ifdef CONFIG_CPU_CP15 */ |
88 | |||
89 | /* | ||
90 | * cr_alignment and cr_no_alignment are tightly coupled to cp15 (at least in the | ||
91 | * minds of the developers). Yielding 0 for machines without a cp15 (and making | ||
92 | * it read-only) is fine for most cases and saves quite some #ifdeffery. | ||
93 | */ | ||
94 | #define cr_no_alignment UL(0) | ||
95 | #define cr_alignment UL(0) | ||
96 | |||
97 | #endif /* ifdef CONFIG_CPU_CP15 / else */ | ||
98 | |||
99 | #endif /* ifndef __ASSEMBLY__ */ | ||
86 | 100 | ||
87 | #endif | 101 | #endif |
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h index ad41ec2471e8..7652712d1d14 100644 --- a/arch/arm/include/asm/cputype.h +++ b/arch/arm/include/asm/cputype.h | |||
@@ -38,6 +38,24 @@ | |||
38 | #define MPIDR_AFFINITY_LEVEL(mpidr, level) \ | 38 | #define MPIDR_AFFINITY_LEVEL(mpidr, level) \ |
39 | ((mpidr >> (MPIDR_LEVEL_BITS * level)) & MPIDR_LEVEL_MASK) | 39 | ((mpidr >> (MPIDR_LEVEL_BITS * level)) & MPIDR_LEVEL_MASK) |
40 | 40 | ||
41 | #define ARM_CPU_IMP_ARM 0x41 | ||
42 | #define ARM_CPU_IMP_INTEL 0x69 | ||
43 | |||
44 | #define ARM_CPU_PART_ARM1136 0xB360 | ||
45 | #define ARM_CPU_PART_ARM1156 0xB560 | ||
46 | #define ARM_CPU_PART_ARM1176 0xB760 | ||
47 | #define ARM_CPU_PART_ARM11MPCORE 0xB020 | ||
48 | #define ARM_CPU_PART_CORTEX_A8 0xC080 | ||
49 | #define ARM_CPU_PART_CORTEX_A9 0xC090 | ||
50 | #define ARM_CPU_PART_CORTEX_A5 0xC050 | ||
51 | #define ARM_CPU_PART_CORTEX_A15 0xC0F0 | ||
52 | #define ARM_CPU_PART_CORTEX_A7 0xC070 | ||
53 | |||
54 | #define ARM_CPU_XSCALE_ARCH_MASK 0xe000 | ||
55 | #define ARM_CPU_XSCALE_ARCH_V1 0x2000 | ||
56 | #define ARM_CPU_XSCALE_ARCH_V2 0x4000 | ||
57 | #define ARM_CPU_XSCALE_ARCH_V3 0x6000 | ||
58 | |||
41 | extern unsigned int processor_id; | 59 | extern unsigned int processor_id; |
42 | 60 | ||
43 | #ifdef CONFIG_CPU_CP15 | 61 | #ifdef CONFIG_CPU_CP15 |
@@ -50,6 +68,7 @@ extern unsigned int processor_id; | |||
50 | : "cc"); \ | 68 | : "cc"); \ |
51 | __val; \ | 69 | __val; \ |
52 | }) | 70 | }) |
71 | |||
53 | #define read_cpuid_ext(ext_reg) \ | 72 | #define read_cpuid_ext(ext_reg) \ |
54 | ({ \ | 73 | ({ \ |
55 | unsigned int __val; \ | 74 | unsigned int __val; \ |
@@ -59,29 +78,24 @@ extern unsigned int processor_id; | |||
59 | : "cc"); \ | 78 | : "cc"); \ |
60 | __val; \ | 79 | __val; \ |
61 | }) | 80 | }) |
62 | #else | ||
63 | #define read_cpuid(reg) (processor_id) | ||
64 | #define read_cpuid_ext(reg) 0 | ||
65 | #endif | ||
66 | 81 | ||
67 | #define ARM_CPU_IMP_ARM 0x41 | 82 | #else /* ifdef CONFIG_CPU_CP15 */ |
68 | #define ARM_CPU_IMP_INTEL 0x69 | ||
69 | 83 | ||
70 | #define ARM_CPU_PART_ARM1136 0xB360 | 84 | /* |
71 | #define ARM_CPU_PART_ARM1156 0xB560 | 85 | * read_cpuid and read_cpuid_ext should only ever be called on machines that |
72 | #define ARM_CPU_PART_ARM1176 0xB760 | 86 | * have cp15 so warn on other usages. |
73 | #define ARM_CPU_PART_ARM11MPCORE 0xB020 | 87 | */ |
74 | #define ARM_CPU_PART_CORTEX_A8 0xC080 | 88 | #define read_cpuid(reg) \ |
75 | #define ARM_CPU_PART_CORTEX_A9 0xC090 | 89 | ({ \ |
76 | #define ARM_CPU_PART_CORTEX_A5 0xC050 | 90 | WARN_ON_ONCE(1); \ |
77 | #define ARM_CPU_PART_CORTEX_A15 0xC0F0 | 91 | 0; \ |
78 | #define ARM_CPU_PART_CORTEX_A7 0xC070 | 92 | }) |
79 | 93 | ||
80 | #define ARM_CPU_XSCALE_ARCH_MASK 0xe000 | 94 | #define read_cpuid_ext(reg) read_cpuid(reg) |
81 | #define ARM_CPU_XSCALE_ARCH_V1 0x2000 | 95 | |
82 | #define ARM_CPU_XSCALE_ARCH_V2 0x4000 | 96 | #endif /* ifdef CONFIG_CPU_CP15 / else */ |
83 | #define ARM_CPU_XSCALE_ARCH_V3 0x6000 | ||
84 | 97 | ||
98 | #ifdef CONFIG_CPU_CP15 | ||
85 | /* | 99 | /* |
86 | * The CPU ID never changes at run time, so we might as well tell the | 100 | * The CPU ID never changes at run time, so we might as well tell the |
87 | * compiler that it's constant. Use this function to read the CPU ID | 101 | * compiler that it's constant. Use this function to read the CPU ID |
@@ -92,6 +106,15 @@ static inline unsigned int __attribute_const__ read_cpuid_id(void) | |||
92 | return read_cpuid(CPUID_ID); | 106 | return read_cpuid(CPUID_ID); |
93 | } | 107 | } |
94 | 108 | ||
109 | #else /* ifdef CONFIG_CPU_CP15 */ | ||
110 | |||
111 | static inline unsigned int __attribute_const__ read_cpuid_id(void) | ||
112 | { | ||
113 | return processor_id; | ||
114 | } | ||
115 | |||
116 | #endif /* ifdef CONFIG_CPU_CP15 / else */ | ||
117 | |||
95 | static inline unsigned int __attribute_const__ read_cpuid_implementor(void) | 118 | static inline unsigned int __attribute_const__ read_cpuid_implementor(void) |
96 | { | 119 | { |
97 | return (read_cpuid_id() & 0xFF000000) >> 24; | 120 | return (read_cpuid_id() & 0xFF000000) >> 24; |
diff --git a/arch/arm/include/asm/delay.h b/arch/arm/include/asm/delay.h index ab98fdd083bd..720799fd3a81 100644 --- a/arch/arm/include/asm/delay.h +++ b/arch/arm/include/asm/delay.h | |||
@@ -24,6 +24,7 @@ extern struct arm_delay_ops { | |||
24 | void (*delay)(unsigned long); | 24 | void (*delay)(unsigned long); |
25 | void (*const_udelay)(unsigned long); | 25 | void (*const_udelay)(unsigned long); |
26 | void (*udelay)(unsigned long); | 26 | void (*udelay)(unsigned long); |
27 | bool const_clock; | ||
27 | } arm_delay_ops; | 28 | } arm_delay_ops; |
28 | 29 | ||
29 | #define __delay(n) arm_delay_ops.delay(n) | 30 | #define __delay(n) arm_delay_ops.delay(n) |
diff --git a/arch/arm/include/asm/glue-df.h b/arch/arm/include/asm/glue-df.h index 8cacbcda76da..b6e9f2c108b5 100644 --- a/arch/arm/include/asm/glue-df.h +++ b/arch/arm/include/asm/glue-df.h | |||
@@ -18,12 +18,12 @@ | |||
18 | * ================ | 18 | * ================ |
19 | * | 19 | * |
20 | * We have the following to choose from: | 20 | * We have the following to choose from: |
21 | * arm6 - ARM6 style | ||
22 | * arm7 - ARM7 style | 21 | * arm7 - ARM7 style |
23 | * v4_early - ARMv4 without Thumb early abort handler | 22 | * v4_early - ARMv4 without Thumb early abort handler |
24 | * v4t_late - ARMv4 with Thumb late abort handler | 23 | * v4t_late - ARMv4 with Thumb late abort handler |
25 | * v4t_early - ARMv4 with Thumb early abort handler | 24 | * v4t_early - ARMv4 with Thumb early abort handler |
26 | * v5tej_early - ARMv5 with Thumb and Java early abort handler | 25 | * v5t_early - ARMv5 with Thumb early abort handler |
26 | * v5tj_early - ARMv5 with Thumb and Java early abort handler | ||
27 | * xscale - ARMv5 with Thumb with Xscale extensions | 27 | * xscale - ARMv5 with Thumb with Xscale extensions |
28 | * v6_early - ARMv6 generic early abort handler | 28 | * v6_early - ARMv6 generic early abort handler |
29 | * v7_early - ARMv7 generic early abort handler | 29 | * v7_early - ARMv7 generic early abort handler |
@@ -39,19 +39,19 @@ | |||
39 | # endif | 39 | # endif |
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | #ifdef CONFIG_CPU_ABRT_LV4T | 42 | #ifdef CONFIG_CPU_ABRT_EV4 |
43 | # ifdef CPU_DABORT_HANDLER | 43 | # ifdef CPU_DABORT_HANDLER |
44 | # define MULTI_DABORT 1 | 44 | # define MULTI_DABORT 1 |
45 | # else | 45 | # else |
46 | # define CPU_DABORT_HANDLER v4t_late_abort | 46 | # define CPU_DABORT_HANDLER v4_early_abort |
47 | # endif | 47 | # endif |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | #ifdef CONFIG_CPU_ABRT_EV4 | 50 | #ifdef CONFIG_CPU_ABRT_LV4T |
51 | # ifdef CPU_DABORT_HANDLER | 51 | # ifdef CPU_DABORT_HANDLER |
52 | # define MULTI_DABORT 1 | 52 | # define MULTI_DABORT 1 |
53 | # else | 53 | # else |
54 | # define CPU_DABORT_HANDLER v4_early_abort | 54 | # define CPU_DABORT_HANDLER v4t_late_abort |
55 | # endif | 55 | # endif |
56 | #endif | 56 | #endif |
57 | 57 | ||
@@ -63,19 +63,19 @@ | |||
63 | # endif | 63 | # endif |
64 | #endif | 64 | #endif |
65 | 65 | ||
66 | #ifdef CONFIG_CPU_ABRT_EV5TJ | 66 | #ifdef CONFIG_CPU_ABRT_EV5T |
67 | # ifdef CPU_DABORT_HANDLER | 67 | # ifdef CPU_DABORT_HANDLER |
68 | # define MULTI_DABORT 1 | 68 | # define MULTI_DABORT 1 |
69 | # else | 69 | # else |
70 | # define CPU_DABORT_HANDLER v5tj_early_abort | 70 | # define CPU_DABORT_HANDLER v5t_early_abort |
71 | # endif | 71 | # endif |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | #ifdef CONFIG_CPU_ABRT_EV5T | 74 | #ifdef CONFIG_CPU_ABRT_EV5TJ |
75 | # ifdef CPU_DABORT_HANDLER | 75 | # ifdef CPU_DABORT_HANDLER |
76 | # define MULTI_DABORT 1 | 76 | # define MULTI_DABORT 1 |
77 | # else | 77 | # else |
78 | # define CPU_DABORT_HANDLER v5t_early_abort | 78 | # define CPU_DABORT_HANDLER v5tj_early_abort |
79 | # endif | 79 | # endif |
80 | #endif | 80 | #endif |
81 | 81 | ||
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index f30ac3b55ba9..80d6fc4dbe4a 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
@@ -247,7 +247,8 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | |||
247 | 247 | ||
248 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 248 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
249 | { | 249 | { |
250 | const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER | L_PTE_NONE; | 250 | const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER | |
251 | L_PTE_NONE | L_PTE_VALID; | ||
251 | pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); | 252 | pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); |
252 | return pte; | 253 | return pte; |
253 | } | 254 | } |