Re: [RFC PATCH v1 1/6] net: phy: add CAN PHY Virtual Bus

From: Andrew Lunn
Date: Fri Oct 23 2020 - 16:53:48 EST


On Fri, Oct 23, 2020 at 12:56:21PM +0200, Oleksij Rempel wrote:
> Most of CAN PHYs (transceivers) are not attached to any data bus, so we
> are not able to communicate with them. For this case, we introduce a CAN
> specific virtual bus to make use of existing PHY framework.

I don't think you are making the best use of the phylib framework.

MDIO busses can be standalone devices, with their own DT nodes. And
that device node can list the PHY devices on the bus.

can_mdio {
compatible = "virtual,mdio-virtual";
#address-cells = <1>;
#size-cells = <0>;

canphy0: can-phy@0 {
compatible = "can,generic-transceiver",
reg = <0>;
}
canphy1: can-phy@1
compatible = "nxp,tja1051",
reg = <1>
}
}

When you call of_mdiobus_register(fmb->mii_bus, np) it will parse this
tree and should create PHY devices for them, and since your PHY driver
has a match function, it should then bind the correct PHY driver.

Your 'MAC' driver then uses phy-handle as normal to point to the PHY.

There is also some interesting overlap here with what Intel posted
recently:

https://www.spinics.net/lists/kernel/msg3706164.html

I'm not sure anything can be shared here, but it is worth looking at
and thinking about.

Andrew