diff mbox

[01/12] net: axienet: Support for RGMII

Message ID 8C367E791021814DA6CAFCCCD4EFC2297C97A227@XSJ-PSEXMBX01.xlnx.xilinx.com
State Not Applicable, archived
Delegated to: David Miller
Headers show

Commit Message

John Linn May 5, 2015, 12:54 p.m. UTC
Hi Michal,

I removed the mailing lists.

One of the issues we see in the field is that the value of PHY_INTERFACE_MODE_RGMII_ID causes a delay on the RX and TX side in the PHY to align the clock and the data. Yet this does not work on every board such that         PHY_INTERFACE_MODE_RGMII_RXID or        PHY_INTERFACE_MODE_RGMII_TXID must be used.

I realize that's a pain.  Sometimes the PHY driver allows register values (like Marvell) to be setup on the PHY node which helps, but not always.  It seems that the information in the device tree is not adequate to describe the hardware. I've not looked to see what others do as maybe this is a common problem, just thought I should pass on the problem.

Thanks
John

-----Original Message-----
From: Michal Simek [mailto:monstr@monstr.eu] On Behalf Of Michal Simek
Sent: Tuesday, May 05, 2015 4:26 AM
To: netdev@vger.kernel.org
Cc: Srikanth Thokala; Soren Brinkmann; monstr@monstr.eu; John Linn; Anirudha Sarangi; linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org
Subject: [PATCH 01/12] net: axienet: Support for RGMII

From: Srikanth Thokala <srikanth.thokala@xilinx.com>

This patch adds support for the RGMII. The h/w configuration parameter C_PHY_TYPE, which represents the interface configured in the design, is used to differentiate various interfaces supported by AXI Ethernet.

Signed-off-by: Srikanth Thokala <sthokal@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--
2.3.5



This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

David Miller May 5, 2015, 2:59 p.m. UTC | #1
Please do not top-post.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Florian Fainelli May 6, 2015, 4:32 a.m. UTC | #2
Le 05/05/15 05:54, John Linn a écrit :
> Hi Michal,
> 
> I removed the mailing lists.
> 
> One of the issues we see in the field is that the value of PHY_INTERFACE_MODE_RGMII_ID causes a delay on the RX and TX side in the PHY to align the clock and the data. Yet this does not work on every board such that         PHY_INTERFACE_MODE_RGMII_RXID or        PHY_INTERFACE_MODE_RGMII_TXID must be used.
> 
> I realize that's a pain.  Sometimes the PHY driver allows register values (like Marvell) to be setup on the PHY node which helps, but not always.  It seems that the information in the device tree is not adequate to describe the hardware. I've not looked to see what others do as maybe this is a common problem, just thought I should pass on the problem.

There is a standard Device Tree node property described in
Documentation/devicetree/bindings/net/ethernet.txt: phy-mode which
allows you to specify exactly this: whether you should have your TX data
and clocks aligned or shifted.

See include/linux/phy.h in the kernel for how the string translates into
a given PHY_INTERFACE_MODE_* value.

If your concern is more about whether the fact that given PHY driver
should support RGMII_ID, RGMII_TXID and RGMII_RXID, all of this is
typically extremely specific to the board (PCB), Ethernet MAC and
Ethernet PHY, so unless there is the need to configure that, it may just
be that people use the default values that happen to work for them
without much research on the subject.

> 
> Thanks
> John
> 
> -----Original Message-----
> From: Michal Simek [mailto:monstr@monstr.eu] On Behalf Of Michal Simek
> Sent: Tuesday, May 05, 2015 4:26 AM
> To: netdev@vger.kernel.org
> Cc: Srikanth Thokala; Soren Brinkmann; monstr@monstr.eu; John Linn; Anirudha Sarangi; linux-kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org
> Subject: [PATCH 01/12] net: axienet: Support for RGMII
> 
> From: Srikanth Thokala <srikanth.thokala@xilinx.com>
> 
> This patch adds support for the RGMII. The h/w configuration parameter C_PHY_TYPE, which represents the interface configured in the design, is used to differentiate various interfaces supported by AXI Ethernet.
> 
> Signed-off-by: Srikanth Thokala <sthokal@xilinx.com>
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
> 
>  drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> index 28b7e7d9c272..0ab607732bb4 100644
> --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> @@ -925,9 +925,16 @@ static int axienet_open(struct net_device *ndev)
>                 return ret;
> 
>         if (lp->phy_node) {
> -               lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
> +               if (lp->phy_type == XAE_PHY_TYPE_GMII) {
> +                       lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
>                                              axienet_adjust_link, 0,
>                                              PHY_INTERFACE_MODE_GMII);
> +               } else if (lp->phy_type == XAE_PHY_TYPE_RGMII_2_0) {
> +                       lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
> +                                            axienet_adjust_link, 0,
> +                                            PHY_INTERFACE_MODE_RGMII_ID);
> +               }
> +
>                 if (!lp->phy_dev) {
>                         dev_err(lp->dev, "of_phy_connect() failed\n");
>                         return -ENODEV;
> --
> 2.3.5
> 
> 
> 
> This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
diff mbox

Patch

diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
index 28b7e7d9c272..0ab607732bb4 100644
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
@@ -925,9 +925,16 @@  static int axienet_open(struct net_device *ndev)
                return ret;

        if (lp->phy_node) {
-               lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
+               if (lp->phy_type == XAE_PHY_TYPE_GMII) {
+                       lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
                                             axienet_adjust_link, 0,
                                             PHY_INTERFACE_MODE_GMII);
+               } else if (lp->phy_type == XAE_PHY_TYPE_RGMII_2_0) {
+                       lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
+                                            axienet_adjust_link, 0,
+                                            PHY_INTERFACE_MODE_RGMII_ID);
+               }
+
                if (!lp->phy_dev) {
                        dev_err(lp->dev, "of_phy_connect() failed\n");
                        return -ENODEV;