xref: /openbmc/linux/arch/arm/mach-omap1/soc.h (revision e4c060db2c13f10de09101afc564763f9fd0019a)
1*e4c060dbSTony Lindgren /*
2*e4c060dbSTony Lindgren  * OMAP cpu type detection
3*e4c060dbSTony Lindgren  *
4*e4c060dbSTony Lindgren  * Copyright (C) 2004, 2008 Nokia Corporation
5*e4c060dbSTony Lindgren  *
6*e4c060dbSTony Lindgren  * Copyright (C) 2009-11 Texas Instruments.
7*e4c060dbSTony Lindgren  *
8*e4c060dbSTony Lindgren  * Written by Tony Lindgren <tony.lindgren@nokia.com>
9*e4c060dbSTony Lindgren  *
10*e4c060dbSTony Lindgren  * Added OMAP4/5 specific defines - Santosh Shilimkar<santosh.shilimkar@ti.com>
11*e4c060dbSTony Lindgren  *
12*e4c060dbSTony Lindgren  * This program is free software; you can redistribute it and/or modify
13*e4c060dbSTony Lindgren  * it under the terms of the GNU General Public License as published by
14*e4c060dbSTony Lindgren  * the Free Software Foundation; either version 2 of the License, or
15*e4c060dbSTony Lindgren  * (at your option) any later version.
16*e4c060dbSTony Lindgren  *
17*e4c060dbSTony Lindgren  * This program is distributed in the hope that it will be useful,
18*e4c060dbSTony Lindgren  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19*e4c060dbSTony Lindgren  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20*e4c060dbSTony Lindgren  * GNU General Public License for more details.
21*e4c060dbSTony Lindgren  *
22*e4c060dbSTony Lindgren  * You should have received a copy of the GNU General Public License
23*e4c060dbSTony Lindgren  * along with this program; if not, write to the Free Software
24*e4c060dbSTony Lindgren  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25*e4c060dbSTony Lindgren  *
26*e4c060dbSTony Lindgren  */
27*e4c060dbSTony Lindgren 
28*e4c060dbSTony Lindgren #ifndef __ASM_ARCH_OMAP_CPU_H
29*e4c060dbSTony Lindgren #define __ASM_ARCH_OMAP_CPU_H
30*e4c060dbSTony Lindgren 
31*e4c060dbSTony Lindgren #ifndef __ASSEMBLY__
32*e4c060dbSTony Lindgren 
33*e4c060dbSTony Lindgren #include <linux/bitops.h>
34*e4c060dbSTony Lindgren 
35*e4c060dbSTony Lindgren /*
36*e4c060dbSTony Lindgren  * Test if multicore OMAP support is needed
37*e4c060dbSTony Lindgren  */
38*e4c060dbSTony Lindgren #undef MULTI_OMAP1
39*e4c060dbSTony Lindgren #undef OMAP_NAME
40*e4c060dbSTony Lindgren 
41*e4c060dbSTony Lindgren #ifdef CONFIG_ARCH_OMAP730
42*e4c060dbSTony Lindgren # ifdef OMAP_NAME
43*e4c060dbSTony Lindgren #  undef  MULTI_OMAP1
44*e4c060dbSTony Lindgren #  define MULTI_OMAP1
45*e4c060dbSTony Lindgren # else
46*e4c060dbSTony Lindgren #  define OMAP_NAME omap730
47*e4c060dbSTony Lindgren # endif
48*e4c060dbSTony Lindgren #endif
49*e4c060dbSTony Lindgren #ifdef CONFIG_ARCH_OMAP850
50*e4c060dbSTony Lindgren # ifdef OMAP_NAME
51*e4c060dbSTony Lindgren #  undef  MULTI_OMAP1
52*e4c060dbSTony Lindgren #  define MULTI_OMAP1
53*e4c060dbSTony Lindgren # else
54*e4c060dbSTony Lindgren #  define OMAP_NAME omap850
55*e4c060dbSTony Lindgren # endif
56*e4c060dbSTony Lindgren #endif
57*e4c060dbSTony Lindgren #ifdef CONFIG_ARCH_OMAP15XX
58*e4c060dbSTony Lindgren # ifdef OMAP_NAME
59*e4c060dbSTony Lindgren #  undef  MULTI_OMAP1
60*e4c060dbSTony Lindgren #  define MULTI_OMAP1
61*e4c060dbSTony Lindgren # else
62*e4c060dbSTony Lindgren #  define OMAP_NAME omap1510
63*e4c060dbSTony Lindgren # endif
64*e4c060dbSTony Lindgren #endif
65*e4c060dbSTony Lindgren #ifdef CONFIG_ARCH_OMAP16XX
66*e4c060dbSTony Lindgren # ifdef OMAP_NAME
67*e4c060dbSTony Lindgren #  undef  MULTI_OMAP1
68*e4c060dbSTony Lindgren #  define MULTI_OMAP1
69*e4c060dbSTony Lindgren # else
70*e4c060dbSTony Lindgren #  define OMAP_NAME omap16xx
71*e4c060dbSTony Lindgren # endif
72*e4c060dbSTony Lindgren #endif
73*e4c060dbSTony Lindgren 
74*e4c060dbSTony Lindgren /*
75*e4c060dbSTony Lindgren  * omap_rev bits:
76*e4c060dbSTony Lindgren  * CPU id bits	(0730, 1510, 1710, 2422...)	[31:16]
77*e4c060dbSTony Lindgren  * CPU revision	(See _REV_ defined in cpu.h)	[15:08]
78*e4c060dbSTony Lindgren  * CPU class bits (15xx, 16xx, 24xx, 34xx...)	[07:00]
79*e4c060dbSTony Lindgren  */
80*e4c060dbSTony Lindgren unsigned int omap_rev(void);
81*e4c060dbSTony Lindgren 
82*e4c060dbSTony Lindgren /*
83*e4c060dbSTony Lindgren  * Get the CPU revision for OMAP devices
84*e4c060dbSTony Lindgren  */
85*e4c060dbSTony Lindgren #define GET_OMAP_REVISION()	((omap_rev() >> 8) & 0xff)
86*e4c060dbSTony Lindgren 
87*e4c060dbSTony Lindgren /*
88*e4c060dbSTony Lindgren  * Macros to group OMAP into cpu classes.
89*e4c060dbSTony Lindgren  * These can be used in most places.
90*e4c060dbSTony Lindgren  * cpu_is_omap7xx():	True for OMAP730, OMAP850
91*e4c060dbSTony Lindgren  * cpu_is_omap15xx():	True for OMAP1510, OMAP5910 and OMAP310
92*e4c060dbSTony Lindgren  * cpu_is_omap16xx():	True for OMAP1610, OMAP5912 and OMAP1710
93*e4c060dbSTony Lindgren  */
94*e4c060dbSTony Lindgren #define GET_OMAP_CLASS	(omap_rev() & 0xff)
95*e4c060dbSTony Lindgren 
96*e4c060dbSTony Lindgren #define IS_OMAP_CLASS(class, id)			\
97*e4c060dbSTony Lindgren static inline int is_omap ##class (void)		\
98*e4c060dbSTony Lindgren {							\
99*e4c060dbSTony Lindgren 	return (GET_OMAP_CLASS == (id)) ? 1 : 0;	\
100*e4c060dbSTony Lindgren }
101*e4c060dbSTony Lindgren 
102*e4c060dbSTony Lindgren #define GET_OMAP_SUBCLASS	((omap_rev() >> 20) & 0x0fff)
103*e4c060dbSTony Lindgren 
104*e4c060dbSTony Lindgren #define IS_OMAP_SUBCLASS(subclass, id)			\
105*e4c060dbSTony Lindgren static inline int is_omap ##subclass (void)		\
106*e4c060dbSTony Lindgren {							\
107*e4c060dbSTony Lindgren 	return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0;	\
108*e4c060dbSTony Lindgren }
109*e4c060dbSTony Lindgren 
110*e4c060dbSTony Lindgren IS_OMAP_CLASS(7xx, 0x07)
111*e4c060dbSTony Lindgren IS_OMAP_CLASS(15xx, 0x15)
112*e4c060dbSTony Lindgren IS_OMAP_CLASS(16xx, 0x16)
113*e4c060dbSTony Lindgren 
114*e4c060dbSTony Lindgren #define cpu_is_omap7xx()		0
115*e4c060dbSTony Lindgren #define cpu_is_omap15xx()		0
116*e4c060dbSTony Lindgren #define cpu_is_omap16xx()		0
117*e4c060dbSTony Lindgren 
118*e4c060dbSTony Lindgren #if defined(MULTI_OMAP1)
119*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP730)
120*e4c060dbSTony Lindgren #  undef  cpu_is_omap7xx
121*e4c060dbSTony Lindgren #  define cpu_is_omap7xx()		is_omap7xx()
122*e4c060dbSTony Lindgren # endif
123*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP850)
124*e4c060dbSTony Lindgren #  undef  cpu_is_omap7xx
125*e4c060dbSTony Lindgren #  define cpu_is_omap7xx()		is_omap7xx()
126*e4c060dbSTony Lindgren # endif
127*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP15XX)
128*e4c060dbSTony Lindgren #  undef  cpu_is_omap15xx
129*e4c060dbSTony Lindgren #  define cpu_is_omap15xx()		is_omap15xx()
130*e4c060dbSTony Lindgren # endif
131*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP16XX)
132*e4c060dbSTony Lindgren #  undef  cpu_is_omap16xx
133*e4c060dbSTony Lindgren #  define cpu_is_omap16xx()		is_omap16xx()
134*e4c060dbSTony Lindgren # endif
135*e4c060dbSTony Lindgren #else
136*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP730)
137*e4c060dbSTony Lindgren #  undef  cpu_is_omap7xx
138*e4c060dbSTony Lindgren #  define cpu_is_omap7xx()		1
139*e4c060dbSTony Lindgren # endif
140*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP850)
141*e4c060dbSTony Lindgren #  undef  cpu_is_omap7xx
142*e4c060dbSTony Lindgren #  define cpu_is_omap7xx()		1
143*e4c060dbSTony Lindgren # endif
144*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP15XX)
145*e4c060dbSTony Lindgren #  undef  cpu_is_omap15xx
146*e4c060dbSTony Lindgren #  define cpu_is_omap15xx()		1
147*e4c060dbSTony Lindgren # endif
148*e4c060dbSTony Lindgren # if defined(CONFIG_ARCH_OMAP16XX)
149*e4c060dbSTony Lindgren #  undef  cpu_is_omap16xx
150*e4c060dbSTony Lindgren #  define cpu_is_omap16xx()		1
151*e4c060dbSTony Lindgren # endif
152*e4c060dbSTony Lindgren #endif
153*e4c060dbSTony Lindgren 
154*e4c060dbSTony Lindgren /*
155*e4c060dbSTony Lindgren  * Macros to detect individual cpu types.
156*e4c060dbSTony Lindgren  * These are only rarely needed.
157*e4c060dbSTony Lindgren  * cpu_is_omap310():	True for OMAP310
158*e4c060dbSTony Lindgren  * cpu_is_omap1510():	True for OMAP1510
159*e4c060dbSTony Lindgren  * cpu_is_omap1610():	True for OMAP1610
160*e4c060dbSTony Lindgren  * cpu_is_omap1611():	True for OMAP1611
161*e4c060dbSTony Lindgren  * cpu_is_omap5912():	True for OMAP5912
162*e4c060dbSTony Lindgren  * cpu_is_omap1621():	True for OMAP1621
163*e4c060dbSTony Lindgren  * cpu_is_omap1710():	True for OMAP1710
164*e4c060dbSTony Lindgren  */
165*e4c060dbSTony Lindgren #define GET_OMAP_TYPE	((omap_rev() >> 16) & 0xffff)
166*e4c060dbSTony Lindgren 
167*e4c060dbSTony Lindgren #define IS_OMAP_TYPE(type, id)				\
168*e4c060dbSTony Lindgren static inline int is_omap ##type (void)			\
169*e4c060dbSTony Lindgren {							\
170*e4c060dbSTony Lindgren 	return (GET_OMAP_TYPE == (id)) ? 1 : 0;		\
171*e4c060dbSTony Lindgren }
172*e4c060dbSTony Lindgren 
173*e4c060dbSTony Lindgren IS_OMAP_TYPE(310, 0x0310)
174*e4c060dbSTony Lindgren IS_OMAP_TYPE(1510, 0x1510)
175*e4c060dbSTony Lindgren IS_OMAP_TYPE(1610, 0x1610)
176*e4c060dbSTony Lindgren IS_OMAP_TYPE(1611, 0x1611)
177*e4c060dbSTony Lindgren IS_OMAP_TYPE(5912, 0x1611)
178*e4c060dbSTony Lindgren IS_OMAP_TYPE(1621, 0x1621)
179*e4c060dbSTony Lindgren IS_OMAP_TYPE(1710, 0x1710)
180*e4c060dbSTony Lindgren 
181*e4c060dbSTony Lindgren #define cpu_is_omap310()		0
182*e4c060dbSTony Lindgren #define cpu_is_omap1510()		0
183*e4c060dbSTony Lindgren #define cpu_is_omap1610()		0
184*e4c060dbSTony Lindgren #define cpu_is_omap5912()		0
185*e4c060dbSTony Lindgren #define cpu_is_omap1611()		0
186*e4c060dbSTony Lindgren #define cpu_is_omap1621()		0
187*e4c060dbSTony Lindgren #define cpu_is_omap1710()		0
188*e4c060dbSTony Lindgren 
189*e4c060dbSTony Lindgren /* These are needed to compile common code */
190*e4c060dbSTony Lindgren #ifdef CONFIG_ARCH_OMAP1
191*e4c060dbSTony Lindgren #define cpu_is_omap242x()		0
192*e4c060dbSTony Lindgren #define cpu_is_omap2430()		0
193*e4c060dbSTony Lindgren #define cpu_is_omap243x()		0
194*e4c060dbSTony Lindgren #define cpu_is_omap24xx()		0
195*e4c060dbSTony Lindgren #define cpu_is_omap34xx()		0
196*e4c060dbSTony Lindgren #define cpu_is_omap44xx()		0
197*e4c060dbSTony Lindgren #define soc_is_omap54xx()		0
198*e4c060dbSTony Lindgren #define soc_is_am33xx()			0
199*e4c060dbSTony Lindgren #define cpu_class_is_omap1()		1
200*e4c060dbSTony Lindgren #define cpu_class_is_omap2()		0
201*e4c060dbSTony Lindgren #endif
202*e4c060dbSTony Lindgren 
203*e4c060dbSTony Lindgren /*
204*e4c060dbSTony Lindgren  * Whether we have MULTI_OMAP1 or not, we still need to distinguish
205*e4c060dbSTony Lindgren  * between 310 vs. 1510 and 1611B/5912 vs. 1710.
206*e4c060dbSTony Lindgren  */
207*e4c060dbSTony Lindgren 
208*e4c060dbSTony Lindgren #if defined(CONFIG_ARCH_OMAP15XX)
209*e4c060dbSTony Lindgren # undef  cpu_is_omap310
210*e4c060dbSTony Lindgren # undef  cpu_is_omap1510
211*e4c060dbSTony Lindgren # define cpu_is_omap310()		is_omap310()
212*e4c060dbSTony Lindgren # define cpu_is_omap1510()		is_omap1510()
213*e4c060dbSTony Lindgren #endif
214*e4c060dbSTony Lindgren 
215*e4c060dbSTony Lindgren #if defined(CONFIG_ARCH_OMAP16XX)
216*e4c060dbSTony Lindgren # undef  cpu_is_omap1610
217*e4c060dbSTony Lindgren # undef  cpu_is_omap1611
218*e4c060dbSTony Lindgren # undef  cpu_is_omap5912
219*e4c060dbSTony Lindgren # undef  cpu_is_omap1621
220*e4c060dbSTony Lindgren # undef  cpu_is_omap1710
221*e4c060dbSTony Lindgren # define cpu_is_omap1610()		is_omap1610()
222*e4c060dbSTony Lindgren # define cpu_is_omap1611()		is_omap1611()
223*e4c060dbSTony Lindgren # define cpu_is_omap5912()		is_omap5912()
224*e4c060dbSTony Lindgren # define cpu_is_omap1621()		is_omap1621()
225*e4c060dbSTony Lindgren # define cpu_is_omap1710()		is_omap1710()
226*e4c060dbSTony Lindgren #endif
227*e4c060dbSTony Lindgren 
228*e4c060dbSTony Lindgren #endif	/* __ASSEMBLY__ */
229*e4c060dbSTony Lindgren #endif
230