2005-04-16 15:20:36 -07:00
/*
* linux / include / asm - arm / arch - omap / cpu . h
*
* OMAP cpu type detection
*
* Copyright ( C ) 2004 Nokia Corporation
*
* Written by Tony Lindgren < tony . lindgren @ nokia . com >
*
* 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
*
*/
# ifndef __ASM_ARCH_OMAP_CPU_H
# define __ASM_ARCH_OMAP_CPU_H
extern unsigned int system_rev ;
# define OMAP_DIE_ID_0 0xfffe1800
# define OMAP_DIE_ID_1 0xfffe1804
# define OMAP_PRODUCTION_ID_0 0xfffe2000
# define OMAP_PRODUCTION_ID_1 0xfffe2004
# define OMAP32_ID_0 0xfffed400
# define OMAP32_ID_1 0xfffed404
/*
* Test if multicore OMAP support is needed
*/
2005-09-07 17:20:27 +01:00
# undef MULTI_OMAP1
# undef MULTI_OMAP2
2005-04-16 15:20:36 -07:00
# undef OMAP_NAME
# ifdef CONFIG_ARCH_OMAP730
# ifdef OMAP_NAME
2005-09-07 17:20:27 +01:00
# undef MULTI_OMAP1
# define MULTI_OMAP1
2005-04-16 15:20:36 -07:00
# else
# define OMAP_NAME omap730
# endif
# endif
# ifdef CONFIG_ARCH_OMAP1510
# ifdef OMAP_NAME
2005-09-07 17:20:27 +01:00
# undef MULTI_OMAP1
# define MULTI_OMAP1
2005-04-16 15:20:36 -07:00
# else
# define OMAP_NAME omap1510
# endif
# endif
# ifdef CONFIG_ARCH_OMAP16XX
# ifdef OMAP_NAME
2005-09-07 17:20:27 +01:00
# undef MULTI_OMAP1
# define MULTI_OMAP1
2005-04-16 15:20:36 -07:00
# else
2005-09-07 17:20:27 +01:00
# define OMAP_NAME omap16xx
2005-04-16 15:20:36 -07:00
# endif
# endif
2005-09-07 17:20:27 +01:00
# ifdef CONFIG_ARCH_OMAP24XX
# if (defined(OMAP_NAME) || defined(MULTI_OMAP1))
# error "OMAP1 and OMAP2 can't be selected at the same time"
2005-04-16 15:20:36 -07:00
# else
2005-09-07 17:20:27 +01:00
# undef MULTI_OMAP2
# define OMAP_NAME omap24xx
2005-04-16 15:20:36 -07:00
# endif
# endif
/*
2005-09-07 17:20:27 +01:00
* Macros to group OMAP into cpu classes .
* These can be used in most places .
* cpu_is_omap7xx ( ) : True for OMAP730
* cpu_is_omap15xx ( ) : True for OMAP1510 and OMAP5910
* cpu_is_omap16xx ( ) : True for OMAP1610 , OMAP5912 and OMAP1710
* cpu_is_omap24xx ( ) : True for OMAP2420
2005-04-16 15:20:36 -07:00
*/
# define GET_OMAP_CLASS (system_rev & 0xff)
# define IS_OMAP_CLASS(class, id) \
static inline int is_omap # # class ( void ) \
{ \
return ( GET_OMAP_CLASS = = ( id ) ) ? 1 : 0 ; \
}
IS_OMAP_CLASS ( 7 xx , 0x07 )
IS_OMAP_CLASS ( 15 xx , 0x15 )
IS_OMAP_CLASS ( 16 xx , 0x16 )
IS_OMAP_CLASS ( 24 xx , 0x24 )
2005-09-07 17:20:27 +01:00
# define cpu_is_omap7xx() 0
# define cpu_is_omap15xx() 0
# define cpu_is_omap16xx() 0
# define cpu_is_omap24xx() 0
# if defined(MULTI_OMAP1)
# if defined(CONFIG_ARCH_OMAP730)
# undef cpu_is_omap7xx
# define cpu_is_omap7xx() is_omap7xx()
# endif
# if defined(CONFIG_ARCH_OMAP1510)
# undef cpu_is_omap15xx
# define cpu_is_omap15xx() is_omap15xx()
# endif
# if defined(CONFIG_ARCH_OMAP16XX)
# undef cpu_is_omap16xx
2005-04-16 15:20:36 -07:00
# define cpu_is_omap16xx() is_omap16xx()
# endif
# else
# if defined(CONFIG_ARCH_OMAP730)
2005-09-07 17:20:27 +01:00
# undef cpu_is_omap7xx
2005-04-16 15:20:36 -07:00
# define cpu_is_omap7xx() 1
# endif
# if defined(CONFIG_ARCH_OMAP1510)
2005-09-07 17:20:27 +01:00
# undef cpu_is_omap15xx
2005-04-16 15:20:36 -07:00
# define cpu_is_omap15xx() 1
# endif
# if defined(CONFIG_ARCH_OMAP16XX)
2005-09-07 17:20:27 +01:00
# undef cpu_is_omap16xx
2005-04-16 15:20:36 -07:00
# define cpu_is_omap16xx() 1
2005-09-07 17:20:27 +01:00
# endif
# if defined(CONFIG_ARCH_OMAP24XX)
# undef cpu_is_omap24xx
# define cpu_is_omap24xx() 1
2005-04-16 15:20:36 -07:00
# endif
# endif
2005-09-07 17:20:27 +01:00
/*
* Macros to detect individual cpu types .
* These are only rarely needed .
* cpu_is_omap730 ( ) : True for OMAP730
* cpu_is_omap1510 ( ) : True for OMAP1510
* cpu_is_omap1610 ( ) : True for OMAP1610
* cpu_is_omap1611 ( ) : True for OMAP1611
* cpu_is_omap5912 ( ) : True for OMAP5912
* cpu_is_omap1621 ( ) : True for OMAP1621
* cpu_is_omap1710 ( ) : True for OMAP1710
* cpu_is_omap2420 ( ) : True for OMAP2420
*/
# define GET_OMAP_TYPE ((system_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 ( 730 , 0x0730 )
IS_OMAP_TYPE ( 1510 , 0x1510 )
IS_OMAP_TYPE ( 1610 , 0x1610 )
IS_OMAP_TYPE ( 1611 , 0x1611 )
IS_OMAP_TYPE ( 5912 , 0x1611 )
IS_OMAP_TYPE ( 1621 , 0x1621 )
IS_OMAP_TYPE ( 1710 , 0x1710 )
IS_OMAP_TYPE ( 2420 , 0x2420 )
# define cpu_is_omap730() 0
# define cpu_is_omap1510() 0
# define cpu_is_omap1610() 0
# define cpu_is_omap5912() 0
# define cpu_is_omap1611() 0
# define cpu_is_omap1621() 0
# define cpu_is_omap1710() 0
# define cpu_is_omap2420() 0
# if defined(MULTI_OMAP1)
# if defined(CONFIG_ARCH_OMAP730)
# undef cpu_is_omap730
# define cpu_is_omap730() is_omap730()
# endif
# if defined(CONFIG_ARCH_OMAP1510)
# undef cpu_is_omap1510
# define cpu_is_omap1510() is_omap1510()
# endif
2005-04-16 15:20:36 -07:00
# else
# if defined(CONFIG_ARCH_OMAP730)
2005-09-07 17:20:27 +01:00
# undef cpu_is_omap730
2005-04-16 15:20:36 -07:00
# define cpu_is_omap730() 1
# endif
# if defined(CONFIG_ARCH_OMAP1510)
2005-09-07 17:20:27 +01:00
# undef cpu_is_omap1510
2005-04-16 15:20:36 -07:00
# define cpu_is_omap1510() 1
# endif
2005-09-07 17:20:27 +01:00
# endif
/*
* Whether we have MULTI_OMAP1 or not , we still need to distinguish
* between 1611 B / 5912 and 1710.
*/
# if defined(CONFIG_ARCH_OMAP16XX)
# undef cpu_is_omap1610
# undef cpu_is_omap1611
# undef cpu_is_omap5912
# undef cpu_is_omap1621
# undef cpu_is_omap1710
2005-04-16 15:20:36 -07:00
# define cpu_is_omap1610() is_omap1610()
2005-09-07 17:20:27 +01:00
# define cpu_is_omap1611() is_omap1611()
2005-04-16 15:20:36 -07:00
# define cpu_is_omap5912() is_omap5912()
2005-09-07 17:20:27 +01:00
# define cpu_is_omap1621() is_omap1621()
2005-04-16 15:20:36 -07:00
# define cpu_is_omap1710() is_omap1710()
2005-09-07 17:20:27 +01:00
# endif
# if defined(CONFIG_ARCH_OMAP2420)
# undef cpu_is_omap2420
2005-04-16 15:20:36 -07:00
# define cpu_is_omap2420() 1
# endif
# endif