diff options
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/Kconfig | 1 | ||||
-rw-r--r-- | arch/sh/Kconfig.cpu | 3 | ||||
-rw-r--r-- | arch/sh/kernel/cpu/sh4/probe.c | 61 |
3 files changed, 15 insertions, 50 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index c815975b8d75..e9392aa8c561 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -174,7 +174,6 @@ config CPU_SH4 | |||
174 | bool | 174 | bool |
175 | select CPU_HAS_INTEVT | 175 | select CPU_HAS_INTEVT |
176 | select CPU_HAS_SR_RB | 176 | select CPU_HAS_SR_RB |
177 | select CPU_HAS_PTEA if !CPU_SH4A || CPU_SHX2 | ||
178 | select CPU_HAS_FPU if !CPU_SH4AL_DSP | 177 | select CPU_HAS_FPU if !CPU_SH4AL_DSP |
179 | select SYS_SUPPORTS_TMU | 178 | select SYS_SUPPORTS_TMU |
180 | 179 | ||
diff --git a/arch/sh/Kconfig.cpu b/arch/sh/Kconfig.cpu index 9eb1712372d8..cd6e3ea598d5 100644 --- a/arch/sh/Kconfig.cpu +++ b/arch/sh/Kconfig.cpu | |||
@@ -96,9 +96,6 @@ config CPU_HAS_SR_RB | |||
96 | See <file:Documentation/sh/register-banks.txt> for further | 96 | See <file:Documentation/sh/register-banks.txt> for further |
97 | information on SR.RB and register banking in the kernel in general. | 97 | information on SR.RB and register banking in the kernel in general. |
98 | 98 | ||
99 | config CPU_HAS_PTEA | ||
100 | bool | ||
101 | |||
102 | config CPU_HAS_PTEAEX | 99 | config CPU_HAS_PTEAEX |
103 | bool | 100 | bool |
104 | 101 | ||
diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c index 28a2f0db01db..6c78d0a9c857 100644 --- a/arch/sh/kernel/cpu/sh4/probe.c +++ b/arch/sh/kernel/cpu/sh4/probe.c | |||
@@ -60,12 +60,18 @@ int __init detect_cpu_and_cache_system(void) | |||
60 | if ((cvr & 0x10000000) == 0) | 60 | if ((cvr & 0x10000000) == 0) |
61 | boot_cpu_data.flags |= CPU_HAS_DSP; | 61 | boot_cpu_data.flags |= CPU_HAS_DSP; |
62 | 62 | ||
63 | boot_cpu_data.flags |= CPU_HAS_LLSC; | 63 | boot_cpu_data.flags |= CPU_HAS_LLSC | CPU_HAS_PERF_COUNTER; |
64 | boot_cpu_data.cut_major = pvr & 0x7f; | 64 | boot_cpu_data.cut_major = pvr & 0x7f; |
65 | |||
66 | boot_cpu_data.icache.ways = 4; | ||
67 | boot_cpu_data.dcache.ways = 4; | ||
68 | } else { | ||
69 | /* And some SH-4 defaults.. */ | ||
70 | boot_cpu_data.flags |= CPU_HAS_PTEA; | ||
65 | } | 71 | } |
66 | 72 | ||
67 | /* FPU detection works for everyone */ | 73 | /* FPU detection works for everyone */ |
68 | if ((cvr & 0x20000000) == 1) | 74 | if ((cvr & 0x20000000)) |
69 | boot_cpu_data.flags |= CPU_HAS_FPU; | 75 | boot_cpu_data.flags |= CPU_HAS_FPU; |
70 | 76 | ||
71 | /* Mask off the upper chip ID */ | 77 | /* Mask off the upper chip ID */ |
@@ -78,25 +84,20 @@ int __init detect_cpu_and_cache_system(void) | |||
78 | switch (pvr) { | 84 | switch (pvr) { |
79 | case 0x205: | 85 | case 0x205: |
80 | boot_cpu_data.type = CPU_SH7750; | 86 | boot_cpu_data.type = CPU_SH7750; |
81 | boot_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU | | 87 | boot_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | |
82 | CPU_HAS_PERF_COUNTER; | 88 | CPU_HAS_PERF_COUNTER; |
83 | break; | 89 | break; |
84 | case 0x206: | 90 | case 0x206: |
85 | boot_cpu_data.type = CPU_SH7750S; | 91 | boot_cpu_data.type = CPU_SH7750S; |
86 | boot_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU | | 92 | boot_cpu_data.flags |= CPU_HAS_P2_FLUSH_BUG | |
87 | CPU_HAS_PERF_COUNTER; | 93 | CPU_HAS_PERF_COUNTER; |
88 | break; | 94 | break; |
89 | case 0x1100: | 95 | case 0x1100: |
90 | boot_cpu_data.type = CPU_SH7751; | 96 | boot_cpu_data.type = CPU_SH7751; |
91 | boot_cpu_data.flags |= CPU_HAS_FPU; | ||
92 | break; | 97 | break; |
93 | case 0x2001: | 98 | case 0x2001: |
94 | case 0x2004: | 99 | case 0x2004: |
95 | boot_cpu_data.type = CPU_SH7770; | 100 | boot_cpu_data.type = CPU_SH7770; |
96 | boot_cpu_data.icache.ways = 4; | ||
97 | boot_cpu_data.dcache.ways = 4; | ||
98 | |||
99 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_LLSC; | ||
100 | break; | 101 | break; |
101 | case 0x2006: | 102 | case 0x2006: |
102 | case 0x200A: | 103 | case 0x200A: |
@@ -107,45 +108,26 @@ int __init detect_cpu_and_cache_system(void) | |||
107 | else | 108 | else |
108 | boot_cpu_data.type = CPU_SH7780; | 109 | boot_cpu_data.type = CPU_SH7780; |
109 | 110 | ||
110 | boot_cpu_data.icache.ways = 4; | ||
111 | boot_cpu_data.dcache.ways = 4; | ||
112 | |||
113 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER | | ||
114 | CPU_HAS_LLSC; | ||
115 | break; | 111 | break; |
116 | case 0x3000: | 112 | case 0x3000: |
117 | case 0x3003: | 113 | case 0x3003: |
118 | case 0x3009: | 114 | case 0x3009: |
119 | boot_cpu_data.type = CPU_SH7343; | 115 | boot_cpu_data.type = CPU_SH7343; |
120 | boot_cpu_data.icache.ways = 4; | ||
121 | boot_cpu_data.dcache.ways = 4; | ||
122 | boot_cpu_data.flags |= CPU_HAS_LLSC; | ||
123 | break; | 116 | break; |
124 | case 0x3004: | 117 | case 0x3004: |
125 | case 0x3007: | 118 | case 0x3007: |
126 | boot_cpu_data.type = CPU_SH7785; | 119 | boot_cpu_data.type = CPU_SH7785; |
127 | boot_cpu_data.icache.ways = 4; | ||
128 | boot_cpu_data.dcache.ways = 4; | ||
129 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER | | ||
130 | CPU_HAS_LLSC; | ||
131 | break; | 120 | break; |
132 | case 0x4004: | 121 | case 0x4004: |
133 | boot_cpu_data.type = CPU_SH7786; | 122 | boot_cpu_data.type = CPU_SH7786; |
134 | boot_cpu_data.icache.ways = 4; | 123 | boot_cpu_data.flags |= CPU_HAS_PTEAEX | CPU_HAS_L2_CACHE; |
135 | boot_cpu_data.dcache.ways = 4; | ||
136 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER | | ||
137 | CPU_HAS_LLSC | CPU_HAS_PTEAEX | CPU_HAS_L2_CACHE; | ||
138 | break; | 124 | break; |
139 | case 0x3008: | 125 | case 0x3008: |
140 | boot_cpu_data.icache.ways = 4; | ||
141 | boot_cpu_data.dcache.ways = 4; | ||
142 | boot_cpu_data.flags |= CPU_HAS_LLSC; | ||
143 | |||
144 | switch (prr) { | 126 | switch (prr) { |
145 | case 0x50: | 127 | case 0x50: |
146 | case 0x51: | 128 | case 0x51: |
147 | boot_cpu_data.type = CPU_SH7723; | 129 | boot_cpu_data.type = CPU_SH7723; |
148 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_L2_CACHE; | 130 | boot_cpu_data.flags |= CPU_HAS_L2_CACHE; |
149 | break; | 131 | break; |
150 | case 0x70: | 132 | case 0x70: |
151 | boot_cpu_data.type = CPU_SH7366; | 133 | boot_cpu_data.type = CPU_SH7366; |
@@ -158,17 +140,11 @@ int __init detect_cpu_and_cache_system(void) | |||
158 | break; | 140 | break; |
159 | case 0x300b: | 141 | case 0x300b: |
160 | boot_cpu_data.type = CPU_SH7724; | 142 | boot_cpu_data.type = CPU_SH7724; |
161 | boot_cpu_data.icache.ways = 4; | 143 | boot_cpu_data.flags |= CPU_HAS_L2_CACHE; |
162 | boot_cpu_data.dcache.ways = 4; | ||
163 | boot_cpu_data.flags |= CPU_HAS_LLSC | CPU_HAS_FPU | CPU_HAS_L2_CACHE; | ||
164 | break; | 144 | break; |
165 | case 0x4000: /* 1st cut */ | 145 | case 0x4000: /* 1st cut */ |
166 | case 0x4001: /* 2nd cut */ | 146 | case 0x4001: /* 2nd cut */ |
167 | boot_cpu_data.type = CPU_SHX3; | 147 | boot_cpu_data.type = CPU_SHX3; |
168 | boot_cpu_data.icache.ways = 4; | ||
169 | boot_cpu_data.dcache.ways = 4; | ||
170 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER | | ||
171 | CPU_HAS_LLSC; | ||
172 | break; | 148 | break; |
173 | case 0x700: | 149 | case 0x700: |
174 | boot_cpu_data.type = CPU_SH4_501; | 150 | boot_cpu_data.type = CPU_SH4_501; |
@@ -179,7 +155,6 @@ int __init detect_cpu_and_cache_system(void) | |||
179 | boot_cpu_data.type = CPU_SH4_202; | 155 | boot_cpu_data.type = CPU_SH4_202; |
180 | boot_cpu_data.icache.ways = 2; | 156 | boot_cpu_data.icache.ways = 2; |
181 | boot_cpu_data.dcache.ways = 2; | 157 | boot_cpu_data.dcache.ways = 2; |
182 | boot_cpu_data.flags |= CPU_HAS_FPU; | ||
183 | break; | 158 | break; |
184 | case 0x500 ... 0x501: | 159 | case 0x500 ... 0x501: |
185 | switch (prr) { | 160 | switch (prr) { |
@@ -197,18 +172,12 @@ int __init detect_cpu_and_cache_system(void) | |||
197 | boot_cpu_data.icache.ways = 2; | 172 | boot_cpu_data.icache.ways = 2; |
198 | boot_cpu_data.dcache.ways = 2; | 173 | boot_cpu_data.dcache.ways = 2; |
199 | 174 | ||
200 | boot_cpu_data.flags |= CPU_HAS_FPU; | ||
201 | |||
202 | break; | 175 | break; |
203 | default: | 176 | default: |
204 | boot_cpu_data.type = CPU_SH_NONE; | 177 | boot_cpu_data.type = CPU_SH_NONE; |
205 | break; | 178 | break; |
206 | } | 179 | } |
207 | 180 | ||
208 | #ifdef CONFIG_CPU_HAS_PTEA | ||
209 | boot_cpu_data.flags |= CPU_HAS_PTEA; | ||
210 | #endif | ||
211 | |||
212 | /* | 181 | /* |
213 | * On anything that's not a direct-mapped cache, look to the CVR | 182 | * On anything that's not a direct-mapped cache, look to the CVR |
214 | * for I/D-cache specifics. | 183 | * for I/D-cache specifics. |