From a2ff7487f5c672bd06206e565024953949f49116 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Sat, 11 Feb 2006 12:33:35 +0000 Subject: ixp4xx-kernel: Added 94-loft-setup, fixed 94-nas100d-setup (dwery), added initial ds101 patchset (NAiL) --- .../linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch | 154 +++++++++++ .../ixp4xx-kernel/2.6.16/94-nas100d-setup.patch | 11 +- .../ixp4xx-kernel/2.6.16/97-ds101-includes.patch | 102 ++++++++ .../linux/ixp4xx-kernel/2.6.16/97-ds101-misc.patch | 27 ++ .../linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch | 73 ++++++ .../ixp4xx-kernel/2.6.16/97-ds101-power.patch | 75 ++++++ .../ixp4xx-kernel/2.6.16/97-ds101-setup.patch | 288 +++++++++++++++++++++ packages/linux/ixp4xx-kernel/2.6.16/defconfig | 117 +++++---- packages/linux/ixp4xx-kernel_2.6.16-rc2.bb | 8 +- 9 files changed, 791 insertions(+), 64 deletions(-) create mode 100644 packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch create mode 100644 packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch create mode 100644 packages/linux/ixp4xx-kernel/2.6.16/97-ds101-misc.patch create mode 100644 packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch create mode 100644 packages/linux/ixp4xx-kernel/2.6.16/97-ds101-power.patch create mode 100644 packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch 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 + #include + #include ++#include + + #include + #include +@@ -25,6 +26,10 @@ + #include + #include + ++#ifdef CONFIG_MACLIST ++#include ++#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 */ + .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 - 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 #include @@ -18,7 +18,7 @@ Signed-off-by: John Bowler #include #include #include -@@ -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 + */ +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 ++ * ++ * 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 " ++#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 ++#include ++#include ++ ++#include ++#include ++ ++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 ++ * Author: OEyvind Repvik ++ * 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 ++#include ++#include ++ ++#include ++ ++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 "); ++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 ++ * Author: Rod Whitby ++ * Author: OEyvind Repvik ++ * Maintainers: http://www.nslu2-linux.org/ ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++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 @@ -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 diff --git a/packages/linux/ixp4xx-kernel_2.6.16-rc2.bb b/packages/linux/ixp4xx-kernel_2.6.16-rc2.bb index 5389022313..644268637b 100644 --- a/packages/linux/ixp4xx-kernel_2.6.16-rc2.bb +++ b/packages/linux/ixp4xx-kernel_2.6.16-rc2.bb @@ -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" -- cgit v1.2.3