]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
kernel: readd kirkwood legacy boot code.
authorArne Fitzenreiter <arne_f@ipfire.org>
Tue, 4 Nov 2014 19:21:05 +0000 (20:21 +0100)
committerArne Fitzenreiter <arne_f@ipfire.org>
Tue, 4 Nov 2014 19:21:05 +0000 (20:21 +0100)
config/kernel/kernel.config.armv5tel-ipfire-kirkwood
lfs/linux
src/patches/linux-3.14.22-kirkwood_legacy_boot.patch [new file with mode: 0644]

index 96e0252cdb87a7ba4b79483c7afe4b0524b388c9..64d0300cefbc07116214a89a5a0af37db2ef9f70 100644 (file)
@@ -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
 
index bcbdeb0ffa5ea05b38fb27e2859dbf3340d2a572..8a1ee9c7c697c53de282d795afa2e0e69603509e 100644 (file)
--- 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 (file)
index 0000000..27dfedd
--- /dev/null
@@ -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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sizes.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#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 <saeed@marvell.com> */
++      .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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/ata_platform.h>
++#include <linux/mtd/partitions.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <linux/spi/flash.h>
++#include <linux/spi/spi.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#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 <gores <at> 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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#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 <gores@marvell.com> */
++      .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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/i2c.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#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 <arne_f@ipfire.org> */
++      .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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/i2c.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#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 <arne_f@ipfire.org> */
++      .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 <sguinot@lacie.com>
++ * Copyright (C) 2009 Benoît Canet <benoit.canet@gmail.com>
++ *
++ * 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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/input.h>
++#include <linux/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/leds.h>
++#include <linux/gpio-fan.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/leds-kirkwood-ns2.h>
++#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 <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/ata_platform.h>
++#include <linux/mtd/partitions.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#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 <shadi@marvell.com> */
++      .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