Skip to content
Permalink
Browse files
net: dsa: try to add the slave-mii bus
  • Loading branch information
frank-w committed Nov 14, 2021
1 parent 252e0eb commit 8ba8cffcee5e30e3adb60b08dd018f353fda4249
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 2 deletions.
@@ -2323,12 +2323,82 @@ static enum dsa_tag_protocol rtl8367c_get_tag_protocol(struct dsa_switch *ds,
return DSA_TAG_PROTO_RTL4_A;
}

static int rtl8367c_mdio_read(struct mii_bus *bus, int addr, int regnum)
{
struct rtk_gsw *gsw = bus->priv;
rtk_uint32 regData;

//return smi->ops->phy_read(gsw, addr, regnum);
mii_mgr_read(gsw->bus,addr,regnum,&regData);
return regData;
return 0;
}

static int rtl8367c_mdio_write(struct mii_bus *bus, int addr, int regnum,
u16 val)
{
struct rtk_gsw *gsw = bus->priv;

//return smi->ops->phy_write(gsw, addr, regnum, val);
mii_mgr_write(gsw->bus,addr,regnum,val);
return 0;
}

int rtl8367c_setup_mdio(struct rtk_gsw *gsw)
{
struct device_node *mdio_np;
int ret;

/*mdio_np = of_get_compatible_child(smi->dev->of_node, "realtek,smi-mdio");
if (!mdio_np) {
dev_err(smi->dev, "no MDIO bus node\n");
return -ENODEV;
}*/

/*
//rtk_gsw_probe:
mdio = of_parse_phandle(np, "realtek,mdio", 0); //device_node
mdio_bus = of_mdio_find_bus(mdio); //mii_bus
gsw->bus = mdio_bus;
*/
mdio_np=gsw->bus->dev.of_node;
gsw->slave_mii_bus = devm_mdiobus_alloc(gsw->dev);
if (!gsw->slave_mii_bus) {
ret = -ENOMEM;
goto err_put_node;
}
gsw->slave_mii_bus->priv = gsw;
gsw->slave_mii_bus->name = "SMI slave MII";
gsw->slave_mii_bus->read = rtl8367c_mdio_read;
gsw->slave_mii_bus->write = rtl8367c_mdio_write;
snprintf(gsw->slave_mii_bus->id, MII_BUS_ID_SIZE, "SMI-%d",
gsw->ds->index);
gsw->slave_mii_bus->dev.of_node = mdio_np;
gsw->slave_mii_bus->parent = gsw->dev;
gsw->ds->slave_mii_bus = gsw->slave_mii_bus;

ret = devm_of_mdiobus_register(gsw->dev, gsw->slave_mii_bus, mdio_np);
if (ret) {
dev_err(gsw->dev, "unable to register MDIO bus %s\n",
gsw->slave_mii_bus->id);
goto err_put_node;
}

return 0;

err_put_node:
//of_node_put(mdio_np); //we do not create the mapping here

return ret;
}

static int rtl8367c_setup(struct dsa_switch *ds)
{
//struct rtk_gsw *gsw = ds->priv;
struct rtk_gsw *gsw = ds->priv;

//in rtl8366rb this makes the same as rtk_switch_probe/init here

rtl8367c_setup_mdio(gsw);
ds->configure_vlan_while_not_filtering = false;

return 0;
@@ -2359,7 +2429,7 @@ static int rtk_gsw_probe(struct platform_device *pdev)
struct mii_bus *mdio_bus;
struct rtk_gsw *gsw;
const char *pm;
int ret;
//int ret;

mdio = of_parse_phandle(np, "realtek,mdio", 0);

@@ -9,6 +9,7 @@ struct rtk_gsw {
int reset_pin;
unsigned int num_ports;
struct dsa_switch *ds;
struct mii_bus *slave_mii_bus;
};

static struct rtk_gsw *_gsw;

0 comments on commit 8ba8cff

Please sign in to comment.