From f16bdf493ff6fa0ced7ad80807befc08676665ad Mon Sep 17 00:00:00 2001 From: Zoltan HERPAI Date: Tue, 11 Oct 2016 23:57:35 +0200 Subject: Revert "ar71xx: enable flow control for ethernet MACs with built-in switch" This reverts commit fca52fb7f382d25307d8633d1ed171f79989f65d. It was found to cause the WAN port to fail on some AR934x devices Signed-off-by: Felix Fietkau --- .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c index d5253609cd..38226cf22e 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c @@ -453,17 +453,9 @@ static void ag71xx_hw_stop(struct ag71xx *ag) static void ag71xx_hw_setup(struct ag71xx *ag) { struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); - struct ag71xx_mdio_platform_data *mpdata; - u32 init = MAC_CFG1_INIT; - - if (pdata->mii_bus_dev && ag->pdev->id == 0) { - mpdata = pdata->mii_bus_dev->platform_data; - if (mpdata && mpdata->builtin_switch) - init |= MAC_CFG1_TFC | MAC_CFG1_RFC; - } /* setup MAC configuration registers */ - ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, init); + ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, MAC_CFG1_INIT); ag71xx_sb(ag, AG71XX_REG_MAC_CFG2, MAC_CFG2_PAD_CRC_EN | MAC_CFG2_LEN_CHECK); -- cgit v1.2.3 From 5a779cdbb3359c65959679efdfa3db668db4b046 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 11 Oct 2016 23:58:12 +0200 Subject: ar71xx: enable flow control for ethernet MACs with built-in switch Should fix LAN speed issues on some devices. This is an updated version of the previously reverted commit with the same name. It improves the check for MACs connected to a built-in switch Signed-off-by: Felix Fietkau --- target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c | 6 ++++++ .../ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h | 1 + .../ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c | 5 ++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c index 17dd3ac6b1..7d641d4f09 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c @@ -907,6 +907,7 @@ void __init ath79_register_eth(unsigned int id) pdata->speed = SPEED_1000; pdata->duplex = DUPLEX_FULL; pdata->switch_data = &ath79_switch_data; + pdata->builtin_switch = 1; ath79_switch_data.phy_poll_mask |= BIT(4); } @@ -951,6 +952,7 @@ void __init ath79_register_eth(unsigned int id) pdata->has_gbit = 1; pdata->duplex = DUPLEX_FULL; pdata->switch_data = &ath79_switch_data; + pdata->builtin_switch = 1; ath79_switch_data.phy_poll_mask |= BIT(4); } @@ -979,6 +981,7 @@ void __init ath79_register_eth(unsigned int id) pdata->set_speed = ath79_set_speed_dummy; pdata->switch_data = &ath79_switch_data; + pdata->builtin_switch = 1; /* reset the built-in switch */ ath79_device_reset_set(AR934X_RESET_ETH_SWITCH); @@ -1015,6 +1018,7 @@ void __init ath79_register_eth(unsigned int id) pdata->speed = SPEED_1000; pdata->duplex = DUPLEX_FULL; pdata->switch_data = &ath79_switch_data; + pdata->builtin_switch = 1; ath79_switch_data.phy_poll_mask |= BIT(4); } @@ -1040,6 +1044,7 @@ void __init ath79_register_eth(unsigned int id) pdata->reset_bit = QCA955X_RESET_GE1_MAC | QCA955X_RESET_GE1_MDIO; pdata->set_speed = qca955x_set_speed_sgmii; + pdata->builtin_switch = 1; } pdata->has_gbit = 1; @@ -1083,6 +1088,7 @@ void __init ath79_register_eth(unsigned int id) pdata->speed = SPEED_1000; pdata->duplex = DUPLEX_FULL; + pdata->builtin_switch = 1; /* reset the built-in switch */ ath79_device_reset_set(AR934X_RESET_ETH_SWITCH); diff --git a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h index d46dc4e317..e494cdfc0f 100644 --- a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h +++ b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h @@ -36,6 +36,7 @@ struct ag71xx_platform_data { u8 is_ar7240:1; u8 is_ar724x:1; u8 has_ar8216:1; + u8 builtin_switch:1; struct ag71xx_switch_platform_data *switch_data; diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c index 38226cf22e..d7c27393a6 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c @@ -453,9 +453,12 @@ static void ag71xx_hw_stop(struct ag71xx *ag) static void ag71xx_hw_setup(struct ag71xx *ag) { struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); + u32 init = MAC_CFG1_INIT; /* setup MAC configuration registers */ - ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, MAC_CFG1_INIT); + if (pdata->builtin_switch) + init |= MAC_CFG1_TFC | MAC_CFG1_RFC; + ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, init); ag71xx_sb(ag, AG71XX_REG_MAC_CFG2, MAC_CFG2_PAD_CRC_EN | MAC_CFG2_LEN_CHECK); -- cgit v1.2.3 From 57c614a45bb1dfe68c1bec8bf505344ca29440e8 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 11 Oct 2016 23:58:39 +0200 Subject: ar71xx: rename ethernet pdata->builtin_switch to use_flow_control Signed-off-by: Felix Fietkau --- target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c | 12 ++++++------ .../files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h | 2 +- .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c index 7d641d4f09..bdae999d5d 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c @@ -907,7 +907,7 @@ void __init ath79_register_eth(unsigned int id) pdata->speed = SPEED_1000; pdata->duplex = DUPLEX_FULL; pdata->switch_data = &ath79_switch_data; - pdata->builtin_switch = 1; + pdata->use_flow_control = 1; ath79_switch_data.phy_poll_mask |= BIT(4); } @@ -952,7 +952,7 @@ void __init ath79_register_eth(unsigned int id) pdata->has_gbit = 1; pdata->duplex = DUPLEX_FULL; pdata->switch_data = &ath79_switch_data; - pdata->builtin_switch = 1; + pdata->use_flow_control = 1; ath79_switch_data.phy_poll_mask |= BIT(4); } @@ -981,7 +981,7 @@ void __init ath79_register_eth(unsigned int id) pdata->set_speed = ath79_set_speed_dummy; pdata->switch_data = &ath79_switch_data; - pdata->builtin_switch = 1; + pdata->use_flow_control = 1; /* reset the built-in switch */ ath79_device_reset_set(AR934X_RESET_ETH_SWITCH); @@ -1018,7 +1018,7 @@ void __init ath79_register_eth(unsigned int id) pdata->speed = SPEED_1000; pdata->duplex = DUPLEX_FULL; pdata->switch_data = &ath79_switch_data; - pdata->builtin_switch = 1; + pdata->use_flow_control = 1; ath79_switch_data.phy_poll_mask |= BIT(4); } @@ -1044,7 +1044,7 @@ void __init ath79_register_eth(unsigned int id) pdata->reset_bit = QCA955X_RESET_GE1_MAC | QCA955X_RESET_GE1_MDIO; pdata->set_speed = qca955x_set_speed_sgmii; - pdata->builtin_switch = 1; + pdata->use_flow_control = 1; } pdata->has_gbit = 1; @@ -1088,7 +1088,7 @@ void __init ath79_register_eth(unsigned int id) pdata->speed = SPEED_1000; pdata->duplex = DUPLEX_FULL; - pdata->builtin_switch = 1; + pdata->use_flow_control = 1; /* reset the built-in switch */ ath79_device_reset_set(AR934X_RESET_ETH_SWITCH); diff --git a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h index e494cdfc0f..5fd352c638 100644 --- a/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h +++ b/target/linux/ar71xx/files/arch/mips/include/asm/mach-ath79/ag71xx_platform.h @@ -36,7 +36,7 @@ struct ag71xx_platform_data { u8 is_ar7240:1; u8 is_ar724x:1; u8 has_ar8216:1; - u8 builtin_switch:1; + u8 use_flow_control:1; struct ag71xx_switch_platform_data *switch_data; diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c index d7c27393a6..0ae6acf119 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c @@ -456,7 +456,7 @@ static void ag71xx_hw_setup(struct ag71xx *ag) u32 init = MAC_CFG1_INIT; /* setup MAC configuration registers */ - if (pdata->builtin_switch) + if (pdata->use_flow_control) init |= MAC_CFG1_TFC | MAC_CFG1_RFC; ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, init); -- cgit v1.2.3 From 6184baa84243730df43b7d9907eaa88074fad86b Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 11 Oct 2016 23:59:03 +0200 Subject: ar71xx: disable pdata->use_flow_control for QCA9558 Signed-off-by: Felix Fietkau --- target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c index bdae999d5d..4c6588d6ae 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c @@ -1044,7 +1044,6 @@ void __init ath79_register_eth(unsigned int id) pdata->reset_bit = QCA955X_RESET_GE1_MAC | QCA955X_RESET_GE1_MDIO; pdata->set_speed = qca955x_set_speed_sgmii; - pdata->use_flow_control = 1; } pdata->has_gbit = 1; -- cgit v1.2.3 From 9c840109de4494b3ecc29917090deb13518338ad Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 11 Oct 2016 23:59:19 +0200 Subject: ar71xx: disable flow control to the built-in switch on AR934x It apparently causes a regression on some devices if the ethernet cable is plugged in while booting. Signed-off-by: Felix Fietkau --- target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c index 4c6588d6ae..07cb12c8e9 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c @@ -981,7 +981,6 @@ void __init ath79_register_eth(unsigned int id) pdata->set_speed = ath79_set_speed_dummy; pdata->switch_data = &ath79_switch_data; - pdata->use_flow_control = 1; /* reset the built-in switch */ ath79_device_reset_set(AR934X_RESET_ETH_SWITCH); -- cgit v1.2.3