add support for the Compex WP18 and NP18A

SVN-Revision: 6981
This commit is contained in:
Imre Kaloz 2007-04-17 09:21:50 +00:00
parent 65113c481f
commit 0fc4540a23
6 changed files with 372 additions and 1 deletions

View File

@ -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" for board in "avila 526" "gateway7001 731" "nslu2 597" "nas100d 865" "wg302v2 890" "pronghornmetro 1040" "compex 1273"
do do
set -- $board set -- $board
hexid=$(printf %x\\n $2) hexid=$(printf %x\\n $2)

View File

@ -211,6 +211,7 @@ CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256 CONFIG_LEGACY_PTY_COUNT=256
# CONFIG_LIBCRC32C is not set # CONFIG_LIBCRC32C is not set
# CONFIG_LLC2 is not set # CONFIG_LLC2 is not set
CONFIG_MACH_COMPEX=y
CONFIG_MACH_GATEWAY7001=y CONFIG_MACH_GATEWAY7001=y
# CONFIG_MACH_GTWX5715 is not set # CONFIG_MACH_GTWX5715 is not set
# CONFIG_MACH_IXDP465 is not set # CONFIG_MACH_IXDP465 is not set

View File

@ -0,0 +1,73 @@
diff -Nur linux-2.6.19.2/drivers/net/ixp4xx/mac_driver.c linux-2.6.19.2-owrt/drivers/net/ixp4xx/mac_driver.c
--- linux-2.6.19.2/drivers/net/ixp4xx/mac_driver.c 2007-04-15 14:26:54.000000000 +0200
+++ linux-2.6.19.2-owrt/drivers/net/ixp4xx/mac_driver.c 2007-04-15 14:33:44.000000000 +0200
@@ -161,6 +161,16 @@
{
struct mac_info *mac = netdev_priv(dev);
+ if ( mac->mii.phy_id < 0 ) {
+ if ( init ) {
+ netif_carrier_on(mac->mii.dev);
+ mac->mii.full_duplex = 1;
+ update_duplex_mode(dev);
+ return 1;
+ }
+ return 0;
+ }
+
if (mii_check_media(&mac->mii, netif_msg_link(mac), init)) {
update_duplex_mode(dev);
return 1;
@@ -458,7 +468,12 @@
return -EINVAL;
if (!try_module_get(THIS_MODULE))
return -ENODEV;
- rc = generic_mii_ioctl(&mac->mii, if_mii(rq), cmd, &duplex_changed);
+ if ( mac->mii.phy_id < 0 ) {
+ duplex_changed = 0;
+ rc = -EOPNOTSUPP;
+ } else {
+ rc = generic_mii_ioctl(&mac->mii, if_mii(rq), cmd, &duplex_changed);
+ }
module_put(THIS_MODULE);
if (duplex_changed)
update_duplex_mode(dev);
@@ -488,6 +503,9 @@
static int ixmac_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
{
struct mac_info *mac = netdev_priv(dev);
+ if ( mac->mii.phy_id < 0 ) {
+ return 0;
+ }
mii_ethtool_gset(&mac->mii, cmd);
return 0;
}
@@ -496,6 +514,9 @@
{
struct mac_info *mac = netdev_priv(dev);
int rc;
+ if ( mac->mii.phy_id < 0 ) {
+ return -EOPNOTSUPP;
+ }
rc = mii_ethtool_sset(&mac->mii, cmd);
return rc;
}
@@ -503,12 +524,18 @@
static int ixmac_nway_reset(struct net_device *dev)
{
struct mac_info *mac = netdev_priv(dev);
+ if ( mac->mii.phy_id < 0 ) {
+ return -EOPNOTSUPP;
+ }
return mii_nway_restart(&mac->mii);
}
static u32 ixmac_get_link(struct net_device *dev)
{
struct mac_info *mac = netdev_priv(dev);
+ if ( mac->mii.phy_id < 0 ) {
+ return 1;
+ }
return mii_link_ok(&mac->mii);
}

View File

@ -0,0 +1,180 @@
diff -Nur linux-2.6.19.2/arch/arm/mach-ixp4xx/compex-setup.c linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/compex-setup.c
--- linux-2.6.19.2/arch/arm/mach-ixp4xx/compex-setup.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/compex-setup.c 2007-04-10 01:56:21.000000000 +0200
@@ -0,0 +1,120 @@
+/*
+ * arch/arm/mach-ixp4xx/compex-setup.c
+ *
+ * Ccompex WP18 / NP18A board-setup
+ *
+ * Copyright (C) 2007 Imre Kaloz <Kaloz@openwrt.org>
+ *
+ * based on ixdp425-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/mach-types.h>
+#include <asm/irq.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/flash.h>
+
+static struct flash_platform_data compex_flash_data = {
+ .map_name = "cfi_probe",
+ .width = 2,
+};
+
+static struct resource compex_flash_resource = {
+ .flags = IORESOURCE_MEM,
+};
+
+static struct platform_device compex_flash = {
+ .name = "IXP4XX-Flash",
+ .id = 0,
+ .dev = {
+ .platform_data = &compex_flash_data,
+ },
+ .num_resources = 1,
+ .resource = &compex_flash_resource,
+};
+
+static struct resource compex_uart_resources[] = {
+ {
+ .start = IXP4XX_UART1_BASE_PHYS,
+ .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
+ .flags = IORESOURCE_MEM
+ },
+ {
+ .start = IXP4XX_UART2_BASE_PHYS,
+ .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
+ .flags = IORESOURCE_MEM
+ }
+};
+
+static struct plat_serial8250_port compex_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,
+ },
+ {
+ .mapbase = IXP4XX_UART2_BASE_PHYS,
+ .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
+ .irq = IRQ_IXP4XX_UART2,
+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
+ .iotype = UPIO_MEM,
+ .regshift = 2,
+ .uartclk = IXP4XX_UART_XTAL,
+ },
+ { },
+};
+
+static struct platform_device compex_uart = {
+ .name = "serial8250",
+ .id = PLAT8250_DEV_PLATFORM,
+ .dev.platform_data = compex_uart_data,
+ .num_resources = 2,
+ .resource = compex_uart_resources
+};
+
+static struct platform_device *compex_devices[] __initdata = {
+ &compex_flash,
+ &compex_uart
+};
+
+static void __init compex_init(void)
+{
+ ixp4xx_sys_init();
+
+ compex_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
+ compex_flash_resource.end =
+ IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
+
+ platform_add_devices(compex_devices, ARRAY_SIZE(compex_devices));
+}
+
+#ifdef CONFIG_MACH_COMPEX
+MACHINE_START(COMPEX, "Compex WP18 / NP18A")
+ /* 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 = compex_init,
+MACHINE_END
+#endif
diff -Nur linux-2.6.19.2/arch/arm/mach-ixp4xx/ixdp425-pci.c linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/ixdp425-pci.c
--- linux-2.6.19.2/arch/arm/mach-ixp4xx/ixdp425-pci.c 2007-01-10 20:10:37.000000000 +0100
+++ linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/ixdp425-pci.c 2007-04-10 00:22:16.000000000 +0200
@@ -66,7 +66,7 @@
int __init ixdp425_pci_init(void)
{
if (machine_is_ixdp425() || machine_is_ixcdp1100() ||
- machine_is_avila() || machine_is_ixdp465())
+ machine_is_avila() || machine_is_ixdp465() || machine_is_compex())
pci_common_init(&ixdp425_pci);
return 0;
}
diff -Nur linux-2.6.19.2/arch/arm/mach-ixp4xx/Kconfig linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/Kconfig
--- linux-2.6.19.2/arch/arm/mach-ixp4xx/Kconfig 2007-04-10 00:33:31.000000000 +0200
+++ linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/Kconfig 2007-04-10 00:48:37.000000000 +0200
@@ -57,6 +57,14 @@
Engineering Pronghorn Metro Platform. For more
information on this platform, see <file:Documentation/arm/IXP4xx>.
+config MACH_COMPEX
+ bool "Compex WP18 / NP18A"
+ select PCI
+ help
+ Say 'Y' here if you want your kernel to support Compex'
+ WP18 or NP18A boards. For more information on this
+ platform, see http://openwrt.org
+
config ARCH_IXDP425
bool "IXDP425"
help
diff -Nur linux-2.6.19.2/arch/arm/mach-ixp4xx/Makefile linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/Makefile
--- linux-2.6.19.2/arch/arm/mach-ixp4xx/Makefile 2007-04-10 00:33:39.000000000 +0200
+++ linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/Makefile 2007-04-09 20:23:06.000000000 +0200
@@ -14,6 +14,7 @@
obj-pci-$(CONFIG_MACH_GATEWAY7001) += gateway7001-pci.o
obj-pci-$(CONFIG_MACH_WG302V2) += wg302v2-pci.o
obj-pci-$(CONFIG_MACH_PRONGHORNMETRO) += pronghornmetro-pci.o
+obj-pci-$(CONFIG_MACH_COMPEX) += ixdp425-pci.o
obj-y += common.o
@@ -26,5 +27,6 @@
obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o
obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o
obj-$(CONFIG_MACH_PRONGHORNMETRO) += pronghornmetro-setup.o
+obj-$(CONFIG_MACH_COMPEX) += compex-setup.o
obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o
diff -Nur linux-2.6.19.2/arch/arm/tools/mach-types linux-2.6.19.2-owrt/arch/arm/tools/mach-types
--- linux-2.6.19.2/arch/arm/tools/mach-types 2007-04-10 01:27:55.000000000 +0200
+++ linux-2.6.19.2-owrt/arch/arm/tools/mach-types 2007-04-09 20:22:33.000000000 +0200
@@ -1171,3 +1171,4 @@
cdcs_quoll MACH_CDCS_QUOLL CDCS_QUOLL 1158
quicksilver MACH_QUICKSILVER QUICKSILVER 1159
uplat926 MACH_UPLAT926 UPLAT926 1160
+compex MACH_COMPEX COMPEX 1273

View File

@ -0,0 +1,62 @@
diff -Nur linux-2.6.19.2/arch/arm/mach-ixp4xx/compex-setup.c linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/compex-setup.c
--- linux-2.6.19.2/arch/arm/mach-ixp4xx/compex-setup.c 2007-04-09 20:30:37.000000000 +0200
+++ linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/compex-setup.c 2007-04-09 20:36:23.000000000 +0200
@@ -90,9 +90,57 @@
.resource = compex_uart_resources
};
+static struct resource res_mac0 = {
+ .start = IXP4XX_EthB_BASE_PHYS,
+ .end = IXP4XX_EthB_BASE_PHYS + 0x1ff,
+ .flags = IORESOURCE_MEM,
+};
+
+static struct resource res_mac1 = {
+ .start = IXP4XX_EthC_BASE_PHYS,
+ .end = IXP4XX_EthC_BASE_PHYS + 0x1ff,
+ .flags = IORESOURCE_MEM,
+};
+
+static struct mac_plat_info plat_mac0 = {
+ .npe_id = 1,
+ .phy_id = -1,
+ .eth_id = 0,
+ .rxq_id = 27,
+ .txq_id = 24,
+ .rxdoneq_id = 4,
+};
+
+static struct mac_plat_info plat_mac1 = {
+ .npe_id = 2,
+ .phy_id = 3,
+ .eth_id = 1,
+ .rxq_id = 28,
+ .txq_id = 25,
+ .rxdoneq_id = 5,
+};
+
+static struct platform_device mac0 = {
+ .name = "ixp4xx_mac",
+ .id = 0,
+ .dev.platform_data = &plat_mac0,
+ .num_resources = 1,
+ .resource = &res_mac0,
+};
+
+static struct platform_device mac1 = {
+ .name = "ixp4xx_mac",
+ .id = 1,
+ .dev.platform_data = &plat_mac1,
+ .num_resources = 1,
+ .resource = &res_mac1,
+};
+
static struct platform_device *compex_devices[] __initdata = {
&compex_flash,
- &compex_uart
+ &compex_uart,
+ &mac0,
+ &mac1,
};
static void __init compex_init(void)

View File

@ -0,0 +1,55 @@
diff -Nur linux-2.6.19.2/arch/arm/mach-ixp4xx/compex-setup.c linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/compex-setup.c
--- linux-2.6.19.2/arch/arm/mach-ixp4xx/compex-setup.c 2007-04-09 20:51:57.000000000 +0200
+++ linux-2.6.19.2-owrt/arch/arm/mach-ixp4xx/compex-setup.c 2007-04-09 21:48:22.000000000 +0200
@@ -17,6 +17,7 @@
#include <linux/serial.h>
#include <linux/tty.h>
#include <linux/serial_8250.h>
+#include <linux/mtd/mtd.h>
#include <linux/slab.h>
#include <asm/types.h>
@@ -136,11 +137,34 @@
.resource = &res_mac1,
};
+struct npe_ucode_platform_data compex_npe_ucode_data = {
+ .mtd_partition = "RedBoot",
+};
+
+static struct platform_device compex_npe_ucode = {
+ .name = "ixp4xx_npe_ucode",
+ .id = 0,
+ .dev.platform_data = &compex_npe_ucode_data,
+};
+
static struct platform_device *compex_devices[] __initdata = {
&compex_flash,
&compex_uart,
&mac0,
&mac1,
+ &compex_npe_ucode,
+};
+
+static void compex_flash_add(struct mtd_info *mtd)
+{
+}
+
+static void compex_flash_remove(struct mtd_info *mtd) {
+}
+
+static struct mtd_notifier compex_flash_notifier = {
+ .add = compex_flash_add,
+ .remove = compex_flash_remove,
};
static void __init compex_init(void)
@@ -152,6 +176,8 @@
IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
platform_add_devices(compex_devices, ARRAY_SIZE(compex_devices));
+
+ register_mtd_user(&compex_flash_notifier);
}
#ifdef CONFIG_ARCH_COMPEX