2012-10-06 00:25:59 +04:00
/*
* OMAP cpu type detection
*
* Copyright ( C ) 2004 , 2008 Nokia Corporation
*
* Copyright ( C ) 2009 - 11 Texas Instruments .
*
* Written by Tony Lindgren < tony . lindgren @ nokia . com >
*
* Added OMAP4 / 5 specific defines - Santosh Shilimkar < santosh . shilimkar @ ti . com >
2013-02-06 18:55:40 +04:00
* Added DRA7xxx specific defines - Sricharan R < r . sricharan @ ti . com >
2012-10-06 00:25:59 +04:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
*/
2012-09-01 03:08:07 +04:00
# include "omap24xx.h"
# include "omap34xx.h"
# include "omap44xx.h"
# include "ti81xx.h"
# include "am33xx.h"
# include "omap54xx.h"
2012-10-06 00:25:59 +04:00
# ifndef __ASSEMBLY__
# include <linux/bitops.h>
2013-02-06 18:55:40 +04:00
# include <linux/of.h>
2012-10-06 00:25:59 +04:00
/*
* Test if multicore OMAP support is needed
*/
# undef MULTI_OMAP2
# undef OMAP_NAME
2013-01-11 23:24:18 +04:00
# ifdef CONFIG_ARCH_MULTIPLATFORM
# define MULTI_OMAP2
# endif
2012-10-06 00:25:59 +04:00
# ifdef CONFIG_SOC_OMAP2420
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME omap2420
# endif
# endif
# ifdef CONFIG_SOC_OMAP2430
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME omap2430
# endif
# endif
# ifdef CONFIG_ARCH_OMAP3
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME omap3
# endif
# endif
# ifdef CONFIG_ARCH_OMAP4
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME omap4
# endif
# endif
# ifdef CONFIG_SOC_OMAP5
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME omap5
# endif
# endif
# ifdef CONFIG_SOC_AM33XX
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME am33xx
# endif
# endif
2013-05-27 18:35:51 +04:00
# ifdef CONFIG_SOC_AM43XX
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME am43xx
# endif
# endif
2013-02-06 18:55:40 +04:00
# ifdef CONFIG_SOC_DRA7XX
# ifdef OMAP_NAME
# undef MULTI_OMAP2
# define MULTI_OMAP2
# else
# define OMAP_NAME DRA7XX
# endif
# endif
2012-10-06 00:25:59 +04:00
/*
* Omap device type i . e . EMU / HS / TST / GP / BAD
*/
# define OMAP2_DEVICE_TYPE_TEST 0
# define OMAP2_DEVICE_TYPE_EMU 1
# define OMAP2_DEVICE_TYPE_SEC 2
# define OMAP2_DEVICE_TYPE_GP 3
# define OMAP2_DEVICE_TYPE_BAD 4
int omap_type ( void ) ;
/*
* omap_rev bits :
2015-10-16 20:08:45 +03:00
* SoC id bits ( 0730 , 1510 , 1710 , 2422. . . ) [ 31 : 16 ]
* SoC revision ( See _REV_ defined in cpu . h ) [ 15 : 08 ]
* SoC class bits ( 15 xx , 16 xx , 24 xx , 34 xx . . . ) [ 07 : 00 ]
2012-10-06 00:25:59 +04:00
*/
unsigned int omap_rev ( void ) ;
2013-01-11 23:24:18 +04:00
static inline int soc_is_omap ( void )
{
return omap_rev ( ) ! = 0 ;
}
2012-10-06 00:25:59 +04:00
/*
2015-10-16 20:08:45 +03:00
* Get the SoC revision for OMAP devices
2012-10-06 00:25:59 +04:00
*/
# define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff)
/*
* Macros to group OMAP into cpu classes .
* These can be used in most places .
2015-10-16 20:08:45 +03:00
* soc_is_omap24xx ( ) : True for OMAP2420 , OMAP2422 , OMAP2423 , OMAP2430
* soc_is_omap242x ( ) : True for OMAP2420 , OMAP2422 , OMAP2423
* soc_is_omap243x ( ) : True for OMAP2430
* soc_is_omap343x ( ) : True for OMAP3430
* soc_is_omap443x ( ) : True for OMAP4430
* soc_is_omap446x ( ) : True for OMAP4460
* soc_is_omap447x ( ) : True for OMAP4470
2012-10-06 00:25:59 +04:00
* soc_is_omap543x ( ) : True for OMAP5430 , OMAP5432
*/
# define GET_OMAP_CLASS (omap_rev() & 0xff)
# define IS_OMAP_CLASS(class, id) \
static inline int is_omap # # class ( void ) \
{ \
return ( GET_OMAP_CLASS = = ( id ) ) ? 1 : 0 ; \
}
# define GET_AM_CLASS ((omap_rev() >> 24) & 0xff)
# define IS_AM_CLASS(class, id) \
static inline int is_am # # class ( void ) \
{ \
return ( GET_AM_CLASS = = ( id ) ) ? 1 : 0 ; \
}
# define GET_TI_CLASS ((omap_rev() >> 24) & 0xff)
# define IS_TI_CLASS(class, id) \
static inline int is_ti # # class ( void ) \
{ \
return ( GET_TI_CLASS = = ( id ) ) ? 1 : 0 ; \
}
# define GET_OMAP_SUBCLASS ((omap_rev() >> 20) & 0x0fff)
# define IS_OMAP_SUBCLASS(subclass, id) \
static inline int is_omap # # subclass ( void ) \
{ \
return ( GET_OMAP_SUBCLASS = = ( id ) ) ? 1 : 0 ; \
}
# define IS_TI_SUBCLASS(subclass, id) \
static inline int is_ti # # subclass ( void ) \
{ \
return ( GET_OMAP_SUBCLASS = = ( id ) ) ? 1 : 0 ; \
}
# define IS_AM_SUBCLASS(subclass, id) \
static inline int is_am # # subclass ( void ) \
{ \
return ( GET_OMAP_SUBCLASS = = ( id ) ) ? 1 : 0 ; \
}
IS_OMAP_CLASS ( 24 xx , 0x24 )
IS_OMAP_CLASS ( 34 xx , 0x34 )
IS_OMAP_CLASS ( 44 xx , 0x44 )
IS_AM_CLASS ( 35 xx , 0x35 )
IS_OMAP_CLASS ( 54 xx , 0x54 )
IS_AM_CLASS ( 33 xx , 0x33 )
2013-05-27 18:35:51 +04:00
IS_AM_CLASS ( 43 xx , 0x43 )
2012-10-06 00:25:59 +04:00
IS_TI_CLASS ( 81 xx , 0x81 )
IS_OMAP_SUBCLASS ( 242 x , 0x242 )
IS_OMAP_SUBCLASS ( 243 x , 0x243 )
IS_OMAP_SUBCLASS ( 343 x , 0x343 )
IS_OMAP_SUBCLASS ( 363 x , 0x363 )
IS_OMAP_SUBCLASS ( 443 x , 0x443 )
IS_OMAP_SUBCLASS ( 446 x , 0x446 )
IS_OMAP_SUBCLASS ( 447 x , 0x447 )
IS_OMAP_SUBCLASS ( 543 x , 0x543 )
IS_TI_SUBCLASS ( 816 x , 0x816 )
IS_TI_SUBCLASS ( 814 x , 0x814 )
IS_AM_SUBCLASS ( 335 x , 0x335 )
2013-05-27 18:35:51 +04:00
IS_AM_SUBCLASS ( 437 x , 0x437 )
2012-10-06 00:25:59 +04:00
2015-10-16 20:08:45 +03:00
# define soc_is_omap24xx() 0
# define soc_is_omap242x() 0
# define soc_is_omap243x() 0
# define soc_is_omap34xx() 0
# define soc_is_omap343x() 0
# define soc_is_ti81xx() 0
# define soc_is_ti816x() 0
# define soc_is_ti814x() 0
2012-10-06 00:25:59 +04:00
# define soc_is_am35xx() 0
# define soc_is_am33xx() 0
# define soc_is_am335x() 0
2013-05-27 18:35:51 +04:00
# define soc_is_am43xx() 0
# define soc_is_am437x() 0
2015-10-16 20:08:45 +03:00
# define soc_is_omap44xx() 0
# define soc_is_omap443x() 0
# define soc_is_omap446x() 0
# define soc_is_omap447x() 0
2012-10-06 00:25:59 +04:00
# define soc_is_omap54xx() 0
# define soc_is_omap543x() 0
2013-02-06 18:55:40 +04:00
# define soc_is_dra7xx() 0
2014-08-28 05:38:22 +04:00
# define soc_is_dra74x() 0
# define soc_is_dra72x() 0
2012-10-06 00:25:59 +04:00
# if defined(MULTI_OMAP2)
# if defined(CONFIG_ARCH_OMAP2)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap24xx
# define soc_is_omap24xx() is_omap24xx()
2012-10-06 00:25:59 +04:00
# endif
# if defined (CONFIG_SOC_OMAP2420)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap242x
# define soc_is_omap242x() is_omap242x()
2012-10-06 00:25:59 +04:00
# endif
# if defined (CONFIG_SOC_OMAP2430)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap243x
# define soc_is_omap243x() is_omap243x()
2012-10-06 00:25:59 +04:00
# endif
# if defined(CONFIG_ARCH_OMAP3)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap34xx
# undef soc_is_omap343x
# define soc_is_omap34xx() is_omap34xx()
# define soc_is_omap343x() is_omap343x()
2012-10-06 00:25:59 +04:00
# endif
# else
# if defined(CONFIG_ARCH_OMAP2)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap24xx
# define soc_is_omap24xx() 1
2012-10-06 00:25:59 +04:00
# endif
# if defined(CONFIG_SOC_OMAP2420)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap242x
# define soc_is_omap242x() 1
2012-10-06 00:25:59 +04:00
# endif
# if defined(CONFIG_SOC_OMAP2430)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap243x
# define soc_is_omap243x() 1
2012-10-06 00:25:59 +04:00
# endif
# if defined(CONFIG_ARCH_OMAP3)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap34xx
# define soc_is_omap34xx() 1
2012-10-06 00:25:59 +04:00
# endif
# if defined(CONFIG_SOC_OMAP3430)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap343x
# define soc_is_omap343x() 1
2012-10-06 00:25:59 +04:00
# endif
# endif
/*
* Macros to detect individual cpu types .
* These are only rarely needed .
2015-10-16 20:08:45 +03:00
* soc_is_omap2420 ( ) : True for OMAP2420
* soc_is_omap2422 ( ) : True for OMAP2422
* soc_is_omap2423 ( ) : True for OMAP2423
* soc_is_omap2430 ( ) : True for OMAP2430
* soc_is_omap3430 ( ) : True for OMAP3430
2012-10-06 00:25:59 +04:00
*/
# define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff)
# define IS_OMAP_TYPE(type, id) \
static inline int is_omap # # type ( void ) \
{ \
return ( GET_OMAP_TYPE = = ( id ) ) ? 1 : 0 ; \
}
IS_OMAP_TYPE ( 2420 , 0x2420 )
IS_OMAP_TYPE ( 2422 , 0x2422 )
IS_OMAP_TYPE ( 2423 , 0x2423 )
IS_OMAP_TYPE ( 2430 , 0x2430 )
IS_OMAP_TYPE ( 3430 , 0x3430 )
2015-10-16 20:08:45 +03:00
# define soc_is_omap2420() 0
# define soc_is_omap2422() 0
# define soc_is_omap2423() 0
# define soc_is_omap2430() 0
# define soc_is_omap3430() 0
# define soc_is_omap3630() 0
2012-10-06 00:25:59 +04:00
# define soc_is_omap5430() 0
/* These are needed for the common code */
# ifdef CONFIG_ARCH_OMAP2PLUS
2015-10-16 20:08:45 +03:00
# define soc_is_omap7xx() 0
# define soc_is_omap15xx() 0
# define soc_is_omap16xx() 0
# define soc_is_omap1510() 0
# define soc_is_omap1610() 0
# define soc_is_omap1611() 0
# define soc_is_omap1621() 0
# define soc_is_omap1710() 0
2012-10-06 00:25:59 +04:00
# define cpu_class_is_omap1() 0
# define cpu_class_is_omap2() 1
# endif
# if defined(CONFIG_ARCH_OMAP2)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap2420
# undef soc_is_omap2422
# undef soc_is_omap2423
# undef soc_is_omap2430
# define soc_is_omap2420() is_omap2420()
# define soc_is_omap2422() is_omap2422()
# define soc_is_omap2423() is_omap2423()
# define soc_is_omap2430() is_omap2430()
2012-10-06 00:25:59 +04:00
# endif
# if defined(CONFIG_ARCH_OMAP3)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap3430
# undef soc_is_ti81xx
# undef soc_is_ti816x
# undef soc_is_ti814x
2012-10-06 00:25:59 +04:00
# undef soc_is_am35xx
2015-10-16 20:08:45 +03:00
# define soc_is_omap3430() is_omap3430()
# undef soc_is_omap3630
# define soc_is_omap3630() is_omap363x()
# define soc_is_ti81xx() is_ti81xx()
# define soc_is_ti816x() is_ti816x()
# define soc_is_ti814x() is_ti814x()
2012-10-06 00:25:59 +04:00
# define soc_is_am35xx() is_am35xx()
# endif
# if defined(CONFIG_SOC_AM33XX)
# undef soc_is_am33xx
# undef soc_is_am335x
# define soc_is_am33xx() is_am33xx()
# define soc_is_am335x() is_am335x()
# endif
2013-05-27 18:35:51 +04:00
# ifdef CONFIG_SOC_AM43XX
# undef soc_is_am43xx
# undef soc_is_am437x
# define soc_is_am43xx() is_am43xx()
# define soc_is_am437x() is_am437x()
# endif
2012-10-06 00:25:59 +04:00
# if defined(CONFIG_ARCH_OMAP4)
2015-10-16 20:08:45 +03:00
# undef soc_is_omap44xx
# undef soc_is_omap443x
# undef soc_is_omap446x
# undef soc_is_omap447x
# define soc_is_omap44xx() is_omap44xx()
# define soc_is_omap443x() is_omap443x()
# define soc_is_omap446x() is_omap446x()
# define soc_is_omap447x() is_omap447x()
2012-10-06 00:25:59 +04:00
# endif
# if defined(CONFIG_SOC_OMAP5)
# undef soc_is_omap54xx
# undef soc_is_omap543x
# define soc_is_omap54xx() is_omap54xx()
# define soc_is_omap543x() is_omap543x()
# endif
2013-02-06 18:55:40 +04:00
# if defined(CONFIG_SOC_DRA7XX)
# undef soc_is_dra7xx
2014-08-28 05:38:22 +04:00
# undef soc_is_dra74x
# undef soc_is_dra72x
2013-02-06 18:55:40 +04:00
# define soc_is_dra7xx() (of_machine_is_compatible("ti,dra7"))
2014-08-28 05:38:22 +04:00
# define soc_is_dra74x() (of_machine_is_compatible("ti,dra74"))
# define soc_is_dra72x() (of_machine_is_compatible("ti,dra72"))
2013-02-06 18:55:40 +04:00
# endif
2012-10-06 00:25:59 +04:00
/* Various silicon revisions for omap2 */
# define OMAP242X_CLASS 0x24200024
# define OMAP2420_REV_ES1_0 OMAP242X_CLASS
# define OMAP2420_REV_ES2_0 (OMAP242X_CLASS | (0x1 << 8))
# define OMAP243X_CLASS 0x24300024
# define OMAP2430_REV_ES1_0 OMAP243X_CLASS
# define OMAP343X_CLASS 0x34300034
# define OMAP3430_REV_ES1_0 OMAP343X_CLASS
# define OMAP3430_REV_ES2_0 (OMAP343X_CLASS | (0x1 << 8))
# define OMAP3430_REV_ES2_1 (OMAP343X_CLASS | (0x2 << 8))
# define OMAP3430_REV_ES3_0 (OMAP343X_CLASS | (0x3 << 8))
# define OMAP3430_REV_ES3_1 (OMAP343X_CLASS | (0x4 << 8))
# define OMAP3430_REV_ES3_1_2 (OMAP343X_CLASS | (0x5 << 8))
# define OMAP363X_CLASS 0x36300034
# define OMAP3630_REV_ES1_0 OMAP363X_CLASS
# define OMAP3630_REV_ES1_1 (OMAP363X_CLASS | (0x1 << 8))
# define OMAP3630_REV_ES1_2 (OMAP363X_CLASS | (0x2 << 8))
2015-01-15 04:37:16 +03:00
# define TI816X_CLASS 0x81600081
2012-10-06 00:25:59 +04:00
# define TI8168_REV_ES1_0 TI816X_CLASS
# define TI8168_REV_ES1_1 (TI816X_CLASS | (0x1 << 8))
2013-05-30 14:21:01 +04:00
# define TI8168_REV_ES2_0 (TI816X_CLASS | (0x2 << 8))
# define TI8168_REV_ES2_1 (TI816X_CLASS | (0x3 << 8))
2012-10-06 00:25:59 +04:00
2015-01-15 04:37:16 +03:00
# define TI814X_CLASS 0x81400081
2012-10-06 00:25:59 +04:00
# define TI8148_REV_ES1_0 TI814X_CLASS
# define TI8148_REV_ES2_0 (TI814X_CLASS | (0x1 << 8))
# define TI8148_REV_ES2_1 (TI814X_CLASS | (0x2 << 8))
# define AM35XX_CLASS 0x35170034
# define AM35XX_REV_ES1_0 AM35XX_CLASS
# define AM35XX_REV_ES1_1 (AM35XX_CLASS | (0x1 << 8))
# define AM335X_CLASS 0x33500033
# define AM335X_REV_ES1_0 AM335X_CLASS
2013-02-01 14:28:22 +04:00
# define AM335X_REV_ES2_0 (AM335X_CLASS | (0x1 << 8))
2013-05-09 03:48:02 +04:00
# define AM335X_REV_ES2_1 (AM335X_CLASS | (0x2 << 8))
2012-10-06 00:25:59 +04:00
2013-05-27 18:35:51 +04:00
# define AM437X_CLASS 0x43700000
2014-02-07 14:21:24 +04:00
# define AM437X_REV_ES1_0 (AM437X_CLASS | (0x10 << 8))
# define AM437X_REV_ES1_1 (AM437X_CLASS | (0x11 << 8))
2014-11-28 06:32:07 +03:00
# define AM437X_REV_ES1_2 (AM437X_CLASS | (0x12 << 8))
2013-05-27 18:35:51 +04:00
2012-10-06 00:25:59 +04:00
# define OMAP443X_CLASS 0x44300044
# define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8))
# define OMAP4430_REV_ES2_0 (OMAP443X_CLASS | (0x20 << 8))
# define OMAP4430_REV_ES2_1 (OMAP443X_CLASS | (0x21 << 8))
# define OMAP4430_REV_ES2_2 (OMAP443X_CLASS | (0x22 << 8))
# define OMAP4430_REV_ES2_3 (OMAP443X_CLASS | (0x23 << 8))
# define OMAP446X_CLASS 0x44600044
# define OMAP4460_REV_ES1_0 (OMAP446X_CLASS | (0x10 << 8))
# define OMAP4460_REV_ES1_1 (OMAP446X_CLASS | (0x11 << 8))
# define OMAP447X_CLASS 0x44700044
# define OMAP4470_REV_ES1_0 (OMAP447X_CLASS | (0x10 << 8))
# define OMAP54XX_CLASS 0x54000054
2013-01-07 17:59:46 +04:00
# define OMAP5430_REV_ES2_0 (OMAP54XX_CLASS | (0x30 << 16) | (0x20 << 8))
# define OMAP5432_REV_ES2_0 (OMAP54XX_CLASS | (0x32 << 16) | (0x20 << 8))
2012-10-06 00:25:59 +04:00
2014-05-19 19:27:11 +04:00
# define DRA7XX_CLASS 0x07000000
# define DRA752_REV_ES1_0 (DRA7XX_CLASS | (0x52 << 16) | (0x10 << 8))
# define DRA752_REV_ES1_1 (DRA7XX_CLASS | (0x52 << 16) | (0x11 << 8))
2015-09-01 23:59:25 +03:00
# define DRA752_REV_ES2_0 (DRA7XX_CLASS | (0x52 << 16) | (0x20 << 8))
# define DRA722_REV_ES1_0 (DRA7XX_CLASS | (0x22 << 16) | (0x10 << 8))
2014-05-29 23:05:50 +04:00
# define DRA722_REV_ES1_0 (DRA7XX_CLASS | (0x22 << 16) | (0x10 << 8))
2014-05-19 19:27:11 +04:00
2012-10-06 00:25:59 +04:00
void omap2xxx_check_revision ( void ) ;
void omap3xxx_check_revision ( void ) ;
void omap4xxx_check_revision ( void ) ;
void omap5xxx_check_revision ( void ) ;
2014-05-19 19:27:11 +04:00
void dra7xxx_check_revision ( void ) ;
2012-10-06 00:25:59 +04:00
void omap3xxx_check_features ( void ) ;
void ti81xx_check_features ( void ) ;
2013-05-17 14:13:41 +04:00
void am33xx_check_features ( void ) ;
2012-10-06 00:25:59 +04:00
void omap4xxx_check_features ( void ) ;
/*
* Runtime detection of OMAP3 features
*
* OMAP3_HAS_IO_CHAIN_CTRL : Some later members of the OMAP3 chip
* family have OS - level control over the I / O chain clock . This is
* to avoid a window during which wakeups could potentially be lost
* during powerdomain transitions . If this bit is set , it
* indicates that the chip does support OS - level control of this
* feature .
*/
extern u32 omap_features ;
# define OMAP3_HAS_L2CACHE BIT(0)
# define OMAP3_HAS_IVA BIT(1)
# define OMAP3_HAS_SGX BIT(2)
# define OMAP3_HAS_NEON BIT(3)
# define OMAP3_HAS_ISP BIT(4)
# define OMAP3_HAS_192MHZ_CLK BIT(5)
# define OMAP3_HAS_IO_WAKEUP BIT(6)
# define OMAP3_HAS_SDRC BIT(7)
# define OMAP3_HAS_IO_CHAIN_CTRL BIT(8)
2012-11-15 00:10:37 +04:00
# define OMAP4_HAS_PERF_SILICON BIT(9)
2012-10-06 00:25:59 +04:00
# define OMAP3_HAS_FEATURE(feat,flag) \
static inline unsigned int omap3_has_ # # feat ( void ) \
{ \
return omap_features & OMAP3_HAS_ # # flag ; \
} \
OMAP3_HAS_FEATURE ( l2cache , L2CACHE )
OMAP3_HAS_FEATURE ( sgx , SGX )
OMAP3_HAS_FEATURE ( iva , IVA )
OMAP3_HAS_FEATURE ( neon , NEON )
OMAP3_HAS_FEATURE ( isp , ISP )
OMAP3_HAS_FEATURE ( 192 mhz_clk , 192 MHZ_CLK )
OMAP3_HAS_FEATURE ( io_wakeup , IO_WAKEUP )
OMAP3_HAS_FEATURE ( sdrc , SDRC )
OMAP3_HAS_FEATURE ( io_chain_ctrl , IO_CHAIN_CTRL )
/*
* Runtime detection of OMAP4 features
*/
# define OMAP4_HAS_FEATURE(feat, flag) \
static inline unsigned int omap4_has_ # # feat ( void ) \
{ \
return omap_features & OMAP4_HAS_ # # flag ; \
} \
2012-11-15 00:10:37 +04:00
OMAP4_HAS_FEATURE ( perf_silicon , PERF_SILICON )
2012-10-06 00:25:59 +04:00
2013-01-11 23:24:18 +04:00
/*
* We need to make sure omap initcalls don ' t run when
* multiplatform kernels are booted on other SoCs .
*/
# define omap_initcall(level, fn) \
static int __init __used __ # # fn ( void ) \
{ \
if ( ! soc_is_omap ( ) ) \
return 0 ; \
return fn ( ) ; \
} \
level ( __ # # fn ) ;
# define omap_early_initcall(fn) omap_initcall(early_initcall, fn)
# define omap_core_initcall(fn) omap_initcall(core_initcall, fn)
# define omap_postcore_initcall(fn) omap_initcall(postcore_initcall, fn)
# define omap_arch_initcall(fn) omap_initcall(arch_initcall, fn)
# define omap_subsys_initcall(fn) omap_initcall(subsys_initcall, fn)
# define omap_device_initcall(fn) omap_initcall(device_initcall, fn)
# define omap_late_initcall(fn) omap_initcall(late_initcall, fn)
2013-05-09 03:48:01 +04:00
# define omap_late_initcall_sync(fn) omap_initcall(late_initcall_sync, fn)
2013-01-11 23:24:18 +04:00
2015-10-16 20:08:45 +03:00
/* Legacy defines, these can be removed when users are removed */
# define cpu_is_omap2420() soc_is_omap2420()
# define cpu_is_omap2422() soc_is_omap2422()
# define cpu_is_omap242x() soc_is_omap242x()
# define cpu_is_omap2430() soc_is_omap2430()
# define cpu_is_omap243x() soc_is_omap243x()
# define cpu_is_omap24xx() soc_is_omap24xx()
# define cpu_is_omap3430() soc_is_omap3430()
# define cpu_is_omap343x() soc_is_omap343x()
# define cpu_is_omap34xx() soc_is_omap34xx()
# define cpu_is_omap3630() soc_is_omap3630()
# define cpu_is_omap443x() soc_is_omap443x()
# define cpu_is_omap446x() soc_is_omap446x()
# define cpu_is_omap44xx() soc_is_omap44xx()
# define cpu_is_ti814x() soc_is_ti814x()
# define cpu_is_ti816x() soc_is_ti816x()
# define cpu_is_ti81xx() soc_is_ti81xx()
2012-10-06 00:25:59 +04:00
2015-10-16 20:08:45 +03:00
# endif /* __ASSEMBLY__ */