forked from Minki/linux
davinci: add runtime CPU detection support
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
This commit is contained in:
parent
9232fcc999
commit
e653034e66
@ -17,6 +17,8 @@
|
||||
|
||||
#define JTAG_ID_BASE 0x01c40028
|
||||
|
||||
static unsigned int davinci_revision;
|
||||
|
||||
struct davinci_id {
|
||||
u8 variant; /* JTAG ID bits 31:28 */
|
||||
u16 part_no; /* JTAG ID bits 27:12 */
|
||||
@ -33,6 +35,20 @@ static struct davinci_id davinci_ids[] __initdata = {
|
||||
.manufacturer = 0x017,
|
||||
.type = 0x64460000,
|
||||
},
|
||||
{
|
||||
/* DM646X */
|
||||
.part_no = 0xb770,
|
||||
.variant = 0x0,
|
||||
.manufacturer = 0x017,
|
||||
.type = 0x64670000,
|
||||
},
|
||||
{
|
||||
/* DM355 */
|
||||
.part_no = 0xb73b,
|
||||
.variant = 0x0,
|
||||
.manufacturer = 0x00f,
|
||||
.type = 0x03550000,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
@ -63,6 +79,12 @@ static u8 __init davinci_get_variant(void)
|
||||
return variant;
|
||||
}
|
||||
|
||||
unsigned int davinci_rev(void)
|
||||
{
|
||||
return davinci_revision >> 16;
|
||||
}
|
||||
EXPORT_SYMBOL(davinci_rev);
|
||||
|
||||
void __init davinci_check_revision(void)
|
||||
{
|
||||
int i;
|
||||
@ -75,7 +97,7 @@ void __init davinci_check_revision(void)
|
||||
/* First check only the major version in a safe way */
|
||||
for (i = 0; i < ARRAY_SIZE(davinci_ids); i++) {
|
||||
if (part_no == (davinci_ids[i].part_no)) {
|
||||
system_rev = davinci_ids[i].type;
|
||||
davinci_revision = davinci_ids[i].type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -84,10 +106,11 @@ void __init davinci_check_revision(void)
|
||||
for (i = 0; i < ARRAY_SIZE(davinci_ids); i++) {
|
||||
if (part_no == davinci_ids[i].part_no &&
|
||||
variant == davinci_ids[i].variant) {
|
||||
system_rev = davinci_ids[i].type;
|
||||
davinci_revision = davinci_ids[i].type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
printk("DaVinci DM%04x variant 0x%x\n", system_rev >> 16, variant);
|
||||
printk(KERN_INFO "DaVinci DM%04x variant 0x%x\n",
|
||||
davinci_rev(), variant);
|
||||
}
|
||||
|
49
arch/arm/mach-davinci/include/mach/cputype.h
Normal file
49
arch/arm/mach-davinci/include/mach/cputype.h
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* DaVinci CPU type detection
|
||||
*
|
||||
* Author: Kevin Hilman, Deep Root Systems, LLC
|
||||
*
|
||||
* Defines the cpu_is_*() macros for runtime detection of DaVinci
|
||||
* device type. In addtion, if support for a given device is not
|
||||
* compiled in to the kernel, the macros return 0 so that
|
||||
* resulting code can be optimized out.
|
||||
*
|
||||
* 2009 (c) Deep Root Systems, LLC. This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#ifndef _ASM_ARCH_CPU_H
|
||||
#define _ASM_ARCH_CPU_H
|
||||
|
||||
extern unsigned int davinci_rev(void);
|
||||
|
||||
#define IS_DAVINCI_CPU(type, id) \
|
||||
static inline int is_davinci_dm ##type(void) \
|
||||
{ \
|
||||
return (davinci_rev() == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
IS_DAVINCI_CPU(644x, 0x6446)
|
||||
IS_DAVINCI_CPU(646x, 0x6467)
|
||||
IS_DAVINCI_CPU(355, 0x355)
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DM644x
|
||||
#define cpu_is_davinci_dm644x() is_davinci_dm644x()
|
||||
#else
|
||||
#define cpu_is_davinci_dm644x() 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DM646x
|
||||
#define cpu_is_davinci_dm646x() is_davinci_dm646x()
|
||||
#else
|
||||
#define cpu_is_davinci_dm646x() 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DM355
|
||||
#define cpu_is_davinci_dm355() is_davinci_dm355()
|
||||
#else
|
||||
#define cpu_is_davinci_dm355() 0
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user