ramips: remove superfluous & confusing DT binding
authorDaniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
Wed, 1 Aug 2018 14:44:20 +0000 (07:44 -0700)
committerJohn Crispin <john@phrozen.org>
Mon, 6 Aug 2018 05:05:37 +0000 (07:05 +0200)
Mediatek has a reference platform that pairs an MT7620A with an MT7530W,
where the latter responds on MDIO address 0x1f while both chips respond on
0x0 to 0x4. The driver special-cases this arrangement to make sure it's
talking to the right chip, but two different ways in two different places.
This patch consolidates the detection without the current requirement of
both tests to be separately satisfied in the DTS.

Signed-off-by: Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
target/linux/ramips/dts/BR-6478AC-V2.dts
target/linux/ramips/dts/E1700.dts
target/linux/ramips/dts/MT7620a_MT7530.dts
target/linux/ramips/dts/TINY-AC.dts
target/linux/ramips/files-4.14/drivers/net/ethernet/mediatek/gsw_mt7620.c

index fb2b3ce41e64ca649d08ce49255e962500cf39a9..e2a208d28e636bf36b8035276efd7cc1a163041a 100644 (file)
 
 &gsw {
        mediatek,port4 = "gmac";
-       mediatek,mt7530 = <1>;
 };
 
 
index cf136551b4e629e62754d7b1d1a9d409a5ad122a..75e1e07824721420832a56db777e71e1a46fb0b7 100644 (file)
 
 &gsw {
        mediatek,port4 = "gmac";
-       mediatek,mt7530 = <1>;
 };
 
 &wmac {
index 117e802ebd32a5bf3bd65c8209c72b1f7264518b..706ba72d11496d845b34ebac6186918e792f2a61 100644 (file)
 
 &gsw {
        mediatek,port4 = "gmac";
-       mediatek,mt7530 = <1>;
 };
 
 &pcie {
index 5098ab7263b483c7b90ab6aabafd3e2fb5981a2e..f7361497d9499eb071c719344bd9b2b608075db8 100644 (file)
 
 &gsw {
        mediatek,port4 = "gmac";
-       mediatek,mt7530 = <1>;
 };
 
 &pcie {
index a4602c45868f4f8a68576d8857faa213960d2047..192603a68c89ca32e7b3425135434149f0812398 100644 (file)
@@ -60,7 +60,28 @@ static irqreturn_t gsw_interrupt_mt7620(int irq, void *_priv)
        return IRQ_HANDLED;
 }
 
-static void mt7620_hw_init(struct mt7620_gsw *gsw, struct device_node *np)
+static int mt7620_mdio_mode(struct device_node *eth_node)
+{
+       struct device_node *phy_node, *mdiobus_node;
+       const __be32 *id;
+       int ret = 0;
+
+       mdiobus_node = of_get_child_by_name(eth_node, "mdio-bus");
+
+       if (mdiobus_node) {
+               for_each_child_of_node(mdiobus_node, phy_node) {
+                       id = of_get_property(phy_node, "reg", NULL);
+                       if (id && (be32_to_cpu(*id) == 0x1f))
+                               ret = 1;
+               }
+
+               of_node_put(mdiobus_node);
+       }
+
+       return ret;
+}
+
+static void mt7620_hw_init(struct mt7620_gsw *gsw, int mdio_mode)
 {
        u32 is_BGA = (rt_sysc_r32(0x0c) >> 16) & 1;
 
@@ -70,7 +91,7 @@ static void mt7620_hw_init(struct mt7620_gsw *gsw, struct device_node *np)
        /* Enable MIB stats */
        mtk_switch_w32(gsw, mtk_switch_r32(gsw, GSW_REG_MIB_CNT_EN) | (1 << 1), GSW_REG_MIB_CNT_EN);
 
-       if (of_property_read_bool(np, "mediatek,mt7530")) {
+       if (mdio_mode) {
                u32 val;
 
                /* turn off ephy and set phy base addr to 12 */
@@ -192,7 +213,7 @@ int mtk_gsw_init(struct fe_priv *priv)
        gsw = platform_get_drvdata(pdev);
        priv->soc->swpriv = gsw;
 
-       mt7620_hw_init(gsw, np);
+       mt7620_hw_init(gsw, mt7620_mdio_mode(priv->dev->of_node));
 
        if (gsw->irq) {
                request_irq(gsw->irq, gsw_interrupt_mt7620, 0,