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>
        .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)
 {
        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)
 {
 
 
        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;
+}
 
 /* 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);
 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 */