aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-at91/soc.h
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2011-04-23 10:12:57 -0400
committerArnd Bergmann <arnd@arndb.de>2011-07-28 11:07:28 -0400
commit8c3583b634d5705d8f604c0d9392bc273d19c256 (patch)
treefa2c010c4dbea580526cb91a25ae0e57abc0f099 /arch/arm/mach-at91/soc.h
parent1ff5b1b411bf8a8157ae949a1b3ed8666d96c1db (diff)
at91: use structure to store the current soc
instead of reading the registers everytime the current implementation respect the following constrain: - allow 1 to n soc to be enabled - allow to have a virtual cpu type and subtype - always detect the cpu type and subtype and report it - detect if the soc support is enabled - prepare for sysfs export support - drop soc specific code via compiler when the soc not enabled (via cpu_is_xxx) Today if we read the exid we will have the same value for 9g35 and 9m11 and we will need to check the cidr too with the new implementation we just need to check the soc subtype this will also allow to have specific virtual subtype for rm9200 which the board will have to specify via at91rm9200_set_type(int) as we have no way to detect it. this implementation is inspired by the SH cpu detection support Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Cc: Nicolas Ferre <nicolas.ferre@atmel.com> Cc: Patrice Vilchez <patrice.vilchez@atmel.com>
Diffstat (limited to 'arch/arm/mach-at91/soc.h')
-rw-r--r--arch/arm/mach-at91/soc.h57
1 files changed, 47 insertions, 10 deletions
diff --git a/arch/arm/mach-at91/soc.h b/arch/arm/mach-at91/soc.h
index 99afa7c90d65..9de7be4037c4 100644
--- a/arch/arm/mach-at91/soc.h
+++ b/arch/arm/mach-at91/soc.h
@@ -4,18 +4,55 @@
4 * Under GPLv2 4 * Under GPLv2
5 */ 5 */
6 6
7struct at91_soc { 7struct at91_init_soc {
8 unsigned int *default_irq_priority; 8 unsigned int *default_irq_priority;
9 void (*map_io)(void); 9 void (*map_io)(void);
10 void (*init)(unsigned long main_clock); 10 void (*init)(unsigned long main_clock);
11}; 11};
12 12
13extern struct at91_soc at91_boot_soc; 13extern struct at91_init_soc at91_boot_soc;
14extern struct at91_soc at91cap9_soc; 14extern struct at91_init_soc at91cap9_soc;
15extern struct at91_soc at91rm9200_soc; 15extern struct at91_init_soc at91rm9200_soc;
16extern struct at91_soc at91sam9260_soc; 16extern struct at91_init_soc at91sam9260_soc;
17extern struct at91_soc at91sam9261_soc; 17extern struct at91_init_soc at91sam9261_soc;
18extern struct at91_soc at91sam9263_soc; 18extern struct at91_init_soc at91sam9263_soc;
19extern struct at91_soc at91sam9g45_soc; 19extern struct at91_init_soc at91sam9g45_soc;
20extern struct at91_soc at91sam9rl_soc; 20extern struct at91_init_soc at91sam9rl_soc;
21extern struct at91_soc at91sam9x5_soc; 21extern struct at91_init_soc at91sam9x5_soc;
22
23static inline int at91_soc_is_enabled(void)
24{
25 return at91_boot_soc.init != NULL;
26}
27
28#if !defined(CONFIG_ARCH_AT91CAP9)
29#define at91cap9_soc at91_boot_soc
30#endif
31
32#if !defined(CONFIG_ARCH_AT91RM9200)
33#define at91rm9200_soc at91_boot_soc
34#endif
35
36#if !(defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20))
37#define at91sam9260_soc at91_boot_soc
38#endif
39
40#if !(defined(CONFIG_ARCH_AT91SAM9261) || defined(CONFIG_ARCH_AT91SAM9G10))
41#define at91sam9261_soc at91_boot_soc
42#endif
43
44#if !defined(CONFIG_ARCH_AT91SAM9263)
45#define at91sam9263_soc at91_boot_soc
46#endif
47
48#if !defined(CONFIG_ARCH_AT91SAM9G45)
49#define at91sam9g45_soc at91_boot_soc
50#endif
51
52#if !defined(CONFIG_ARCH_AT91SAM9RL)
53#define at91sam9rl_soc at91_boot_soc
54#endif
55
56#if !defined(CONFIG_ARCH_AT91SAM9X5)
57#define at91sam9x5_soc at91_boot_soc
58#endif