aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/id.c
diff options
context:
space:
mode:
authorSanjeev Premi <premi@ti.com>2009-11-22 13:10:53 -0500
committerTony Lindgren <tony@atomide.com>2009-11-22 13:24:32 -0500
commit8384ce071365244332ea05c81112bfffcf48be87 (patch)
tree5a6f076c6cef8d526b4429e17a64fd73dd63132c /arch/arm/mach-omap2/id.c
parent45f780a06153544ab84fd1da3a8b28c07f61da1d (diff)
omap3: Runtime detection of Si features
The OMAP35x family has multiple variants differing in the HW features. This patch detects these features at runtime and prints information during the boot. Since most of the code seemed repetitive, macros have been used for readability. Signed-off-by: Sanjeev Premi <premi@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap2/id.c')
-rw-r--r--arch/arm/mach-omap2/id.c52
1 files changed, 49 insertions, 3 deletions
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index d28e6fec7e47..d7ac8d547141 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -28,6 +28,7 @@
28static struct omap_chip_id omap_chip; 28static struct omap_chip_id omap_chip;
29static unsigned int omap_revision; 29static unsigned int omap_revision;
30 30
31u32 omap3_features;
31 32
32unsigned int omap_rev(void) 33unsigned int omap_rev(void)
33{ 34{
@@ -155,7 +156,33 @@ void __init omap24xx_check_revision(void)
155 pr_info("\n"); 156 pr_info("\n");
156} 157}
157 158
158void __init omap34xx_check_revision(void) 159#define OMAP3_CHECK_FEATURE(status,feat) \
160 if (((status & OMAP3_ ##feat## _MASK) \
161 >> OMAP3_ ##feat## _SHIFT) != FEAT_ ##feat## _NONE) { \
162 omap3_features |= OMAP3_HAS_ ##feat; \
163 }
164
165void __init omap3_check_features(void)
166{
167 u32 status;
168
169 omap3_features = 0;
170
171 status = omap_ctrl_readl(OMAP3_CONTROL_OMAP_STATUS);
172
173 OMAP3_CHECK_FEATURE(status, L2CACHE);
174 OMAP3_CHECK_FEATURE(status, IVA);
175 OMAP3_CHECK_FEATURE(status, SGX);
176 OMAP3_CHECK_FEATURE(status, NEON);
177 OMAP3_CHECK_FEATURE(status, ISP);
178
179 /*
180 * TODO: Get additional info (where applicable)
181 * e.g. Size of L2 cache.
182 */
183}
184
185void __init omap3_check_revision(void)
159{ 186{
160 u32 cpuid, idcode; 187 u32 cpuid, idcode;
161 u16 hawkeye; 188 u16 hawkeye;
@@ -212,6 +239,22 @@ out:
212 pr_info("OMAP%04x %s\n", omap_rev() >> 16, rev_name); 239 pr_info("OMAP%04x %s\n", omap_rev() >> 16, rev_name);
213} 240}
214 241
242#define OMAP3_SHOW_FEATURE(feat) \
243 if (omap3_has_ ##feat()) { \
244 pr_info (" - "#feat" : Y"); \
245 } else { \
246 pr_info (" - "#feat" : N"); \
247 }
248
249void __init omap3_cpuinfo(void)
250{
251 OMAP3_SHOW_FEATURE(l2cache);
252 OMAP3_SHOW_FEATURE(iva);
253 OMAP3_SHOW_FEATURE(sgx);
254 OMAP3_SHOW_FEATURE(neon);
255 OMAP3_SHOW_FEATURE(isp);
256}
257
215/* 258/*
216 * Try to detect the exact revision of the omap we're running on 259 * Try to detect the exact revision of the omap we're running on
217 */ 260 */
@@ -223,8 +266,11 @@ void __init omap2_check_revision(void)
223 */ 266 */
224 if (cpu_is_omap24xx()) 267 if (cpu_is_omap24xx())
225 omap24xx_check_revision(); 268 omap24xx_check_revision();
226 else if (cpu_is_omap34xx()) 269 else if (cpu_is_omap34xx()) {
227 omap34xx_check_revision(); 270 omap3_check_features();
271 omap3_check_revision();
272 omap3_cpuinfo();
273 }
228 else if (cpu_is_omap44xx()) { 274 else if (cpu_is_omap44xx()) {
229 printk(KERN_INFO "FIXME: CPU revision = OMAP4430\n"); 275 printk(KERN_INFO "FIXME: CPU revision = OMAP4430\n");
230 return; 276 return;