On 06/08/2017 02:26 AM, Antoine Tenart wrote: > This patch adds the xMDIO interface support in the mvmdio driver. This > interface is used in Ethernet controllers on Marvell 370, 7k and 8k (as > of now). The xSMI interface supported by this driver complies with the > IEEE 802.3 clause 45 (while the SMI interface complies with the clause > 22). The xSMI interface is used by 10GbE devices.
In the previous version you were properly defining a new compatibles strings for xmdio, but now you don't and instead you runtime select the operations based on whether MII_ADDR_C45 is set in the register which is fine from a functional perspective. If I get this right, the xMDIO controller is actually a superset of the MDIO controller and has an extra MVMDIO_XSMI_ADDR_REG register to preform C45 accesses? If that is the case (and looking at patch 8 that seems to be the case), you probably still need to define a new compatible string for that block, because it has a different register layout than its predecessor. [snip] > static int orion_mdio_wait_ready(const struct orion_mdio_ops *ops, > @@ -164,7 +236,7 @@ static int orion_mdio_read(struct mii_bus *bus, int > mii_id, > int regnum) > { > struct orion_mdio_dev *dev = bus->priv; > - const struct orion_mdio_ops *ops = &orion_mdio_smi_ops; > + const struct orion_mdio_ops *ops = orion_mdio_get_ops(regnum); > int ret; > > mutex_lock(&dev->lock); > @@ -195,7 +267,7 @@ static int orion_mdio_write(struct mii_bus *bus, int > mii_id, > int regnum, u16 value) > { > struct orion_mdio_dev *dev = bus->priv; > - const struct orion_mdio_ops *ops = &orion_mdio_smi_ops; > + const struct orion_mdio_ops *ops = orion_mdio_get_ops(regnum); > int ret; ok, that seems to work since you get the operation based on MII_ADDR_C45. Thanks! -- Florian