ar71xx: enable flow control for ethernet MACs with built-in switch
authorFelix Fietkau <nbd@nbd.name>
Mon, 13 Jun 2016 10:43:34 +0000 (12:43 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 13 Jun 2016 15:58:07 +0000 (17:58 +0200)
Should fix LAN speed issues on some devices

Signed-off-by: Felix Fietkau <nbd@nbd.name>
target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c

index 38226cf22ee61849d194c53b02a9155e2e8188d1..d5253609cd834c83117a9a331f9d410aa7ba962d 100644 (file)
@@ -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);