From a425a7506c601c7d1ea6253f640acf10f4541d2c Mon Sep 17 00:00:00 2001 From: Imre Kaloz Date: Thu, 26 Jun 2008 13:53:27 +0000 Subject: [PATCH] add preliminary Netgear WNR854T support SVN-Revision: 11582 --- target/linux/orion/config-default | 1 + target/linux/orion/image/Makefile | 7 + .../099-add_netgear_wnr854t_support.patch | 199 ++++++++++++++++++ 3 files changed, 207 insertions(+) create mode 100644 target/linux/orion/patches/099-add_netgear_wnr854t_support.patch diff --git a/target/linux/orion/config-default b/target/linux/orion/config-default index 9e2cb1417b..5c2519bfc1 100644 --- a/target/linux/orion/config-default +++ b/target/linux/orion/config-default @@ -184,6 +184,7 @@ CONFIG_LZO_DECOMPRESS=m # CONFIG_MACH_TS209 is not set # CONFIG_MACH_TS409 is not set # CONFIG_MACH_TS78XX is not set +CONFIG_MACH_WNR854T=y CONFIG_MACH_WRT350N_V2=y # CONFIG_MAC_PARTITION is not set # CONFIG_MEDIA_ATTACH is not set diff --git a/target/linux/orion/image/Makefile b/target/linux/orion/image/Makefile index 862358253a..0650870322 100644 --- a/target/linux/orion/image/Makefile +++ b/target/linux/orion/image/Makefile @@ -19,6 +19,13 @@ define Image/BuildKernel -C none -a 0x00008000 -e 0x00008000 -n 'Linux-$(LINUX_VERSION)' \ -d $(KDIR)/wrt350nv2-zImage $(KDIR)/wrt350nv2-uImage cp $(KDIR)/wrt350nv2-uImage $(BIN_DIR)/openwrt-wrt350nv2-uImage +# WNR854T: mach id 1801 (0x709) + echo -en "\x07\x1c\xa0\xe3\x09\x10\x81\xe3" > $(KDIR)/wnr854t-zImage + cat $(LINUX_DIR)/arch/arm/boot/zImage >> $(KDIR)/wnr854t-zImage + $(STAGING_DIR_HOST)/bin/mkimage -A arm -O linux -T kernel \ + -C none -a 0x00008000 -e 0x00008000 -n 'Linux-$(LINUX_VERSION)' \ + -d $(KDIR)/wnr854t-zImage $(KDIR)/wnr854t-uImage + cp $(KDIR)/wnr854t-uImage $(BIN_DIR)/openwrt-wnr854t-uImage endef define Image/Build diff --git a/target/linux/orion/patches/099-add_netgear_wnr854t_support.patch b/target/linux/orion/patches/099-add_netgear_wnr854t_support.patch new file mode 100644 index 0000000000..8de5e8c3ee --- /dev/null +++ b/target/linux/orion/patches/099-add_netgear_wnr854t_support.patch @@ -0,0 +1,199 @@ +--- a/arch/arm/mach-orion5x/Kconfig ++++ b/arch/arm/mach-orion5x/Kconfig +@@ -74,6 +74,12 @@ + Say 'Y' here if you want your kernel to support the + Maxtor Shared Storage II platform. + ++config MACH_WNR854T ++ bool "Netgear WNR854T" ++ help ++ Say 'Y' here if you want your kernel to support the ++ Netgear WNR854T platform. ++ + endmenu + + endif +--- a/arch/arm/mach-orion5x/Makefile ++++ b/arch/arm/mach-orion5x/Makefile +@@ -10,3 +10,4 @@ + obj-$(CONFIG_MACH_TS78XX) += ts78xx-setup.o + obj-$(CONFIG_MACH_MV2120) += mv2120-setup.o + obj-$(CONFIG_MACH_MSS2) += mss2-setup.o ++obj-$(CONFIG_MACH_WNR854T) += wnr854t-setup.o +--- /dev/null ++++ b/arch/arm/mach-orion5x/wnr854t-setup.c +@@ -0,0 +1,164 @@ ++/* ++ * arch/arm/mach-orion5x/wnr854t-setup.c ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++static struct orion5x_mpp_mode wnr854t_mpp_modes[] __initdata = { ++ { 0, MPP_GPIO }, /* Power LED green (0=on) */ ++ { 1, MPP_GPIO }, /* Reset Button (0=off) */ ++ { 2, MPP_GPIO }, /* Power LED blink (0=off) */ ++ { 3, MPP_GPIO }, /* WAN Status LED amber (0=off) */ ++ { 4, MPP_GPIO }, /* PCI int */ ++ { 5, MPP_GPIO }, /* ??? */ ++ { 6, MPP_GPIO }, /* ??? */ ++ { 7, MPP_GPIO }, /* ??? */ ++ { 8, MPP_UNUSED }, /* ??? */ ++ { 9, MPP_GIGE }, /* GE_RXERR */ ++ { 10, MPP_UNUSED }, /* ??? */ ++ { 11, MPP_UNUSED }, /* ??? */ ++ { 12, MPP_GIGE }, /* GE_TXD[4] */ ++ { 13, MPP_GIGE }, /* GE_TXD[5] */ ++ { 14, MPP_GIGE }, /* GE_TXD[6] */ ++ { 15, MPP_GIGE }, /* GE_TXD[7] */ ++ { 16, MPP_GIGE }, /* GE_RXD[4] */ ++ { 17, MPP_GIGE }, /* GE_RXD[5] */ ++ { 18, MPP_GIGE }, /* GE_RXD[6] */ ++ { 19, MPP_GIGE }, /* GE_RXD[7] */ ++ { -1 }, ++}; ++ ++/* ++ * 8M NOR flash Device bus boot chip select ++ */ ++#define WNR854T_NOR_BOOT_BASE 0xf4000000 ++#define WNR854T_NOR_BOOT_SIZE SZ_8M ++ ++static struct mtd_partition wnr854t_nor_flash_partitions[] = { ++ { ++ .name = "kernel", ++ .offset = 0x00000000, ++ .size = 0x00100000, ++ }, { ++ .name = "rootfs", ++ .offset = 0x00100000, ++ .size = 0x00660000, ++ }, { ++ .name = "uboot", ++ .offset = 0x00760000, ++ .size = 0x00040000, ++ }, ++}; ++ ++static struct physmap_flash_data wnr854t_nor_flash_data = { ++ .width = 1, ++ .parts = wnr854t_nor_flash_partitions, ++ .nr_parts = ARRAY_SIZE(wnr854t_nor_flash_partitions), ++}; ++ ++static struct resource wnr854t_nor_flash_resource = { ++ .flags = IORESOURCE_MEM, ++ .start = WNR854T_NOR_BOOT_BASE, ++ .end = WNR854T_NOR_BOOT_BASE + WNR854T_NOR_BOOT_SIZE - 1, ++}; ++ ++static struct platform_device wnr854t_nor_flash = { ++ .name = "physmap-flash", ++ .id = 0, ++ .dev = { ++ .platform_data = &wnr854t_nor_flash_data, ++ }, ++ .num_resources = 1, ++ .resource = &wnr854t_nor_flash_resource, ++}; ++ ++static struct mv643xx_eth_platform_data wnr854t_eth_data = { ++ .phy_addr = -1, ++}; ++ ++static void __init wnr854t_init(void) ++{ ++ /* ++ * Setup basic Orion functions. Need to be called early. ++ */ ++ orion5x_init(); ++ ++ orion5x_mpp_conf(wnr854t_mpp_modes); ++ ++ /* ++ * Configure peripherals. ++ */ ++ orion5x_eth_init(&wnr854t_eth_data); ++ orion5x_uart0_init(); ++ ++ orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE, ++ WNR854T_NOR_BOOT_SIZE); ++ platform_device_register(&wnr854t_nor_flash); ++} ++ ++static int __init wnr854t_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) ++{ ++ int irq; ++ ++ /* ++ * Check for devices with hard-wired IRQs. ++ */ ++ irq = orion5x_pci_map_irq(dev, slot, pin); ++ if (irq != -1) ++ return irq; ++ ++ /* ++ * Mini-PCI slot. ++ */ ++ if (slot == 7) ++ return gpio_to_irq(4); ++ ++ return -1; ++} ++ ++static struct hw_pci wnr854t_pci __initdata = { ++ .nr_controllers = 2, ++ .swizzle = pci_std_swizzle, ++ .setup = orion5x_pci_sys_setup, ++ .scan = orion5x_pci_sys_scan_bus, ++ .map_irq = wnr854t_pci_map_irq, ++}; ++ ++static int __init wnr854t_pci_init(void) ++{ ++ if (machine_is_wnr854t()) ++ pci_common_init(&wnr854t_pci); ++ ++ return 0; ++} ++subsys_initcall(wnr854t_pci_init); ++ ++MACHINE_START(WNR854T, "Netgear WNR854T") ++ /* Maintainer: Imre Kaloz */ ++ .phys_io = ORION5X_REGS_PHYS_BASE, ++ .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, ++ .boot_params = 0x00000100, ++ .init_machine = wnr854t_init, ++ .map_io = orion5x_map_io, ++ .init_irq = orion5x_init_irq, ++ .timer = &orion5x_timer, ++ .fixup = tag_fixup_mem32, ++MACHINE_END +--- a/arch/arm/configs/orion5x_defconfig ++++ b/arch/arm/configs/orion5x_defconfig +@@ -166,6 +166,7 @@ + CONFIG_MACH_DNS323=y + CONFIG_MACH_TS209=y + CONFIG_MACH_LINKSTATION_PRO=y ++CONFIG_MACH_WNR854T=y + + # + # Boot options