Loading arch/arm/mach-davinci/id.c +26 −3 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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, }, }; /* Loading Loading @@ -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; Loading @@ -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; } } Loading @@ -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); } arch/arm/mach-davinci/include/mach/cputype.h 0 → 100644 +49 −0 Original line number Diff line number Diff line /* * 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
arch/arm/mach-davinci/id.c +26 −3 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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, }, }; /* Loading Loading @@ -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; Loading @@ -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; } } Loading @@ -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); }
arch/arm/mach-davinci/include/mach/cputype.h 0 → 100644 +49 −0 Original line number Diff line number Diff line /* * 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