|
@@ -800,3 +800,118 @@ static mfp_cfg_t zeus_pin_config[] __initdata = {
|
|
|
|
|
|
GPIO48_nPOE,
|
|
|
GPIO49_nPWE,
|
|
|
+ GPIO50_nPIOR,
|
|
|
+ GPIO51_nPIOW,
|
|
|
+ GPIO85_nPCE_1,
|
|
|
+ GPIO54_nPCE_2,
|
|
|
+ GPIO79_PSKTSEL,
|
|
|
+ GPIO55_nPREG,
|
|
|
+ GPIO56_nPWAIT,
|
|
|
+ GPIO57_nIOIS16,
|
|
|
+ GPIO36_GPIO, /* CF CD */
|
|
|
+ GPIO97_GPIO, /* CF PWREN */
|
|
|
+ GPIO99_GPIO, /* CF RDY */
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * DM9k MSCx settings: SRAM, 16 bits
|
|
|
+ * 17 cycles delay first access
|
|
|
+ * 5 cycles delay next access
|
|
|
+ * 13 cycles recovery time
|
|
|
+ * faster device
|
|
|
+ */
|
|
|
+#define DM9K_MSC_VALUE 0xe4c9
|
|
|
+
|
|
|
+static void __init zeus_init(void)
|
|
|
+{
|
|
|
+ u16 dm9000_msc = DM9K_MSC_VALUE;
|
|
|
+ u32 msc0, msc1;
|
|
|
+
|
|
|
+ system_rev = __raw_readw(ZEUS_CPLD_VERSION);
|
|
|
+ pr_info("Zeus CPLD V%dI%d\n", (system_rev & 0xf0) >> 4, (system_rev & 0x0f));
|
|
|
+
|
|
|
+ /* Fix timings for dm9000s (CS1/CS2)*/
|
|
|
+ msc0 = (__raw_readl(MSC0) & 0x0000ffff) | (dm9000_msc << 16);
|
|
|
+ msc1 = (__raw_readl(MSC1) & 0xffff0000) | dm9000_msc;
|
|
|
+ __raw_writel(msc0, MSC0);
|
|
|
+ __raw_writel(msc1, MSC1);
|
|
|
+
|
|
|
+ pm_power_off = zeus_power_off;
|
|
|
+ zeus_setup_apm();
|
|
|
+
|
|
|
+ pxa2xx_mfp_config(ARRAY_AND_SIZE(zeus_pin_config));
|
|
|
+
|
|
|
+ platform_add_devices(zeus_devices, ARRAY_SIZE(zeus_devices));
|
|
|
+
|
|
|
+ pxa_set_ohci_info(&zeus_ohci_platform_data);
|
|
|
+
|
|
|
+ if (zeus_setup_fb_gpios())
|
|
|
+ pr_err("Failed to setup fb gpios\n");
|
|
|
+ else
|
|
|
+ pxa_set_fb_info(NULL, &zeus_fb_info);
|
|
|
+
|
|
|
+ pxa_set_mci_info(&zeus_mci_platform_data);
|
|
|
+ pxa_set_udc_info(&zeus_udc_info);
|
|
|
+ pxa_set_ac97_info(&zeus_ac97_info);
|
|
|
+ pxa_set_i2c_info(NULL);
|
|
|
+ i2c_register_board_info(0, ARRAY_AND_SIZE(zeus_i2c_devices));
|
|
|
+ pxa2xx_set_spi_info(3, &pxa2xx_spi_ssp3_master_info);
|
|
|
+ spi_register_board_info(zeus_spi_board_info, ARRAY_SIZE(zeus_spi_board_info));
|
|
|
+}
|
|
|
+
|
|
|
+static struct map_desc zeus_io_desc[] __initdata = {
|
|
|
+ {
|
|
|
+ .virtual = (unsigned long)ZEUS_CPLD_VERSION,
|
|
|
+ .pfn = __phys_to_pfn(ZEUS_CPLD_VERSION_PHYS),
|
|
|
+ .length = 0x1000,
|
|
|
+ .type = MT_DEVICE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .virtual = (unsigned long)ZEUS_CPLD_ISA_IRQ,
|
|
|
+ .pfn = __phys_to_pfn(ZEUS_CPLD_ISA_IRQ_PHYS),
|
|
|
+ .length = 0x1000,
|
|
|
+ .type = MT_DEVICE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .virtual = (unsigned long)ZEUS_CPLD_CONTROL,
|
|
|
+ .pfn = __phys_to_pfn(ZEUS_CPLD_CONTROL_PHYS),
|
|
|
+ .length = 0x1000,
|
|
|
+ .type = MT_DEVICE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .virtual = (unsigned long)ZEUS_PC104IO,
|
|
|
+ .pfn = __phys_to_pfn(ZEUS_PC104IO_PHYS),
|
|
|
+ .length = 0x00800000,
|
|
|
+ .type = MT_DEVICE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static void __init zeus_map_io(void)
|
|
|
+{
|
|
|
+ pxa27x_map_io();
|
|
|
+
|
|
|
+ iotable_init(zeus_io_desc, ARRAY_SIZE(zeus_io_desc));
|
|
|
+
|
|
|
+ /* Clear PSPR to ensure a full restart on wake-up. */
|
|
|
+ PMCR = PSPR = 0;
|
|
|
+
|
|
|
+ /* enable internal 32.768Khz oscillator (ignore OSCC_OOK) */
|
|
|
+ OSCC |= OSCC_OON;
|
|
|
+
|
|
|
+ /* Some clock cycles later (from OSCC_ON), programme PCFR (OPDE...).
|
|
|
+ * float chip selects and PCMCIA */
|
|
|
+ PCFR = PCFR_OPDE | PCFR_DC_EN | PCFR_FS | PCFR_FP;
|
|
|
+}
|
|
|
+
|
|
|
+MACHINE_START(ARCOM_ZEUS, "Arcom/Eurotech ZEUS")
|
|
|
+ /* Maintainer: Marc Zyngier <maz@misterjones.org> */
|
|
|
+ .atag_offset = 0x100,
|
|
|
+ .map_io = zeus_map_io,
|
|
|
+ .nr_irqs = ZEUS_NR_IRQS,
|
|
|
+ .init_irq = zeus_init_irq,
|
|
|
+ .handle_irq = pxa27x_handle_irq,
|
|
|
+ .timer = &pxa_timer,
|
|
|
+ .init_machine = zeus_init,
|
|
|
+ .restart = pxa_restart,
|
|
|
+MACHINE_END
|
|
|
+
|