diff options
Diffstat (limited to 'arch/arm/mach-at91/setup.c')
-rw-r--r-- | arch/arm/mach-at91/setup.c | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index aa64294c7db3..8bdcc3cb6012 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <linux/module.h> | 8 | #include <linux/module.h> |
9 | #include <linux/io.h> | 9 | #include <linux/io.h> |
10 | #include <linux/mm.h> | 10 | #include <linux/mm.h> |
11 | #include <linux/pm.h> | ||
11 | 12 | ||
12 | #include <asm/mach/map.h> | 13 | #include <asm/mach/map.h> |
13 | 14 | ||
@@ -15,6 +16,7 @@ | |||
15 | #include <mach/cpu.h> | 16 | #include <mach/cpu.h> |
16 | #include <mach/at91_dbgu.h> | 17 | #include <mach/at91_dbgu.h> |
17 | #include <mach/at91_pmc.h> | 18 | #include <mach/at91_pmc.h> |
19 | #include <mach/at91_shdwc.h> | ||
18 | 20 | ||
19 | #include "soc.h" | 21 | #include "soc.h" |
20 | #include "generic.h" | 22 | #include "generic.h" |
@@ -73,27 +75,6 @@ static struct map_desc at91_io_desc __initdata = { | |||
73 | .type = MT_DEVICE, | 75 | .type = MT_DEVICE, |
74 | }; | 76 | }; |
75 | 77 | ||
76 | void __iomem *at91_ioremap(unsigned long p, size_t size, unsigned int type) | ||
77 | { | ||
78 | if (p >= AT91_BASE_SYS && p <= (AT91_BASE_SYS + SZ_16K - 1)) | ||
79 | return (void __iomem *)AT91_IO_P2V(p); | ||
80 | |||
81 | return __arm_ioremap_caller(p, size, type, __builtin_return_address(0)); | ||
82 | } | ||
83 | EXPORT_SYMBOL(at91_ioremap); | ||
84 | |||
85 | void at91_iounmap(volatile void __iomem *addr) | ||
86 | { | ||
87 | unsigned long virt = (unsigned long)addr; | ||
88 | |||
89 | if (virt >= VMALLOC_START && virt < VMALLOC_END) | ||
90 | __iounmap(addr); | ||
91 | } | ||
92 | EXPORT_SYMBOL(at91_iounmap); | ||
93 | |||
94 | #define AT91_DBGU0 0xfffff200 | ||
95 | #define AT91_DBGU1 0xffffee00 | ||
96 | |||
97 | static void __init soc_detect(u32 dbgu_base) | 78 | static void __init soc_detect(u32 dbgu_base) |
98 | { | 79 | { |
99 | u32 cidr, socid; | 80 | u32 cidr, socid; |
@@ -266,9 +247,9 @@ void __init at91_map_io(void) | |||
266 | at91_soc_initdata.type = AT91_SOC_NONE; | 247 | at91_soc_initdata.type = AT91_SOC_NONE; |
267 | at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE; | 248 | at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE; |
268 | 249 | ||
269 | soc_detect(AT91_DBGU0); | 250 | soc_detect(AT91_BASE_DBGU0); |
270 | if (!at91_soc_is_detected()) | 251 | if (!at91_soc_is_detected()) |
271 | soc_detect(AT91_DBGU1); | 252 | soc_detect(AT91_BASE_DBGU1); |
272 | 253 | ||
273 | if (!at91_soc_is_detected()) | 254 | if (!at91_soc_is_detected()) |
274 | panic("AT91: Impossible to detect the SOC type"); | 255 | panic("AT91: Impossible to detect the SOC type"); |
@@ -285,8 +266,25 @@ void __init at91_map_io(void) | |||
285 | at91_boot_soc.map_io(); | 266 | at91_boot_soc.map_io(); |
286 | } | 267 | } |
287 | 268 | ||
269 | void __iomem *at91_shdwc_base = NULL; | ||
270 | |||
271 | static void at91sam9_poweroff(void) | ||
272 | { | ||
273 | at91_shdwc_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW); | ||
274 | } | ||
275 | |||
276 | void __init at91_ioremap_shdwc(u32 base_addr) | ||
277 | { | ||
278 | at91_shdwc_base = ioremap(base_addr, 16); | ||
279 | if (!at91_shdwc_base) | ||
280 | panic("Impossible to ioremap at91_shdwc_base\n"); | ||
281 | pm_power_off = at91sam9_poweroff; | ||
282 | } | ||
283 | |||
288 | void __init at91_initialize(unsigned long main_clock) | 284 | void __init at91_initialize(unsigned long main_clock) |
289 | { | 285 | { |
286 | at91_boot_soc.ioremap_registers(); | ||
287 | |||
290 | /* Init clock subsystem */ | 288 | /* Init clock subsystem */ |
291 | at91_clock_init(main_clock); | 289 | at91_clock_init(main_clock); |
292 | 290 | ||