ksz8_pme_pwrite8(dev, port, regs[REG_PORT_PME_CTRL], 0);
}
+static int ksz8_dsa_port_setup(struct dsa_switch *ds, int port)
+{
+ struct ksz_device *dev = ds->priv;
+
+ if (!dsa_is_user_port(ds, port))
+ return 0;
+
+ ksz8_port_setup(dev, port, false);
+ return ksz_dcb_init_port(dev, port);
+}
+
static void ksz88x3_config_rmii_clk(struct ksz_device *dev)
{
struct dsa_port *cpu_dp = dsa_to_port(dev->ds, dev->cpu_port);
const struct ksz_dev_ops ksz8463_dev_ops = {
.get_port_addr = ksz8463_get_port_addr,
.cfg_port_member = ksz8_cfg_port_member,
- .port_setup = ksz8_port_setup,
.r_phy = ksz8463_r_phy,
.w_phy = ksz8463_w_phy,
.r_mib_cnt = ksz8_r_mib_cnt,
const struct ksz_dev_ops ksz87xx_dev_ops = {
.get_port_addr = ksz8_get_port_addr,
.cfg_port_member = ksz8_cfg_port_member,
- .port_setup = ksz8_port_setup,
.r_phy = ksz8_r_phy,
.w_phy = ksz8_w_phy,
.r_mib_cnt = ksz8_r_mib_cnt,
const struct ksz_dev_ops ksz88xx_dev_ops = {
.get_port_addr = ksz8_get_port_addr,
.cfg_port_member = ksz8_cfg_port_member,
- .port_setup = ksz8_port_setup,
.r_phy = ksz8_r_phy,
.w_phy = ksz8_w_phy,
.r_mib_cnt = ksz8_r_mib_cnt,
.phy_read = ksz_phy_read16,
.phy_write = ksz_phy_write16,
.phylink_get_caps = ksz8_phylink_get_caps,
- .port_setup = ksz_port_setup,
+ .port_setup = ksz8_dsa_port_setup,
.get_strings = ksz_get_strings,
.get_ethtool_stats = ksz_get_ethtool_stats,
.get_sset_count = ksz_sset_count,
.phy_read = ksz_phy_read16,
.phy_write = ksz_phy_write16,
.phylink_get_caps = ksz8_phylink_get_caps,
- .port_setup = ksz_port_setup,
+ .port_setup = ksz8_dsa_port_setup,
.get_strings = ksz_get_strings,
.get_ethtool_stats = ksz_get_ethtool_stats,
.get_sset_count = ksz_sset_count,
.phy_read = ksz_phy_read16,
.phy_write = ksz_phy_write16,
.phylink_get_caps = ksz8_phylink_get_caps,
- .port_setup = ksz_port_setup,
+ .port_setup = ksz8_dsa_port_setup,
.get_strings = ksz_get_strings,
.get_ethtool_stats = ksz_get_ethtool_stats,
.get_sset_count = ksz_sset_count,
ksz_pwrite8(dev, port, regs[REG_PORT_PME_CTRL], 0);
}
+static int ksz9477_dsa_port_setup(struct dsa_switch *ds, int port)
+{
+ struct ksz_device *dev = ds->priv;
+ int ret;
+
+ if (!dsa_is_user_port(ds, port))
+ return 0;
+
+ ksz9477_port_setup(dev, port, false);
+
+ ret = ksz9477_set_default_prio_queue_mapping(dev, port);
+ if (ret)
+ return ret;
+
+ return ksz_dcb_init_port(dev, port);
+}
+
static void ksz9477_config_cpu_port(struct dsa_switch *ds)
{
struct ksz_device *dev = ds->priv;
const struct ksz_dev_ops ksz9477_dev_ops = {
.get_port_addr = ksz9477_get_port_addr,
.cfg_port_member = ksz9477_cfg_port_member,
- .port_setup = ksz9477_port_setup,
.r_phy = ksz9477_r_phy,
.w_phy = ksz9477_w_phy,
.r_mib_cnt = ksz9477_r_mib_cnt,
.phy_read = ksz_phy_read16,
.phy_write = ksz_phy_write16,
.phylink_get_caps = ksz9477_phylink_get_caps,
- .port_setup = ksz_port_setup,
+ .port_setup = ksz9477_dsa_port_setup,
.set_ageing_time = ksz9477_set_ageing_time,
.get_strings = ksz_get_strings,
.get_ethtool_stats = ksz_get_ethtool_stats,
*/
}
-static int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev,
- int port)
+int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, int port)
{
u32 queue_map = 0;
int ipm;
return ksz_pwrite32(dev, port, KSZ9477_PORT_MRI_TC_MAP__4, queue_map);
}
-int ksz_port_setup(struct dsa_switch *ds, int port)
-{
- struct ksz_device *dev = ds->priv;
- int ret;
-
- if (!dsa_is_user_port(ds, port))
- return 0;
-
- /* setup user port */
- dev->dev_ops->port_setup(dev, port, false);
-
- if (!is_ksz8(dev)) {
- ret = ksz9477_set_default_prio_queue_mapping(dev, port);
- if (ret)
- return ret;
- }
-
- /* port_stp_state_set() will be called after to enable the port so
- * there is no need to do anything.
- */
-
- return ksz_dcb_init_port(dev, port);
-}
-
void ksz_port_stp_state_set(struct dsa_switch *ds, int port, u8 state)
{
struct ksz_device *dev = ds->priv;
struct ksz_dev_ops {
u32 (*get_port_addr)(int port, int offset);
void (*cfg_port_member)(struct ksz_device *dev, int port, u8 member);
- void (*port_setup)(struct ksz_device *dev, int port, bool cpu_port);
/**
* @mdio_bus_preinit: Function pointer to pre-initialize the MDIO bus
int ksz_switch_resume(struct device *dev);
void ksz_teardown(struct dsa_switch *ds);
-int ksz_port_setup(struct dsa_switch *ds, int port);
void ksz_port_teardown(struct dsa_switch *ds, int port);
void ksz_init_mib_timer(struct ksz_device *dev);
int ksz_girq_setup(struct ksz_device *dev);
void ksz_irq_free(struct ksz_irq *kirq);
int ksz_parse_drive_strength(struct ksz_device *dev);
+int ksz9477_set_default_prio_queue_mapping(struct ksz_device *dev, int port);
/* Common register access functions */
static inline struct regmap *ksz_regmap_8(struct ksz_device *dev)
dev->dev_ops->cfg_port_member(dev, port, member);
}
+static int lan937x_dsa_port_setup(struct dsa_switch *ds, int port)
+{
+ struct ksz_device *dev = ds->priv;
+ int ret;
+
+ if (!dsa_is_user_port(ds, port))
+ return 0;
+
+ lan937x_port_setup(dev, port, false);
+
+ ret = ksz9477_set_default_prio_queue_mapping(dev, port);
+ if (ret)
+ return ret;
+
+ return ksz_dcb_init_port(dev, port);
+}
+
static void lan937x_config_cpu_port(struct dsa_switch *ds)
{
struct ksz_device *dev = ds->priv;
const struct ksz_dev_ops lan937x_dev_ops = {
.get_port_addr = ksz9477_get_port_addr,
.cfg_port_member = ksz9477_cfg_port_member,
- .port_setup = lan937x_port_setup,
.mdio_bus_preinit = lan937x_mdio_bus_preinit,
.create_phy_addr_map = lan937x_create_phy_addr_map,
.r_phy = lan937x_r_phy,
.phy_read = ksz_phy_read16,
.phy_write = ksz_phy_write16,
.phylink_get_caps = lan937x_phylink_get_caps,
- .port_setup = ksz_port_setup,
+ .port_setup = lan937x_dsa_port_setup,
.set_ageing_time = lan937x_set_ageing_time,
.get_strings = ksz_get_strings,
.get_ethtool_stats = ksz_get_ethtool_stats,