|
@@ -536,3 +536,89 @@ static ssize_t ts78xx_fpga_store(struct kobject *kobj,
|
|
|
|
|
|
ret = (ts78xx_fpga.state == 0)
|
|
|
? ts78xx_fpga_load()
|
|
|
+ : ts78xx_fpga_unload();
|
|
|
+
|
|
|
+ if (!(ret < 0))
|
|
|
+ ts78xx_fpga.state = value;
|
|
|
+
|
|
|
+ return n;
|
|
|
+}
|
|
|
+
|
|
|
+static struct kobj_attribute ts78xx_fpga_attr =
|
|
|
+ __ATTR(ts78xx_fpga, 0644, ts78xx_fpga_show, ts78xx_fpga_store);
|
|
|
+
|
|
|
+/*****************************************************************************
|
|
|
+ * General Setup
|
|
|
+ ****************************************************************************/
|
|
|
+static unsigned int ts78xx_mpp_modes[] __initdata = {
|
|
|
+ MPP0_UNUSED,
|
|
|
+ MPP1_GPIO, /* JTAG Clock */
|
|
|
+ MPP2_GPIO, /* JTAG Data In */
|
|
|
+ MPP3_GPIO, /* Lat ECP2 256 FPGA - PB2B */
|
|
|
+ MPP4_GPIO, /* JTAG Data Out */
|
|
|
+ MPP5_GPIO, /* JTAG TMS */
|
|
|
+ MPP6_GPIO, /* Lat ECP2 256 FPGA - PB31A_CLK4+ */
|
|
|
+ MPP7_GPIO, /* Lat ECP2 256 FPGA - PB22B */
|
|
|
+ MPP8_UNUSED,
|
|
|
+ MPP9_UNUSED,
|
|
|
+ MPP10_UNUSED,
|
|
|
+ MPP11_UNUSED,
|
|
|
+ MPP12_UNUSED,
|
|
|
+ MPP13_UNUSED,
|
|
|
+ MPP14_UNUSED,
|
|
|
+ MPP15_UNUSED,
|
|
|
+ MPP16_UART,
|
|
|
+ MPP17_UART,
|
|
|
+ MPP18_UART,
|
|
|
+ MPP19_UART,
|
|
|
+ /*
|
|
|
+ * MPP[20] PCI Clock Out 1
|
|
|
+ * MPP[21] PCI Clock Out 0
|
|
|
+ * MPP[22] Unused
|
|
|
+ * MPP[23] Unused
|
|
|
+ * MPP[24] Unused
|
|
|
+ * MPP[25] Unused
|
|
|
+ */
|
|
|
+ 0,
|
|
|
+};
|
|
|
+
|
|
|
+static void __init ts78xx_init(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Setup basic Orion functions. Need to be called early.
|
|
|
+ */
|
|
|
+ orion5x_init();
|
|
|
+
|
|
|
+ orion5x_mpp_conf(ts78xx_mpp_modes);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Configure peripherals.
|
|
|
+ */
|
|
|
+ orion5x_ehci0_init();
|
|
|
+ orion5x_ehci1_init();
|
|
|
+ orion5x_eth_init(&ts78xx_eth_data);
|
|
|
+ orion5x_sata_init(&ts78xx_sata_data);
|
|
|
+ orion5x_uart0_init();
|
|
|
+ orion5x_uart1_init();
|
|
|
+ orion5x_xor_init();
|
|
|
+
|
|
|
+ /* FPGA init */
|
|
|
+ ts78xx_fpga_devices_zero_init();
|
|
|
+ ret = ts78xx_fpga_load();
|
|
|
+ ret = sysfs_create_file(firmware_kobj, &ts78xx_fpga_attr.attr);
|
|
|
+ if (ret)
|
|
|
+ pr_err("sysfs_create_file failed: %d\n", ret);
|
|
|
+}
|
|
|
+
|
|
|
+MACHINE_START(TS78XX, "Technologic Systems TS-78xx SBC")
|
|
|
+ /* Maintainer: Alexander Clouter <alex@digriz.org.uk> */
|
|
|
+ .atag_offset = 0x100,
|
|
|
+ .init_machine = ts78xx_init,
|
|
|
+ .map_io = ts78xx_map_io,
|
|
|
+ .init_early = orion5x_init_early,
|
|
|
+ .init_irq = orion5x_init_irq,
|
|
|
+ .timer = &orion5x_timer,
|
|
|
+ .restart = orion5x_restart,
|
|
|
+MACHINE_END
|