[PATCH v2 7/8] net: mvmdio: add xmdio support
Florian Fainelli
f.fainelli at gmail.com
Thu Jun 8 09:42:21 PDT 2017
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
More information about the linux-arm-kernel
mailing list