net: dsa: qca8k: move mib init function to common code
authorChristian Marangi <ansuelsmth@gmail.com>
Wed, 27 Jul 2022 11:35:15 +0000 (13:35 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 29 Jul 2022 05:24:38 +0000 (22:24 -0700)
The same mib function is used by drivers based on qca8k family switch.
Move it to common code to make it accessible also by other drivers.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/qca/qca8k-8xxx.c
drivers/net/dsa/qca/qca8k-common.c
drivers/net/dsa/qca/qca8k.h

index 8a55298..b4daa09 100644 (file)
@@ -441,15 +441,6 @@ static struct regmap_config qca8k_regmap_config = {
        .cache_type = REGCACHE_NONE, /* Explicitly disable CACHE */
 };
 
-static int
-qca8k_busy_wait(struct qca8k_priv *priv, u32 reg, u32 mask)
-{
-       u32 val;
-
-       return regmap_read_poll_timeout(priv->regmap, reg, val, !(val & mask), 0,
-                                      QCA8K_BUSY_WAIT_TIMEOUT * USEC_PER_MSEC);
-}
-
 static int
 qca8k_fdb_read(struct qca8k_priv *priv, struct qca8k_fdb *fdb)
 {
@@ -777,34 +768,6 @@ out:
        return ret;
 }
 
-static int
-qca8k_mib_init(struct qca8k_priv *priv)
-{
-       int ret;
-
-       mutex_lock(&priv->reg_mutex);
-       ret = regmap_update_bits(priv->regmap, QCA8K_REG_MIB,
-                                QCA8K_MIB_FUNC | QCA8K_MIB_BUSY,
-                                FIELD_PREP(QCA8K_MIB_FUNC, QCA8K_MIB_FLUSH) |
-                                QCA8K_MIB_BUSY);
-       if (ret)
-               goto exit;
-
-       ret = qca8k_busy_wait(priv, QCA8K_REG_MIB, QCA8K_MIB_BUSY);
-       if (ret)
-               goto exit;
-
-       ret = regmap_set_bits(priv->regmap, QCA8K_REG_MIB, QCA8K_MIB_CPU_KEEP);
-       if (ret)
-               goto exit;
-
-       ret = qca8k_write(priv, QCA8K_REG_MODULE_EN, QCA8K_MODULE_EN_MIB);
-
-exit:
-       mutex_unlock(&priv->reg_mutex);
-       return ret;
-}
-
 static void
 qca8k_port_set_status(struct qca8k_priv *priv, int port, int enable)
 {
index a47f876..7da3547 100644 (file)
@@ -138,3 +138,38 @@ int qca8k_bulk_write(struct qca8k_priv *priv, u32 reg, u32 *val, int len)
 
        return 0;
 }
+
+int qca8k_busy_wait(struct qca8k_priv *priv, u32 reg, u32 mask)
+{
+       u32 val;
+
+       return regmap_read_poll_timeout(priv->regmap, reg, val, !(val & mask), 0,
+                                      QCA8K_BUSY_WAIT_TIMEOUT * USEC_PER_MSEC);
+}
+
+int qca8k_mib_init(struct qca8k_priv *priv)
+{
+       int ret;
+
+       mutex_lock(&priv->reg_mutex);
+       ret = regmap_update_bits(priv->regmap, QCA8K_REG_MIB,
+                                QCA8K_MIB_FUNC | QCA8K_MIB_BUSY,
+                                FIELD_PREP(QCA8K_MIB_FUNC, QCA8K_MIB_FLUSH) |
+                                QCA8K_MIB_BUSY);
+       if (ret)
+               goto exit;
+
+       ret = qca8k_busy_wait(priv, QCA8K_REG_MIB, QCA8K_MIB_BUSY);
+       if (ret)
+               goto exit;
+
+       ret = regmap_set_bits(priv->regmap, QCA8K_REG_MIB, QCA8K_MIB_CPU_KEEP);
+       if (ret)
+               goto exit;
+
+       ret = qca8k_write(priv, QCA8K_REG_MODULE_EN, QCA8K_MODULE_EN_MIB);
+
+exit:
+       mutex_unlock(&priv->reg_mutex);
+       return ret;
+}
index df32c1e..f55ef97 100644 (file)
@@ -430,6 +430,7 @@ struct qca8k_fdb {
 /* Common setup function */
 extern const struct qca8k_mib_desc ar8327_mib[];
 extern const struct regmap_access_table qca8k_readable_table;
+int qca8k_mib_init(struct qca8k_priv *priv);
 
 /* Common read/write/rmw function */
 int qca8k_read(struct qca8k_priv *priv, u32 reg, u32 *val);
@@ -439,4 +440,7 @@ int qca8k_rmw(struct qca8k_priv *priv, u32 reg, u32 mask, u32 write_val);
 int qca8k_bulk_read(struct qca8k_priv *priv, u32 reg, u32 *val, int len);
 int qca8k_bulk_write(struct qca8k_priv *priv, u32 reg, u32 *val, int len);
 
+/* Common ops function */
+int qca8k_busy_wait(struct qca8k_priv *priv, u32 reg, u32 mask);
+
 #endif /* __QCA8K_H */