1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * OMAP cpu type detection
4 *
5 * Copyright (C) 2004, 2008 Nokia Corporation
6 *
7 * Copyright (C) 2009-11 Texas Instruments.
8 *
9 * Written by Tony Lindgren <tony.lindgren@nokia.com>
10 *
11 * Added OMAP4/5 specific defines - Santosh Shilimkar<santosh.shilimkar@ti.com>
12 */
13
14#ifndef __ASM_ARCH_OMAP_CPU_H
15#define __ASM_ARCH_OMAP_CPU_H
16
17/*
18 * Test if multicore OMAP support is needed
19 */
20#undef MULTI_OMAP1
21#undef OMAP_NAME
22
23#ifdef CONFIG_ARCH_OMAP15XX
24# ifdef OMAP_NAME
25# undef MULTI_OMAP1
26# define MULTI_OMAP1
27# else
28# define OMAP_NAME omap1510
29# endif
30#endif
31#ifdef CONFIG_ARCH_OMAP16XX
32# ifdef OMAP_NAME
33# undef MULTI_OMAP1
34# define MULTI_OMAP1
35# else
36# define OMAP_NAME omap16xx
37# endif
38#endif
39
40/*
41 * omap_rev bits:
42 * CPU id bits (0730, 1510, 1710, 2422...) [31:16]
43 * CPU revision (See _REV_ defined in cpu.h) [15:08]
44 * CPU class bits (15xx, 16xx, 24xx, 34xx...) [07:00]
45 */
46unsigned int omap_rev(void);
47
48/*
49 * Get the CPU revision for OMAP devices
50 */
51#define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff)
52
53/*
54 * Macros to group OMAP into cpu classes.
55 * These can be used in most places.
56 * cpu_is_omap15xx(): True for OMAP1510, OMAP5910 and OMAP310
57 * cpu_is_omap16xx(): True for OMAP1610, OMAP5912 and OMAP1710
58 */
59#define GET_OMAP_CLASS (omap_rev() & 0xff)
60
61#define IS_OMAP_CLASS(class, id) \
62static inline int is_omap ##class (void) \
63{ \
64 return (GET_OMAP_CLASS == (id)) ? 1 : 0; \
65}
66
67#define GET_OMAP_SUBCLASS ((omap_rev() >> 20) & 0x0fff)
68
69#define IS_OMAP_SUBCLASS(subclass, id) \
70static inline int is_omap ##subclass (void) \
71{ \
72 return (GET_OMAP_SUBCLASS == (id)) ? 1 : 0; \
73}
74
75IS_OMAP_CLASS(15xx, 0x15)
76IS_OMAP_CLASS(16xx, 0x16)
77
78#define cpu_is_omap15xx() 0
79#define cpu_is_omap16xx() 0
80
81#if defined(MULTI_OMAP1)
82# if defined(CONFIG_ARCH_OMAP15XX)
83# undef cpu_is_omap15xx
84# define cpu_is_omap15xx() is_omap15xx()
85# endif
86# if defined(CONFIG_ARCH_OMAP16XX)
87# undef cpu_is_omap16xx
88# define cpu_is_omap16xx() is_omap16xx()
89# endif
90#else
91# if defined(CONFIG_ARCH_OMAP15XX)
92# undef cpu_is_omap15xx
93# define cpu_is_omap15xx() 1
94# endif
95# if defined(CONFIG_ARCH_OMAP16XX)
96# undef cpu_is_omap16xx
97# define cpu_is_omap16xx() 1
98# endif
99#endif
100
101/*
102 * Macros to detect individual cpu types.
103 * These are only rarely needed.
104 * cpu_is_omap310(): True for OMAP310
105 * cpu_is_omap1510(): True for OMAP1510
106 * cpu_is_omap1610(): True for OMAP1610
107 * cpu_is_omap1611(): True for OMAP1611
108 * cpu_is_omap5912(): True for OMAP5912
109 * cpu_is_omap1621(): True for OMAP1621
110 * cpu_is_omap1710(): True for OMAP1710
111 */
112#define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff)
113
114#define IS_OMAP_TYPE(type, id) \
115static inline int is_omap ##type (void) \
116{ \
117 return (GET_OMAP_TYPE == (id)) ? 1 : 0; \
118}
119
120IS_OMAP_TYPE(310, 0x0310)
121IS_OMAP_TYPE(1510, 0x1510)
122IS_OMAP_TYPE(1610, 0x1610)
123IS_OMAP_TYPE(1611, 0x1611)
124IS_OMAP_TYPE(5912, 0x1611)
125IS_OMAP_TYPE(1621, 0x1621)
126IS_OMAP_TYPE(1710, 0x1710)
127
128#define cpu_is_omap310() 0
129#define cpu_is_omap1510() 0
130#define cpu_is_omap1610() 0
131#define cpu_is_omap5912() 0
132#define cpu_is_omap1611() 0
133#define cpu_is_omap1621() 0
134#define cpu_is_omap1710() 0
135
136#define cpu_class_is_omap1() 1
137
138/*
139 * Whether we have MULTI_OMAP1 or not, we still need to distinguish
140 * between 310 vs. 1510 and 1611B/5912 vs. 1710.
141 */
142
143#if defined(CONFIG_ARCH_OMAP15XX)
144# undef cpu_is_omap310
145# undef cpu_is_omap1510
146# define cpu_is_omap310() is_omap310()
147# define cpu_is_omap1510() is_omap1510()
148#endif
149
150#if defined(CONFIG_ARCH_OMAP16XX)
151# undef cpu_is_omap1610
152# undef cpu_is_omap1611
153# undef cpu_is_omap5912
154# undef cpu_is_omap1621
155# undef cpu_is_omap1710
156# define cpu_is_omap1610() is_omap1610()
157# define cpu_is_omap1611() is_omap1611()
158# define cpu_is_omap5912() is_omap5912()
159# define cpu_is_omap1621() is_omap1621()
160# define cpu_is_omap1710() is_omap1710()
161#endif
162
163#endif
164

source code of linux/include/linux/soc/ti/omap1-soc.h