diff options
Diffstat (limited to 'target/linux/au1000')
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)) + |