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