diff options
Diffstat (limited to 'arch/arm/mach-at91/setup.c')
-rw-r--r-- | arch/arm/mach-at91/setup.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c new file mode 100644 index 000000000000..096eb9805212 --- /dev/null +++ b/arch/arm/mach-at91/setup.c @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2007 Atmel Corporation. + * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <linux/module.h> +#include <linux/io.h> + +#include <asm/mach/map.h> + +#include <mach/hardware.h> +#include <mach/cpu.h> + +#include "soc.h" +#include "generic.h" + +struct at91_soc __initdata at91_boot_soc; + +static struct map_desc at91_io_desc __initdata = { + .virtual = AT91_VA_BASE_SYS, + .pfn = __phys_to_pfn(AT91_BASE_SYS), + .length = SZ_16K, + .type = MT_DEVICE, +}; + +void __init at91_map_io(void) +{ + /* Map peripherals */ + iotable_init(&at91_io_desc, 1); + + if (cpu_is_at91cap9()) + at91_boot_soc = at91cap9_soc; + else if (cpu_is_at91rm9200()) + at91_boot_soc = at91rm9200_soc; + else if (cpu_is_at91sam9260()) + at91_boot_soc = at91sam9260_soc; + else if (cpu_is_at91sam9261()) + at91_boot_soc = at91sam9261_soc; + else if (cpu_is_at91sam9263()) + at91_boot_soc = at91sam9263_soc; + else if (cpu_is_at91sam9g10()) + at91_boot_soc = at91sam9261_soc; + else if (cpu_is_at91sam9g20()) + at91_boot_soc = at91sam9260_soc; + else if (cpu_is_at91sam9g45()) + at91_boot_soc = at91sam9g45_soc; + else if (cpu_is_at91sam9rl()) + at91_boot_soc = at91sam9rl_soc; + else if (cpu_is_at91sam9x5()) + at91_boot_soc = at91sam9x5_soc; + else + panic("Impossible to detect the SOC type"); + + if (at91_boot_soc.map_io) + at91_boot_soc.map_io(); +} + +void __init at91_initialize(unsigned long main_clock) +{ + at91_boot_soc.init(main_clock); +} |