blob: 2e1789001dfe9a2807aebfd6b0b2e9377e153438 [file] [log] [blame]
Russell Kinga09e64f2008-08-05 16:14:15 +01001/*
2 * arch/arm/plat-omap/include/mach/cpu.h
3 *
4 * OMAP cpu type detection
5 *
6 * Copyright (C) 2004, 2008 Nokia Corporation
7 *
Santosh Shilimkar44169072009-05-28 14:16:04 -07008 * Copyright (C) 2009 Texas Instruments.
9 *
Russell Kinga09e64f2008-08-05 16:14:15 +010010 * Written by Tony Lindgren <tony.lindgren@nokia.com>
11 *
Santosh Shilimkar44169072009-05-28 14:16:04 -070012 * Added OMAP4 specific defines - Santosh Shilimkar<santosh.shilimkar@ti.com>
13 *
Russell Kinga09e64f2008-08-05 16:14:15 +010014 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 *
28 */
29
30#ifndef __ASM_ARCH_OMAP_CPU_H
31#define __ASM_ARCH_OMAP_CPU_H
32
Sanjeev Premi8384ce02009-11-22 10:10:53 -080033#include <linux/bitops.h>
34
Kevin Hilman8e25ad92009-06-23 13:30:23 +030035/*
36 * Omap device type i.e. EMU/HS/TST/GP/BAD
37 */
38#define OMAP2_DEVICE_TYPE_TEST 0
39#define OMAP2_DEVICE_TYPE_EMU 1
40#define OMAP2_DEVICE_TYPE_SEC 2
41#define OMAP2_DEVICE_TYPE_GP 3
42#define OMAP2_DEVICE_TYPE_BAD 4
43
44int omap_type(void);
45
Russell Kinga09e64f2008-08-05 16:14:15 +010046struct omap_chip_id {
47 u8 oc;
Tony Lindgrena8823142008-12-10 17:36:30 -080048 u8 type;
Russell Kinga09e64f2008-08-05 16:14:15 +010049};
50
51#define OMAP_CHIP_INIT(x) { .oc = x }
52
Tony Lindgrena8823142008-12-10 17:36:30 -080053/*
Lauri Leukkunen84a34342008-12-10 17:36:31 -080054 * omap_rev bits:
Tony Lindgrena8823142008-12-10 17:36:30 -080055 * CPU id bits (0730, 1510, 1710, 2422...) [31:16]
56 * CPU revision (See _REV_ defined in cpu.h) [15:08]
57 * CPU class bits (15xx, 16xx, 24xx, 34xx...) [07:00]
58 */
Lauri Leukkunen84a34342008-12-10 17:36:31 -080059unsigned int omap_rev(void);
Russell Kinga09e64f2008-08-05 16:14:15 +010060
Russell Kinga09e64f2008-08-05 16:14:15 +010061/*
Sanjeev Premi048f4bd2009-11-22 10:10:54 -080062 * Define CPU revision bits
63 *
64 * Verbose meaning of the revision bits may be different for a silicon
65 * family. This difference can be handled separately.
66 */
67#define OMAP_REVBITS_00 0x00
68#define OMAP_REVBITS_10 0x10
69#define OMAP_REVBITS_20 0x20
70#define OMAP_REVBITS_30 0x30
71#define OMAP_REVBITS_40 0x40
72
73/*
74 * Get the CPU revision for OMAP devices
75 */
76#define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff)
77
78/*
Russell Kinga09e64f2008-08-05 16:14:15 +010079 * Test if multicore OMAP support is needed
80 */
81#undef MULTI_OMAP1
82#undef MULTI_OMAP2
83#undef OMAP_NAME
84
85#ifdef CONFIG_ARCH_OMAP730
86# ifdef OMAP_NAME
87# undef MULTI_OMAP1
88# define MULTI_OMAP1
89# else
90# define OMAP_NAME omap730
91# endif
92#endif
Zebediah C. McClureae302f42009-03-23 18:07:39 -070093#ifdef CONFIG_ARCH_OMAP850
94# ifdef OMAP_NAME
95# undef MULTI_OMAP1
96# define MULTI_OMAP1
97# else
98# define OMAP_NAME omap850
99# endif
100#endif
Russell Kinga09e64f2008-08-05 16:14:15 +0100101#ifdef CONFIG_ARCH_OMAP15XX
102# ifdef OMAP_NAME
103# undef MULTI_OMAP1
104# define MULTI_OMAP1
105# else
106# define OMAP_NAME omap1510
107# endif
108#endif
109#ifdef CONFIG_ARCH_OMAP16XX
110# ifdef OMAP_NAME
111# undef MULTI_OMAP1
112# define MULTI_OMAP1
113# else
114# define OMAP_NAME omap16xx
115# endif
116#endif
117#if (defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX))
118# if (defined(OMAP_NAME) || defined(MULTI_OMAP1))
119# error "OMAP1 and OMAP2 can't be selected at the same time"
120# endif
121#endif
122#ifdef CONFIG_ARCH_OMAP2420
123# ifdef OMAP_NAME
124# undef MULTI_OMAP2
125# define MULTI_OMAP2
126# else
127# define OMAP_NAME omap2420
128# endif
129#endif
130#ifdef CONFIG_ARCH_OMAP2430
131# ifdef OMAP_NAME
132# undef MULTI_OMAP2
133# define MULTI_OMAP2
134# else
135# define OMAP_NAME omap2430
136# endif
137#endif
138#ifdef CONFIG_ARCH_OMAP3430
139# ifdef OMAP_NAME
140# undef MULTI_OMAP2
141# define MULTI_OMAP2
142# else
143# define OMAP_NAME omap3430
144# endif
145#endif
146
147/*
148 * Macros to group OMAP into cpu classes.
149 * These can be used in most places.
Zebediah C. McClureae302f42009-03-23 18:07:39 -0700150 * cpu_is_omap7xx(): True for OMAP730, OMAP850
Russell Kinga09e64f2008-08-05 16:14:15 +0100151 * cpu_is_omap15xx(): True for OMAP1510, OMAP5910 and OMAP310
152 * cpu_is_omap16xx(): True for OMAP1610, OMAP5912 and OMAP1710
153 * cpu_is_omap24xx(): True for OMAP2420, OMAP2422, OMAP2423, OMAP2430
154 * cpu_is_omap242x(): True for OMAP2420, OMAP2422, OMAP2423
155 * cpu_is_omap243x(): True for OMAP2430
156 * cpu_is_omap343x(): True for OMAP3430
157 */
Lauri Leukkunen84a34342008-12-10 17:36:31 -0800158#define GET_OMAP_CLASS (omap_rev() & 0xff)
Russell Kinga09e64f2008-08-05 16:14:15 +0100159
160#define IS_OMAP_CLASS(class, id) \
161static inline int is_omap ##class (void) \
162{ \
163 return (GET_OMAP_CLASS == (id)) ? 1 : 0; \
164}
165
Lauri Leukkunen84a34342008-12-10 17:36:31 -0800166#define GET_OMAP_SUBCLASS ((omap_rev() >> 20) & 0x0fff)
Russell Kinga09e64f2008-08-05 16:14:15 +0100167
168#define IS_OMAP_SUBCLASS(subclass, id) \
169static inline int is_omap ##subclass (void) \
170{ \
171 return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0; \
172}
173
174IS_OMAP_CLASS(7xx, 0x07)
175IS_OMAP_CLASS(15xx, 0x15)
176IS_OMAP_CLASS(16xx, 0x16)
177IS_OMAP_CLASS(24xx, 0x24)
178IS_OMAP_CLASS(34xx, 0x34)
179
180IS_OMAP_SUBCLASS(242x, 0x242)
181IS_OMAP_SUBCLASS(243x, 0x243)
182IS_OMAP_SUBCLASS(343x, 0x343)
Nishanth Menon2456a102009-11-22 10:10:56 -0800183IS_OMAP_SUBCLASS(363x, 0x363)
Russell Kinga09e64f2008-08-05 16:14:15 +0100184
185#define cpu_is_omap7xx() 0
186#define cpu_is_omap15xx() 0
187#define cpu_is_omap16xx() 0
188#define cpu_is_omap24xx() 0
189#define cpu_is_omap242x() 0
190#define cpu_is_omap243x() 0
191#define cpu_is_omap34xx() 0
192#define cpu_is_omap343x() 0
Santosh Shilimkar44169072009-05-28 14:16:04 -0700193#define cpu_is_omap44xx() 0
194#define cpu_is_omap443x() 0
Russell Kinga09e64f2008-08-05 16:14:15 +0100195
196#if defined(MULTI_OMAP1)
197# if defined(CONFIG_ARCH_OMAP730)
198# undef cpu_is_omap7xx
199# define cpu_is_omap7xx() is_omap7xx()
200# endif
Zebediah C. McClureae302f42009-03-23 18:07:39 -0700201# if defined(CONFIG_ARCH_OMAP850)
202# undef cpu_is_omap7xx
203# define cpu_is_omap7xx() is_omap7xx()
204# endif
Russell Kinga09e64f2008-08-05 16:14:15 +0100205# if defined(CONFIG_ARCH_OMAP15XX)
206# undef cpu_is_omap15xx
207# define cpu_is_omap15xx() is_omap15xx()
208# endif
209# if defined(CONFIG_ARCH_OMAP16XX)
210# undef cpu_is_omap16xx
211# define cpu_is_omap16xx() is_omap16xx()
212# endif
213#else
214# if defined(CONFIG_ARCH_OMAP730)
215# undef cpu_is_omap7xx
216# define cpu_is_omap7xx() 1
217# endif
Zebediah C. McClureae302f42009-03-23 18:07:39 -0700218# if defined(CONFIG_ARCH_OMAP850)
219# undef cpu_is_omap7xx
220# define cpu_is_omap7xx() 1
221# endif
Russell Kinga09e64f2008-08-05 16:14:15 +0100222# if defined(CONFIG_ARCH_OMAP15XX)
223# undef cpu_is_omap15xx
224# define cpu_is_omap15xx() 1
225# endif
226# if defined(CONFIG_ARCH_OMAP16XX)
227# undef cpu_is_omap16xx
228# define cpu_is_omap16xx() 1
229# endif
230#endif
231
232#if defined(MULTI_OMAP2)
233# if defined(CONFIG_ARCH_OMAP24XX)
234# undef cpu_is_omap24xx
235# undef cpu_is_omap242x
236# undef cpu_is_omap243x
237# define cpu_is_omap24xx() is_omap24xx()
238# define cpu_is_omap242x() is_omap242x()
239# define cpu_is_omap243x() is_omap243x()
240# endif
241# if defined(CONFIG_ARCH_OMAP34XX)
242# undef cpu_is_omap34xx
243# undef cpu_is_omap343x
244# define cpu_is_omap34xx() is_omap34xx()
245# define cpu_is_omap343x() is_omap343x()
246# endif
247#else
248# if defined(CONFIG_ARCH_OMAP24XX)
249# undef cpu_is_omap24xx
250# define cpu_is_omap24xx() 1
251# endif
252# if defined(CONFIG_ARCH_OMAP2420)
253# undef cpu_is_omap242x
254# define cpu_is_omap242x() 1
255# endif
256# if defined(CONFIG_ARCH_OMAP2430)
257# undef cpu_is_omap243x
258# define cpu_is_omap243x() 1
259# endif
260# if defined(CONFIG_ARCH_OMAP34XX)
261# undef cpu_is_omap34xx
262# define cpu_is_omap34xx() 1
263# endif
264# if defined(CONFIG_ARCH_OMAP3430)
265# undef cpu_is_omap343x
266# define cpu_is_omap343x() 1
267# endif
268#endif
269
270/*
271 * Macros to detect individual cpu types.
272 * These are only rarely needed.
273 * cpu_is_omap330(): True for OMAP330
274 * cpu_is_omap730(): True for OMAP730
Zebediah C. McClureae302f42009-03-23 18:07:39 -0700275 * cpu_is_omap850(): True for OMAP850
Russell Kinga09e64f2008-08-05 16:14:15 +0100276 * cpu_is_omap1510(): True for OMAP1510
277 * cpu_is_omap1610(): True for OMAP1610
278 * cpu_is_omap1611(): True for OMAP1611
279 * cpu_is_omap5912(): True for OMAP5912
280 * cpu_is_omap1621(): True for OMAP1621
281 * cpu_is_omap1710(): True for OMAP1710
282 * cpu_is_omap2420(): True for OMAP2420
283 * cpu_is_omap2422(): True for OMAP2422
284 * cpu_is_omap2423(): True for OMAP2423
285 * cpu_is_omap2430(): True for OMAP2430
286 * cpu_is_omap3430(): True for OMAP3430
Sanjeev Premi4cac6012009-11-22 10:10:58 -0800287 * cpu_is_omap3505(): True for OMAP3505
288 * cpu_is_omap3517(): True for OMAP3517
Russell Kinga09e64f2008-08-05 16:14:15 +0100289 */
Lauri Leukkunen84a34342008-12-10 17:36:31 -0800290#define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff)
Russell Kinga09e64f2008-08-05 16:14:15 +0100291
292#define IS_OMAP_TYPE(type, id) \
293static inline int is_omap ##type (void) \
294{ \
295 return (GET_OMAP_TYPE == (id)) ? 1 : 0; \
296}
297
298IS_OMAP_TYPE(310, 0x0310)
299IS_OMAP_TYPE(730, 0x0730)
Zebediah C. McClureae302f42009-03-23 18:07:39 -0700300IS_OMAP_TYPE(850, 0x0850)
Russell Kinga09e64f2008-08-05 16:14:15 +0100301IS_OMAP_TYPE(1510, 0x1510)
302IS_OMAP_TYPE(1610, 0x1610)
303IS_OMAP_TYPE(1611, 0x1611)
304IS_OMAP_TYPE(5912, 0x1611)
305IS_OMAP_TYPE(1621, 0x1621)
306IS_OMAP_TYPE(1710, 0x1710)
307IS_OMAP_TYPE(2420, 0x2420)
308IS_OMAP_TYPE(2422, 0x2422)
309IS_OMAP_TYPE(2423, 0x2423)
310IS_OMAP_TYPE(2430, 0x2430)
311IS_OMAP_TYPE(3430, 0x3430)
Sanjeev Premi4cac6012009-11-22 10:10:58 -0800312IS_OMAP_TYPE(3505, 0x3505)
313IS_OMAP_TYPE(3517, 0x3517)
Russell Kinga09e64f2008-08-05 16:14:15 +0100314
315#define cpu_is_omap310() 0
316#define cpu_is_omap730() 0
Zebediah C. McClureae302f42009-03-23 18:07:39 -0700317#define cpu_is_omap850() 0
Russell Kinga09e64f2008-08-05 16:14:15 +0100318#define cpu_is_omap1510() 0
319#define cpu_is_omap1610() 0
320#define cpu_is_omap5912() 0
321#define cpu_is_omap1611() 0
322#define cpu_is_omap1621() 0
323#define cpu_is_omap1710() 0
324#define cpu_is_omap2420() 0
325#define cpu_is_omap2422() 0
326#define cpu_is_omap2423() 0
327#define cpu_is_omap2430() 0
Sanjeev Premi048f4bd2009-11-22 10:10:54 -0800328#define cpu_is_omap3503() 0
329#define cpu_is_omap3515() 0
330#define cpu_is_omap3525() 0
331#define cpu_is_omap3530() 0
Sanjeev Premi4cac6012009-11-22 10:10:58 -0800332#define cpu_is_omap3505() 0
333#define cpu_is_omap3517() 0
Russell Kinga09e64f2008-08-05 16:14:15 +0100334#define cpu_is_omap3430() 0
Nishanth Menon2456a102009-11-22 10:10:56 -0800335#define cpu_is_omap3630() 0
Russell Kinga09e64f2008-08-05 16:14:15 +0100336
Russell Kinga09e64f2008-08-05 16:14:15 +0100337/*
338 * Whether we have MULTI_OMAP1 or not, we still need to distinguish
Tony Lindgrena9f82d12009-10-05 13:31:43 -0700339 * between 730 vs 850, 330 vs. 1510 and 1611B/5912 vs. 1710.
Russell Kinga09e64f2008-08-05 16:14:15 +0100340 */
Tony Lindgrena9f82d12009-10-05 13:31:43 -0700341
342#if defined(CONFIG_ARCH_OMAP730)
343# undef cpu_is_omap730
344# define cpu_is_omap730() is_omap730()
345#endif
346
347#if defined(CONFIG_ARCH_OMAP850)
348# undef cpu_is_omap850
349# define cpu_is_omap850() is_omap850()
350#endif
351
Russell Kinga09e64f2008-08-05 16:14:15 +0100352#if defined(CONFIG_ARCH_OMAP15XX)
353# undef cpu_is_omap310
354# undef cpu_is_omap1510
355# define cpu_is_omap310() is_omap310()
356# define cpu_is_omap1510() is_omap1510()
357#endif
358
359#if defined(CONFIG_ARCH_OMAP16XX)
360# undef cpu_is_omap1610
361# undef cpu_is_omap1611
362# undef cpu_is_omap5912
363# undef cpu_is_omap1621
364# undef cpu_is_omap1710
365# define cpu_is_omap1610() is_omap1610()
366# define cpu_is_omap1611() is_omap1611()
367# define cpu_is_omap5912() is_omap5912()
368# define cpu_is_omap1621() is_omap1621()
369# define cpu_is_omap1710() is_omap1710()
370#endif
371
372#if defined(CONFIG_ARCH_OMAP24XX)
373# undef cpu_is_omap2420
374# undef cpu_is_omap2422
375# undef cpu_is_omap2423
376# undef cpu_is_omap2430
377# define cpu_is_omap2420() is_omap2420()
378# define cpu_is_omap2422() is_omap2422()
379# define cpu_is_omap2423() is_omap2423()
380# define cpu_is_omap2430() is_omap2430()
381#endif
382
383#if defined(CONFIG_ARCH_OMAP34XX)
384# undef cpu_is_omap3430
Sanjeev Premi048f4bd2009-11-22 10:10:54 -0800385# undef cpu_is_omap3503
386# undef cpu_is_omap3515
387# undef cpu_is_omap3525
388# undef cpu_is_omap3530
Sanjeev Premi4cac6012009-11-22 10:10:58 -0800389# undef cpu_is_omap3505
390# undef cpu_is_omap3517
Russell Kinga09e64f2008-08-05 16:14:15 +0100391# define cpu_is_omap3430() is_omap3430()
Sanjeev Premi048f4bd2009-11-22 10:10:54 -0800392# define cpu_is_omap3503() (cpu_is_omap3430() && \
393 (!omap3_has_iva()) && \
394 (!omap3_has_sgx()))
395# define cpu_is_omap3515() (cpu_is_omap3430() && \
396 (omap3_has_iva()) && \
397 (!omap3_has_sgx()))
398# define cpu_is_omap3525() (cpu_is_omap3430() && \
399 (omap3_has_sgx()) && \
400 (!omap3_has_iva()))
401# define cpu_is_omap3530() (cpu_is_omap3430())
Sanjeev Premi4cac6012009-11-22 10:10:58 -0800402# define cpu_is_omap3505() is_omap3505()
403# define cpu_is_omap3517() is_omap3517()
Nishanth Menon2456a102009-11-22 10:10:56 -0800404# undef cpu_is_omap3630
405# define cpu_is_omap3630() is_omap363x()
Russell Kinga09e64f2008-08-05 16:14:15 +0100406#endif
407
Santosh Shilimkar44169072009-05-28 14:16:04 -0700408# if defined(CONFIG_ARCH_OMAP4)
409# undef cpu_is_omap44xx
410# undef cpu_is_omap443x
411# define cpu_is_omap44xx() 1
412# define cpu_is_omap443x() 1
413# endif
414
Russell Kinga09e64f2008-08-05 16:14:15 +0100415/* Macros to detect if we have OMAP1 or OMAP2 */
Zebediah C. McClureae302f42009-03-23 18:07:39 -0700416#define cpu_class_is_omap1() (cpu_is_omap7xx() || cpu_is_omap15xx() || \
Russell Kinga09e64f2008-08-05 16:14:15 +0100417 cpu_is_omap16xx())
Santosh Shilimkar44169072009-05-28 14:16:04 -0700418#define cpu_class_is_omap2() (cpu_is_omap24xx() || cpu_is_omap34xx() || \
419 cpu_is_omap44xx())
Russell Kinga09e64f2008-08-05 16:14:15 +0100420
Tony Lindgrena8823142008-12-10 17:36:30 -0800421/* Various silicon revisions for omap2 */
422#define OMAP242X_CLASS 0x24200024
423#define OMAP2420_REV_ES1_0 0x24200024
424#define OMAP2420_REV_ES2_0 0x24201024
Russell Kinga09e64f2008-08-05 16:14:15 +0100425
Tony Lindgrena8823142008-12-10 17:36:30 -0800426#define OMAP243X_CLASS 0x24300024
427#define OMAP2430_REV_ES1_0 0x24300024
Russell Kinga09e64f2008-08-05 16:14:15 +0100428
Tony Lindgrena8823142008-12-10 17:36:30 -0800429#define OMAP343X_CLASS 0x34300034
430#define OMAP3430_REV_ES1_0 0x34300034
431#define OMAP3430_REV_ES2_0 0x34301034
432#define OMAP3430_REV_ES2_1 0x34302034
433#define OMAP3430_REV_ES3_0 0x34303034
Tony Lindgren187e6882009-01-29 08:57:16 -0800434#define OMAP3430_REV_ES3_1 0x34304034
Russell Kinga09e64f2008-08-05 16:14:15 +0100435
Nishanth Menon2456a102009-11-22 10:10:56 -0800436#define OMAP3630_REV_ES1_0 0x36300034
437
Sanjeev Premi048f4bd2009-11-22 10:10:54 -0800438#define OMAP35XX_CLASS 0x35000034
439#define OMAP3503_REV(v) (OMAP35XX_CLASS | (0x3503 << 16) | (v << 12))
440#define OMAP3515_REV(v) (OMAP35XX_CLASS | (0x3515 << 16) | (v << 12))
441#define OMAP3525_REV(v) (OMAP35XX_CLASS | (0x3525 << 16) | (v << 12))
442#define OMAP3530_REV(v) (OMAP35XX_CLASS | (0x3530 << 16) | (v << 12))
Sanjeev Premi4cac6012009-11-22 10:10:58 -0800443#define OMAP3505_REV(v) (OMAP35XX_CLASS | (0x3505 << 16) | (v << 12))
444#define OMAP3517_REV(v) (OMAP35XX_CLASS | (0x3517 << 16) | (v << 12))
Sanjeev Premi048f4bd2009-11-22 10:10:54 -0800445
Santosh Shilimkar44169072009-05-28 14:16:04 -0700446#define OMAP443X_CLASS 0x44300034
447
Russell Kinga09e64f2008-08-05 16:14:15 +0100448/*
449 * omap_chip bits
450 *
451 * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
452 * valid on all chips of that type. CHIP_IS_OMAP3430ES{1,2} indicates
453 * something that is only valid on that particular ES revision.
454 *
455 * These bits may be ORed together to indicate structures that are
456 * available on multiple chip types.
457 *
458 * To test whether a particular structure matches the current OMAP chip type,
459 * use omap_chip_is().
460 *
461 */
Paul Walmsleyd41ad522009-02-05 20:45:25 -0700462#define CHIP_IS_OMAP2420 (1 << 0)
463#define CHIP_IS_OMAP2430 (1 << 1)
464#define CHIP_IS_OMAP3430 (1 << 2)
465#define CHIP_IS_OMAP3430ES1 (1 << 3)
466#define CHIP_IS_OMAP3430ES2 (1 << 4)
467#define CHIP_IS_OMAP3430ES3_0 (1 << 5)
468#define CHIP_IS_OMAP3430ES3_1 (1 << 6)
vikram panditaf18af0a2009-11-22 10:10:57 -0800469#define CHIP_IS_OMAP3630ES1 (1 << 7)
Russell Kinga09e64f2008-08-05 16:14:15 +0100470
Paul Walmsleyd41ad522009-02-05 20:45:25 -0700471#define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430)
472
473/*
474 * "GE" here represents "greater than or equal to" in terms of ES
475 * levels. So CHIP_GE_OMAP3430ES2 is intended to match all OMAP3430
476 * chips at ES2 and beyond, but not, for example, any OMAP lines after
477 * OMAP3.
478 */
479#define CHIP_GE_OMAP3430ES2 (CHIP_IS_OMAP3430ES2 | \
480 CHIP_IS_OMAP3430ES3_0 | \
vikram panditaf18af0a2009-11-22 10:10:57 -0800481 CHIP_IS_OMAP3430ES3_1 | \
482 CHIP_IS_OMAP3630ES1)
483#define CHIP_GE_OMAP3430ES3_1 (CHIP_IS_OMAP3430ES3_1 | \
484 CHIP_IS_OMAP3630ES1)
Paul Walmsleyd41ad522009-02-05 20:45:25 -0700485
Russell Kinga09e64f2008-08-05 16:14:15 +0100486
487int omap_chip_is(struct omap_chip_id oci);
Russell Kinga09e64f2008-08-05 16:14:15 +0100488void omap2_check_revision(void);
Tony Lindgrena9f82d12009-10-05 13:31:43 -0700489
Sanjeev Premi8384ce02009-11-22 10:10:53 -0800490/*
491 * Runtime detection of OMAP3 features
492 */
493extern u32 omap3_features;
494
495#define OMAP3_HAS_L2CACHE BIT(0)
496#define OMAP3_HAS_IVA BIT(1)
497#define OMAP3_HAS_SGX BIT(2)
498#define OMAP3_HAS_NEON BIT(3)
499#define OMAP3_HAS_ISP BIT(4)
500
501#define OMAP3_HAS_FEATURE(feat,flag) \
502static inline unsigned int omap3_has_ ##feat(void) \
503{ \
504 return (omap3_features & OMAP3_HAS_ ##flag); \
505} \
506
507OMAP3_HAS_FEATURE(l2cache, L2CACHE)
508OMAP3_HAS_FEATURE(sgx, SGX)
509OMAP3_HAS_FEATURE(iva, IVA)
510OMAP3_HAS_FEATURE(neon, NEON)
511OMAP3_HAS_FEATURE(isp, ISP)
512
Tony Lindgrena9f82d12009-10-05 13:31:43 -0700513#endif