From 1beb5bec6453abb220c5be4ddb9e6dc02d08d735 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name>
Date: Mon, 13 Jun 2016 12:43:34 +0200
Subject: ar71xx: enable flow control for ethernet MACs with built-in switch

Should fix LAN speed issues on some devices

Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
 .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c    | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

(limited to 'target/linux/ar71xx/files/drivers')

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 38226cf..d525360 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,17 @@ 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, MAC_CFG1_INIT);
+	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.1