summaryrefslogtreecommitdiff
path: root/packages/linux/ixp4xx-kernel
diff options
context:
space:
mode:
authorRod Whitby <rod@whitby.id.au>2006-02-11 12:33:35 +0000
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>2006-02-11 12:33:35 +0000
commita2ff7487f5c672bd06206e565024953949f49116 (patch)
tree66f03568d0bb9ef908544c576d53860d9f9e5572 /packages/linux/ixp4xx-kernel
parent08e120cf6d7b0053a539713a2315a1208cf3e530 (diff)
ixp4xx-kernel: Added 94-loft-setup, fixed 94-nas100d-setup (dwery), added initial ds101 patchset (NAiL)
Diffstat (limited to 'packages/linux/ixp4xx-kernel')
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch154
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/94-nas100d-setup.patch11
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch102
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-misc.patch27
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch73
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-power.patch75
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch288
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/defconfig117
8 files changed, 784 insertions, 63 deletions
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch b/packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch
new file mode 100644
index 0000000000..e84508b85b
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch
@@ -0,0 +1,154 @@
+ arch/arm/mach-ixp4xx/ixdp425-setup.c | 115 ++++++++++++++++++++++++++++++++++-
+ 1 file changed, 112 insertions(+), 3 deletions(-)
+
+--- linux-nslu2.orig/arch/arm/mach-ixp4xx/ixdp425-setup.c 2006-02-10 18:03:51.000000000 +0100
++++ linux-nslu2/arch/arm/mach-ixp4xx/ixdp425-setup.c 2006-02-10 18:06:40.000000000 +0100
+@@ -15,6 +15,7 @@
+ #include <linux/tty.h>
+ #include <linux/serial_8250.h>
+ #include <linux/slab.h>
++#include <linux/eeprom.h>
+
+ #include <asm/types.h>
+ #include <asm/setup.h>
+@@ -25,6 +26,10 @@
+ #include <asm/mach/arch.h>
+ #include <asm/mach/flash.h>
+
++#ifdef CONFIG_MACLIST
++#include <net/maclist.h>
++#endif
++
+ static struct flash_platform_data ixdp425_flash_data = {
+ .map_name = "cfi_probe",
+ .width = 2,
+@@ -176,17 +181,122 @@ MACHINE_START(AVILA, "Gateworks Avila Ne
+ MACHINE_END
+ #endif
+
++#ifdef CONFIG_MACH_LOFT
+ /*
+ * Loft is functionally equivalent to Avila except that it has a
+ * different number for the maximum PCI devices. The MACHINE
+- * structure below is identical to Avila except for the comment.
++ * structure below is derived from the Avila one (and may, in
++ * fact, be useful on Avila in general).
++ *
++ * The loft init registers a notifier on the on-board EEPROM to
++ * detect the MAC addresses.
++ * NOTE: this probably works for all Gateworks Avila boards and
++ * maybe the ixdp425 too.
++ *
++ * When the EEPROM is added the MAC address are read from it.
+ */
+-#ifdef CONFIG_MACH_LOFT
++
++#if defined(CONFIG_SENSORS_EEPROM) && defined(CONFIG_MACLIST)
++static void loft_eeprom_add(int address, int kind, struct kobject *kobj,
++ struct bin_attribute *eeprom_attr) {
++ /* The MACs are the first 12 bytes in the eeprom at address 0x51 */
++ if (address == 0x51) {
++ ssize_t retlen;
++ char data[12];
++
++ /* Two Macs, one at 0, the other at 6, maclist_add will
++ * complain if the ID is not a valid MAC.
++ */
++ retlen = eeprom_attr->read(kobj, data, 0, sizeof data);
++ if (retlen >= 6) {
++ u8 mac[6];
++ memcpy(mac, data+0, sizeof mac);
++ printk(KERN_INFO "LOFT MAC[0]: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
++ maclist_add(mac);
++ }
++ if (retlen >= 12) {
++ u8 mac[6];
++ memcpy(mac, data+6, sizeof mac);
++ printk(KERN_INFO "LOFT MAC[1]: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
++ maclist_add(mac);
++ }
++ }
++}
++
++static struct eeprom_notifier loft_eeprom_notifier = {
++ .add = loft_eeprom_add
++};
++#endif
++
++/*
++ * Loft bootstrap may pass in parameters, if these contain an
++ * ATAG_MEM and it appears valid (not the 16MByte one in the
++ * setup/kernel.c default) we use it, otherwise a 64MByte
++ * setting is forced here, this may be overridden on the
++ * command line.
++ */
++static void __init loft_fixup(struct machine_desc *desc,
++ struct tag *tags, char **cmdline, struct meminfo *mi)
++{
++ char saved_command_line[COMMAND_LINE_SIZE];
++
++ /* Put Loft specific known-required-for-certain stuff here, leave
++ * a trailing space!
++ */
++ static char loft_command_line[] =
++ "root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc "
++ "rtc-ds1672.probe=0,0x68 ";
++ const int len = (sizeof loft_command_line) - 1;
++ int memtag = 0;
++
++ /* The EEPROM has two ethernet MACs embedded in it which we need,
++ * that is all this notifier does.
++ */
++#ifdef CONFIG_SENSORS_EEPROM
++ register_eeprom_user(&loft_eeprom_notifier);
++#endif
++
++ /* The Loft typically has one bank of 64MByte memory.
++ * NOTE: setting nr_banks != 0 causes kernel/setup.c to remove
++ * the mem tags from the tag list, so if there is an entry
++ * there don't remove it!
++ */
++ if (tags->hdr.tag == ATAG_CORE) do {
++ tags = tag_next(tags);
++ printk(KERN_NOTICE "ATAG[0x%x] size %d\n", tags->hdr.tag, tags->hdr.size);
++ if (tags->hdr.tag == ATAG_MEM && tags->hdr.size == tag_size(tag_mem32) &&
++ (tags->u.mem.start != 0 || tags->u.mem.size != (16*1024*1024))) {
++ memtag = 1;
++ printk(KERN_NOTICE " ATAG_MEM base %x, size %dMB\n",
++ tags->u.mem.start,
++ tags->u.mem.size / (1024*1024));
++ }
++ } while (tags->hdr.size);
++
++ if (!memtag) {
++ mi->nr_banks = 1;
++ mi->bank[0].start = 0;
++ mi->bank[0].size = (64*1024*1024);
++ mi->bank[0].node = PHYS_TO_NID(0);
++ }
++
++ /* A command line in the ATAG list will override this one,
++ * as is intended.
++ */
++ memcpy(saved_command_line, *cmdline, COMMAND_LINE_SIZE);
++ memcpy(*cmdline, loft_command_line, len);
++ memcpy(*cmdline + len, saved_command_line, COMMAND_LINE_SIZE - len);
++ *cmdline[COMMAND_LINE_SIZE-1] = 0;
++}
++
+ MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
+ /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */
+ .phys_ram = PHYS_OFFSET,
+ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
+ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
++ .fixup = loft_fixup,
+ .map_io = ixp4xx_map_io,
+ .init_irq = ixp4xx_init_irq,
+ .timer = &ixp4xx_timer,
+@@ -194,4 +304,3 @@ MACHINE_START(LOFT, "Giant Shoulder Inc
+ .init_machine = ixdp425_init,
+ MACHINE_END
+ #endif
+-
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/94-nas100d-setup.patch b/packages/linux/ixp4xx-kernel/2.6.16/94-nas100d-setup.patch
index bc7bf2061a..b9c4c265d0 100644
--- a/packages/linux/ixp4xx-kernel/2.6.16/94-nas100d-setup.patch
+++ b/packages/linux/ixp4xx-kernel/2.6.16/94-nas100d-setup.patch
@@ -4,11 +4,11 @@ in the boot loader.
Signed-off-by: John Bowler <jbowler@acm.org>
- arch/arm/mach-ixp4xx/nas100d-setup.c | 43 +++++++++++++++++++++++++++++++++++
- 1 file changed, 43 insertions(+)
+ arch/arm/mach-ixp4xx/nas100d-setup.c | 42 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 42 insertions(+)
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-02-06 22:35:26.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-02-06 22:40:20.000000000 +0100
+--- linux-nslu2.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-02-09 13:24:19.000000000 +0100
++++ linux-nslu2/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-02-09 15:13:56.000000000 +0100
@@ -17,6 +17,8 @@
#include <linux/serial_8250.h>
#include <linux/mtd/mtd.h>
@@ -18,7 +18,7 @@ Signed-off-by: John Bowler <jbowler@acm.org>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>
-@@ -161,11 +163,52 @@ static void __init nas100d_init(void)
+@@ -161,11 +163,51 @@ static void __init nas100d_init(void)
platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices));
}
@@ -41,7 +41,6 @@ Signed-off-by: John Bowler <jbowler@acm.org>
+ */
+static char nas100d_command_line[] __initdata =
+ "root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc "
-+ "pcf8563.hctosys=1 "
+ CONFIG_CMDLINE;
+
+static void __init nas100d_fixup(struct machine_desc *desc,
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch
new file mode 100644
index 0000000000..35357b2d77
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch
@@ -0,0 +1,102 @@
+diff -ruN linux-2.6.15.orig/include/asm-arm/arch-ixp4xx/hardware.h linux-2.6.15.new/include/asm-arm/arch-ixp4xx/hardware.h
+--- linux-2.6.15.orig/include/asm-arm/arch-ixp4xx/hardware.h 2006-02-11 02:58:47.000000000 +0100
++++ linux-2.6.15.new/include/asm-arm/arch-ixp4xx/hardware.h 2006-02-10 22:26:54.000000000 +0100
+@@ -46,5 +46,6 @@
+ #include "prpmc1100.h"
+ #include "nslu2.h"
+ #include "nas100d.h"
++#include "ds101.h"
+
+ #endif /* _ASM_ARCH_HARDWARE_H */
+diff -ruN linux-2.6.15.orig/include/asm-arm/arch-ixp4xx/irqs.h linux-2.6.15.new/include/asm-arm/arch-ixp4xx/irqs.h
+--- linux-2.6.15.orig/include/asm-arm/arch-ixp4xx/irqs.h 2006-02-11 02:58:47.000000000 +0100
++++ linux-2.6.15.new/include/asm-arm/arch-ixp4xx/irqs.h 2006-02-10 22:56:11.000000000 +0100
+@@ -108,5 +108,12 @@
+ #define IRQ_NAS100D_PCI_INTC IRQ_IXP4XX_GPIO9
+ #define IRQ_NAS100D_PCI_INTD IRQ_IXP4XX_GPIO8
+ #define IRQ_NAS100D_PCI_INTE IRQ_IXP4XX_GPIO7
++/*
++ * DS101 board IRQs
++ */
++
++#define IRQ_DS101_PCI_INTA IRQ_IXP4XX_GPIO11
++#define IRQ_DS101_PCI_INTB IRQ_IXP4XX_GPIO10
++#define IRQ_DS101_PCI_INTC IRQ_IXP4XX_GPIO9
+
+ #endif
+diff -ruN linux-2.6.15.orig/include/asm-arm/arch/ds101.h linux-2.6.15.new/include/asm-arm/arch/ds101.h
+--- linux-2.6.15.orig/include/asm-arm/arch/ds101.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.15.new/include/asm-arm/arch/ds101.h 2006-02-10 22:16:24.000000000 +0100
+@@ -0,0 +1,72 @@
++/*
++ * include/asm-arm/arch-ixp4xx/ds101.h
++ *
++ * DS101 platform specific definitions
++ *
++ * Copyright (c) 2005 Tower Technologies
++ *
++ * Author: Alessandro Zummo <a.zummo@towertech.it>
++ *
++ * based on ixdp425.h:
++ * Copyright 2004 (c) MontaVista, Software, Inc.
++ *
++ * 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.
++ */
++
++#ifndef __ASM_ARCH_HARDWARE_H__
++#error "Do not include this directly, instead #include <asm/hardware.h>"
++#endif
++
++#define DS101_SDA_PIN 1
++#define DS101_SCL_PIN 0
++
++/*
++ * DS101 PCI IRQs
++ */
++#define DS101_PCI_MAX_DEV 3
++#define DS101_PCI_IRQ_LINES 3
++
++
++/* PCI controller GPIO to IRQ pin mappings */
++#define DS101_PCI_INTA_PIN 11
++#define DS101_PCI_INTB_PIN 10
++#define DS101_PCI_INTC_PIN 9
++// #define DS101_PCI_INTD_PIN 8
++// #define DS101_PCI_INTE_PIN 7
++
++/* GPIO */
++
++#define DS101_GPIO0 0
++#define DS101_GPIO1 1
++#define DS101_GPIO2 2
++#define DS101_GPIO3 3
++#define DS101_GPIO4 4
++#define DS101_GPIO5 5
++#define DS101_GPIO6 6
++#define DS101_GPIO7 7
++#define DS101_GPIO8 8
++#define DS101_GPIO9 9
++#define DS101_GPIO10 10
++#define DS101_GPIO11 11
++#define DS101_GPIO12 12
++#define DS101_GPIO13 13
++#define DS101_GPIO14 14
++#define DS101_GPIO15 15
++
++
++/* Buttons */
++
++#define DS101_PB_GPIO DS101_GPIO8
++#define DS101_RB_GPIO DS101_GPIO12
++#define DS101_PO_GPIO DS101_GPIO7 /* power off */
++
++#define DS101_PB_IRQ IRQ_IXP4XX_GPIO8
++#define DS101_RB_IRQ IRQ_IXP4XX_GPIO12
++
++/*
++#define DS101_PB_BM (1L << DS101_PB_GPIO)
++#define DS101_PO_BM (1L << DS101_PO_GPIO)
++#define DS101_RB_BM (1L << DS101_RB_GPIO)
++*/
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-misc.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-misc.patch
new file mode 100644
index 0000000000..ea5f91b45f
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-misc.patch
@@ -0,0 +1,27 @@
+diff -ruN linux-2.6.15.orig/arch/arm/mach-ixp4xx/Makefile linux-2.6.15.new/arch/arm/mach-ixp4xx/Makefile
+--- linux-2.6.15.orig/arch/arm/mach-ixp4xx/Makefile 2006-02-11 02:57:58.000000000 +0100
++++ linux-2.6.15.new/arch/arm/mach-ixp4xx/Makefile 2006-02-10 22:13:27.000000000 +0100
+@@ -10,4 +10,4 @@
+ obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o
+ obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o
+ obj-$(CONFIG_MACH_NAS100D) += nas100d-pci.o nas100d-setup.o nas100d-power.o
+-
++obj-$(CONFIG_MACH_DS101) += ds101-pci.o ds101-setup.o ds101-power.o
+diff -ruN linux-2.6.15.orig/arch/arm/mach-ixp4xx/Kconfig linux-2.6.15.new/arch/arm/mach-ixp4xx/Kconfig
+--- linux-2.6.15.orig/arch/arm/mach-ixp4xx/Kconfig 2006-02-11 03:00:07.000000000 +0100
++++ linux-2.6.15.new/arch/arm/mach-ixp4xx/Kconfig 2006-02-10 22:21:09.000000000 +0100
+@@ -86,6 +86,14 @@
+ NAS 100d device. For more information on this platform,
+ see http://www.nslu2-linux.org/wiki/NAS100d/HomePage
+
++config MACH_DS101
++ bool
++ prompt "DS101"
++ help
++ Say 'Y' here if you want your kernel to support Synology's
++ DiskStation DS101(j) device. For more information on this
++ platform see http://www.nslu2-linux.org/wiki/DS101/HomePage
++
+ #
+ # Avila and IXDP share the same source for now. Will change in future
+ #
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch
new file mode 100644
index 0000000000..8940bd63a6
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch
@@ -0,0 +1,73 @@
+diff -ruN linux-2.6.15.orig/arch/arm/mach-ixp4xx/ds101-pci.c linux-2.6.15.new/arch/arm/mach-ixp4xx/ds101-pci.c
+--- linux-2.6.15.orig/arch/arm/mach-ixp4xx/ds101-pci.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.15.new/arch/arm/mach-ixp4xx/ds101-pci.c 2006-02-10 22:31:00.000000000 +0100
+@@ -0,0 +1,69 @@
++/*
++ * arch/arm/mach-ixp4xx/ds101-pci.c
++ *
++ * DS101 board-level PCI initialization
++ *
++ * based on ixdp425-pci.c:
++ * Copyright (C) 2002 Intel Corporation.
++ * Copyright (C) 2003-2004 MontaVista Software, Inc.
++ *
++ * Maintainer: http://www.nslu2-linux.org/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/pci.h>
++#include <linux/init.h>
++
++#include <asm/mach/pci.h>
++#include <asm/mach-types.h>
++
++void __init ds101_pci_preinit(void)
++{
++ set_irq_type(IRQ_DS101_PCI_INTA, IRQT_LOW);
++ set_irq_type(IRQ_DS101_PCI_INTB, IRQT_LOW);
++ set_irq_type(IRQ_DS101_PCI_INTC, IRQT_LOW);
++
++ ixp4xx_pci_preinit();
++}
++
++static int __init ds101_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
++{
++ static int pci_irq_table[DS101_PCI_MAX_DEV][DS101_PCI_IRQ_LINES] =
++ {
++ { IRQ_DS101_PCI_INTA, -1, -1 },
++ { IRQ_DS101_PCI_INTB, -1, -1 },
++ { IRQ_DS101_PCI_INTC, -1, -1 },
++ };
++
++ int irq = -1;
++
++ if (slot >= 1 && slot <= DS101_PCI_MAX_DEV &&
++ pin >= 1 && pin <= DS101_PCI_IRQ_LINES)
++ irq = pci_irq_table[slot-1][pin-1];
++
++ return irq;
++}
++
++struct hw_pci __initdata ds101_pci = {
++ .nr_controllers = 1,
++ .preinit = ds101_pci_preinit,
++ .swizzle = pci_std_swizzle,
++ .setup = ixp4xx_setup,
++ .scan = ixp4xx_scan_bus,
++ .map_irq = ds101_map_irq,
++};
++
++int __init ds101_pci_init(void)
++{
++ if (machine_is_ds101())
++ pci_common_init(&ds101_pci);
++
++ return 0;
++}
++
++subsys_initcall(ds101_pci_init);
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-power.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-power.patch
new file mode 100644
index 0000000000..3c309f3536
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-power.patch
@@ -0,0 +1,75 @@
+diff -ruN linux-2.6.15.orig/arch/arm/mach-ixp4xx/ds101-power.c linux-2.6.15.new/arch/arm/mach-ixp4xx/ds101-power.c
+--- linux-2.6.15.orig/arch/arm/mach-ixp4xx/ds101-power.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.15.new/arch/arm/mach-ixp4xx/ds101-power.c 2006-02-10 23:54:40.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * arch/arm/mach-ixp4xx/ds101-power.c
++ *
++ * DS101 Power/Reset driver
++ *
++ * Copyright (C) 2005 Tower Technologies
++ *
++ * based on ds101-io.c
++ * Copyright (C) 2004 Karen Spearel
++ *
++ * Author: Alessandro Zummo <a.zummo@towertech.it>
++ * Author: OEyvind Repvik <oyvind@repvik.org>
++ * Maintainers: http://www.nslu2-linux.org/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/reboot.h>
++#include <linux/interrupt.h>
++
++#include <asm/mach-types.h>
++
++extern void ctrl_alt_del(void);
++
++static irqreturn_t ds101_reset_handler(int irq, void *dev_id, struct pt_regs *regs)
++{
++ /* Signal init to do the ctrlaltdel action, this will bypass init if
++ * it hasn't started and do a kernel_restart.
++ */
++ ctrl_alt_del();
++
++ return IRQ_HANDLED;
++}
++
++static int __init ds101_power_init(void)
++{
++ if (!(machine_is_ds101()))
++ return 0;
++
++ set_irq_type(DS101_RB_IRQ, IRQT_LOW);
++
++ if (request_irq(DS101_RB_IRQ, &ds101_reset_handler,
++ SA_INTERRUPT, "DS101 reset button", NULL) < 0) {
++
++ printk(KERN_DEBUG "Reset Button IRQ %d not available\n",
++ DS101_RB_IRQ);
++
++ return -EIO;
++ }
++
++ return 0;
++}
++
++static void __exit ds101_power_exit(void)
++{
++ if (!(machine_is_ds101()))
++ return;
++
++ free_irq(DS101_RB_IRQ, NULL);
++}
++
++module_init(ds101_power_init);
++module_exit(ds101_power_exit);
++
++MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
++MODULE_DESCRIPTION("DS101 Power/Reset driver");
++MODULE_LICENSE("GPL");
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch
new file mode 100644
index 0000000000..ac3f7d19c7
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch
@@ -0,0 +1,288 @@
+diff -ruN linux-2.6.15.orig/arch/arm/mach-ixp4xx/ds101-setup.c linux-2.6.15.new/arch/arm/mach-ixp4xx/ds101-setup.c
+--- linux-2.6.15.orig/arch/arm/mach-ixp4xx/ds101-setup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.15.new/arch/arm/mach-ixp4xx/ds101-setup.c 2006-02-11 02:17:35.000000000 +0100
+@@ -0,0 +1,284 @@
++/*
++ * arch/arm/mach-ixp4xx/ds101-setup.c
++ *
++ * DS 101 board-setup
++ *
++ * based ixdp425-setup.c:
++ * Copyright (C) 2003-2004 MontaVista Software, Inc.
++ *
++ * Author: Alessandro Zummo <a.zummo@towertech.it>
++ * Author: Rod Whitby <rod@whitby.id.au>
++ * Author: OEyvind Repvik <oyvind@repvik.org>
++ * Maintainers: http://www.nslu2-linux.org/
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/serial.h>
++#include <linux/serial_8250.h>
++#include <linux/mtd/mtd.h>
++#include <linux/leds.h>
++
++#include <asm/setup.h>
++#include <asm/memory.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/mach/flash.h>
++
++#include <net/maclist.h>
++
++static struct flash_platform_data ds101_flash_data = {
++ .map_name = "cfi_probe",
++ .width = 2,
++};
++
++static struct resource ds101_flash_resource = {
++ .flags = IORESOURCE_MEM,
++};
++
++static struct platform_device ds101_flash = {
++ .name = "IXP4XX-Flash",
++ .id = 0,
++ .dev.platform_data = &ds101_flash_data,
++ .num_resources = 1,
++ .resource = &ds101_flash_resource,
++};
++
++#ifdef CONFIG_LEDS_CLASS
++static struct resource ds101_led_resources[] = {
++ {
++ .name = "power", /* blue power led */
++ .start = 3,
++ .end = 3,
++ .flags = IXP4XX_GPIO_LOW,
++ },
++ {
++ .name = "status-1",
++ .start = 14,
++ .end = 14,
++ .flags = IXP4XX_GPIO_LOW,
++ },
++ {
++ .name = "status-2",
++ .start = 15,
++ .end = 15,
++ .flags = IXP4XX_GPIO_LOW,
++ },
++ {
++ .name = "usb-1", /* The usb-copy-button led */
++ .start = 5,
++ .end = 5,
++ .flags = IXP4XX_GPIO_LOW,
++ },
++ {
++ .name = "usb-2", /* also the usb-copy-button led */
++ .start = 4,
++ .end = 4,
++ .flags = IXP4XX_GPIO_LOW,
++ },
++ {
++ .name = "test",
++ .start = 6,
++ .end = 6,
++ .flags = IXP4XX_GPIO_LOW,
++ },
++};
++
++
++static struct platform_device ds101_leds = {
++ .name = "IXP4XX-GPIO-LED",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(ds101_led_resources),
++ .resource = ds101_led_resources,
++};
++#endif
++
++static struct ixp4xx_i2c_pins ds101_i2c_gpio_pins = {
++ .sda_pin = DS101_SDA_PIN,
++ .scl_pin = DS101_SCL_PIN,
++};
++
++static struct platform_device ds101_i2c_controller = {
++ .name = "IXP4XX-I2C",
++ .id = 0,
++ .dev.platform_data = &ds101_i2c_gpio_pins,
++ .num_resources = 0,
++};
++
++static struct platform_device ds101_beeper = {
++ .name = "ixp4xx-beeper",
++ .id = 2,
++ .num_resources = 0,
++};
++
++static struct resource ds101_uart_resources[] = {
++ {
++ .start = IXP4XX_UART1_BASE_PHYS,
++ .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
++ .flags = IORESOURCE_MEM,
++ },
++ {
++ .start = IXP4XX_UART2_BASE_PHYS,
++ .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
++ .flags = IORESOURCE_MEM,
++ }
++};
++
++static struct plat_serial8250_port ds101_uart_data[] = {
++ {
++ .mapbase = IXP4XX_UART1_BASE_PHYS,
++ .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
++ .irq = IRQ_IXP4XX_UART1,
++ .flags = UPF_BOOT_AUTOCONF,
++ .iotype = UPIO_MEM,
++ .regshift = 2,
++ .uartclk = IXP4XX_UART_XTAL,
++ },
++ {
++ .mapbase = IXP4XX_UART2_BASE_PHYS,
++ .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
++ .irq = IRQ_IXP4XX_UART2,
++ .flags = UPF_BOOT_AUTOCONF,
++ .iotype = UPIO_MEM,
++ .regshift = 2,
++ .uartclk = IXP4XX_UART_XTAL,
++ },
++ { }
++};
++
++static struct platform_device ds101_uart = {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev.platform_data = ds101_uart_data,
++ .num_resources = 2,
++ .resource = ds101_uart_resources,
++};
++
++static struct platform_device *ds101_devices[] __initdata = {
++ &ds101_i2c_controller,
++ &ds101_flash,
++ &ds101_beeper,
++};
++
++static void ds101_power_off(void)
++{
++ /* This causes the box to drop the power and go dead. */
++
++ /* enable the pwr cntl gpio */
++ gpio_line_config(DS101_PO_GPIO, IXP4XX_GPIO_OUT);
++
++ /* do the deed */
++ gpio_line_set(DS101_PO_GPIO, IXP4XX_GPIO_HIGH);
++}
++
++/*
++ * When the RedBoot config partition is added the MAC address is read from
++ * it.
++ * FIXME: This isn't correct on the DS101!
++ */
++static void ds101_flash_add(struct mtd_info *mtd) {
++ if (strcmp(mtd->name, "RedBoot config") == 0) {
++ size_t retlen;
++ u_char mac[6];
++
++ /* The MAC is at a known offset... */
++ if (mtd->read(mtd, 0x0FD8, 6, &retlen, mac) == 0 && retlen == 6) {
++ printk(KERN_INFO "DS101 MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
++ maclist_add(mac);
++ } else {
++ printk(KERN_ERR "DS101 MAC: read failed\n");
++ }
++ }
++}
++
++/*
++ * Nothing to do on remove at present.
++ */
++static void ds101_flash_remove(struct mtd_info *mtd) {
++}
++
++static struct mtd_notifier ds101_flash_notifier = {
++ .add = ds101_flash_add,
++ .remove = ds101_flash_remove,
++};
++
++static void __init ds101_init(void)
++{
++ /* The flash has an ethernet MAC embedded in it which we need,
++ * that is all this notifier does.
++ */
++ register_mtd_user(&ds101_flash_notifier);
++
++ ixp4xx_sys_init();
++
++ ds101_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
++ ds101_flash_resource.end =
++ IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
++
++ pm_power_off = ds101_power_off;
++
++ /* This is only useful on a modified machine, but it is valuable
++ * to have it first in order to see debug messages, and so that
++ * it does *not* get removed if platform_add_devices fails!
++ */
++ (void)platform_device_register(&ds101_uart);
++
++ platform_add_devices(ds101_devices, ARRAY_SIZE(ds101_devices));
++
++#ifdef CONFIG_LEDS_CLASS
++ /* We don't care whether or not this works. */
++ (void)platform_device_register(&ds101_leds);
++#endif
++}
++
++/*
++ * DS101 bootstrap may pass in parameters, but we zap the mem
++ * settings to be safe (the box always has 64MByte at 0). The
++ * passed in command line can override this default, we prepend
++ * to the config'ed default.
++ *
++ * NOTE: the startup sequence is:
++ * 1) Call the machine fixup
++ * 2) Parse the ATAG list, the ATAG_CMDLINE is copied in
++ * to default_command_line which is the value of *from
++ * 3) Parse the command line in *from (*not*
++ * default_command_line unless they are the same!)
++ *
++ * Setting mi->nr_banks causes (2) to 'squash' (set to ATAG_NONE)
++ * any ATAG_MEM tags, but mem= command line options cause nr_banks
++ * to be reset to 0 (on the first mem=)
++ */
++static char ds101_command_line[] __initdata =
++ "root=/dev/sda1 rootfstype=ext3 init=/sbin/init "
++ CONFIG_CMDLINE;
++
++static void __init ds101_fixup(struct machine_desc *desc,
++ struct tag *tags, char **cmdline, struct meminfo *mi)
++{
++ /* The DS101 has one bank of 64MByte memory.
++ * NOTE: setting nr_banks != 0 causes kernel/setup.c to remove
++ * the mem tags from the tag list. We need do nothing here!
++ */
++ mi->nr_banks=1;
++ mi->bank[0].start = 0;
++ mi->bank[0].size = (64*1024*1024);
++ mi->bank[0].node = PHYS_TO_NID(0);
++
++ /* A command line in the ATAG list will override this one,
++ * as is intended.
++ */
++ strlcpy(*cmdline, ds101_command_line, COMMAND_LINE_SIZE);
++}
++
++MACHINE_START(DS101, "Synology DiskStation DS101")
++ /* Maintainer: www.nslu2-linux.org */
++ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
++ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
++ .boot_params = 0x00000100,
++ .fixup = ds101_fixup,
++ .map_io = ixp4xx_map_io,
++ .init_irq = ixp4xx_init_irq,
++ .timer = &ixp4xx_timer,
++ .init_machine = ds101_init,
++MACHINE_END
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/defconfig b/packages/linux/ixp4xx-kernel/2.6.16/defconfig
index 25c2ba40c2..e7973518c7 100644
--- a/packages/linux/ixp4xx-kernel/2.6.16/defconfig
+++ b/packages/linux/ixp4xx-kernel/2.6.16/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.16-rc2
-# Thu Feb 9 20:54:57 2006
+# Thu Feb 9 23:00:47 2006
#
CONFIG_ARM=y
CONFIG_MMU=y
@@ -124,6 +124,7 @@ CONFIG_ARCH_IXDP425=y
CONFIG_ARCH_IXCDP1100=y
# CONFIG_ARCH_PRPMC1100 is not set
CONFIG_MACH_NAS100D=y
+CONFIG_MACH_DS101=y
CONFIG_ARCH_IXDP4XX=y
# CONFIG_MACH_GTWX5715 is not set
@@ -583,60 +584,7 @@ CONFIG_CDROM_PKTCDVD_BUFFERS=8
#
# ATA/ATAPI/MFM/RLL support
#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_PCI_AUTO is not set
-CONFIG_BLK_DEV_AEC62XX=y
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
+# CONFIG_IDE is not set
#
# SCSI device support
@@ -686,7 +634,53 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
+CONFIG_SCSI_SATA=y
+# CONFIG_SCSI_SATA_AHCI is not set
+# CONFIG_SCSI_SATA_SVW is not set
+# CONFIG_SCSI_ATA_PIIX is not set
+# CONFIG_SCSI_SATA_MV is not set
+# CONFIG_SCSI_SATA_NV is not set
+# CONFIG_SCSI_PDC_ADMA is not set
+# CONFIG_SCSI_SATA_QSTOR is not set
+# CONFIG_SCSI_SATA_PROMISE is not set
+# CONFIG_SCSI_SATA_SX4 is not set
+# CONFIG_SCSI_SATA_SIL is not set
+# CONFIG_SCSI_SATA_SIL24 is not set
+# CONFIG_SCSI_SATA_SIS is not set
+# CONFIG_SCSI_SATA_ULI is not set
+# CONFIG_SCSI_SATA_VIA is not set
+# CONFIG_SCSI_SATA_VITESSE is not set
+# CONFIG_SCSI_PATA_ALI is not set
+# CONFIG_SCSI_PATA_AMD is not set
+CONFIG_SCSI_PATA_ARTOP=y
+# CONFIG_SCSI_PATA_ATIIXP is not set
+# CONFIG_SCSI_PATA_CMD64X is not set
+# CONFIG_SCSI_PATA_CS5520 is not set
+# CONFIG_SCSI_PATA_CS5530 is not set
+# CONFIG_SCSI_PATA_CYPRESS is not set
+# CONFIG_SCSI_PATA_EFAR is not set
+# CONFIG_SCSI_ATA_GENERIC is not set
+# CONFIG_SCSI_PATA_HPT37X is not set
+# CONFIG_SCSI_PATA_HPT3X2N is not set
+# CONFIG_SCSI_PATA_HPT3X3 is not set
+# CONFIG_SCSI_PATA_ISAPNP is not set
+# CONFIG_SCSI_PATA_IT8172 is not set
+# CONFIG_SCSI_PATA_IT821X is not set
+# CONFIG_SCSI_PATA_LEGACY is not set
+# CONFIG_SCSI_PATA_MPIIX is not set
+# CONFIG_SCSI_PATA_NETCELL is not set
+# CONFIG_SCSI_PATA_OLDPIIX is not set
+# CONFIG_SCSI_PATA_OPTI is not set
+# CONFIG_SCSI_PATA_PCMCIA is not set
+# CONFIG_SCSI_PATA_QDI is not set
+# CONFIG_SCSI_PATA_RZ1000 is not set
+# CONFIG_SCSI_PATA_SC1200 is not set
+# CONFIG_SCSI_PATA_SERVERWORKS is not set
+# CONFIG_SCSI_PATA_SIL680 is not set
+# CONFIG_SCSI_PATA_SIS is not set
+# CONFIG_SCSI_PATA_TRIFLEX is not set
+# CONFIG_SCSI_PATA_VIA is not set
+# CONFIG_SCSI_PATA_WINBOND is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_IPS is not set
@@ -1094,6 +1088,16 @@ CONFIG_HWMON=y
#
#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_IXP4XX=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
+
+#
# Multimedia devices
#
CONFIG_VIDEO_DEV=m
@@ -1294,7 +1298,6 @@ CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_USBAT is not set
# CONFIG_USB_STORAGE_SDDR09 is not set