Thread (17 messages) flat view 17 messages, 5 authors, 2016-08-04

RE: [RFC PATCH v2 1/4] Documentation: DT: net: Add Xilinx gmiitorgmii converter device tree binding documentation

From: Appana Durga Kedareswara Rao <hidden>
Date: 2016-07-26 15:09:31
Also in: linux-arm-kernel, linux-devicetree, lkml

Hi Andrew,

	Thanks for the inputs...
quoted
quoted
quoted
Hi Kedareswara

So looking at the device tree, you have the gmiitorgmii as an mdio
device. It will get probed as an mdio device, and from that you
know the address on the bus. However, your driver does not
actually do this. xilinx_gmii2rgmii.c is just a library of two
functions, and does not use any of this device tree information.
You device tree binding is completely bogus.

What i think is a much more logical structure, and fits the
hardware, which is what DT is all about, is to make your driver an mdio
driver.
quoted
quoted
quoted
Also, have a phy-handle pointing to the PHY in the gmii_to_rgmii node.
You then no longer need the exported gmii2rgmii_phyprobe() function.

Next, you want gmiitorgmii driver to register a phy. The MAC
driver can then look this up using phy-handle:

       mdio {
                #address-cells = <1>;
                #size-cells = <0>;

                phy: ethernet-phy@0 {
                        reg = <0>;
                };

                gmii_to_rgmii: gmii-to-rgmii@8 {
                        compatible = "xlnx,gmiitorgmii";
                        reg = <8>;
			phy-handle = <&phy>;
                };
       };

Thanks for your inputs initially we too thought the similar
implementation But the GMII2RGMII converter contains only one
register and it is  not compatible to the standard ethernet MII
interface. Also it doesn't have a standard VID and PID registers So,
during the mdio bus scan, this device
will
quoted
not appear.
I tried to implement the driver as you suggested but there are few limitations in this
Implementation please correct me if my understanding is wrong...

The device-tree will look like below...
        mdio {
                #address-cells = <1>;
                 #size-cells = <0>;
                 phy: ethernet-phy@0 {
                         reg = <0>;
                 };
                 gmii_to_rgmii: gmii-to-rgmii@8 {
                         compatible = "xlnx,gmiitorgmii";
                         reg = <8>;
		phy-handle = <&phy>;
                 };
      };

The MAC driver does the below.
	---> It creates a MDIO device for the gmii_to_rgmii node.
	---> It creates a PHY device for the External PHY node.

The GMII2RGMII driver does the below.
	1) It registers the gmii_to_rgmii node as a MDIO driver.
	It contains the external phy as a phy-handle
	2) Register a PHY Driver.
	---> Register it as a phy driver (phy_register_driver): 
	        For this implementation the converter won't have any VID or DID(PHY register 2 and 3)  
	---> Register phy using of_phy_connect call: 
	       For this implementation needed a netdev pointer to pass it to the of_phy_connect call.
	      (Need to allocate a network device during probe and need to register it as netdev) 
		
	For the 2nd one implement I am facing above limitations...
	Please correct me if my understanding is wrong...

Regards,
Kedar.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help