summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2008-10-23 20:38:22 +0000
committerFelix Fietkau2008-10-23 20:38:22 +0000
commit1af4cb1b3c3e625c5f9c44a992b801a18947aab1 (patch)
tree507b0039568a9768c2f91fa86978ba4bc5b71817
parentd9c022e2c707f8ba2ed70161c97672d81eaa0028 (diff)
downloadarchive-1af4cb1b3c3e625c5f9c44a992b801a18947aab1.tar.gz
sync 8.09 with ar71xx changes from trunk
SVN-Revision: 13042
-rw-r--r--target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c11
-rw-r--r--target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c60
-rw-r--r--target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c5
-rw-r--r--target/linux/ar71xx/files/arch/mips/ar71xx/platform.c15
-rw-r--r--target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h2
-rw-r--r--target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c16
-rw-r--r--target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h12
-rw-r--r--target/linux/ar71xx/patches-2.6.26/001-ar71xx_core.patch13
-rw-r--r--target/linux/ar71xx/patches-2.6.26/300-mips_fw_myloader.patch2
-rw-r--r--target/linux/ar71xx/patches-2.6.26/900-mips_multi_machine_support.patch10
10 files changed, 103 insertions, 43 deletions
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c
index 42b5e02678..55fc61c92e 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-generic.c
@@ -50,8 +50,15 @@ static void __init ar71xx_generic_init(void)
ARRAY_SIZE(ar71xx_generic_spi_info));
ar71xx_add_device_mdio(0xffe0ffff);
- ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x000f0000);
- ar71xx_add_device_eth(1, PHY_INTERFACE_MODE_RMII, 0x00100000);
+
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0x000f0000;
+
+ ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+ ar71xx_eth1_data.phy_mask = 0x00100000;
+
+ ar71xx_add_device_eth(0);
+ ar71xx_add_device_eth(1);
ar71xx_add_device_usb();
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c
index 7193849f35..8e63acac41 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c
@@ -155,7 +155,11 @@ static void __init rb411_setup(void)
rb4xx_add_device_spi();
ar71xx_add_device_mdio(0xfffffffe);
- ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x00000001);
+
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0x00000001;
+
+ ar71xx_add_device_eth(0);
ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio),
rb4xx_leds_gpio);
@@ -176,8 +180,15 @@ static void __init rb433_setup(void)
rb433_add_device_spi();
ar71xx_add_device_mdio(0xffffffec);
- ar71xx_add_device_eth(1, PHY_INTERFACE_MODE_RMII, 0x00000010);
- ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x00000003);
+
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0x00000003;
+
+ ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+ ar71xx_eth1_data.phy_mask = 0x00000010;
+
+ ar71xx_add_device_eth(1);
+ ar71xx_add_device_eth(0);
ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio),
rb4xx_leds_gpio);
@@ -198,8 +209,15 @@ static void __init rb450_setup(void)
rb4xx_add_device_spi();
ar71xx_add_device_mdio(0xffffffe0);
- ar71xx_add_device_eth(1, PHY_INTERFACE_MODE_RMII, 0x00000010);
- ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x0000000f);
+
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0x0000000f;
+
+ ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+ ar71xx_eth1_data.phy_mask = 0x00000010;
+
+ ar71xx_add_device_eth(1);
+ ar71xx_add_device_eth(0);
ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio),
rb4xx_leds_gpio);
@@ -212,3 +230,35 @@ static void __init rb450_setup(void)
}
MIPS_MACHINE(MACH_AR71XX_RB_450, "MikroTik RouterBOARD 450", rb450_setup);
+
+static void __init rb493_setup(void)
+{
+ rb4xx_add_device_spi();
+
+ ar71xx_add_device_mdio(0x3fffff00);
+
+#if 0
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0;
+ ar71xx_eth0_data.speed = SPEED_100;
+ ar71xx_eth0_data.duplex = DUPLEX_FULL;
+
+ ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+ ar71xx_eth1_data.phy_mask = 0x00000001;
+
+ ar71xx_add_device_eth(0);
+ ar71xx_add_device_eth(1);
+#endif
+
+ ar71xx_add_device_leds_gpio(-1, ARRAY_SIZE(rb4xx_leds_gpio),
+ rb4xx_leds_gpio);
+
+ ar71xx_add_device_gpio_buttons(-1, RB4XX_BUTTONS_POLL_INTERVAL,
+ ARRAY_SIZE(rb4xx_gpio_buttons),
+ rb4xx_gpio_buttons);
+
+ platform_device_register(&rb4xx_nand_device);
+}
+
+MIPS_MACHINE(MACH_AR71XX_RB_493, "MikroTik RouterBOARD 493/AH", rb493_setup);
+
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c
index 4abecd8a02..ef2ef05759 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-wp543.c
@@ -124,7 +124,10 @@ static void __init wp543_setup(void)
ar71xx_add_device_spi(NULL, wp543_spi_info, ARRAY_SIZE(wp543_spi_info));
ar71xx_add_device_mdio(0xfffffff7);
- ar71xx_add_device_eth(0, PHY_INTERFACE_MODE_MII, 0x00000008);
+
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0x00000008;
+ ar71xx_add_device_eth(0);
ar71xx_add_device_usb();
diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c b/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c
index b131ec1e27..aa4711d34e 100644
--- a/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c
+++ b/target/linux/ar71xx/files/arch/mips/ar71xx/platform.c
@@ -196,7 +196,7 @@ static struct resource ar71xx_eth0_resources[] = {
},
};
-static struct ag71xx_platform_data ar71xx_eth0_data = {
+struct ag71xx_platform_data ar71xx_eth0_data = {
.reset_bit = RESET_MODULE_GE0_MAC,
.flush_reg = DDR_REG_FLUSH_GE0,
};
@@ -235,7 +235,7 @@ static struct resource ar71xx_eth1_resources[] = {
},
};
-static struct ag71xx_platform_data ar71xx_eth1_data = {
+struct ag71xx_platform_data ar71xx_eth1_data = {
.reset_bit = RESET_MODULE_GE1_MAC,
.flush_reg = DDR_REG_FLUSH_GE1,
};
@@ -251,14 +251,13 @@ static struct platform_device ar71xx_eth1_device = {
};
static int ar71xx_eth_instance __initdata;
-void __init ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode,
- u32 phy_mask)
+void __init ar71xx_add_device_eth(unsigned int id)
{
struct platform_device *pdev;
switch (id) {
case 0:
- switch (phy_if_mode) {
+ switch (ar71xx_eth0_data.phy_if_mode) {
case PHY_INTERFACE_MODE_MII:
ar71xx_eth0_data.mii_if = MII0_CTRL_IF_MII;
break;
@@ -276,12 +275,10 @@ void __init ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode,
}
memcpy(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, ETH_ALEN);
ar71xx_eth0_data.mac_addr[5] += ar71xx_eth_instance;
- ar71xx_eth0_data.phy_if_mode = phy_if_mode;
- ar71xx_eth0_data.phy_mask = phy_mask;
pdev = &ar71xx_eth0_device;
break;
case 1:
- switch (phy_if_mode) {
+ switch (ar71xx_eth1_data.phy_if_mode) {
case PHY_INTERFACE_MODE_RMII:
ar71xx_eth1_data.mii_if = MII1_CTRL_IF_RMII;
break;
@@ -293,8 +290,6 @@ void __init ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode,
}
memcpy(ar71xx_eth1_data.mac_addr, ar71xx_mac_base, ETH_ALEN);
ar71xx_eth1_data.mac_addr[5] += ar71xx_eth_instance;
- ar71xx_eth1_data.phy_if_mode = phy_if_mode;
- ar71xx_eth1_data.phy_mask = phy_mask;
pdev = &ar71xx_eth1_device;
break;
default:
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h
index d2d055d556..2f60d19b5f 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx.h
@@ -37,7 +37,7 @@
#define ETH_FCS_LEN 4
#define AG71XX_DRV_NAME "ag71xx"
-#define AG71XX_DRV_VERSION "0.4.1"
+#define AG71XX_DRV_VERSION "0.4.2"
#define AG71XX_NAPI_TX 1
diff --git a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
index 086de22291..512b42eb5c 100644
--- a/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
+++ b/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_phy.c
@@ -193,8 +193,10 @@ void ag71xx_phy_start(struct ag71xx *ag)
if (ag->phy_dev) {
phy_start(ag->phy_dev);
} else {
- ag->duplex = DUPLEX_FULL;
- ag->speed = SPEED_100;
+ struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag);
+
+ ag->duplex = pdata->duplex;
+ ag->speed = pdata->speed;
ag->link = 1;
ag71xx_phy_link_update(ag);
}
@@ -220,8 +222,8 @@ int ag71xx_phy_connect(struct ag71xx *ag)
int phy_count = 0;
int phy_addr;
- if (ag->mii_bus) {
- /* TODO: use mutex of the mdio bus */
+ if (ag->mii_bus && pdata->phy_mask) {
+ /* TODO: use mutex of the mdio bus? */
for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
if (!(pdata->phy_mask & (1 << phy_addr)))
continue;
@@ -242,9 +244,6 @@ int ag71xx_phy_connect(struct ag71xx *ag)
}
switch (phy_count) {
- case 0:
- printk(KERN_ERR "%s: no PHY found\n", dev->name);
- return -ENODEV;
case 1:
ag->phy_dev = phy_connect(dev, phydev->dev.bus_id,
&ag71xx_phy_link_adjust, 0, pdata->phy_if_mode);
@@ -275,9 +274,10 @@ int ag71xx_phy_connect(struct ag71xx *ag)
ag->speed = 0;
ag->duplex = -1;
break;
+
default:
ag->phy_dev = NULL;
- printk(KERN_DEBUG "%s: connected to multiple PHYs (%d)\n",
+ printk(KERN_DEBUG "%s: connected to %d PHYs\n",
dev->name, phy_count);
break;
}
diff --git a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h
index 5b00e00be7..53ac555c7b 100644
--- a/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h
+++ b/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/platform.h
@@ -20,10 +20,12 @@
#include <linux/gpio_buttons.h>
struct ag71xx_platform_data {
+ phy_interface_t phy_if_mode;
+ u32 phy_mask;
+ int speed;
+ int duplex;
u32 reset_bit;
u32 flush_reg;
- u32 phy_mask;
- phy_interface_t phy_if_mode;
u32 mii_if;
u8 mac_addr[ETH_ALEN];
};
@@ -47,8 +49,10 @@ extern void ar71xx_add_device_spi(struct ar71xx_spi_platform_data *pdata,
extern void ar71xx_set_mac_base(unsigned char *mac) __init;
extern void ar71xx_parse_mac_addr(char *mac_str) __init;
-extern void ar71xx_add_device_eth(unsigned int id, phy_interface_t phy_if_mode,
- u32 phy_mask) __init;
+
+extern struct ag71xx_platform_data ar71xx_eth0_data;
+extern struct ag71xx_platform_data ar71xx_eth1_data;
+extern void ar71xx_add_device_eth(unsigned int id) __init;
extern void ar71xx_add_device_mdio(u32 phy_mask) __init;
diff --git a/target/linux/ar71xx/patches-2.6.26/001-ar71xx_core.patch b/target/linux/ar71xx/patches-2.6.26/001-ar71xx_core.patch
index 229387c1ab..ebf8d60394 100644
--- a/target/linux/ar71xx/patches-2.6.26/001-ar71xx_core.patch
+++ b/target/linux/ar71xx/patches-2.6.26/001-ar71xx_core.patch
@@ -16,7 +16,7 @@
--- a/include/asm-mips/bootinfo.h
+++ b/include/asm-mips/bootinfo.h
-@@ -79,6 +79,15 @@
+@@ -79,6 +79,16 @@
#define MACH_LASAT_200 1 /* Masquerade PRO/SP200 */
/*
@@ -24,9 +24,10 @@
+ */
+#define MACH_AR71XX_GENERIC 0
+#define MACH_AR71XX_WP543 1 /* Compex WP543 */
-+#define MACH_AR71XX_RB_411 2 /* MikroTik RouterBOARD 411 */
++#define MACH_AR71XX_RB_411 2 /* MikroTik RouterBOARD 411/411A/411AH */
+#define MACH_AR71XX_RB_433 3 /* MikroTik RouterBOARD 433/433AH */
+#define MACH_AR71XX_RB_450 4 /* MikroTik RouterBOARD 450 */
++#define MACH_AR71XX_RB_493 5 /* Mikrotik RouterBOARD 493/493AH */
+
+/*
* Valid machtype for group NEC EMMA2RH
@@ -59,3 +60,11 @@
config BASLER_EXCITE
bool "Basler eXcite smart camera"
select CEVT_R4K
+@@ -687,6 +705,7 @@
+
+ endchoice
+
++source "arch/mips/ar71xx/Kconfig"
+ source "arch/mips/au1000/Kconfig"
+ source "arch/mips/basler/excite/Kconfig"
+ source "arch/mips/jazz/Kconfig"
diff --git a/target/linux/ar71xx/patches-2.6.26/300-mips_fw_myloader.patch b/target/linux/ar71xx/patches-2.6.26/300-mips_fw_myloader.patch
index 4ab8b75213..e8af1eeb87 100644
--- a/target/linux/ar71xx/patches-2.6.26/300-mips_fw_myloader.patch
+++ b/target/linux/ar71xx/patches-2.6.26/300-mips_fw_myloader.patch
@@ -10,7 +10,7 @@
libs-$(CONFIG_SIBYTE_CFE) += arch/mips/sibyte/cfe/
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -873,6 +873,9 @@
+@@ -874,6 +874,9 @@
config MIPS_DISABLE_OBSOLETE_IDE
bool
diff --git a/target/linux/ar71xx/patches-2.6.26/900-mips_multi_machine_support.patch b/target/linux/ar71xx/patches-2.6.26/900-mips_multi_machine_support.patch
index a1e82808c7..755b920e41 100644
--- a/target/linux/ar71xx/patches-2.6.26/900-mips_multi_machine_support.patch
+++ b/target/linux/ar71xx/patches-2.6.26/900-mips_multi_machine_support.patch
@@ -123,15 +123,7 @@
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
-@@ -705,6 +705,7 @@
-
- endchoice
-
-+source "arch/mips/ar71xx/Kconfig"
- source "arch/mips/au1000/Kconfig"
- source "arch/mips/basler/excite/Kconfig"
- source "arch/mips/jazz/Kconfig"
-@@ -879,6 +880,9 @@
+@@ -880,6 +880,9 @@
config SYNC_R4K
bool