|
@@ -277,3 +277,128 @@ static void __init at91sam9260_register_clocks(void)
|
|
clk_register(periph_clocks[i]);
|
|
clk_register(periph_clocks[i]);
|
|
|
|
|
|
clkdev_add_table(periph_clocks_lookups,
|
|
clkdev_add_table(periph_clocks_lookups,
|
|
|
|
+ ARRAY_SIZE(periph_clocks_lookups));
|
|
|
|
+ clkdev_add_table(usart_clocks_lookups,
|
|
|
|
+ ARRAY_SIZE(usart_clocks_lookups));
|
|
|
|
+
|
|
|
|
+ clk_register(&pck0);
|
|
|
|
+ clk_register(&pck1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* --------------------------------------------------------------------
|
|
|
|
+ * GPIO
|
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
|
+
|
|
|
|
+static struct at91_gpio_bank at91sam9260_gpio[] __initdata = {
|
|
|
|
+ {
|
|
|
|
+ .id = AT91SAM9260_ID_PIOA,
|
|
|
|
+ .regbase = AT91SAM9260_BASE_PIOA,
|
|
|
|
+ }, {
|
|
|
|
+ .id = AT91SAM9260_ID_PIOB,
|
|
|
|
+ .regbase = AT91SAM9260_BASE_PIOB,
|
|
|
|
+ }, {
|
|
|
|
+ .id = AT91SAM9260_ID_PIOC,
|
|
|
|
+ .regbase = AT91SAM9260_BASE_PIOC,
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* --------------------------------------------------------------------
|
|
|
|
+ * AT91SAM9260 processor initialization
|
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
|
+
|
|
|
|
+static void __init at91sam9xe_map_io(void)
|
|
|
|
+{
|
|
|
|
+ unsigned long sram_size;
|
|
|
|
+
|
|
|
|
+ switch (at91_soc_initdata.cidr & AT91_CIDR_SRAMSIZ) {
|
|
|
|
+ case AT91_CIDR_SRAMSIZ_32K:
|
|
|
|
+ sram_size = 2 * SZ_16K;
|
|
|
|
+ break;
|
|
|
|
+ case AT91_CIDR_SRAMSIZ_16K:
|
|
|
|
+ default:
|
|
|
|
+ sram_size = SZ_16K;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ at91_init_sram(0, AT91SAM9XE_SRAM_BASE, sram_size);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void __init at91sam9260_map_io(void)
|
|
|
|
+{
|
|
|
|
+ if (cpu_is_at91sam9xe())
|
|
|
|
+ at91sam9xe_map_io();
|
|
|
|
+ else if (cpu_is_at91sam9g20())
|
|
|
|
+ at91_init_sram(0, AT91SAM9G20_SRAM_BASE, AT91SAM9G20_SRAM_SIZE);
|
|
|
|
+ else
|
|
|
|
+ at91_init_sram(0, AT91SAM9260_SRAM_BASE, AT91SAM9260_SRAM_SIZE);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void __init at91sam9260_ioremap_registers(void)
|
|
|
|
+{
|
|
|
|
+ at91_ioremap_shdwc(AT91SAM9260_BASE_SHDWC);
|
|
|
|
+ at91_ioremap_rstc(AT91SAM9260_BASE_RSTC);
|
|
|
|
+ at91_ioremap_ramc(0, AT91SAM9260_BASE_SDRAMC, 512);
|
|
|
|
+ at91sam926x_ioremap_pit(AT91SAM9260_BASE_PIT);
|
|
|
|
+ at91sam9_ioremap_smc(0, AT91SAM9260_BASE_SMC);
|
|
|
|
+ at91_ioremap_matrix(AT91SAM9260_BASE_MATRIX);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void __init at91sam9260_initialize(void)
|
|
|
|
+{
|
|
|
|
+ arm_pm_idle = at91sam9_idle;
|
|
|
|
+ arm_pm_restart = at91sam9_alt_restart;
|
|
|
|
+ at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1)
|
|
|
|
+ | (1 << AT91SAM9260_ID_IRQ2);
|
|
|
|
+
|
|
|
|
+ /* Register GPIO subsystem */
|
|
|
|
+ at91_gpio_init(at91sam9260_gpio, 3);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* --------------------------------------------------------------------
|
|
|
|
+ * Interrupt initialization
|
|
|
|
+ * -------------------------------------------------------------------- */
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * The default interrupt priority levels (0 = lowest, 7 = highest).
|
|
|
|
+ */
|
|
|
|
+static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {
|
|
|
|
+ 7, /* Advanced Interrupt Controller */
|
|
|
|
+ 7, /* System Peripherals */
|
|
|
|
+ 1, /* Parallel IO Controller A */
|
|
|
|
+ 1, /* Parallel IO Controller B */
|
|
|
|
+ 1, /* Parallel IO Controller C */
|
|
|
|
+ 0, /* Analog-to-Digital Converter */
|
|
|
|
+ 5, /* USART 0 */
|
|
|
|
+ 5, /* USART 1 */
|
|
|
|
+ 5, /* USART 2 */
|
|
|
|
+ 0, /* Multimedia Card Interface */
|
|
|
|
+ 2, /* USB Device Port */
|
|
|
|
+ 6, /* Two-Wire Interface */
|
|
|
|
+ 5, /* Serial Peripheral Interface 0 */
|
|
|
|
+ 5, /* Serial Peripheral Interface 1 */
|
|
|
|
+ 5, /* Serial Synchronous Controller */
|
|
|
|
+ 0,
|
|
|
|
+ 0,
|
|
|
|
+ 0, /* Timer Counter 0 */
|
|
|
|
+ 0, /* Timer Counter 1 */
|
|
|
|
+ 0, /* Timer Counter 2 */
|
|
|
|
+ 2, /* USB Host port */
|
|
|
|
+ 3, /* Ethernet */
|
|
|
|
+ 0, /* Image Sensor Interface */
|
|
|
|
+ 5, /* USART 3 */
|
|
|
|
+ 5, /* USART 4 */
|
|
|
|
+ 5, /* USART 5 */
|
|
|
|
+ 0, /* Timer Counter 3 */
|
|
|
|
+ 0, /* Timer Counter 4 */
|
|
|
|
+ 0, /* Timer Counter 5 */
|
|
|
|
+ 0, /* Advanced Interrupt Controller */
|
|
|
|
+ 0, /* Advanced Interrupt Controller */
|
|
|
|
+ 0, /* Advanced Interrupt Controller */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+AT91_SOC_START(sam9260)
|
|
|
|
+ .map_io = at91sam9260_map_io,
|
|
|
|
+ .default_irq_priority = at91sam9260_default_irq_priority,
|
|
|
|
+ .ioremap_registers = at91sam9260_ioremap_registers,
|
|
|
|
+ .register_clocks = at91sam9260_register_clocks,
|
|
|
|
+ .init = at91sam9260_initialize,
|
|
|
|
+AT91_SOC_END
|