From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christian Lamparter Subject: [PATCH v2] net: ibm: emac: support RGMII-[RX|TX]ID phymode Date: Wed, 20 Dec 2017 17:02:01 +0100 Message-ID: <20171220160201.17143-1-chunkeey@gmail.com> Cc: "David S . Miller" , Andrew Lunn , Christophe Jaillet To: netdev@vger.kernel.org Return-path: Received: from mail-wr0-f196.google.com ([209.85.128.196]:46083 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754302AbdLTQCF (ORCPT ); Wed, 20 Dec 2017 11:02:05 -0500 Received: by mail-wr0-f196.google.com with SMTP id g17so13482591wrd.13 for ; Wed, 20 Dec 2017 08:02:04 -0800 (PST) Sender: netdev-owner@vger.kernel.org List-ID: The RGMII spec allows compliance for devices that implement an internal delay on TXC and/or RXC inside the transmitter. This patch adds the necessary RGMII_[RX|TX]ID mode code to handle such PHYs with the emac driver. Signed-off-by: Christian Lamparter --- v2: - utilize phy_interface_mode_is_rgmii() --- drivers/net/ethernet/ibm/emac/core.c | 4 ++-- drivers/net/ethernet/ibm/emac/emac.h | 3 +++ drivers/net/ethernet/ibm/emac/rgmii.c | 10 ++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 7feff2450ed6..043e72e28bba 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -199,8 +199,8 @@ static void __emac_set_multicast_list(struct emac_instance *dev); static inline int emac_phy_supports_gige(int phy_mode) { - return phy_mode == PHY_MODE_GMII || - phy_mode == PHY_MODE_RGMII || + return phy_interface_mode_is_rgmii(phy_mode) || + phy_mode == PHY_MODE_GMII || phy_mode == PHY_MODE_SGMII || phy_mode == PHY_MODE_TBI || phy_mode == PHY_MODE_RTBI; diff --git a/drivers/net/ethernet/ibm/emac/emac.h b/drivers/net/ethernet/ibm/emac/emac.h index 5afcc27ceebb..8c6d2af7281b 100644 --- a/drivers/net/ethernet/ibm/emac/emac.h +++ b/drivers/net/ethernet/ibm/emac/emac.h @@ -112,6 +112,9 @@ struct emac_regs { #define PHY_MODE_RMII PHY_INTERFACE_MODE_RMII #define PHY_MODE_SMII PHY_INTERFACE_MODE_SMII #define PHY_MODE_RGMII PHY_INTERFACE_MODE_RGMII +#define PHY_MODE_RGMII_ID PHY_INTERFACE_MODE_RGMII_ID +#define PHY_MODE_RGMII_RXID PHY_INTERFACE_MODE_RGMII_RXID +#define PHY_MODE_RGMII_TXID PHY_INTERFACE_MODE_RGMII_TXID #define PHY_MODE_TBI PHY_INTERFACE_MODE_TBI #define PHY_MODE_GMII PHY_INTERFACE_MODE_GMII #define PHY_MODE_RTBI PHY_INTERFACE_MODE_RTBI diff --git a/drivers/net/ethernet/ibm/emac/rgmii.c b/drivers/net/ethernet/ibm/emac/rgmii.c index c4a1ac38bba8..124b0473d2b7 100644 --- a/drivers/net/ethernet/ibm/emac/rgmii.c +++ b/drivers/net/ethernet/ibm/emac/rgmii.c @@ -52,9 +52,9 @@ /* RGMII bridge supports only GMII/TBI and RGMII/RTBI PHYs */ static inline int rgmii_valid_mode(int phy_mode) { - return phy_mode == PHY_MODE_GMII || + return phy_interface_mode_is_rgmii(phy_mode) || + phy_mode == PHY_MODE_GMII || phy_mode == PHY_MODE_MII || - phy_mode == PHY_MODE_RGMII || phy_mode == PHY_MODE_TBI || phy_mode == PHY_MODE_RTBI; } @@ -63,6 +63,9 @@ static inline const char *rgmii_mode_name(int mode) { switch (mode) { case PHY_MODE_RGMII: + case PHY_MODE_RGMII_ID: + case PHY_MODE_RGMII_RXID: + case PHY_MODE_RGMII_TXID: return "RGMII"; case PHY_MODE_TBI: return "TBI"; @@ -81,6 +84,9 @@ static inline u32 rgmii_mode_mask(int mode, int input) { switch (mode) { case PHY_MODE_RGMII: + case PHY_MODE_RGMII_ID: + case PHY_MODE_RGMII_RXID: + case PHY_MODE_RGMII_TXID: return RGMII_FER_RGMII(input); case PHY_MODE_TBI: return RGMII_FER_TBI(input); -- 2.15.1