add support for the Netgear WG302v1/WAG302v1
SVN-Revision: 10197
This commit is contained in:
		| @@ -22,7 +22,7 @@ | |||||||
| # NOTE: for now it's for only IXP4xx in big endian mode | # NOTE: for now it's for only IXP4xx in big endian mode | ||||||
|  |  | ||||||
| # list of supported boards, in "boardname machtypeid" format | # list of supported boards, in "boardname machtypeid" format | ||||||
| for board in "avila 526" "gateway7001 731" "nslu2 597" "nas100d 865" "wg302v2 890" "pronghornmetro 1040" "compex 1273" "wrt300nv2 1077" "loft 849" "dsmg600 964" "fsg3 1091" "ap1000 1543" | for board in "avila 526" "gateway7001 731" "nslu2 597" "nas100d 865" "wg302v1 889" "wg302v2 890" "pronghornmetro 1040" "compex 1273" "wrt300nv2 1077" "loft 849" "dsmg600 964" "fsg3 1091" "ap1000 1543" | ||||||
| do | do | ||||||
|   set -- $board |   set -- $board | ||||||
|   hexid=$(printf %x\\n $2) |   hexid=$(printf %x\\n $2) | ||||||
|   | |||||||
| @@ -219,6 +219,7 @@ CONFIG_MACH_NAS100D=y | |||||||
| CONFIG_MACH_NSLU2=y | CONFIG_MACH_NSLU2=y | ||||||
| CONFIG_MACH_PRONGHORNMETRO=y | CONFIG_MACH_PRONGHORNMETRO=y | ||||||
| CONFIG_MACH_SIDEWINDER=y | CONFIG_MACH_SIDEWINDER=y | ||||||
|  | CONFIG_MACH_WG302V1=y | ||||||
| CONFIG_MACH_WG302V2=y | CONFIG_MACH_WG302V2=y | ||||||
| CONFIG_MACH_WRT300NV2=y | CONFIG_MACH_WRT300NV2=y | ||||||
| # CONFIG_MAC_PARTITION is not set | # CONFIG_MAC_PARTITION is not set | ||||||
|   | |||||||
							
								
								
									
										217
									
								
								target/linux/ixp4xx/patches-2.6.23/160-wg302v1_support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								target/linux/ixp4xx/patches-2.6.23/160-wg302v1_support.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,217 @@ | |||||||
|  | diff -Nur linux-2.6.23.12/arch/arm/mach-ixp4xx/Kconfig linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/Kconfig | ||||||
|  | --- linux-2.6.23.12/arch/arm/mach-ixp4xx/Kconfig	2008-01-14 22:08:42.000000000 +0100 | ||||||
|  | +++ linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/Kconfig	2008-01-14 22:12:21.000000000 +0100 | ||||||
|  | @@ -49,6 +49,14 @@ | ||||||
|  |  	  7001 Access Point. For more information on this platform, | ||||||
|  |  	  see http://openwrt.org | ||||||
|  |   | ||||||
|  | +config MACH_WG302V1 | ||||||
|  | +	bool "Netgear WG302 v1 / WAG302 v1" | ||||||
|  | +	select PCI | ||||||
|  | +	help | ||||||
|  | +	  Say 'Y' here if you want your kernel to support Netgear's | ||||||
|  | +	  WG302 v1 or WAG302 v1 Access Points. For more information | ||||||
|  | +	  on this platform, see http://openwrt.org | ||||||
|  | + | ||||||
|  |  config MACH_WG302V2 | ||||||
|  |  	bool "Netgear WG302 v2 / WAG302 v2" | ||||||
|  |  	select PCI | ||||||
|  | diff -Nur linux-2.6.23.12/arch/arm/mach-ixp4xx/Makefile linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/Makefile | ||||||
|  | --- linux-2.6.23.12/arch/arm/mach-ixp4xx/Makefile	2008-01-14 22:08:42.000000000 +0100 | ||||||
|  | +++ linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/Makefile	2008-01-14 22:11:47.000000000 +0100 | ||||||
|  | @@ -14,6 +14,7 @@ | ||||||
|  |  obj-pci-$(CONFIG_MACH_NAS100D)		+= nas100d-pci.o | ||||||
|  |  obj-pci-$(CONFIG_MACH_DSMG600)		+= dsmg600-pci.o | ||||||
|  |  obj-pci-$(CONFIG_MACH_GATEWAY7001)	+= gateway7001-pci.o | ||||||
|  | +obj-pci-$(CONFIG_MACH_WG302V1)		+= wg302v1-pci.o | ||||||
|  |  obj-pci-$(CONFIG_MACH_WG302V2)		+= wg302v2-pci.o | ||||||
|  |  obj-pci-$(CONFIG_MACH_FSG)		+= fsg-pci.o | ||||||
|  |  obj-pci-$(CONFIG_MACH_PRONGHORNMETRO)	+= pronghornmetro-pci.o | ||||||
|  | @@ -33,6 +34,7 @@ | ||||||
|  |  obj-$(CONFIG_MACH_NAS100D)	+= nas100d-setup.o nas100d-power.o | ||||||
|  |  obj-$(CONFIG_MACH_DSMG600)      += dsmg600-setup.o dsmg600-power.o | ||||||
|  |  obj-$(CONFIG_MACH_GATEWAY7001)	+= gateway7001-setup.o | ||||||
|  | +obj-$(CONFIG_MACH_WG302V1)	+= wg302v1-setup.o | ||||||
|  |  obj-$(CONFIG_MACH_WG302V2)	+= wg302v2-setup.o | ||||||
|  |  obj-$(CONFIG_MACH_FSG)		+= fsg-setup.o fsg-power.o | ||||||
|  |  obj-$(CONFIG_MACH_PRONGHORNMETRO)	+= pronghornmetro-setup.o | ||||||
|  | diff -Nur linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-pci.c linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-pci.c | ||||||
|  | --- linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-pci.c	1970-01-01 01:00:00.000000000 +0100 | ||||||
|  | +++ linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-pci.c	2008-01-14 22:33:52.000000000 +0100 | ||||||
|  | @@ -0,0 +1,63 @@ | ||||||
|  | +/* | ||||||
|  | + * arch/arch/mach-ixp4xx/wg302v1-pci.c | ||||||
|  | + * | ||||||
|  | + * PCI setup routines for the Netgear WG302 v1 and WAG302 v1 | ||||||
|  | + * | ||||||
|  | + * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * based on coyote-pci.c: | ||||||
|  | + *	Copyright (C) 2002 Jungo Software Technologies. | ||||||
|  | + *	Copyright (C) 2003 MontaVista Software, Inc. | ||||||
|  | + * | ||||||
|  | + * Maintainer: Imre Kaloz <kaloz@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/pci.h> | ||||||
|  | +#include <linux/init.h> | ||||||
|  | +#include <linux/irq.h> | ||||||
|  | + | ||||||
|  | +#include <asm/mach-types.h> | ||||||
|  | +#include <asm/hardware.h> | ||||||
|  | + | ||||||
|  | +#include <asm/mach/pci.h> | ||||||
|  | + | ||||||
|  | +void __init wg302v1_pci_preinit(void) | ||||||
|  | +{ | ||||||
|  | +	set_irq_type(IRQ_IXP4XX_GPIO8, IRQT_LOW); | ||||||
|  | +	set_irq_type(IRQ_IXP4XX_GPIO10, IRQT_LOW); | ||||||
|  | + | ||||||
|  | +	ixp4xx_pci_preinit(); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +static int __init wg302v1_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||||||
|  | +{ | ||||||
|  | +	if (slot == 1) | ||||||
|  | +		return IRQ_IXP4XX_GPIO8; | ||||||
|  | +	else if (slot == 2) | ||||||
|  | +		return IRQ_IXP4XX_GPIO10; | ||||||
|  | +	else return -1; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +struct hw_pci wg302v1_pci __initdata = { | ||||||
|  | +	.nr_controllers = 1, | ||||||
|  | +	.preinit =        wg302v1_pci_preinit, | ||||||
|  | +	.swizzle =        pci_std_swizzle, | ||||||
|  | +	.setup =          ixp4xx_setup, | ||||||
|  | +	.scan =           ixp4xx_scan_bus, | ||||||
|  | +	.map_irq =        wg302v1_map_irq, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +int __init wg302v1_pci_init(void) | ||||||
|  | +{ | ||||||
|  | +	if (machine_is_wg302v1()) | ||||||
|  | +		pci_common_init(&wg302v1_pci); | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +subsys_initcall(wg302v1_pci_init); | ||||||
|  | diff -Nur linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-setup.c linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-setup.c | ||||||
|  | --- linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-setup.c	1970-01-01 01:00:00.000000000 +0100 | ||||||
|  | +++ linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-setup.c	2008-01-14 23:04:01.000000000 +0100 | ||||||
|  | @@ -0,0 +1,109 @@ | ||||||
|  | +/* | ||||||
|  | + * arch/arm/mach-ixp4xx/wg302v1-setup.c | ||||||
|  | + * | ||||||
|  | + * Board setup for the Netgear WG302 v1 and WAG302 v1 | ||||||
|  | + * | ||||||
|  | + * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||||||
|  | + * | ||||||
|  | + * based on coyote-setup.c: | ||||||
|  | + *      Copyright (C) 2003-2005 MontaVista Software, Inc. | ||||||
|  | + * | ||||||
|  | + * Author: Imre Kaloz <kaloz@openwrt.org> | ||||||
|  | + * | ||||||
|  | + */ | ||||||
|  | + | ||||||
|  | +#include <linux/kernel.h> | ||||||
|  | +#include <linux/init.h> | ||||||
|  | +#include <linux/device.h> | ||||||
|  | +#include <linux/serial.h> | ||||||
|  | +#include <linux/tty.h> | ||||||
|  | +#include <linux/serial_8250.h> | ||||||
|  | +#include <linux/slab.h> | ||||||
|  | + | ||||||
|  | +#include <asm/types.h> | ||||||
|  | +#include <asm/setup.h> | ||||||
|  | +#include <asm/memory.h> | ||||||
|  | +#include <asm/hardware.h> | ||||||
|  | +#include <asm/irq.h> | ||||||
|  | +#include <asm/mach-types.h> | ||||||
|  | +#include <asm/mach/arch.h> | ||||||
|  | +#include <asm/mach/flash.h> | ||||||
|  | + | ||||||
|  | +static struct flash_platform_data wg302v1_flash_data = { | ||||||
|  | +	.map_name	= "cfi_probe", | ||||||
|  | +	.width		= 2, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct resource wg302v1_flash_resource = { | ||||||
|  | +	.flags		= IORESOURCE_MEM, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct platform_device wg302v1_flash = { | ||||||
|  | +	.name		= "IXP4XX-Flash", | ||||||
|  | +	.id		= 0, | ||||||
|  | +	.dev		= { | ||||||
|  | +		.platform_data = &wg302v1_flash_data, | ||||||
|  | +	}, | ||||||
|  | +	.num_resources	= 1, | ||||||
|  | +	.resource	= &wg302v1_flash_resource, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct resource wg302v1_uart_resource = { | ||||||
|  | +	.start	= IXP4XX_UART1_BASE_PHYS, | ||||||
|  | +	.end	= IXP4XX_UART1_BASE_PHYS + 0x0fff, | ||||||
|  | +	.flags	= IORESOURCE_MEM, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct plat_serial8250_port wg302v1_uart_data[] = { | ||||||
|  | +	{ | ||||||
|  | +		.mapbase	= IXP4XX_UART1_BASE_PHYS, | ||||||
|  | +		.membase	= (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, | ||||||
|  | +		.irq		= IRQ_IXP4XX_UART1, | ||||||
|  | +		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, | ||||||
|  | +		.iotype		= UPIO_MEM, | ||||||
|  | +		.regshift	= 2, | ||||||
|  | +		.uartclk	= IXP4XX_UART_XTAL, | ||||||
|  | +	}, | ||||||
|  | +	{ }, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct platform_device wg302v1_uart = { | ||||||
|  | +	.name		= "serial8250", | ||||||
|  | +	.id		= PLAT8250_DEV_PLATFORM, | ||||||
|  | +	.dev			= { | ||||||
|  | +		.platform_data	= wg302v1_uart_data, | ||||||
|  | +	}, | ||||||
|  | +	.num_resources	= 1, | ||||||
|  | +	.resource	= &wg302v1_uart_resource, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct platform_device *wg302v1_devices[] __initdata = { | ||||||
|  | +	&wg302v1_flash, | ||||||
|  | +	&wg302v1_uart, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static void __init wg302v1_init(void) | ||||||
|  | +{ | ||||||
|  | +	ixp4xx_sys_init(); | ||||||
|  | + | ||||||
|  | +	wg302v1_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | ||||||
|  | +	wg302v1_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_32M - 1; | ||||||
|  | + | ||||||
|  | +	*IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; | ||||||
|  | +	*IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0; | ||||||
|  | + | ||||||
|  | +	platform_add_devices(wg302v1_devices, ARRAY_SIZE(wg302v1_devices)); | ||||||
|  | +} | ||||||
|  | + | ||||||
|  | +#ifdef CONFIG_MACH_WG302V1 | ||||||
|  | +MACHINE_START(WG302V1, "Netgear WG302 v1 / WAG302 v1") | ||||||
|  | +	/* Maintainer: Imre Kaloz <kaloz@openwrt.org> */ | ||||||
|  | +	.phys_io	= IXP4XX_PERIPHERAL_BASE_PHYS, | ||||||
|  | +	.io_pg_offst	= ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, | ||||||
|  | +	.map_io		= ixp4xx_map_io, | ||||||
|  | +	.init_irq	= ixp4xx_init_irq, | ||||||
|  | +	.timer		= &ixp4xx_timer, | ||||||
|  | +	.boot_params	= 0x0100, | ||||||
|  | +	.init_machine	= wg302v1_init, | ||||||
|  | +MACHINE_END | ||||||
|  | +#endif | ||||||
| @@ -0,0 +1,31 @@ | |||||||
|  | diff -Nur linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-setup.c linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-setup.c | ||||||
|  | --- linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-setup.c	2008-01-14 23:06:42.000000000 +0100 | ||||||
|  | +++ linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-setup.c	2008-01-14 23:03:16.000000000 +0100 | ||||||
|  | @@ -77,9 +77,27 @@ | ||||||
|  |  	.resource	= &wg302v1_uart_resource, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +/* Built-in 10/100 Ethernet MAC interfaces */ | ||||||
|  | +static struct eth_plat_info wg302_plat_eth[] = { | ||||||
|  | +	{ | ||||||
|  | +		.phy		= 30, | ||||||
|  | +		.rxq		= 3, | ||||||
|  | +		.txreadyq	= 20, | ||||||
|  | +	} | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +static struct platform_device wg302_eth[] = { | ||||||
|  | +	{ | ||||||
|  | +		.name			= "ixp4xx_eth", | ||||||
|  | +		.id			= IXP4XX_ETH_NPEB, | ||||||
|  | +		.dev.platform_data	= wg302_plat_eth, | ||||||
|  | +	} | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  |  static struct platform_device *wg302v1_devices[] __initdata = { | ||||||
|  |  	&wg302v1_flash, | ||||||
|  |  	&wg302v1_uart, | ||||||
|  | +	&wg302_eth[0], | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  static void __init wg302v1_init(void) | ||||||
| @@ -0,0 +1,48 @@ | |||||||
|  | diff -Nur linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-setup.c linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-setup.c | ||||||
|  | --- linux-2.6.23.12/arch/arm/mach-ixp4xx/wg302v1-setup.c	2008-01-14 23:12:03.000000000 +0100 | ||||||
|  | +++ linux-2.6.23.12-owrt/arch/arm/mach-ixp4xx/wg302v1-setup.c	2008-01-14 23:11:34.000000000 +0100 | ||||||
|  | @@ -100,6 +100,36 @@ | ||||||
|  |  	&wg302_eth[0], | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +static char wg302v1_mem_fixup[] __initdata = "mem=32M "; | ||||||
|  | + | ||||||
|  | +static void __init wg302v1_fixup(struct machine_desc *desc, | ||||||
|  | +		struct tag *tags, char **cmdline, struct meminfo *mi) | ||||||
|  | + | ||||||
|  | +{ | ||||||
|  | +	struct tag *t = tags; | ||||||
|  | +	char *p = *cmdline; | ||||||
|  | + | ||||||
|  | +	/* Find the end of the tags table, taking note of any cmdline tag. */ | ||||||
|  | +	for (; t->hdr.size; t = tag_next(t)) { | ||||||
|  | +		if (t->hdr.tag == ATAG_CMDLINE) { | ||||||
|  | +			p = t->u.cmdline.cmdline; | ||||||
|  | +		} | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	/* Overwrite the end of the table with a new cmdline tag. */ | ||||||
|  | +	t->hdr.tag = ATAG_CMDLINE; | ||||||
|  | +	t->hdr.size = (sizeof (struct tag_header) + | ||||||
|  | +		strlen(wg302v1_mem_fixup) + strlen(p) + 1 + 4) >> 2; | ||||||
|  | +	strlcpy(t->u.cmdline.cmdline, wg302v1_mem_fixup, COMMAND_LINE_SIZE); | ||||||
|  | +	strlcpy(t->u.cmdline.cmdline + strlen(wg302v1_mem_fixup), p, | ||||||
|  | +		COMMAND_LINE_SIZE - strlen(wg302v1_mem_fixup)); | ||||||
|  | + | ||||||
|  | +	/* Terminate the table. */ | ||||||
|  | +	t = tag_next(t); | ||||||
|  | +	t->hdr.tag = ATAG_NONE; | ||||||
|  | +	t->hdr.size = 0; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  static void __init wg302v1_init(void) | ||||||
|  |  { | ||||||
|  |  	ixp4xx_sys_init(); | ||||||
|  | @@ -118,6 +148,7 @@ | ||||||
|  |  	/* Maintainer: Imre Kaloz <kaloz@openwrt.org> */ | ||||||
|  |  	.phys_io	= IXP4XX_PERIPHERAL_BASE_PHYS, | ||||||
|  |  	.io_pg_offst	= ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, | ||||||
|  | +	.fixup		= wg302v1_fixup, | ||||||
|  |  	.map_io		= ixp4xx_map_io, | ||||||
|  |  	.init_irq	= ixp4xx_init_irq, | ||||||
|  |  	.timer		= &ixp4xx_timer, | ||||||
		Reference in New Issue
	
	Block a user
	 Imre Kaloz
					Imre Kaloz