From 21147a00f2ab7c6fe19c2dde3102227f25176c52 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Tue, 4 Nov 2014 20:21:05 +0100 Subject: [PATCH] kernel: readd kirkwood legacy boot code. --- .../kernel.config.armv5tel-ipfire-kirkwood | 11 + lfs/linux | 1 + .../linux-3.14.22-kirkwood_legacy_boot.patch | 1562 +++++++++++++++++ 3 files changed, 1574 insertions(+) create mode 100644 src/patches/linux-3.14.22-kirkwood_legacy_boot.patch diff --git a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood index 96e0252cdb..64d0300cef 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-kirkwood +++ b/config/kernel/kernel.config.armv5tel-ipfire-kirkwood @@ -333,6 +333,17 @@ CONFIG_MACH_OPENRD_ULTIMATE=y CONFIG_MACH_RD88F6192_NAS=y CONFIG_MACH_RD88F6281=y CONFIG_MACH_T5325=y +CONFIG_MACH_DB88F6281_BP=y +CONFIG_MACH_DOCKSTAR=y +CONFIG_MACH_SHEEVAPLUG=y +CONFIG_MACH_ESATA_SHEEVAPLUG=y +CONFIG_MACH_GURUPLUG=y +CONFIG_MACH_INETSPACE_V2=y +CONFIG_MACH_NETSPACE_MAX_V2=y +CONFIG_MACH_NETSPACE_V2=y +CONFIG_MACH_DREAMPLUG=y +CONFIG_MACH_ICONNECT=y +CONFIG_MACH_NAS6210=y CONFIG_MACH_TS219=y CONFIG_MACH_TS41X=y diff --git a/lfs/linux b/lfs/linux index bcbdeb0ffa..8a1ee9c7c6 100644 --- a/lfs/linux +++ b/lfs/linux @@ -161,6 +161,7 @@ endif ifeq "$(KCFG)" "-kirkwood" cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-mv_cesa_disable_failing_hmac_sha1.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch endif ifeq "$(KCFG)" "-multi" diff --git a/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch b/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch new file mode 100644 index 0000000000..27dfeddca1 --- /dev/null +++ b/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch @@ -0,0 +1,1562 @@ +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,108 @@ ++/* ++ * arch/arm/mach-kirkwood/db88f6281-bp-setup.c ++ * ++ * Marvell DB-88F6281-BP Development Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition db88f6281_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data db88f6281_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(8), ++}; ++ ++static struct mv_sata_platform_data db88f6281_sata_data = { ++ .n_ports = 2, ++}; ++ ++static struct mvsdio_platform_data db88f6281_mvsdio_data = { ++ .gpio_write_protect = 37, ++ .gpio_card_detect = 38, ++}; ++ ++static unsigned int db88f6281_mpp_config[] __initdata = { ++ MPP0_NF_IO2, ++ MPP1_NF_IO3, ++ MPP2_NF_IO4, ++ MPP3_NF_IO5, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP37_GPIO, ++ MPP38_GPIO, ++ 0 ++}; ++ ++static void __init db88f6281_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(db88f6281_mpp_config); ++ ++ kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25); ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&db88f6281_ge00_data); ++ kirkwood_sata_init(&db88f6281_sata_data); ++ kirkwood_uart0_init(); ++ kirkwood_sdio_init(&db88f6281_mvsdio_data); ++} ++ ++static int __init db88f6281_pci_init(void) ++{ ++ if (machine_is_db88f6281_bp()) { ++ u32 dev, rev; ++ ++ kirkwood_pcie_id(&dev, &rev); ++ if (dev == MV88F6282_DEV_ID) ++ kirkwood_pcie_init(KW_PCIE1 | KW_PCIE0); ++ else ++ kirkwood_pcie_init(KW_PCIE0); ++ } ++ return 0; ++} ++subsys_initcall(db88f6281_pci_init); ++ ++MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board") ++ /* Maintainer: Saeed Bishara */ ++ .atag_offset = 0x100, ++ .init_machine = db88f6281_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,111 @@ ++/* ++ * arch/arm/mach-kirkwood/dockstar-setup.c ++ * ++ * Seagate FreeAgent DockStar Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition dockstar_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data dockstar_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct gpio_led dockstar_led_pins[] = { ++ { ++ .name = "dockstar:green:health", ++ .default_trigger = "default-on", ++ .gpio = 46, ++ .active_low = 1, ++ }, ++ { ++ .name = "dockstar:orange:misc", ++ .default_trigger = "none", ++ .gpio = 47, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data dockstar_led_data = { ++ .leds = dockstar_led_pins, ++ .num_leds = ARRAY_SIZE(dockstar_led_pins), ++}; ++ ++static struct platform_device dockstar_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &dockstar_led_data, ++ } ++}; ++ ++static unsigned int dockstar_mpp_config[] __initdata = { ++ MPP29_GPIO, /* USB Power Enable */ ++ MPP46_GPIO, /* LED green */ ++ MPP47_GPIO, /* LED orange */ ++ 0 ++}; ++ ++static void __init dockstar_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ ++ /* setup gpio pin select */ ++ kirkwood_mpp_conf(dockstar_mpp_config); ++ ++ kirkwood_uart0_init(); ++ kirkwood_nand_init(ARRAY_AND_SIZE(dockstar_nand_parts), 25); ++ ++ if (gpio_request(29, "USB Power Enable") != 0 || ++ gpio_direction_output(29, 1) != 0) ++ pr_err("can't set up GPIO 29 (USB Power Enable)\n"); ++ kirkwood_ehci_init(); ++ ++ kirkwood_ge00_init(&dockstar_ge00_data); ++ ++ platform_device_register(&dockstar_leds); ++} ++ ++MACHINE_START(DOCKSTAR, "Seagate FreeAgent DockStar") ++ .atag_offset = 0x100, ++ .init_machine = dockstar_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c 2014-11-04 00:25:48.383688273 +0100 +@@ -0,0 +1,151 @@ ++/* ++ * arch/arm/mach-kirkwood/dreamplug-setup.c ++ * ++ * Marvell DreamPlug Reference Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static const struct flash_platform_data dreamplug_spi_slave_data = { ++ .type = "mx25l1606e", ++}; ++ ++static struct spi_board_info __initdata dreamplug_spi_slave_info[] = { ++ { ++ .modalias = "m25p80", ++ .platform_data = &dreamplug_spi_slave_data, ++ .irq = -1, ++ .max_speed_hz = 50000000, ++ .bus_num = 0, ++ .chip_select = 0, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data dreamplug_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct mv643xx_eth_platform_data dreamplug_ge01_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(1), ++}; ++ ++static struct mv_sata_platform_data dreamplug_sata_data = { ++ .n_ports = 1, ++}; ++ ++static struct mvsdio_platform_data dreamplug_mvsdio_data = { ++ /* unfortunately the CD signal has not been connected */ ++}; ++ ++static struct gpio_led dreamplug_led_pins[] = { ++ { ++ .name = "dreamplug:blue:bluetooth", ++ .gpio = 47, ++ .active_low = 1, ++ }, ++ { ++ .name = "dreamplug:green:wlan", ++ .gpio = 48, ++ .active_low = 1, ++ }, ++ { ++ .name = "dreamplug:blue:wlanap", ++ .gpio = 49, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data dreamplug_led_data = { ++ .leds = dreamplug_led_pins, ++ .num_leds = ARRAY_SIZE(dreamplug_led_pins), ++}; ++ ++static struct platform_device dreamplug_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &dreamplug_led_data, ++ } ++}; ++ ++static unsigned int dreamplug_mpp_config[] __initdata = { ++ MPP0_SPI_SCn, ++ MPP1_SPI_MOSI, ++ MPP2_SPI_SCK, ++ MPP3_SPI_MISO, ++ MPP4_GPIO, ++ MPP5_GPO, ++ MPP7_GPO, ++ MPP18_GPO, ++ MPP19_GPO, ++ MPP47_GPIO, /* B_BLED */ ++ MPP48_GPIO, /* W_GLED */ ++ MPP49_GPIO, /* W_BLED */ ++ 0 ++}; ++ ++static void __init dreamplug_legacy_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(dreamplug_mpp_config); ++ ++ kirkwood_uart0_init(); ++ ++ spi_register_board_info(dreamplug_spi_slave_info, ++ ARRAY_SIZE(dreamplug_spi_slave_info)); ++ ++ kirkwood_spi_init(); ++ kirkwood_ehci_init(); ++ ++ kirkwood_ge00_init(&dreamplug_ge00_data); ++ kirkwood_ge01_init(&dreamplug_ge01_data); ++ kirkwood_sata_init(&dreamplug_sata_data); ++ kirkwood_sdio_init(&dreamplug_mvsdio_data); ++ ++ platform_device_register(&dreamplug_leds); ++} ++ ++MACHINE_START(DREAMPLUG, "Marvell DreamPlug Reference Board") ++ /* Maintainer: Siddarth Gore marvell.com> */ ++ .atag_offset = 0x100, ++ .init_machine = dreamplug_legacy_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++ ++MACHINE_START(DREAMPLUG1, "Marvell DreamPlug Reference Board") ++ .atag_offset = 0x100, ++ .init_machine = dreamplug_legacy_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++ ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c 2014-11-04 00:25:48.383688273 +0100 +@@ -0,0 +1,135 @@ ++/* ++ * arch/arm/mach-kirkwood/guruplug-setup.c ++ * ++ * Marvell GuruPlug Reference Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition guruplug_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M, ++ .mask_flags = MTD_WRITEABLE, /* read only */ ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M, ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data guruplug_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct mv643xx_eth_platform_data guruplug_ge01_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(1), ++}; ++ ++static struct mv_sata_platform_data guruplug_sata_data = { ++ .n_ports = 1, ++}; ++ ++static struct mvsdio_platform_data guruplug_mvsdio_data = { ++ /* unfortunately the CD signal has not been connected */ ++ .gpio_card_detect = -1, ++ .gpio_write_protect = -1, ++}; ++ ++static struct gpio_led guruplug_led_pins[] = { ++ { ++ .name = "guruplug:red:health", ++ .gpio = 46, ++ .active_low = 1, ++ }, ++ { ++ .name = "guruplug:green:health", ++ .gpio = 47, ++ .active_low = 1, ++ }, ++ { ++ .name = "guruplug:red:wmode", ++ .gpio = 48, ++ .active_low = 1, ++ }, ++ { ++ .name = "guruplug:green:wmode", ++ .gpio = 49, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data guruplug_led_data = { ++ .leds = guruplug_led_pins, ++ .num_leds = ARRAY_SIZE(guruplug_led_pins), ++}; ++ ++static struct platform_device guruplug_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &guruplug_led_data, ++ } ++}; ++ ++static unsigned int guruplug_mpp_config[] __initdata = { ++ MPP46_GPIO, /* M_RLED */ ++ MPP47_GPIO, /* M_GLED */ ++ MPP48_GPIO, /* B_RLED */ ++ MPP49_GPIO, /* B_GLED */ ++ 0 ++}; ++ ++static void __init guruplug_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(guruplug_mpp_config); ++ ++ kirkwood_uart0_init(); ++ kirkwood_nand_init(ARRAY_AND_SIZE(guruplug_nand_parts), 25); ++ ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&guruplug_ge00_data); ++ kirkwood_ge01_init(&guruplug_ge01_data); ++ kirkwood_sata_init(&guruplug_sata_data); ++ kirkwood_sdio_init(&guruplug_mvsdio_data); ++ ++ platform_device_register(&guruplug_leds); ++} ++ ++MACHINE_START(GURUPLUG, "Marvell GuruPlug Reference Board") ++ /* Maintainer: Siddarth Gore */ ++ .atag_offset = 0x100, ++ .init_machine = guruplug_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c 2014-11-04 00:25:48.383688273 +0100 +@@ -0,0 +1,214 @@ ++/* ++ * arch/arm/mach-kirkwood/iconnect-setup.c ++ * ++ * Iomega iConnect Wireless Data Station Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition iconnect_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M, ++ .mask_flags = MTD_WRITEABLE, /* read only */ ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x440000, ++ }, { ++ .name = "uInit", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x440000, ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data iconnect_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0xB), ++}; ++ ++static struct gpio_led iconnect_led_pins[] = { ++ { ++ .name = "iconnect:led_level", ++ .default_trigger = "default-on", ++ .gpio = 41, ++ .active_low = 0, ++ }, ++ ++ { ++ .name = "iconnect:blue:power", ++ .default_trigger = "default-on", ++ .gpio = 42, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:red:power", ++ .default_trigger = "none", ++ .gpio = 43, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_1", ++ .default_trigger = "none", ++ .gpio = 44, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_2", ++ .default_trigger = "none", ++ .gpio = 45, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_3", ++ .default_trigger = "none", ++ .gpio = 46, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:usb_4", ++ .default_trigger = "none", ++ .gpio = 47, ++ .active_low = 0, ++ }, ++ { ++ .name = "iconnect:blue:otb", ++ .default_trigger = "none", ++ .gpio = 48, ++ .active_low = 0, ++ }, ++}; ++ ++static struct gpio_led_platform_data iconnect_led_data = { ++ .leds = iconnect_led_pins, ++ .num_leds = ARRAY_SIZE(iconnect_led_pins), ++}; ++ ++static struct platform_device iconnect_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &iconnect_led_data, ++ } ++}; ++ ++static struct gpio_keys_button iconnect_buttons[] = { ++ { ++ .code = KEY_COPY, ++ .gpio = 35, ++ .desc = "OTB Button", ++ .active_low = 1, ++ }, ++ { ++ .code = KEY_RESTART, ++ .gpio = 12, ++ .desc = "Reset", ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_keys_platform_data iconnect_button_data = { ++ .buttons = iconnect_buttons, ++ .nbuttons = ARRAY_SIZE(iconnect_buttons), ++}; ++ ++static struct platform_device iconnect_button_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .num_resources = 0, ++ .dev = { ++ .platform_data = &iconnect_button_data, ++ } ++}; ++ ++static unsigned int iconnect_mpp_config[] __initdata = { ++ MPP0_NF_IO2, ++ MPP1_NF_IO3, ++ MPP2_NF_IO4, ++ MPP3_NF_IO5, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP12_GPIO, /* Reset Button */ ++ MPP35_GPIO, /* OTB Button */ ++ ++ MPP41_GPIO, /* LED Level */ ++ MPP42_GPIO, /* Power LED blue */ ++ MPP43_GPIO, /* Power LED red */ ++ MPP44_GPIO, /* USB LED 1 */ ++ MPP45_GPIO, /* USB LED 2 */ ++ MPP46_GPIO, /* USB LED 3 */ ++ MPP47_GPIO, /* USB LED 4 */ ++ MPP48_GPIO, /* OTB LED */ ++ 0 ++}; ++ ++static struct i2c_board_info __initdata iconnect_i2c = { ++ I2C_BOARD_INFO("lm63", 0x4c), ++}; ++ ++static void __init iconnect_legacy_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(iconnect_mpp_config); ++ ++ kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25); ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&iconnect_ge00_data); ++ ++ kirkwood_uart0_init(); ++ platform_device_register(&iconnect_leds); ++ platform_device_register(&iconnect_button_device); ++ ++ kirkwood_i2c_init(); ++ i2c_register_board_info(0, &iconnect_i2c,1); ++} ++ ++static int __init iconnect_pci_init(void) ++{ ++ if (machine_is_iconnect()) { ++ kirkwood_pcie_init(KW_PCIE0); ++ } ++ return 0; ++} ++subsys_initcall(iconnect_pci_init); ++ ++MACHINE_START(ICONNECT, "Iomega iConnect Wireless Data Station") ++ /* Maintainer: Arne Fitzenreiter */ ++ .atag_offset = 0x100, ++ .init_machine = iconnect_legacy_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++ ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig linux-3.14.22/arch/arm/mach-kirkwood/Kconfig +--- linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/Kconfig 2014-11-04 01:10:52.950526196 +0100 +@@ -1,3 +1,5 @@ ++ ++ + if ARCH_KIRKWOOD + + menu "Marvell Kirkwood Implementations" +@@ -72,6 +74,83 @@ + Say 'Y' here if you want your kernel to support the + HP t5325 Thin Client. + ++config MACH_DB88F6281_BP ++ bool "Marvell DB-88F6281-BP Development Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell DB-88F6281-BP Development Board. ++ ++config MACH_DOCKSTAR ++ bool "Seagate FreeAgent DockStar" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Seagate FreeAgent DockStar. ++ ++config MACH_SHEEVAPLUG ++ bool "Marvell SheevaPlug Reference Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell SheevaPlug Reference Board. ++ ++config MACH_ESATA_SHEEVAPLUG ++ bool "Marvell eSATA SheevaPlug Reference Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell eSATA SheevaPlug Reference Board. ++ ++config MACH_GURUPLUG ++ bool "Marvell GuruPlug Reference Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell GuruPlug Reference Board. ++ ++config MACH_INETSPACE_V2 ++ bool "LaCie Internet Space v2 NAS Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ LaCie Internet Space v2 NAS. ++ ++config MACH_NETSPACE_MAX_V2 ++ bool "LaCie Network Space Max v2 NAS Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ LaCie Network Space Max v2 NAS. ++ ++config MACH_NETSPACE_V2 ++ bool "LaCie Network Space v2 NAS Board" ++ select KIRKWOOD_LEGACY ++ help ++ Say 'Y' here if you want your kernel to support the ++ LaCie Network Space v2 NAS. ++ ++config MACH_DREAMPLUG ++ select KIRKWOOD_LEGACY ++ bool "Marvell DreamPlug Reference Board" ++ help ++ Say 'Y' here if you want your kernel to support the ++ Marvell DreamPlug Reference Board. ++ ++config MACH_ICONNECT ++ select KIRKWOOD_LEGACY ++ bool "Iomega iConnect Wireless Data Station" ++ help ++ Say 'Y' here if you want your kernel to support the ++ Iomega iConnect Wireless Data Station. ++ ++config MACH_NAS6210 ++ select KIRKWOOD_LEGACY ++ bool "Raidsonic ICY BOX IB-62x0" ++ help ++ Say 'Y' here if you want your kernel to support the ++ Raidsonic ICY BOX IB-62x0. ++ + config MACH_TS219 + bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS" + select KIRKWOOD_LEGACY +@@ -113,6 +192,7 @@ + Say 'Y' here if you want your kernel to support the + Marvell 88F6281 GTW GE Board (Flattened Device Tree). + ++ + endmenu + + endif +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile linux-3.14.22/arch/arm/mach-kirkwood/Makefile +--- linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/arch/arm/mach-kirkwood/Makefile 2014-11-04 01:11:13.009019440 +0100 +@@ -2,6 +2,14 @@ + obj-$(CONFIG_KIRKWOOD_LEGACY) += irq.o mpp.o + obj-$(CONFIG_PM) += pm.o + ++obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o ++obj-$(CONFIG_MACH_DOCKSTAR) += dockstar-setup.o ++obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG) += sheevaplug-setup.o ++obj-$(CONFIG_MACH_GURUPLUG) += guruplug-setup.o ++obj-$(CONFIG_MACH_INETSPACE_V2) += netspace_v2-setup.o lacie_v2-common.o ++obj-$(CONFIG_MACH_NETSPACE_MAX_V2) += netspace_v2-setup.o lacie_v2-common.o ++obj-$(CONFIG_MACH_NETSPACE_V2) += netspace_v2-setup.o lacie_v2-common.o ++obj-$(CONFIG_MACH_SHEEVAPLUG) += sheevaplug-setup.o + obj-$(CONFIG_MACH_D2NET_V2) += d2net_v2-setup.o lacie_v2-common.o + obj-$(CONFIG_MACH_NET2BIG_V2) += netxbig_v2-setup.o lacie_v2-common.o + obj-$(CONFIG_MACH_NET5BIG_V2) += netxbig_v2-setup.o lacie_v2-common.o +@@ -11,6 +19,8 @@ + obj-$(CONFIG_MACH_T5325) += t5325-setup.o + obj-$(CONFIG_MACH_TS219) += ts219-setup.o tsx1x-common.o + obj-$(CONFIG_MACH_TS41X) += ts41x-setup.o tsx1x-common.o ++obj-$(CONFIG_MACH_ICONNECT) += iconnect-setup.o ++obj-$(CONFIG_MACH_NAS6210) += nas6210-setup.o + + obj-$(CONFIG_ARCH_KIRKWOOD_DT) += board-dt.o + obj-$(CONFIG_MACH_MV88F6281GTW_GE_DT) += board-mv88f6281gtw_ge.o +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c 2014-11-04 00:25:48.393687522 +0100 +@@ -0,0 +1,185 @@ ++/* ++ * arch/arm/mach-kirkwood/nas6210-setup.c ++ * ++ * Raidsonic ICYBOX NAS6210 and 6220 Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++#define NAS6210_GPIO_POWER_OFF 24 ++ ++static struct mtd_partition nas6210_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M, ++ .mask_flags = MTD_WRITEABLE, /* read only */ ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = (SZ_1M*6), ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL, ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data nas6210_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(8), ++}; ++ ++static struct mv_sata_platform_data nas6210_sata_data = { ++ .n_ports = 2, ++}; ++ ++static struct gpio_led nas6210_led_pins[] = { ++ { ++ .name = "nas6210:green:power", ++ .default_trigger = "default-on", ++ .gpio = 25, ++ .active_low = 0, ++ }, ++ { ++ .name = "nas6210:red:power", ++ .default_trigger = "none", ++ .gpio = 22, ++ .active_low = 0, ++ }, ++ { ++ .name = "nas6210:red:usb_copy", ++ .default_trigger = "none", ++ .gpio = 27, ++ .active_low = 0, ++ }, ++}; ++ ++static struct gpio_led_platform_data nas6210_led_data = { ++ .leds = nas6210_led_pins, ++ .num_leds = ARRAY_SIZE(nas6210_led_pins), ++}; ++ ++static struct platform_device nas6210_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &nas6210_led_data, ++ } ++}; ++ ++static struct gpio_keys_button nas6210_buttons[] = { ++ { ++ .code = KEY_COPY, ++ .gpio = 29, ++ .desc = "USB Copy", ++ .active_low = 1, ++ }, ++ { ++ .code = KEY_RESTART, ++ .gpio = 28, ++ .desc = "Reset", ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_keys_platform_data nas6210_button_data = { ++ .buttons = nas6210_buttons, ++ .nbuttons = ARRAY_SIZE(nas6210_buttons), ++}; ++ ++static struct platform_device nas6210_button_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .num_resources = 0, ++ .dev = { ++ .platform_data = &nas6210_button_data, ++ } ++}; ++ ++static unsigned int nas6210_mpp_config[] __initdata = { ++ MPP0_NF_IO2, ++ MPP1_NF_IO3, ++ MPP2_NF_IO4, ++ MPP3_NF_IO5, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP22_GPIO, /* Power LED red */ ++ MPP24_GPIO, /* Power off */ ++ MPP25_GPIO, /* Power LED green */ ++ MPP27_GPIO, /* USB transfer LED */ ++ MPP28_GPIO, /* Reset button */ ++ MPP29_GPIO, /* USB Copy button */ ++ 0 ++}; ++ ++void nas6210_power_off(void) ++{ ++ gpio_set_value(NAS6210_GPIO_POWER_OFF, 1); ++ while(1); ++} ++ ++static void __init nas6210_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(nas6210_mpp_config); ++ ++ kirkwood_nand_init(ARRAY_AND_SIZE(nas6210_nand_parts), 25); ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&nas6210_ge00_data); ++ kirkwood_sata_init(&nas6210_sata_data); ++ kirkwood_uart0_init(); ++ platform_device_register(&nas6210_leds); ++ platform_device_register(&nas6210_button_device); ++ ++ if (gpio_request(NAS6210_GPIO_POWER_OFF, "power-off") == 0 && ++ gpio_direction_output(NAS6210_GPIO_POWER_OFF, 0) == 0) ++ pm_power_off = nas6210_power_off; ++ ++ else ++ pr_err("nas6210: failed to configure power-off gpio pin"); ++} ++ ++static int __init nas6210_pci_init(void) ++{ ++ if (machine_is_nas6210()) { ++ kirkwood_pcie_init(KW_PCIE0); ++ } ++ return 0; ++} ++subsys_initcall(nas6210_pci_init); ++ ++MACHINE_START(NAS6210, "RaidSonic ICY BOX IB-NAS62x0") ++ /* Maintainer: Arne Fitzenreiter */ ++ .atag_offset = 0x00000100, ++ .init_machine = nas6210_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,293 @@ ++/* ++ * arch/arm/mach-kirkwood/netspace_v2-setup.c ++ * ++ * LaCie Network Space v2 board setup ++ * ++ * Copyright (C) 2009 Simon Guinot ++ * Copyright (C) 2009 Benoît Canet ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++#include "lacie_v2-common.h" ++ ++/***************************************************************************** ++ * Ethernet ++ ****************************************************************************/ ++ ++static struct mv643xx_eth_platform_data netspace_v2_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(8), ++}; ++ ++/***************************************************************************** ++ * SATA ++ ****************************************************************************/ ++ ++static struct mv_sata_platform_data netspace_v2_sata_data = { ++ .n_ports = 2, ++}; ++ ++/***************************************************************************** ++ * GPIO keys ++ ****************************************************************************/ ++ ++#define NETSPACE_V2_PUSH_BUTTON 32 ++ ++static struct gpio_keys_button netspace_v2_buttons[] = { ++ [0] = { ++ .code = KEY_POWER, ++ .gpio = NETSPACE_V2_PUSH_BUTTON, ++ .desc = "Power push button", ++ .active_low = 0, ++ }, ++}; ++ ++static struct gpio_keys_platform_data netspace_v2_button_data = { ++ .buttons = netspace_v2_buttons, ++ .nbuttons = ARRAY_SIZE(netspace_v2_buttons), ++}; ++ ++static struct platform_device netspace_v2_gpio_buttons = { ++ .name = "gpio-keys", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_v2_button_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * GPIO LEDs ++ ****************************************************************************/ ++ ++#define NETSPACE_V2_GPIO_RED_LED 12 ++ ++static struct gpio_led netspace_v2_gpio_led_pins[] = { ++ { ++ .name = "ns_v2:red:fail", ++ .gpio = NETSPACE_V2_GPIO_RED_LED, ++ }, ++}; ++ ++static struct gpio_led_platform_data netspace_v2_gpio_leds_data = { ++ .num_leds = ARRAY_SIZE(netspace_v2_gpio_led_pins), ++ .leds = netspace_v2_gpio_led_pins, ++}; ++ ++static struct platform_device netspace_v2_gpio_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_v2_gpio_leds_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * Dual-GPIO CPLD LEDs ++ ****************************************************************************/ ++ ++#define NETSPACE_V2_GPIO_BLUE_LED_SLOW 29 ++#define NETSPACE_V2_GPIO_BLUE_LED_CMD 30 ++ ++static struct ns2_led netspace_v2_led_pins[] = { ++ { ++ .name = "ns_v2:blue:sata", ++ .cmd = NETSPACE_V2_GPIO_BLUE_LED_CMD, ++ .slow = NETSPACE_V2_GPIO_BLUE_LED_SLOW, ++ }, ++}; ++ ++static struct ns2_led_platform_data netspace_v2_leds_data = { ++ .num_leds = ARRAY_SIZE(netspace_v2_led_pins), ++ .leds = netspace_v2_led_pins, ++}; ++ ++static struct platform_device netspace_v2_leds = { ++ .name = "leds-ns2", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_v2_leds_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * GPIO fan ++ ****************************************************************************/ ++ ++/* Designed for fan 40x40x16: ADDA AD0412LB-D50 6000rpm@12v */ ++static struct gpio_fan_speed netspace_max_v2_fan_speed[] = { ++ { 0, 0 }, ++ { 1500, 15 }, ++ { 1700, 14 }, ++ { 1800, 13 }, ++ { 2100, 12 }, ++ { 3100, 11 }, ++ { 3300, 10 }, ++ { 4300, 9 }, ++ { 5500, 8 }, ++}; ++ ++static unsigned netspace_max_v2_fan_ctrl[] = { 22, 7, 33, 23 }; ++ ++static struct gpio_fan_alarm netspace_max_v2_fan_alarm = { ++ .gpio = 25, ++ .active_low = 1, ++}; ++ ++static struct gpio_fan_platform_data netspace_max_v2_fan_data = { ++ .num_ctrl = ARRAY_SIZE(netspace_max_v2_fan_ctrl), ++ .ctrl = netspace_max_v2_fan_ctrl, ++ .alarm = &netspace_max_v2_fan_alarm, ++ .num_speed = ARRAY_SIZE(netspace_max_v2_fan_speed), ++ .speed = netspace_max_v2_fan_speed, ++}; ++ ++static struct platform_device netspace_max_v2_gpio_fan = { ++ .name = "gpio-fan", ++ .id = -1, ++ .dev = { ++ .platform_data = &netspace_max_v2_fan_data, ++ }, ++}; ++ ++/***************************************************************************** ++ * General Setup ++ ****************************************************************************/ ++ ++static unsigned int netspace_v2_mpp_config[] __initdata = { ++ MPP0_SPI_SCn, ++ MPP1_SPI_MOSI, ++ MPP2_SPI_SCK, ++ MPP3_SPI_MISO, ++ MPP4_NF_IO6, ++ MPP5_NF_IO7, ++ MPP6_SYSRST_OUTn, ++ MPP7_GPO, /* Fan speed (bit 1) */ ++ MPP8_TW0_SDA, ++ MPP9_TW0_SCK, ++ MPP10_UART0_TXD, ++ MPP11_UART0_RXD, ++ MPP12_GPO, /* Red led */ ++ MPP14_GPIO, /* USB fuse */ ++ MPP16_GPIO, /* SATA 0 power */ ++ MPP17_GPIO, /* SATA 1 power */ ++ MPP18_NF_IO0, ++ MPP19_NF_IO1, ++ MPP20_SATA1_ACTn, ++ MPP21_SATA0_ACTn, ++ MPP22_GPIO, /* Fan speed (bit 0) */ ++ MPP23_GPIO, /* Fan power */ ++ MPP24_GPIO, /* USB mode select */ ++ MPP25_GPIO, /* Fan rotation fail */ ++ MPP26_GPIO, /* USB device vbus */ ++ MPP28_GPIO, /* USB enable host vbus */ ++ MPP29_GPIO, /* Blue led (slow register) */ ++ MPP30_GPIO, /* Blue led (command register) */ ++ MPP31_GPIO, /* Board power off */ ++ MPP32_GPIO, /* Power button (0 = Released, 1 = Pushed) */ ++ MPP33_GPO, /* Fan speed (bit 2) */ ++ 0 ++}; ++ ++#define NETSPACE_V2_GPIO_POWER_OFF 31 ++ ++static void netspace_v2_power_off(void) ++{ ++ gpio_set_value(NETSPACE_V2_GPIO_POWER_OFF, 1); ++} ++ ++static void __init netspace_v2_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ kirkwood_mpp_conf(netspace_v2_mpp_config); ++ ++ if (machine_is_netspace_max_v2()) ++ lacie_v2_hdd_power_init(2); ++ else ++ lacie_v2_hdd_power_init(1); ++ ++ kirkwood_ehci_init(); ++ kirkwood_ge00_init(&netspace_v2_ge00_data); ++ kirkwood_sata_init(&netspace_v2_sata_data); ++ kirkwood_uart0_init(); ++ lacie_v2_register_flash(); ++ lacie_v2_register_i2c_devices(); ++ ++ platform_device_register(&netspace_v2_leds); ++ platform_device_register(&netspace_v2_gpio_leds); ++ platform_device_register(&netspace_v2_gpio_buttons); ++ if (machine_is_netspace_max_v2()) ++ platform_device_register(&netspace_max_v2_gpio_fan); ++ ++ if (gpio_request(NETSPACE_V2_GPIO_POWER_OFF, "power-off") == 0 && ++ gpio_direction_output(NETSPACE_V2_GPIO_POWER_OFF, 0) == 0) ++ pm_power_off = netspace_v2_power_off; ++ else ++ pr_err("netspace_v2: failed to configure power-off GPIO\n"); ++} ++ ++#ifdef CONFIG_MACH_NETSPACE_V2 ++MACHINE_START(NETSPACE_V2, "LaCie Network Space v2") ++ .atag_offset = 0x100, ++ .init_machine = netspace_v2_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif ++ ++#ifdef CONFIG_MACH_INETSPACE_V2 ++MACHINE_START(INETSPACE_V2, "LaCie Internet Space v2") ++ .atag_offset = 0x100, ++ .init_machine = netspace_v2_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif ++ ++#ifdef CONFIG_MACH_NETSPACE_MAX_V2 ++MACHINE_START(NETSPACE_MAX_V2, "LaCie Network Space Max v2") ++ .atag_offset = 0x100, ++ .init_machine = netspace_v2_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif +diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c +--- linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c 2014-10-15 08:32:29.000000000 +0200 +@@ -0,0 +1,161 @@ ++/* ++ * arch/arm/mach-kirkwood/sheevaplug-setup.c ++ * ++ * Marvell SheevaPlug Reference Board Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct mtd_partition sheevaplug_nand_parts[] = { ++ { ++ .name = "u-boot", ++ .offset = 0, ++ .size = SZ_1M ++ }, { ++ .name = "uImage", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = SZ_4M ++ }, { ++ .name = "root", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = MTDPART_SIZ_FULL ++ }, ++}; ++ ++static struct mv643xx_eth_platform_data sheevaplug_ge00_data = { ++ .phy_addr = MV643XX_ETH_PHY_ADDR(0), ++}; ++ ++static struct mv_sata_platform_data sheeva_esata_sata_data = { ++ .n_ports = 2, ++}; ++ ++static struct mvsdio_platform_data sheevaplug_mvsdio_data = { ++ /* unfortunately the CD signal has not been connected */ ++}; ++ ++static struct mvsdio_platform_data sheeva_esata_mvsdio_data = { ++ .gpio_write_protect = 44, /* MPP44 used as SD write protect */ ++ .gpio_card_detect = 47, /* MPP47 used as SD card detect */ ++}; ++ ++static struct gpio_led sheevaplug_led_pins[] = { ++ { ++ .name = "plug:red:misc", ++ .default_trigger = "none", ++ .gpio = 46, ++ .active_low = 1, ++ }, ++ { ++ .name = "plug:green:health", ++ .default_trigger = "default-on", ++ .gpio = 49, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data sheevaplug_led_data = { ++ .leds = sheevaplug_led_pins, ++ .num_leds = ARRAY_SIZE(sheevaplug_led_pins), ++}; ++ ++static struct platform_device sheevaplug_leds = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &sheevaplug_led_data, ++ } ++}; ++ ++static unsigned int sheevaplug_mpp_config[] __initdata = { ++ MPP29_GPIO, /* USB Power Enable */ ++ MPP46_GPIO, /* LED Red */ ++ MPP49_GPIO, /* LED */ ++ 0 ++}; ++ ++static unsigned int sheeva_esata_mpp_config[] __initdata = { ++ MPP29_GPIO, /* USB Power Enable */ ++ MPP44_GPIO, /* SD Write Protect */ ++ MPP47_GPIO, /* SD Card Detect */ ++ MPP49_GPIO, /* LED Green */ ++ 0 ++}; ++ ++static void __init sheevaplug_init(void) ++{ ++ /* ++ * Basic setup. Needs to be called early. ++ */ ++ kirkwood_init(); ++ ++ /* setup gpio pin select */ ++ if (machine_is_esata_sheevaplug()) ++ kirkwood_mpp_conf(sheeva_esata_mpp_config); ++ else ++ kirkwood_mpp_conf(sheevaplug_mpp_config); ++ ++ kirkwood_uart0_init(); ++ kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25); ++ ++ if (gpio_request(29, "USB Power Enable") != 0 || ++ gpio_direction_output(29, 1) != 0) ++ pr_err("can't set up GPIO 29 (USB Power Enable)\n"); ++ kirkwood_ehci_init(); ++ ++ kirkwood_ge00_init(&sheevaplug_ge00_data); ++ ++ /* honor lower power consumption for plugs with out eSATA */ ++ if (machine_is_esata_sheevaplug()) ++ kirkwood_sata_init(&sheeva_esata_sata_data); ++ ++ /* enable sd wp and sd cd on plugs with esata */ ++ if (machine_is_esata_sheevaplug()) ++ kirkwood_sdio_init(&sheeva_esata_mvsdio_data); ++ else ++ kirkwood_sdio_init(&sheevaplug_mvsdio_data); ++ ++ platform_device_register(&sheevaplug_leds); ++} ++ ++#ifdef CONFIG_MACH_SHEEVAPLUG ++MACHINE_START(SHEEVAPLUG, "Marvell SheevaPlug Reference Board") ++ /* Maintainer: shadi Ammouri */ ++ .atag_offset = 0x100, ++ .init_machine = sheevaplug_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif ++ ++#ifdef CONFIG_MACH_ESATA_SHEEVAPLUG ++MACHINE_START(ESATA_SHEEVAPLUG, "Marvell eSATA SheevaPlug Reference Board") ++ .atag_offset = 0x100, ++ .init_machine = sheevaplug_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .init_time = kirkwood_timer_init, ++ .restart = kirkwood_restart, ++MACHINE_END ++#endif +diff -Naur linux-3.14.22.org/arch/arm/tools/mach-types linux-3.14.22/arch/arm/tools/mach-types +--- linux-3.14.22.org/arch/arm/tools/mach-types 2014-10-15 08:42:04.000000000 +0200 ++++ linux-3.14.22/arch/arm/tools/mach-types 2014-11-04 00:25:48.393687522 +0100 +@@ -447,6 +447,7 @@ + smartq5 MACH_SMARTQ5 SMARTQ5 2534 + davinci_dm6467tevm MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM 2548 + mxt_td60 MACH_MXT_TD60 MXT_TD60 2550 ++guruplug MACH_GURUPLUG GURUPLUG 2601 + capc7117 MACH_CAPC7117 CAPC7117 2612 + icontrol MACH_ICONTROL ICONTROL 2624 + gplugd MACH_GPLUGD GPLUGD 2625 +@@ -454,7 +455,7 @@ + mx23evk MACH_MX23EVK MX23EVK 2629 + ap4evb MACH_AP4EVB AP4EVB 2630 + mityomapl138 MACH_MITYOMAPL138 MITYOMAPL138 2650 +-guruplug MACH_GURUPLUG GURUPLUG 2659 ++dreamplug1 MACH_DREAMPLUG1 DREAMPLUG1 2659 + spear310 MACH_SPEAR310 SPEAR310 2660 + spear320 MACH_SPEAR320 SPEAR320 2661 + aquila MACH_AQUILA AQUILA 2676 +@@ -491,6 +492,7 @@ + t5325 MACH_T5325 T5325 2846 + income MACH_INCOME INCOME 2849 + goni MACH_GONI GONI 2862 ++iconnect MACH_ICONNECT ICONNECT 2870 + bv07 MACH_BV07 BV07 2882 + openrd_ultimate MACH_OPENRD_ULTIMATE OPENRD_ULTIMATE 2884 + devixp MACH_DEVIXP DEVIXP 2885 +@@ -520,6 +522,7 @@ + vpr200 MACH_VPR200 VPR200 3087 + torbreck MACH_TORBRECK TORBRECK 3090 + prima2_evb MACH_PRIMA2_EVB PRIMA2_EVB 3103 ++nas6210 MACH_NAS6210 NAS6210 3104 + paz00 MACH_PAZ00 PAZ00 3128 + acmenetusfoxg20 MACH_ACMENETUSFOXG20 ACMENETUSFOXG20 3129 + ag5evm MACH_AG5EVM AG5EVM 3189 +@@ -544,6 +547,7 @@ + nspire MACH_NSPIRE NSPIRE 3503 + nokia_rm696 MACH_NOKIA_RM696 NOKIA_RM696 3522 + mikrap_x168 MACH_MIKRAP_X168 MIKRAP_X168 3543 ++dreamplug MACH_DREAMPLUG DREAMPLUG 3550 + deto_macarm9 MACH_DETO_MACARM9 DETO_MACARM9 3568 + m28evk MACH_M28EVK M28EVK 3613 + kota2 MACH_KOTA2 KOTA2 3616 -- 2.39.2