Re: [PATCH v2 7/8] net: mvmdio: add xmdio support
From: Florian Fainelli <f.fainelli@gmail.com>
Date: 2017-06-08 16:42:21
Also in:
linux-arm-kernel
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]
quoted hunk ↗ jump to hunk
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!