ixp4xx-kernel: Added 94-loft-setup, fixed 94-nas100d-setup (dwery), added initial...
authorRod Whitby <rod@whitby.id.au>
Sat, 11 Feb 2006 12:33:35 +0000 (12:33 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Sat, 11 Feb 2006 12:33:35 +0000 (12:33 +0000)
packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch [new file with mode: 0644]
packages/linux/ixp4xx-kernel/2.6.16/94-nas100d-setup.patch
packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch [new file with mode: 0644]
packages/linux/ixp4xx-kernel/2.6.16/97-ds101-misc.patch [new file with mode: 0644]
packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch [new file with mode: 0644]
packages/linux/ixp4xx-kernel/2.6.16/97-ds101-power.patch [new file with mode: 0644]
packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch [new file with mode: 0644]
packages/linux/ixp4xx-kernel/2.6.16/defconfig
packages/linux/ixp4xx-kernel_2.6.16-rc2.bb

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 (file)
index 0000000..e84508b
--- /dev/null
@@ -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
+-
index bc7bf20..b9c4c26 100644 (file)
@@ -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 (file)
index 0000000..35357b2
--- /dev/null
@@ -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 (file)
index 0000000..ea5f91b
--- /dev/null
@@ -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 (file)
index 0000000..8940bd6
--- /dev/null
@@ -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 (file)
index 0000000..3c309f3
--- /dev/null
@@ -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 (file)
index 0000000..ac3f7d1
--- /dev/null
@@ -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
index 25c2ba4..e797351 100644 (file)
@@ -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
@@ -1093,6 +1087,16 @@ CONFIG_HWMON=y
 # Multimedia Capabilities Port drivers
 #
 
+#
+# 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
 #
@@ -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
index 5389022..6442686 100644 (file)
@@ -25,6 +25,7 @@ IXP4XX_PATCHES += "file://15-jffs2-endian-config.patch;patch=1"
 IXP4XX_PATCHES += "${RPSRC}/led_core-r11.patch;patch=1"
 IXP4XX_PATCHES += "${RPSRC}/led_triggers-r9.patch;patch=1"
 IXP4XX_PATCHES += "${RPSRC}/led_trig_timer-r4.patch;patch=1"
+# IXP4XX_PATCHES += "${RPSRC}/led_trig_sharpsl_pm-r4a.patch;patch=1"
 IXP4XX_PATCHES += "${RPSRC}/led_zaurus-r8.patch;patch=1"
 IXP4XX_PATCHES += "${RPSRC}/led_locomo-r5.patch;patch=1"
 IXP4XX_PATCHES += "${RPSRC}/led_ixp4xx-r0.patch;patch=1"
@@ -39,7 +40,7 @@ IXP4XX_PATCHES += "file://48-setup-byteswap-cmdline.patch;patch=1"
 IXP4XX_PATCHES += "file://61-ixp4xx-beeper-irq.patch;patch=1"
 IXP4XX_PATCHES += "file://61-nslu2-beeper.patch;patch=1"
 IXP4XX_PATCHES += "file://65-loft-config.patch;patch=1"
-IXP4XX_PATCHES += "file://89-nas100d-fix-i2c.patch;patch=1"
+IXP4XX_PATCHES += "file://80-nas100d-fix-i2c.patch;patch=1"
 IXP4XX_PATCHES += "file://81-nslu2-power.patch;patch=1"
 IXP4XX_PATCHES += "file://82-nas100d-power.patch;patch=1"
 IXP4XX_PATCHES += "file://85-timer.patch;patch=1"
@@ -55,3 +56,8 @@ IXP4XX_PATCHES += "file://94-loft-setup.patch;patch=1"
 # IXP4XX_PATCHES += "file://96-loft-leds.patch;patch=1"
 IXP4XX_PATCHES += "file://96-nas100d-leds.patch;patch=1"
 IXP4XX_PATCHES += "file://96-nslu2-leds.patch;patch=1"
+IXP4XX_PATCHES += "file://97-ds101-includes.patch;patch=1"
+IXP4XX_PATCHES += "file://97-ds101-misc.patch;patch=1"
+IXP4XX_PATCHES += "file://97-ds101-pci.patch;patch=1"
+IXP4XX_PATCHES += "file://97-ds101-power.patch;patch=1"
+IXP4XX_PATCHES += "file://97-ds101-setup.patch;patch=1"