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