aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/au1000
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/au1000')
-rw-r--r--target/linux/au1000/Makefile34
-rw-r--r--target/linux/au1000/base-files/default/etc/diag.sh25
-rw-r--r--target/linux/au1000/config/default252
-rw-r--r--target/linux/au1000/files/drivers/leds/leds-mtx1.c101
-rw-r--r--target/linux/au1000/image/Makefile66
-rw-r--r--target/linux/au1000/patches/001-au1x00_gpio.patch294
-rw-r--r--target/linux/au1000/patches/005-au1000_eth_link_beat.patch24
-rw-r--r--target/linux/au1000/patches/006-mtx1_system_button.patch241
-rw-r--r--target/linux/au1000/patches/011-mtx1_leds.patch28
-rw-r--r--target/linux/au1000/patches/012-mtx1_cmdline.patch19
-rw-r--r--target/linux/au1000/patches/013-openwrt_rootfs.patch11
-rw-r--r--target/linux/au1000/patches/014-au1000_eth_ioctl.patch15
-rw-r--r--target/linux/au1000/patches/015-pci-resource.patch14
-rw-r--r--target/linux/au1000/patches/016-pci-io_map.patch10
-rw-r--r--target/linux/au1000/patches/017-usb-power.patch11
-rw-r--r--target/linux/au1000/profiles/Atheros.mk13
-rw-r--r--target/linux/au1000/profiles/Broadcom.mk13
-rw-r--r--target/linux/au1000/profiles/Intel.mk13
18 files changed, 1184 insertions, 0 deletions
diff --git a/target/linux/au1000/Makefile b/target/linux/au1000/Makefile
new file mode 100644
index 0000000000..d7b9f739ab
--- /dev/null
+++ b/target/linux/au1000/Makefile
@@ -0,0 +1,34 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+ARCH:=mipsel
+BOARD:=au1000
+BOARDNAME:=AMD Alchemy AU1x00
+FEATURES:=jffs2 usb pci
+
+LINUX_VERSION:=2.6.22.4
+
+define Target/Description
+ Build firmware for AMD Alchemy 1500 boards
+ (e.g. 4G-Systems Mesh/Access Cube ...)
+endef
+
+include $(INCLUDE_DIR)/kernel-build.mk
+DEFAULT_PACKAGES += yamonenv
+
+define Kernel/BuildImage
+ $(call Kernel/BuildImage/Default)
+ $(CP) $(LINUX_DIR)/arch/mips/boot/compressed/images/zImage.flash.srec $(LINUX_DIR)/zImage.flash.srec
+ $(CP) $(LINUX_DIR)/arch/mips/boot/compressed/images/zImage.srec $(LINUX_DIR)/zImage.srec
+endef
+
+# include the profiles
+-include profiles/*.mk
+
+$(eval $(call BuildKernel))
+
diff --git a/target/linux/au1000/base-files/default/etc/diag.sh b/target/linux/au1000/base-files/default/etc/diag.sh
new file mode 100644
index 0000000000..d97461532a
--- /dev/null
+++ b/target/linux/au1000/base-files/default/etc/diag.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+# Copyright (C) 2007 OpenWrt.org
+
+set_led() {
+ local led="$1"
+ local state="$2"
+ [ -d "/sys/class/leds/mtx1:$led" ] && echo "$state" > "/sys/class/leds/mtx1:$led/brightness"
+}
+
+set_state() {
+ case "$1" in
+ preinit)
+ set_led green 0
+ set_led red 1
+ ;;
+ failsafe)
+ set_led green 1
+ set_led red 1
+ ;;
+ done)
+ set_led green 1
+ set_led red 0
+ ;;
+ esac
+}
diff --git a/target/linux/au1000/config/default b/target/linux/au1000/config/default
new file mode 100644
index 0000000000..e19792809f
--- /dev/null
+++ b/target/linux/au1000/config/default
@@ -0,0 +1,252 @@
+CONFIG_32BIT=y
+# CONFIG_64BIT is not set
+CONFIG_64BIT_PHYS_ADDR=y
+# CONFIG_8139TOO is not set
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+# CONFIG_ATM is not set
+# CONFIG_B44 is not set
+CONFIG_BASE_SMALL=0
+CONFIG_BITREVERSE=y
+# CONFIG_BROADCOM_PHY is not set
+CONFIG_CHR_DEV_SG=m
+CONFIG_CMDLINE="root=/dev/mtdblock0 rootfstype=squashfs,jffs2 init=/etc/preinit"
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_HAS_LLSC=y
+CONFIG_CPU_HAS_PREFETCH=y
+CONFIG_CPU_HAS_SYNC=y
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_CPU_MIPS32=y
+CONFIG_CPU_MIPS32_R1=y
+# CONFIG_CPU_MIPS32_R2 is not set
+# CONFIG_CPU_MIPS64_R1 is not set
+# CONFIG_CPU_MIPS64_R2 is not set
+CONFIG_CPU_MIPSR1=y
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R10000 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_R8000 is not set
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_RM9000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
+CONFIG_CPU_SUPPORTS_HIGHMEM=y
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_VR41XX is not set
+CONFIG_CRAMFS=m
+CONFIG_CRC16=y
+# CONFIG_DDB5477 is not set
+# CONFIG_DM9000 is not set
+CONFIG_DMA_NEED_PCI_MAP_STATE=y
+CONFIG_DMA_NONCOHERENT=y
+CONFIG_DUMMY=m
+CONFIG_ELF_CORE=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_FIXED_PHY is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HW_HAS_PCI=y
+CONFIG_HW_RANDOM=y
+CONFIG_HZ=250
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_1024 is not set
+# CONFIG_HZ_128 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_256 is not set
+# CONFIG_HZ_48 is not set
+CONFIG_I2C=m
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCA=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_AU1X00GPIO=m
+CONFIG_I2C_CHARDEV=m
+# CONFIG_IDE is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_LEDS_MTX1=y
+# CONFIG_LEDS_TRIGGERS is not set
+CONFIG_MACH_ALCHEMY=y
+# CONFIG_MACH_DECSTATION is not set
+# CONFIG_MACH_JAZZ is not set
+# CONFIG_MACH_VR41XX is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MIPS=y
+# CONFIG_MIPS_ATLAS is not set
+CONFIG_MIPS_AU1X00_ENET=y
+# CONFIG_MIPS_BOSPORUS is not set
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_MIPS_DB1000 is not set
+# CONFIG_MIPS_DB1100 is not set
+# CONFIG_MIPS_DB1200 is not set
+# CONFIG_MIPS_DB1500 is not set
+# CONFIG_MIPS_DB1550 is not set
+# CONFIG_MIPS_EV64120 is not set
+CONFIG_MIPS_L1_CACHE_SHIFT=5
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_MIRAGE is not set
+CONFIG_MIPS_MTX1=y
+CONFIG_MIPS_MT_DISABLED=y
+# CONFIG_MIPS_MT_SMP is not set
+# CONFIG_MIPS_MT_SMTC is not set
+# CONFIG_MIPS_PB1000 is not set
+# CONFIG_MIPS_PB1100 is not set
+# CONFIG_MIPS_PB1200 is not set
+# CONFIG_MIPS_PB1500 is not set
+# CONFIG_MIPS_PB1550 is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_MIPS_SIM is not set
+# CONFIG_MIPS_VPE_LOADER is not set
+# CONFIG_MIPS_XXS1500 is not set
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MOMENCO_JAGUAR_ATX is not set
+# CONFIG_MOMENCO_OCELOT is not set
+# CONFIG_MOMENCO_OCELOT_3 is not set
+# CONFIG_MOMENCO_OCELOT_C is not set
+# CONFIG_MOMENCO_OCELOT_G is not set
+CONFIG_MTD=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_ALCHEMY is not set
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_MTD_BLOCK2MTD is not set
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_CONCAT=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTX1=y
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_ONENAND is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_PLATRAM is not set
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SLRAM is not set
+CONFIG_MTX1_WATCHDOG=y
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+CONFIG_NET_SCH_FIFO=y
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NETDEV_1000 is not set
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CT_ACCT=y
+# CONFIG_NF_NAT_AMANDA is not set
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_NEEDED=y
+# CONFIG_NF_NAT_PPTP is not set
+CONFIG_NF_NAT_SIP=m
+# CONFIG_NF_NAT_TFTP is not set
+# CONFIG_PAGE_SIZE_16KB is not set
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_64KB is not set
+# CONFIG_PAGE_SIZE_8KB is not set
+# CONFIG_PCIPCWATCHDOG is not set
+CONFIG_PHYLIB=y
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_PNPACPI is not set
+# CONFIG_PNX8550_JBS is not set
+# CONFIG_PNX8550_STB810 is not set
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_QSEMI_PHY is not set
+CONFIG_RESOURCES_64BIT=y
+# CONFIG_RTC is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_SCSI_CONSTANTS=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_SERIAL_8250_AU1X00=y
+# CONFIG_SERIAL_8250_EXTENDED is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+# CONFIG_SGI_IP32 is not set
+# CONFIG_SIBYTE_BIGSUR is not set
+# CONFIG_SIBYTE_CARMEL is not set
+# CONFIG_SIBYTE_CRHINE is not set
+# CONFIG_SIBYTE_CRHONE is not set
+# CONFIG_SIBYTE_LITTLESUR is not set
+# CONFIG_SIBYTE_PTSWARM is not set
+# CONFIG_SIBYTE_RHONE is not set
+# CONFIG_SIBYTE_SENTOSA is not set
+# CONFIG_SIBYTE_SWARM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_SND_AU1X00 is not set
+CONFIG_SOC_AU1500=y
+CONFIG_SOC_AU1X00=y
+CONFIG_SOFT_WATCHDOG=m
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_STANDALONE is not set
+CONFIG_STRIP=m
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_SYS_HAS_CPU_MIPS32_R1=y
+CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
+CONFIG_SYS_SUPPORTS_KGDB=y
+CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
+# CONFIG_TMD_HERMES is not set
+# CONFIG_TC35815 is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_TOSHIBA_RBTX4938 is not set
+CONFIG_TRAD_SIGNALS=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_VIA_RHINE is not set
+CONFIG_WDT_MTX1=y
+CONFIG_ZONE_DMA=y
+CONFIG_ZONE_DMA_FLAG=1
diff --git a/target/linux/au1000/files/drivers/leds/leds-mtx1.c b/target/linux/au1000/files/drivers/leds/leds-mtx1.c
new file mode 100644
index 0000000000..4c2ab55fc3
--- /dev/null
+++ b/target/linux/au1000/files/drivers/leds/leds-mtx1.c
@@ -0,0 +1,101 @@
+/*
+ * LED driver for MTX-1 boards
+ *
+ * Copyright 2007 Florian Fainelli <florian@openwrt.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/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/leds.h>
+#include <linux/err.h>
+#include <asm/gpio.h>
+
+static struct platform_device *pdev;
+
+static void mtx1_led_set(struct led_classdev *led_cdev, enum led_brightness brightness)
+{
+ if (!strcmp("mtx1:green", led_cdev->name))
+ gpio_set_value(211, brightness ? 1 : 0);
+ else
+ gpio_set_value(212, brightness ? 1 : 0);
+}
+
+static struct led_classdev mtx1_green_led = {
+ .name = "mtx1:green",
+ .brightness_set = mtx1_led_set,
+};
+
+static struct led_classdev mtx1_red_led = {
+ .name = "mtx1:red",
+ .brightness_set = mtx1_led_set,
+};
+
+static int mtx1_leds_probe(struct platform_device *pdev)
+{
+ int ret;
+
+ ret = led_classdev_register(&pdev->dev, &mtx1_green_led);
+ if (ret < 0)
+ goto out;
+
+ ret = led_classdev_register(&pdev->dev, &mtx1_red_led);
+ if (ret < 0)
+ led_classdev_unregister(&mtx1_green_led);
+
+out:
+ return ret;
+}
+
+static int mtx1_leds_remove(struct platform_device *pdev)
+{
+ led_classdev_unregister(&mtx1_green_led);
+ led_classdev_unregister(&mtx1_red_led);
+ return 0;
+}
+
+static struct platform_driver mtx1_leds_driver = {
+ .probe = mtx1_leds_probe,
+ .remove = mtx1_leds_remove,
+ .driver = {
+ .name = "mtx1-leds",
+ }
+};
+
+static int __init mtx1_leds_init(void)
+{
+ int ret;
+
+ ret = platform_driver_register(&mtx1_leds_driver);
+ if (ret < 0)
+ goto out;
+
+ pdev = platform_device_register_simple("mtx1-leds", -1, NULL, 0);
+ if (IS_ERR(pdev)) {
+ ret = PTR_ERR(pdev);
+ platform_driver_unregister(&mtx1_leds_driver);
+ goto out;
+ }
+
+out:
+ return ret;
+
+}
+
+static void __exit mtx1_leds_exit(void)
+{
+ platform_device_unregister(pdev);
+ platform_driver_unregister(&mtx1_leds_driver);
+}
+
+module_init(mtx1_leds_init);
+module_exit(mtx1_leds_exit);
+
+MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
+MODULE_DESCRIPTION("MTX-1 LED driver");
+MODULE_LICENSE("GPL");
diff --git a/target/linux/au1000/image/Makefile b/target/linux/au1000/image/Makefile
new file mode 100644
index 0000000000..1d4aa47070
--- /dev/null
+++ b/target/linux/au1000/image/Makefile
@@ -0,0 +1,66 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/image.mk
+
+LOADADDR = 0x81000000 # RAM start + 16M
+KERNEL_ENTRY = 0x80100000
+RAMSIZE = 0x00100000 # 1MB
+
+FLASH_KERNEL := 0xBFD00000
+FLASH_FS := 0xBE000000
+
+LOADER_MAKEOPTS= \
+ KDIR=$(KDIR) \
+ LOADADDR=$(LOADADDR) \
+ KERNEL_ENTRY=$(KERNEL_ENTRY) \
+ RAMSIZE=$(RAMSIZE)
+
+define Build/Clean
+ $(MAKE) -C $(GENERIC_PLATFORM_DIR)/image/lzma-loader $(LOADER_MAKEOPTS) clean
+endef
+
+DROP_SECTIONS := .reginfo .mdebug .comment .note .pdr .options .MIPS.options
+OBJCOPY_SREC := $(TARGET_CROSS)objcopy -S -O srec $(addprefix --remove-section=,$(DROP_SECTIONS))
+OBJCOPY_BIN := $(TARGET_CROSS)objcopy -S -O binary $(addprefix --remove-section=,$(DROP_SECTIONS))
+
+define Image/Prepare
+ cat $(KDIR)/vmlinux | $(STAGING_DIR_HOST)/bin/lzma e -si -so -eos -lc1 -lp2 -pb2 > $(KDIR)/vmlinux.lzma
+
+ # Build RAM image
+ $(MAKE) -C $(GENERIC_PLATFORM_DIR)/image/lzma-loader \
+ $(LOADER_MAKEOPTS) \
+ clean compile
+ $(OBJCOPY_SREC) $(KDIR)/loader.elf $(KDIR)/kernel.ram.srec
+
+ # Build Flash image
+ $(MAKE) -C $(GENERIC_PLATFORM_DIR)/image/lzma-loader \
+ $(LOADER_MAKEOPTS) \
+ IMAGE_COPY=1 \
+ LOADER_ENTRY=$(FLASH_KERNEL) \
+ LOADER_TYPE=_flash \
+ clean compile
+ $(OBJCOPY_SREC) $(KDIR)/loader_flash.elf $(KDIR)/kernel.flash.srec
+ $(OBJCOPY_BIN) $(KDIR)/loader_flash.elf $(KDIR)/kernel.flash.bin
+endef
+
+define Image/Build/Initramfs
+ $(OBJCOPY_SREC) $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux.elf $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux.srec
+endef
+
+define Image/Build
+ $(TARGET_CROSS)objcopy -O srec -I binary --adjust-vma $(FLASH_FS) $(KDIR)/root.$(1) $(KDIR)/root.$(1).srec
+ grep -v S7 $(KDIR)/root.$(1).srec > $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img
+ grep -v S0 $(KDIR)/kernel.flash.srec >> $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img
+ $(CP) $(KDIR)/kernel.flash.bin $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux.bin
+ $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).fs
+ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
+ $(call Image/Build/Initramfs)
+endif
+endef
+
+$(eval $(call BuildImage))
diff --git a/target/linux/au1000/patches/001-au1x00_gpio.patch b/target/linux/au1000/patches/001-au1x00_gpio.patch
new file mode 100644
index 0000000000..d4339aec46
--- /dev/null
+++ b/target/linux/au1000/patches/001-au1x00_gpio.patch
@@ -0,0 +1,294 @@
+diff -urN linux-2.6.21.1/arch/mips/au1000/common/gpio.c linux-2.6.21.1.new/arch/mips/au1000/common/gpio.c
+--- linux-2.6.21.1/arch/mips/au1000/common/gpio.c 2007-04-27 23:49:26.000000000 +0200
++++ linux-2.6.21.1.new/arch/mips/au1000/common/gpio.c 2007-05-22 21:41:55.000000000 +0200
+@@ -1,4 +1,7 @@
+ /*
++ * Copyright (C) 2007, OpenWrt.org, Florian Fainelli <florian@openwrt.org>
++ * Architecture specific GPIO support
++ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+@@ -18,101 +21,133 @@
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ * Notes :
++ * au1000 SoC have only one GPIO line : GPIO1
++ * others have a second one : GPIO2
+ */
++
++#include <linux/autoconf.h>
++#include <linux/init.h>
++#include <linux/types.h>
+ #include <linux/module.h>
+-#include <au1000.h>
+-#include <au1xxx_gpio.h>
++
++#include <asm/addrspace.h>
++#include <asm/io.h>
++
++#include <asm/mach-au1x00/au1000.h>
++#include <asm/gpio.h>
+
+ #define gpio1 sys
+ #if !defined(CONFIG_SOC_AU1000)
+ static AU1X00_GPIO2 * const gpio2 = (AU1X00_GPIO2 *)GPIO2_BASE;
++#define GPIO2_OUTPUT_ENABLE_MASK 0x00010000
+
+-#define GPIO2_OUTPUT_ENABLE_MASK 0x00010000
+-
+-int au1xxx_gpio2_read(int signal)
++static int au1xxx_gpio2_read(unsigned gpio)
+ {
+- signal -= 200;
+-/* gpio2->dir &= ~(0x01 << signal); //Set GPIO to input */
+- return ((gpio2->pinstate >> signal) & 0x01);
++ gpio -= AU1XXX_GPIO_BASE;
++ return ((gpio2->pinstate >> gpio) & 0x01);
+ }
+
+-void au1xxx_gpio2_write(int signal, int value)
++static void au1xxx_gpio2_write(unsigned gpio, int value)
+ {
+- signal -= 200;
++ gpio -= AU1XXX_GPIO_BASE;
+
+- gpio2->output = (GPIO2_OUTPUT_ENABLE_MASK << signal) |
+- (value << signal);
++ gpio2->output = (GPIO2_OUTPUT_ENABLE_MASK << gpio) |
++ (value << gpio);
+ }
+
+-void au1xxx_gpio2_tristate(int signal)
++static int au1xxx_gpio2_direction_input(unsigned gpio)
+ {
+- signal -= 200;
+- gpio2->dir &= ~(0x01 << signal); /* Set GPIO to input */
++ gpio -= AU1XXX_GPIO_BASE;
++ gpio2->dir &= ~(0x01 << gpio);
++ return 0;
+ }
+-#endif
+
+-int au1xxx_gpio1_read(int signal)
++static int au1xxx_gpio2_direction_output(unsigned gpio, int value)
++{
++ gpio -= AU1XXX_GPIO_BASE;
++ gpio2->dir = (0x01 << gpio) | (value << gpio);
++ return 0;
++}
++
++#endif /* !defined(CONFIG_SOC_AU1000) */
++
++static int au1xxx_gpio1_read(unsigned gpio)
+ {
+-/* gpio1->trioutclr |= (0x01 << signal); */
+- return ((gpio1->pinstaterd >> signal) & 0x01);
++ return ((gpio1->pinstaterd >> gpio) & 0x01);
+ }
+
+-void au1xxx_gpio1_write(int signal, int value)
++static void au1xxx_gpio1_write(unsigned gpio, int value)
+ {
+ if(value)
+- gpio1->outputset = (0x01 << signal);
++ gpio1->outputset = (0x01 << gpio);
+ else
+- gpio1->outputclr = (0x01 << signal); /* Output a Zero */
++ /* Output a zero */
++ gpio1->outputclr = (0x01 << gpio);
+ }
+
+-void au1xxx_gpio1_tristate(int signal)
++static int au1xxx_gpio1_direction_input(unsigned gpio)
+ {
+- gpio1->trioutclr = (0x01 << signal); /* Tristate signal */
++ gpio1->pininputen = (0x01 << gpio);
++ return 0;
+ }
+
++static int au1xxx_gpio1_direction_output(unsigned gpio, int value)
++{
++ gpio1->trioutclr = (0x01 & gpio);
++ return 0;
++}
+
+-int au1xxx_gpio_read(int signal)
++int au1xxx_gpio_get_value(unsigned gpio)
+ {
+- if(signal >= 200)
++ if(gpio >= AU1XXX_GPIO_BASE)
+ #if defined(CONFIG_SOC_AU1000)
+ return 0;
+ #else
+- return au1xxx_gpio2_read(signal);
++ return au1xxx_gpio2_read(gpio);
+ #endif
+ else
+- return au1xxx_gpio1_read(signal);
++ return au1xxx_gpio1_read(gpio);
+ }
+
+-void au1xxx_gpio_write(int signal, int value)
++void au1xxx_gpio_set_value(unsigned gpio, int value)
+ {
+- if(signal >= 200)
++ if(gpio >= AU1XXX_GPIO_BASE)
+ #if defined(CONFIG_SOC_AU1000)
+ ;
+ #else
+- au1xxx_gpio2_write(signal, value);
++ au1xxx_gpio2_write(gpio, value);
+ #endif
+ else
+- au1xxx_gpio1_write(signal, value);
++ au1xxx_gpio1_write(gpio, value);
+ }
+
+-void au1xxx_gpio_tristate(int signal)
++int au1xxx_gpio_direction_input(unsigned gpio)
+ {
+- if(signal >= 200)
++ if (gpio >= AU1XXX_GPIO_BASE)
+ #if defined(CONFIG_SOC_AU1000)
+ ;
+ #else
+- au1xxx_gpio2_tristate(signal);
++ return au1xxx_gpio2_direction_input(gpio);
+ #endif
+ else
+- au1xxx_gpio1_tristate(signal);
++ return au1xxx_gpio1_direction_input(gpio);
+ }
+
+-void au1xxx_gpio1_set_inputs(void)
++int au1xxx_gpio_direction_output(unsigned gpio, int value)
+ {
+- gpio1->pininputen = 0;
++ if (gpio >= AU1XXX_GPIO_BASE)
++#if defined(CONFIG_SOC_AU1000)
++ ;
++#else
++ return au1xxx_gpio2_direction_output(gpio, value);
++#endif
++ else
++ return au1xxx_gpio1_direction_output(gpio, value);
+ }
+
+-EXPORT_SYMBOL(au1xxx_gpio1_set_inputs);
+-EXPORT_SYMBOL(au1xxx_gpio_tristate);
+-EXPORT_SYMBOL(au1xxx_gpio_write);
+-EXPORT_SYMBOL(au1xxx_gpio_read);
++EXPORT_SYMBOL(au1xxx_gpio_direction_output);
++EXPORT_SYMBOL(au1xxx_gpio_direction_input);
++EXPORT_SYMBOL(au1xxx_gpio_get_value);
++EXPORT_SYMBOL(au1xxx_gpio_set_value);
+--- linux-2.6.21.1/arch/mips/Kconfig 2007-04-27 23:49:26.000000000 +0200
++++ linux-2.6.21.1.new/arch/mips/Kconfig 2007-05-21 08:04:42.000000000 +0200
+@@ -1044,6 +1044,7 @@
+ select SYS_SUPPORTS_32BIT_KERNEL
+ select SYS_SUPPORTS_APM_EMULATION
+ select SYS_SUPPORTS_KGDB
++ select GENERIC_GPIO
+
+ config PNX8550
+ bool
+diff -urN linux-2.6.21.1/include/asm-mips/mach-au1x00/au1xxx_gpio.h linux-2.6.21.1.new/include/asm-mips/mach-au1x00/au1xxx_gpio.h
+--- linux-2.6.21.1/include/asm-mips/mach-au1x00/au1xxx_gpio.h 2007-04-27 23:49:26.000000000 +0200
++++ linux-2.6.21.1.new/include/asm-mips/mach-au1x00/au1xxx_gpio.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,20 +0,0 @@
+-#ifndef __AU1XXX_GPIO_H
+-#define __AU1XXX_GPIO_H
+-
+-void au1xxx_gpio1_set_inputs(void);
+-void au1xxx_gpio_tristate(int signal);
+-void au1xxx_gpio_write(int signal, int value);
+-int au1xxx_gpio_read(int signal);
+-
+-typedef volatile struct
+-{
+- u32 dir;
+- u32 reserved;
+- u32 output;
+- u32 pinstate;
+- u32 inten;
+- u32 enable;
+-
+-} AU1X00_GPIO2;
+-
+-#endif //__AU1XXX_GPIO_H
+diff -urN linux-2.6.21.1/include/asm-mips/mach-au1x00/gpio.h linux-2.6.21.1.new/include/asm-mips/mach-au1x00/gpio.h
+--- linux-2.6.21.1/include/asm-mips/mach-au1x00/gpio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21.1.new/include/asm-mips/mach-au1x00/gpio.h 2007-05-21 01:10:22.000000000 +0200
+@@ -0,0 +1,69 @@
++#ifndef _AU1XXX_GPIO_H_
++#define _AU1XXX_GPIO_H_
++
++#define AU1XXX_GPIO_BASE 200
++
++typedef volatile struct
++{
++ u32 dir;
++ u32 reserved;
++ u32 output;
++ u32 pinstate;
++ u32 inten;
++ u32 enable;
++
++} AU1X00_GPIO2;
++
++extern int au1xxx_gpio_get_value(unsigned gpio);
++extern void au1xxx_gpio_set_value(unsigned gpio, int value);
++extern int au1xxx_gpio_direction_input(unsigned gpio);
++extern int au1xxx_gpio_direction_output(unsigned gpio, int value);
++
++
++/* Wrappers for the arch-neutral GPIO API */
++
++static inline int gpio_request(unsigned gpio, const char *label)
++{
++ /* Not yet implemented */
++ return 0;
++}
++
++static inline void gpio_free(unsigned gpio)
++{
++ /* Not yet implemented */
++}
++
++static inline int gpio_direction_input(unsigned gpio)
++{
++ return au1xxx_gpio_direction_input(gpio);
++}
++
++static inline int gpio_direction_output(unsigned gpio, int value)
++{
++ return au1xxx_gpio_direction_output(gpio, value);
++}
++
++static inline int gpio_get_value(unsigned gpio)
++{
++ return au1xxx_gpio_get_value(gpio);
++}
++
++static inline void gpio_set_value(unsigned gpio, int value)
++{
++ au1xxx_gpio_set_value(gpio, value);
++}
++
++static inline int gpio_to_irq(unsigned gpio)
++{
++ return gpio;
++}
++
++static inline int irq_to_gpio(unsigned irq)
++{
++ return irq;
++}
++
++/* For cansleep */
++#include <asm-generic/gpio.h>
++
++#endif /* _AU1XXX_GPIO_H_ */
diff --git a/target/linux/au1000/patches/005-au1000_eth_link_beat.patch b/target/linux/au1000/patches/005-au1000_eth_link_beat.patch
new file mode 100644
index 0000000000..946bd84540
--- /dev/null
+++ b/target/linux/au1000/patches/005-au1000_eth_link_beat.patch
@@ -0,0 +1,24 @@
+diff -urN linux-2.6.16.7/drivers/net/au1000_eth.c linux-2.6.16.7.new/drivers/net/au1000_eth.c
+--- linux-2.6.16.7/drivers/net/au1000_eth.c 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7.new/drivers/net/au1000_eth.c 2006-04-23 01:42:48.000000000 +0200
+@@ -12,6 +12,9 @@
+ * Author: MontaVista Software, Inc.
+ * ppopov@mvista.com or source@mvista.com
+ *
++ * Bjoern Riemer 2004
++ * riemer@fokus.fraunhofer.de or riemer@riemer-nt.de
++ * // fixed the link beat detection with ioctls (SIOCGMIIPHY)
+ * ########################################################################
+ *
+ * This program is free software; you can distribute it and/or modify it
+@@ -1672,6 +1675,10 @@
+ aup->phy_ops->phy_status(dev, aup->phy_addr, &link, &speed);
+ control = MAC_DISABLE_RX_OWN | MAC_RX_ENABLE | MAC_TX_ENABLE;
+ #ifndef CONFIG_CPU_LITTLE_ENDIAN
++ /*riemer: fix for startup without cable */
++ if (!link)
++ dev->flags &= ~IFF_RUNNING;
++
+ control |= MAC_BIG_ENDIAN;
+ #endif
+ if (link && (dev->if_port == IF_PORT_100BASEFX)) {
diff --git a/target/linux/au1000/patches/006-mtx1_system_button.patch b/target/linux/au1000/patches/006-mtx1_system_button.patch
new file mode 100644
index 0000000000..f4d380c729
--- /dev/null
+++ b/target/linux/au1000/patches/006-mtx1_system_button.patch
@@ -0,0 +1,241 @@
+diff -urN linux-2.6.16.7/arch/mips/au1000/mtx-1/irqmap.c linux-2.6.16.7.new/arch/mips/au1000/mtx-1/irqmap.c
+--- linux-2.6.16.7/arch/mips/au1000/mtx-1/irqmap.c 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7.new/arch/mips/au1000/mtx-1/irqmap.c 2006-04-23 11:54:31.000000000 +0200
+@@ -64,6 +64,7 @@
+ { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
+ { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 },
+ { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 },
++ { AU1500_GPIO_207, INTC_INT_RISE_AND_FALL_EDGE, 0 },
+ };
+
+ int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
+diff -urN linux-2.6.16.7/arch/mips/au1000/mtx-1/Makefile linux-2.6.16.7.new/arch/mips/au1000/mtx-1/Makefile
+--- linux-2.6.16.7/arch/mips/au1000/mtx-1/Makefile 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7.new/arch/mips/au1000/mtx-1/Makefile 2006-04-23 14:01:36.000000000 +0200
+@@ -8,3 +8,4 @@
+ #
+
+ lib-y := init.o board_setup.o irqmap.o
++obj-y := mtx-1_sysbtn.o
+diff -urN linux-2.6.16.7/arch/mips/au1000/mtx-1/mtx-1_sysbtn.c linux-2.6.16.7.new/arch/mips/au1000/mtx-1/mtx-1_sysbtn.c
+--- linux-2.6.16.7/arch/mips/au1000/mtx-1/mtx-1_sysbtn.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7.new/arch/mips/au1000/mtx-1/mtx-1_sysbtn.c 2006-04-23 14:01:17.000000000 +0200
+@@ -0,0 +1,218 @@
++/*
++ * Driver for the MTX-1 System Button.
++ *
++ * (c) Copyright 2005 4G Systems <info@4g-systems.biz>, All Rights Reserved.
++ * http://www.4g-systems.biz
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ *
++ * Neither Michael Stickel nor 4G Systeme GmbH admit liability nor provide
++ * warranty for any of this software. This material is provided
++ * "AS-IS" and at no charge.
++ *
++ * (c) Copyright 2005 4G Systems <info@4g-systems.biz>
++ *
++ * Release 0.01.
++ *
++ * Author: Michael Stickel michael.stickel@4g-systems.biz
++ *
++ *
++ * After the module is loaded there is a device /dev/misc/btn
++ * that can be read. It returns one char '1' if the button
++ * has been pressed an '0' if it has been released.
++ */
++#include <linux/autoconf.h>
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/poll.h>
++#include <linux/sched.h>
++#include <linux/miscdevice.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/irq.h>
++#include <linux/interrupt.h>
++
++#include <asm/uaccess.h>
++
++#include <asm/mach-au1x00/au1000.h>
++
++
++#ifndef FALSE
++# define FALSE (0)
++#endif
++
++#ifndef TRUE
++# define TRUE (!FALSE)
++#endif
++
++
++//---------[ declarations ]-----------------
++
++
++static DECLARE_WAIT_QUEUE_HEAD(mtx1btn_wait_queue);
++static char state_changed;
++static char last_value;
++static char is_inuse;
++
++
++//---------[ Hardware Functions ]-----------------
++
++// The MTX-1 Button is attached to GPIO207.
++#define MTX1_GPIO2_SYSBTN (7)
++#define MTX1_SYSBTN_IRQ (AU1500_GPIO_207)
++
++
++static char mtx1_getbtn (int btnno)
++{
++ if (btnno==0) {
++ return (au_readl(GPIO2_PINSTATE) & (1<<MTX1_GPIO2_SYSBTN)) ? 0 : 1;
++ }
++ return 0;
++}
++
++static void mtx1_initbuttons (void)
++{
++ au_writel (au_readl(GPIO2_DIR) & ~(1<<MTX1_GPIO2_SYSBTN), GPIO2_DIR);
++}
++
++
++//---------[ Interrupt handling ]-----------------
++
++
++static void mtx1_btn_interrupt (int irq, void *private)
++{
++ char value = mtx1_getbtn(0);
++ if (last_value != value)
++ {
++ last_value = value;
++ state_changed = 1;
++ wake_up (&mtx1btn_wait_queue);
++ }
++// kill_fasync(&async_queue, SIGIO, POLL_OUT);
++}
++
++
++static int mtx1_btn_startirq (void)
++{
++ if (!request_irq (MTX1_SYSBTN_IRQ, mtx1_btn_interrupt, 0 /* | SA_INTERRUPT */, "mtx1btn", (void *)&state_changed)) {
++ return 0;
++ }
++ return -1;
++}
++
++static int mtx1_btn_stopirq (void)
++{
++ free_irq(MTX1_SYSBTN_IRQ, (void *)&state_changed);
++ return 0;
++}
++
++
++
++//---------[ File Functions ]-----------------
++
++
++static int mtx1sysbtn_minor = -1;
++
++
++static int mtx1sysbtn_open (struct inode *inode, struct file *file)
++{
++ if (MINOR(inode->i_rdev)!=mtx1sysbtn_minor) return -ENODEV;
++ if (is_inuse) return -EBUSY;
++ is_inuse=1;
++ last_value = mtx1_getbtn(0);
++ state_changed = 0;
++ return 0;
++}
++
++
++static int mtx1sysbtn_release (struct inode *inode, struct file *file) {
++ if (MINOR(inode->i_rdev)==mtx1sysbtn_minor) {
++ is_inuse=0;
++ }
++ return 0;
++}
++
++
++static ssize_t mtx1sysbtn_read (struct file *file, char *buf, size_t count, loff_t *ppos)
++{
++ if (count < 1)
++ return -EINVAL;
++ if (!state_changed)
++ interruptible_sleep_on (&mtx1btn_wait_queue);
++ state_changed = 0;
++ char c = last_value ? '1' : '0'; /* mtx1_getbtn(0) */
++ if(copy_to_user(buf, &c, 1))
++ return -EFAULT;
++ return 1;
++}
++
++
++static unsigned int mtx1sysbtn_poll (struct file *file, poll_table * wait)
++{
++ unsigned int mask = 0;
++
++ poll_wait (file, &mtx1btn_wait_queue, wait);
++
++ if (state_changed) // state changed since last time.
++ mask |= POLLIN | POLLRDNORM;
++
++ return mask;
++}
++
++
++static struct file_operations mtx1sysbtn_fops = {
++ .owner = THIS_MODULE,
++ .read = mtx1sysbtn_read,
++ .poll = mtx1sysbtn_poll,
++ .open = mtx1sysbtn_open,
++ .release = mtx1sysbtn_release
++};
++
++
++static struct miscdevice mtx1sysbtn_miscdev = {
++ MISC_DYNAMIC_MINOR /* SYSBTN_MINOR */ ,
++ "btn",
++ &mtx1sysbtn_fops
++};
++
++
++
++//---------[ Module Functions ]-----------------
++
++
++void __exit exit_mtx1_sysbtn (void)
++{
++ is_inuse = 1;
++ mtx1_btn_stopirq ();
++ misc_deregister(&mtx1sysbtn_miscdev);
++}
++
++
++static int __init init_mtx1_sysbtn (void)
++{
++ printk("MTX-1 System Button driver\n");
++ is_inuse = 1;
++ mtx1_initbuttons ();
++ if (misc_register (&mtx1sysbtn_miscdev) >= 0) {
++ mtx1sysbtn_minor = mtx1sysbtn_miscdev.minor;
++ if (mtx1_btn_startirq () == 0) {
++ is_inuse=0;
++ return 0;
++ }
++ misc_deregister(&mtx1sysbtn_miscdev);
++ }
++ return 1;
++}
++
++module_init(init_mtx1_sysbtn);
++module_exit(exit_mtx1_sysbtn);
++
++MODULE_AUTHOR("Michael Stickel");
++MODULE_DESCRIPTION("Driver for the MTX-1 system button");
++MODULE_LICENSE("GPL");
diff --git a/target/linux/au1000/patches/011-mtx1_leds.patch b/target/linux/au1000/patches/011-mtx1_leds.patch
new file mode 100644
index 0000000000..93c681e964
--- /dev/null
+++ b/target/linux/au1000/patches/011-mtx1_leds.patch
@@ -0,0 +1,28 @@
+diff -urN linux-2.6.19.2/drivers/leds/Kconfig linux-2.6.19.2.new/drivers/leds/Kconfig
+--- linux-2.6.19.2/drivers/leds/Kconfig 2007-01-10 20:10:37.000000000 +0100
++++ linux-2.6.19.2.new/drivers/leds/Kconfig 2007-03-02 13:50:28.000000000 +0100
+@@ -76,6 +76,13 @@
+ This option enables support for the Soekris net4801 and net4826 error
+ LED.
+
++config LEDS_MTX1
++ tristate "LED Support for MTX-1 boards"
++ depends on LEDS_CLASS && MIPS_MTX1
++ help
++ This option enables support for the MTX-1 power and status LED.
++
++
+ comment "LED Triggers"
+
+ config LEDS_TRIGGERS
+diff -urN linux-2.6.21.1/drivers/leds/Makefile linux-2.6.21.1.new/drivers/leds/Makefile
+--- linux-2.6.21.1/drivers/leds/Makefile 2007-04-27 23:49:26.000000000 +0200
++++ linux-2.6.21.1.new/drivers/leds/Makefile 2007-05-24 23:39:18.000000000 +0200
+@@ -16,6 +16,7 @@
+ obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
+ obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
+ obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
++obj-$(CONFIG_LEDS_MTX1) += leds-mtx1.o
+
+ # LED Triggers
+ obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
diff --git a/target/linux/au1000/patches/012-mtx1_cmdline.patch b/target/linux/au1000/patches/012-mtx1_cmdline.patch
new file mode 100644
index 0000000000..8f078428c4
--- /dev/null
+++ b/target/linux/au1000/patches/012-mtx1_cmdline.patch
@@ -0,0 +1,19 @@
+--- linux-2.6.19.2/arch/mips/au1000/mtx-1/init.c.old 2007-04-06 15:01:13.503777992 +0200
++++ linux-2.6.19.2/arch/mips/au1000/mtx-1/init.c 2007-04-06 15:01:36.296313000 +0200
+@@ -39,7 +39,6 @@
+
+ int prom_argc;
+ char **prom_argv, **prom_envp;
+-extern void __init prom_init_cmdline(void);
+ extern char *prom_getenv(char *envname);
+
+ const char *get_system_type(void)
+@@ -59,7 +58,7 @@
+ mips_machgroup = MACH_GROUP_ALCHEMY;
+ mips_machtype = MACH_MTX1; /* set the platform # */
+
+- prom_init_cmdline();
++ strcpy(arcs_cmdline, CONFIG_CMDLINE);
+
+ memsize_str = prom_getenv("memsize");
+ if (!memsize_str)
diff --git a/target/linux/au1000/patches/013-openwrt_rootfs.patch b/target/linux/au1000/patches/013-openwrt_rootfs.patch
new file mode 100644
index 0000000000..7793161af8
--- /dev/null
+++ b/target/linux/au1000/patches/013-openwrt_rootfs.patch
@@ -0,0 +1,11 @@
+--- linux-2.6.19.2/drivers/mtd/maps/mtx-1_flash.c 2007-07-10 20:56:30.000000000 +0200
++++ linux-2.6.19.2.new/drivers/mtd/maps/mtx-1_flash.c 2007-07-23 12:21:16.000000000 +0200
+@@ -28,7 +28,7 @@
+
+ static struct mtd_partition mtx1_partitions[] = {
+ {
+- .name = "filesystem",
++ .name = "rootfs",
+ .size = 0x01C00000,
+ .offset = 0,
+ },{
diff --git a/target/linux/au1000/patches/014-au1000_eth_ioctl.patch b/target/linux/au1000/patches/014-au1000_eth_ioctl.patch
new file mode 100644
index 0000000000..6187a7d5af
--- /dev/null
+++ b/target/linux/au1000/patches/014-au1000_eth_ioctl.patch
@@ -0,0 +1,15 @@
+--- linux-2.6.22.1.orig/drivers/net/au1000_eth.c 2007-07-24 18:43:25.527583520 +0200
++++ linux-2.6.22.1/drivers/net/au1000_eth.c 2007-07-24 23:07:00.388821102 +0200
+@@ -1320,9 +1320,12 @@
+ }
+ }
+
++#define AU1000_KNOWN_PHY_IOCTLS (SIOCGMIIPHY & 0xfff0)
+ static int au1000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+ {
+ struct au1000_private *aup = (struct au1000_private *)dev->priv;
++ if((cmd & AU1000_KNOWN_PHY_IOCTLS) != AU1000_KNOWN_PHY_IOCTLS)
++ return -EINVAL;
+
+ if (!netif_running(dev)) return -EINVAL;
+
diff --git a/target/linux/au1000/patches/015-pci-resource.patch b/target/linux/au1000/patches/015-pci-resource.patch
new file mode 100644
index 0000000000..ddbb7ed8a8
--- /dev/null
+++ b/target/linux/au1000/patches/015-pci-resource.patch
@@ -0,0 +1,14 @@
+--- linux-2.6.22.1.orig/include/asm-mips/mach-au1x00/au1000.h 2007-07-24 18:44:21.598778839 +0200
++++ linux-2.6.22.1/include/asm-mips/mach-au1x00/au1000.h 2007-07-24 22:08:49.761901610 +0200
+@@ -1680,9 +1680,9 @@
+ #define PCI_LAST_DEVFN (19<<3)
+
+ #define IOPORT_RESOURCE_START 0x00001000 /* skip legacy probing */
+-#define IOPORT_RESOURCE_END 0xffffffff
++#define IOPORT_RESOURCE_END 0xfffffffffULL
+ #define IOMEM_RESOURCE_START 0x10000000
+-#define IOMEM_RESOURCE_END 0xffffffff
++#define IOMEM_RESOURCE_END 0xfffffffffULL
+
+ /*
+ * Borrowed from the PPC arch:
diff --git a/target/linux/au1000/patches/016-pci-io_map.patch b/target/linux/au1000/patches/016-pci-io_map.patch
new file mode 100644
index 0000000000..6a80f7cb44
--- /dev/null
+++ b/target/linux/au1000/patches/016-pci-io_map.patch
@@ -0,0 +1,10 @@
+--- linux-2.6.22.1.orig/arch/mips/au1000/common/pci.c 2007-07-24 18:42:21.031908123 +0200
++++ linux-2.6.22.1/arch/mips/au1000/common/pci.c 2007-07-24 22:12:07.373162835 +0200
+@@ -74,6 +74,7 @@
+ printk(KERN_ERR "Unable to ioremap pci space\n");
+ return 1;
+ }
++ au1x_controller.io_map_base = virt_io_addr;
+
+ #ifdef CONFIG_DMA_NONCOHERENT
+ {
diff --git a/target/linux/au1000/patches/017-usb-power.patch b/target/linux/au1000/patches/017-usb-power.patch
new file mode 100644
index 0000000000..7f7fac85bf
--- /dev/null
+++ b/target/linux/au1000/patches/017-usb-power.patch
@@ -0,0 +1,11 @@
+--- linux-2.6.22.1.orig/arch/mips/au1000/mtx-1/board_setup.c 2007-07-29 18:57:35.000000000 +0200
++++ linux-2.6.22.1/arch/mips/au1000/mtx-1/board_setup.c 2007-07-29 18:59:48.000000000 +0200
+@@ -54,7 +54,7 @@
+
+ void __init board_setup(void)
+ {
+-#ifdef CONFIG_USB_OHCI
++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
+ // enable USB power switch
+ au_writel( au_readl(GPIO2_DIR) | 0x10, GPIO2_DIR );
+ au_writel( 0x100000, GPIO2_OUTPUT );
diff --git a/target/linux/au1000/profiles/Atheros.mk b/target/linux/au1000/profiles/Atheros.mk
new file mode 100644
index 0000000000..ec6e175e80
--- /dev/null
+++ b/target/linux/au1000/profiles/Atheros.mk
@@ -0,0 +1,13 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Atheros
+ NAME:=Atheros WiFi (default)
+ PACKAGES:=kmod-madwifi
+endef
+$(eval $(call Profile,Atheros))
+
diff --git a/target/linux/au1000/profiles/Broadcom.mk b/target/linux/au1000/profiles/Broadcom.mk
new file mode 100644
index 0000000000..d7fb9cb809
--- /dev/null
+++ b/target/linux/au1000/profiles/Broadcom.mk
@@ -0,0 +1,13 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Broadcom
+ NAME:=Broadcom BCM43xx WiFi
+ PACKAGES:=kmod-net-bcm43xx
+endef
+$(eval $(call Profile,Broadcom))
+
diff --git a/target/linux/au1000/profiles/Intel.mk b/target/linux/au1000/profiles/Intel.mk
new file mode 100644
index 0000000000..be112eea91
--- /dev/null
+++ b/target/linux/au1000/profiles/Intel.mk
@@ -0,0 +1,13 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Intel
+ NAME:=Intel IPW2200 WiFi
+ PACKAGES:=kmod-net-ipw2200
+endef
+$(eval $(call Profile,Intel))
+