> It appears the dsa.c is not able to attach my underlying net
> device. And that seems to be due to it is unable to find the
> mdio_bus.


> So I modified my net device driver so that in probe it calls
> of_mdiobus_register instead of mdiobus_register.

> And of_mdiobus_register seems to be looking for some kind of phy
> definitions in the device tree, which it does not find. And so it
> does not appear to register the bus in such a way that dsa.c can
> connect to it.

Hi Bryan

Are the sources for the ethernet driver available? I don't see them in
net-next.

There are two common ways for this to work, depending on the driver
architecture. Marvell devices have a separate mdio driver. In
kirkwood.dtsi you see:

               mdio: mdio-bus@72004 {
                        compatible = "marvell,orion-mdio";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <0x72004 0x84>;
                        interrupts = <46>;
                        clocks = <&gate_clk 0>;
                        status = "disabled";

                        /* add phy nodes in board file */
                };

and mvmdio.c calls of_mdiobus_register() passing this device node.

The other way is that the mdio is part of the ethernet
driver. e.g. for the Freescale FEC:

&fec1 {
        phy-mode = "rmii";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_fec1>;
        status = "okay";

        mdio0: mdio {
                #address-cells = <1>;
                #size-cells = <0>;
                status = "okay";
        };
};

In this case, of_mdiobus_register() is passed the mdio0 device node.

> &gpmc {
>       status = "okay";
>       ranges = <0 0 0x10000000 0x08000000>;   // CS0: 128M 
>       pinctrl-names = "default";
>       pinctrl-0 = <&gpmc_pins>;
>       lan9352: ethernet@gpmc {
>               compatible = "microchip,lan9352";
>               interrupt-parent = <&gpio0>;
>               interrupts = <7 8>;//7==GPIO bit 7, 8 = Active low level 
> triggered.
> 
>               bank-width = <2>;
> 
>               phy-mode = "mii";
> 
>               reg = <0 0 0x10000>;
> 
>               reg-io-width = <4>;
>               microchip,save-mac-address;
>               microchip,irq-push-pull;

So i expect to see something like this here:

                mdio0: mdio {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "okay";
                };
>       };
> };
> 
> / {
>       dsa@0 {
>               compatible = "microchip,dsa";
>               #address-cells = <2>;
>               #size-cells = <0>;
>               dsa,ethernet = <&lan9352>;
>               dsa,mii-bus = <&lan9352>;

and this would be

                dsa,mii-bus = <&mdio0>;

>               switch@0 {
>                       #address-cells = <1>;
>                       #size-cells = <0>;
>                       reg = <0 0>;    /* MDIO address 0, switch 0 in tree */
>                       port@0 {
>                               reg = <0>;
>                               label = "cpu";
>                       };
>                       port@1 {
>                               reg = <1>;
>                               label = "lan1";
>                       };
>                       port@2 {
>                               reg = <2>;
>                               label = "lan2";
>                       };
>               };
>       };
> };

  Andrew

Reply via email to