Signed-off-by: Chuanhong Guo <gch981...@gmail.com>
---

Changes since that RFC patch:
  Changed compatible string to ar7100-mii0/1-eth and
  ar9130-mii0-eth/ar9132-mii1-eth. AR9130 dosen't have
  a second gmac so I named the second one ar9132-mii1-eth.

 target/linux/ath79/dts/ar7100.dtsi            |   4 +-
 target/linux/ath79/dts/ar9132.dtsi            |   2 +-
 .../net/ethernet/atheros/ag71xx/ag71xx_main.c | 102 +++++++++++++++---
 3 files changed, 92 insertions(+), 16 deletions(-)

diff --git a/target/linux/ath79/dts/ar7100.dtsi 
b/target/linux/ath79/dts/ar7100.dtsi
index 8994a7d688..bb3c10bdc5 100644
--- a/target/linux/ath79/dts/ar7100.dtsi
+++ b/target/linux/ath79/dts/ar7100.dtsi
@@ -171,7 +171,7 @@
 };
 
 &eth0 {
-       compatible = "qca,ar7100-eth";
+       compatible = "qca,ar7100-mii0-eth";
        reg = <0x19000000 0x200
                0x18070000 0x4>;
 
@@ -189,7 +189,7 @@
 };
 
 &eth1 {
-       compatible = "qca,ar7100-eth";
+       compatible = "qca,ar7100-mii1-eth";
        reg = <0x1a000000 0x200
                0x18070004 0x4>;
 
diff --git a/target/linux/ath79/dts/ar9132.dtsi 
b/target/linux/ath79/dts/ar9132.dtsi
index 9d8ddcf9ba..bf5e9c06fa 100644
--- a/target/linux/ath79/dts/ar9132.dtsi
+++ b/target/linux/ath79/dts/ar9132.dtsi
@@ -185,7 +185,7 @@
 };
 
 &eth0 {
-       compatible = "qca,ar9130-eth", "syscon";
+       compatible = "qca,ar9130-mii0-eth", "syscon";
        reg = <0x19000000 0x200
                0x18070000 0x4>;
        pll-data = <0x1a000000 0x13000a44 0x00441099>;
diff --git 
a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c 
b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
index 1e0bb6937f..72c6673037 100644
--- a/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
+++ b/target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
@@ -529,6 +529,60 @@ static void ath79_set_pll(struct ag71xx *ag)
        udelay(100);
 }
 
+static void ath79_mii_ctrl_set_if(struct ag71xx *ag, unsigned int mii_if)
+{
+       u32 t;
+
+       t = __raw_readl(ag->mii_base);
+       t &= ~(AR71XX_MII_CTRL_IF_MASK);
+       t |= (mii_if & AR71XX_MII_CTRL_IF_MASK);
+       __raw_writel(t, ag->mii_base);
+}
+
+static void ath79_mii0_ctrl_set_if(struct ag71xx *ag)
+{
+       unsigned int mii_if;
+
+       switch (ag->phy_if_mode) {
+       case PHY_INTERFACE_MODE_MII:
+               mii_if = AR71XX_MII0_CTRL_IF_MII;
+               break;
+       case PHY_INTERFACE_MODE_GMII:
+               mii_if = AR71XX_MII0_CTRL_IF_GMII;
+               break;
+       case PHY_INTERFACE_MODE_RGMII:
+               mii_if = AR71XX_MII0_CTRL_IF_RGMII;
+               break;
+       case PHY_INTERFACE_MODE_RMII:
+               mii_if = AR71XX_MII0_CTRL_IF_RMII;
+               break;
+       default:
+               WARN(1, "Impossible PHY mode defined.\n");
+               return;
+       }
+
+       ath79_mii_ctrl_set_if(ag, mii_if);
+}
+
+static void ath79_mii1_ctrl_set_if(struct ag71xx *ag)
+{
+       unsigned int mii_if;
+
+       switch (ag->phy_if_mode) {
+       case PHY_INTERFACE_MODE_RMII:
+               mii_if = AR71XX_MII1_CTRL_IF_RMII;
+               break;
+       case PHY_INTERFACE_MODE_RGMII:
+               mii_if = AR71XX_MII1_CTRL_IF_RGMII;
+               break;
+       default:
+               WARN(1, "Impossible PHY mode defined.\n");
+               return;
+       }
+
+       ath79_mii_ctrl_set_if(ag, mii_if);
+}
+
 static void ath79_mii_ctrl_set_speed(struct ag71xx *ag)
 {
        unsigned int mii_speed;
@@ -573,8 +627,10 @@ __ag71xx_link_adjust(struct ag71xx *ag, bool update)
                return;
        }
 
-       if (!of_device_is_compatible(np, "qca,ar9130-eth") &&
-           !of_device_is_compatible(np, "qca,ar7100-eth"))
+       if (!of_device_is_compatible(np, "qca,ar9130-mii0-eth") &&
+               !of_device_is_compatible(np, "qca,ar9132-mii1-eth") &&
+               !of_device_is_compatible(np, "qca,ar7100-mii0-eth") &&
+               !of_device_is_compatible(np, "qca,ar7100-mii1-eth"))
                ag71xx_fast_reset(ag);
 
        cfg2 = ag71xx_rr(ag, AG71XX_REG_MAC_CFG2);
@@ -612,8 +668,10 @@ __ag71xx_link_adjust(struct ag71xx *ag, bool update)
        ag71xx_wr(ag, AG71XX_REG_FIFO_CFG3, ag->fifodata[2]);
 
        if (update) {
-               if (of_device_is_compatible(np, "qca,ar7100-eth") ||
-                   of_device_is_compatible(np, "qca,ar9130-eth")) {
+               if (of_device_is_compatible(np, "qca,ar7100-mii0-eth") ||
+                       of_device_is_compatible(np, "qca,ar7100-mii1-eth") ||
+                       of_device_is_compatible(np, "qca,ar9130-mii0-eth") ||
+                       of_device_is_compatible(np, "qca,ar9132-mii1-eth")) {
                        ath79_set_pll(ag);
                        ath79_mii_ctrl_set_speed(ag);
                } else if (of_device_is_compatible(np, "qca,ar7242-eth") ||
@@ -1307,8 +1365,10 @@ static int ag71xx_probe(struct platform_device *pdev)
        }
 
        if (of_property_read_u32_array(np, "fifo-data", ag->fifodata, 3)) {
-               if (of_device_is_compatible(np, "qca,ar9130-eth") ||
-                   of_device_is_compatible(np, "qca,ar7100-eth")) {
+               if (of_device_is_compatible(np, "qca,ar7100-mii0-eth") ||
+                       of_device_is_compatible(np, "qca,ar7100-mii1-eth") ||
+                       of_device_is_compatible(np, "qca,ar9130-mii0-eth") ||
+                       of_device_is_compatible(np, "qca,ar9132-mii1-eth")) {
                        ag->fifodata[0] = 0x0fff0000;
                        ag->fifodata[1] = 0x00001fff;
                } else {
@@ -1316,9 +1376,11 @@ static int ag71xx_probe(struct platform_device *pdev)
                        ag->fifodata[1] = 0x015500aa;
                        ag->fifodata[2] = 0x01f00140;
                }
-               if (of_device_is_compatible(np, "qca,ar9130-eth"))
+               if (of_device_is_compatible(np, "qca,ar9130-mii0-eth") ||
+                       of_device_is_compatible(np, "qca,ar9132-mii1-eth"))
                        ag->fifodata[2] = 0x00780fff;
-               else if (of_device_is_compatible(np, "qca,ar7100-eth"))
+               else if (of_device_is_compatible(np, "qca,ar7100-mii0-eth") ||
+                       of_device_is_compatible(np, "qca,ar7100-mii1-eth"))
                        ag->fifodata[2] = 0x008001ff;
        }
 
@@ -1392,11 +1454,14 @@ static int ag71xx_probe(struct platform_device *pdev)
                ag->tx_hang_workaround = 1;
 
        ag->rx_buf_offset = NET_SKB_PAD;
-       if (!of_device_is_compatible(np, "qca,ar7100-eth") &&
-           !of_device_is_compatible(np, "qca,ar9130-eth"))
+       if (!of_device_is_compatible(np, "qca,ar9130-mii0-eth") &&
+           !of_device_is_compatible(np, "qca,ar9132-mii1-eth") &&
+               !of_device_is_compatible(np, "qca,ar7100-mii0-eth") &&
+               !of_device_is_compatible(np, "qca,ar7100-mii1-eth"))
                ag->rx_buf_offset += NET_IP_ALIGN;
 
-       if (of_device_is_compatible(np, "qca,ar7100-eth")) {
+       if (of_device_is_compatible(np, "qca,ar7100-mii0-eth") ||
+               of_device_is_compatible(np, "qca,ar7100-mii1-eth")) {
                ag->tx_ring.desc_split = AG71XX_TX_RING_SPLIT;
                tx_size *= AG71XX_TX_RING_DS_PER_PKT;
        }
@@ -1427,6 +1492,15 @@ static int ag71xx_probe(struct platform_device *pdev)
                goto err_free;
        }
 
+       if (ag->mii_base) {
+               if (of_device_is_compatible(np, "qca,ar7100-mii0-eth") ||
+                       of_device_is_compatible(np, "qca,ar9130-mii0-eth"))
+                       ath79_mii0_ctrl_set_if(ag);
+               else if (of_device_is_compatible(np, "qca,ar7100-mii1-eth") ||
+                       of_device_is_compatible(np, "qca,ar9132-mii1-eth"))
+                       ath79_mii1_ctrl_set_if(ag);
+       }
+
        netif_napi_add(dev, &ag->napi, ag71xx_poll, AG71XX_NAPI_WEIGHT);
 
        ag71xx_wr(ag, AG71XX_REG_MAC_CFG1, 0);
@@ -1490,11 +1564,13 @@ static int ag71xx_remove(struct platform_device *pdev)
 }
 
 static const struct of_device_id ag71xx_match[] = {
-       { .compatible = "qca,ar7100-eth" },
+       { .compatible = "qca,ar7100-mii0-eth" },
+       { .compatible = "qca,ar7100-mii1-eth" },
        { .compatible = "qca,ar7240-eth" },
        { .compatible = "qca,ar7241-eth" },
        { .compatible = "qca,ar7242-eth" },
-       { .compatible = "qca,ar9130-eth" },
+       { .compatible = "qca,ar9130-mii0-eth" },
+       { .compatible = "qca,ar9132-mii1-eth" },
        { .compatible = "qca,ar9330-eth" },
        { .compatible = "qca,ar9340-eth" },
        { .compatible = "qca,qca9530-eth" },
-- 
2.17.1


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to