diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig index 9085bc1a20..e5cf2c788c 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig @@ -86,6 +86,7 @@ config AR71XX_MACH_WRT160NL config AR71XX_MACH_WRT400N bool "Linksys WRT400N board support" + select AR71XX_DEV_AP94_PCI if PCI select AR71XX_DEV_M25P80 select AR71XX_DEV_GPIO_BUTTONS select AR71XX_DEV_LEDS_GPIO diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wrt400n.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wrt400n.c index 005828f324..6f9e82dda6 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wrt400n.c +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wrt400n.c @@ -1,7 +1,7 @@ /* * Linksys WRT400N board support * - * Copyright (C) 2009 Gabor Juhos + * Copyright (C) 2009-2010 Gabor Juhos * Copyright (C) 2009 Imre Kaloz * * This program is free software; you can redistribute it and/or modify it @@ -16,9 +16,11 @@ #include "machtype.h" #include "devices.h" +#include "dev-ap94-pci.h" #include "dev-m25p80.h" #include "dev-gpio-buttons.h" #include "dev-leds-gpio.h" +#include "nvram.h" #define WRT400N_GPIO_LED_ORANGE 5 #define WRT400N_GPIO_LED_GREEN 4 @@ -30,6 +32,10 @@ #define WRT400N_BUTTONS_POLL_INTERVAL 20 +#define WRT400N_MAC_ADDR_OFFSET 0x120c +#define WRT400N_CALDATA0_OFFSET 0x1000 +#define WRT400N_CALDATA1_OFFSET 0x5000 + #ifdef CONFIG_MTD_PARTITIONS static struct mtd_partition wrt400n_partitions[] = { { @@ -125,6 +131,16 @@ static struct gpio_button wrt400n_gpio_buttons[] __initdata = { static void __init wrt400n_setup(void) { + u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); + u8 mac[6]; + int i; + + memcpy(mac, art + WRT400N_MAC_ADDR_OFFSET, 6); + for (i = 5; i >= 3; i--) + if (++mac[i] != 0x00) break; + + ar71xx_set_mac_base(mac); + ar71xx_add_device_mdio(0x0); ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII; @@ -148,7 +164,8 @@ static void __init wrt400n_setup(void) ARRAY_SIZE(wrt400n_gpio_buttons), wrt400n_gpio_buttons); - /* TODO: PCI support */ + ap94_pci_init(art + WRT400N_CALDATA0_OFFSET, NULL, + art + WRT400N_CALDATA1_OFFSET, NULL); } MIPS_MACHINE(AR71XX_MACH_WRT400N, "WRT400N", "Linksys WRT400N", wrt400n_setup);