generic: 6.1: sync mt7530 DSA driver with upstream
[openwrt/openwrt.git] / target / linux / generic / backport-6.1 / 790-v6.4-0002-net-dsa-mt7530-refactor-SGMII-PCS-creation.patch
diff --git a/target/linux/generic/backport-6.1/790-v6.4-0002-net-dsa-mt7530-refactor-SGMII-PCS-creation.patch b/target/linux/generic/backport-6.1/790-v6.4-0002-net-dsa-mt7530-refactor-SGMII-PCS-creation.patch
deleted file mode 100644 (file)
index 5667449..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-From b896355fc4988216d4f38582d07add9252a795ae Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Mon, 3 Apr 2023 02:17:30 +0100
-Subject: [PATCH 02/13] net: dsa: mt7530: refactor SGMII PCS creation
-
-Instead of macro templates use a dedidated function and allocated
-regmap_config when creating the regmaps for the pcs-mtk-lynxi
-instances.
-This is in preparation to switching to use unlocked regmap accessors
-and have regmap's locking API handle locking for us.
-
-Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-Reviewed-by: Andrew Lunn <andrew@lunn.ch>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/dsa/mt7530.c | 74 +++++++++++++++++++++++++++-------------
- 1 file changed, 50 insertions(+), 24 deletions(-)
-
---- a/drivers/net/dsa/mt7530.c
-+++ b/drivers/net/dsa/mt7530.c
-@@ -2968,26 +2968,56 @@ static const struct regmap_bus mt7531_re
-       .reg_update_bits = mt7530_regmap_update_bits,
- };
--#define MT7531_PCS_REGMAP_CONFIG(_name, _reg_base) \
--      {                               \
--              .name = _name,          \
--              .reg_bits = 16,         \
--              .val_bits = 32,         \
--              .reg_stride = 4,        \
--              .reg_base = _reg_base,  \
--              .max_register = 0x17c,  \
-+static int
-+mt7531_create_sgmii(struct mt7530_priv *priv)
-+{
-+      struct regmap_config *mt7531_pcs_config[2];
-+      struct phylink_pcs *pcs;
-+      struct regmap *regmap;
-+      int i, ret = 0;
-+
-+      for (i = 0; i < 2; i++) {
-+              mt7531_pcs_config[i] = devm_kzalloc(priv->dev,
-+                                                  sizeof(struct regmap_config),
-+                                                  GFP_KERNEL);
-+              if (!mt7531_pcs_config[i]) {
-+                      ret = -ENOMEM;
-+                      break;
-+              }
-+
-+              mt7531_pcs_config[i]->name = i ? "port6" : "port5";
-+              mt7531_pcs_config[i]->reg_bits = 16;
-+              mt7531_pcs_config[i]->val_bits = 32;
-+              mt7531_pcs_config[i]->reg_stride = 4;
-+              mt7531_pcs_config[i]->reg_base = MT7531_SGMII_REG_BASE(5 + i);
-+              mt7531_pcs_config[i]->max_register = 0x17c;
-+
-+              regmap = devm_regmap_init(priv->dev,
-+                                        &mt7531_regmap_bus, priv,
-+                                        mt7531_pcs_config[i]);
-+              if (IS_ERR(regmap)) {
-+                      ret = PTR_ERR(regmap);
-+                      break;
-+              }
-+              pcs = mtk_pcs_lynxi_create(priv->dev, regmap,
-+                                         MT7531_PHYA_CTRL_SIGNAL3, 0);
-+              if (!pcs) {
-+                      ret = -ENXIO;
-+                      break;
-+              }
-+              priv->ports[5 + i].sgmii_pcs = pcs;
-       }
--static const struct regmap_config mt7531_pcs_config[] = {
--      MT7531_PCS_REGMAP_CONFIG("port5", MT7531_SGMII_REG_BASE(5)),
--      MT7531_PCS_REGMAP_CONFIG("port6", MT7531_SGMII_REG_BASE(6)),
--};
-+      if (ret && i)
-+              mtk_pcs_lynxi_destroy(priv->ports[5].sgmii_pcs);
-+
-+      return ret;
-+}
- static int
- mt753x_setup(struct dsa_switch *ds)
- {
-       struct mt7530_priv *priv = ds->priv;
--      struct regmap *regmap;
-       int i, ret;
-       /* Initialise the PCS devices */
-@@ -3009,15 +3039,11 @@ mt753x_setup(struct dsa_switch *ds)
-       if (ret && priv->irq)
-               mt7530_free_irq_common(priv);
--      if (priv->id == ID_MT7531)
--              for (i = 0; i < 2; i++) {
--                      regmap = devm_regmap_init(ds->dev,
--                                                &mt7531_regmap_bus, priv,
--                                                &mt7531_pcs_config[i]);
--                      priv->ports[5 + i].sgmii_pcs =
--                              mtk_pcs_lynxi_create(ds->dev, regmap,
--                                                   MT7531_PHYA_CTRL_SIGNAL3, 0);
--              }
-+      if (priv->id == ID_MT7531) {
-+              ret = mt7531_create_sgmii(priv);
-+              if (ret && priv->irq)
-+                      mt7530_free_irq_common(priv);
-+      }
-       return ret;
- }