From patchwork Wed Dec 20 16:02:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Lamparter X-Patchwork-Id: 851540 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hFiIjY1P"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3z200109SGz9s7v for ; Thu, 21 Dec 2017 03:02:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754365AbdLTQCG (ORCPT ); Wed, 20 Dec 2017 11:02:06 -0500 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=Qm+OJLdzVONhqWKPG3dxHSl9JTo4CD77iGiROKGuXDc=; b=hFiIjY1Pz1WYCLB8uw2k7fVLx+P6ZC8kiqzrn2DjyrJD7t7zpe4ATNsQGhi3l1Dh1k lExtBSvxL2FU+WpZsLAKvt+ajSWzrmHxX09ri8UYqNorymNLb5YvxMRhnRHx4QvQpiU8 WgmfaYExj0HrwGb8VBmGHPPCnlmvkG0yG/8AQQta4kFZUU7Rz453jthaadCmQ7NqWuUp /Ry8XiQ+DKLAiZDshPIr0zZIkkWYs/ovQ9s3SOnzWQCUpcCzL2O8+SRnY0zKX5DBPD61 OO5Hbl3kPCX96Pky8YESmICz8dSCXRbWiyoQuFYg5weDCUUfJYw2t8Hh6e7LUmuqq5+x K8jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Qm+OJLdzVONhqWKPG3dxHSl9JTo4CD77iGiROKGuXDc=; b=rs7dcLn5Ax1f75UwSGaTz/EQggWjfhsdAnKbe9FijVSvZjy79uA0aJ82OOcvF8hc15 S/g8J8YGmXGUdSvrdG/BDTD7Pa7X1kLymFRfToCLZVVLQpsz6pFVdMRwwD18gkUivJ3d TasZN/PUy4JHuZnWSTFKbJjWptGlZtSK9Uxs0cp+HaC8DnNOJc8klkII1tUXkafh6cXo KCtLFpVWtrGL5ggcmvX0bukPGNEsh9x+sN4wQDk2cKPrDEBsfXIblTaCK09RVOqMjETr cxOFp+1bT3BjofkBP4U35TnIAipPIIO0wdOtsjVpIFKuAYqfUMekJ74XkZoORUdXgaJp xJlA== X-Gm-Message-State: AKGB3mKzu0gfUXOQMxo8qMoHIBI1vaV/203Z4KLEs5VrA5tGY6BcK0Ob CoPwG/kwnocvM3pdH7RdgtMaIjRF X-Google-Smtp-Source: ACJfBotkf9akxUoW/58M06PZtM1ArMAlAZuzZucDETcUHtUAYTjb2b/V8tGDAzY1W4FU33257zSEiQ== X-Received: by 10.223.183.42 with SMTP id l42mr9500257wre.1.1513785723576; Wed, 20 Dec 2017 08:02:03 -0800 (PST) Received: from debian64.daheim (p5B0D727A.dip0.t-ipconnect.de. [91.13.114.122]) by smtp.gmail.com with ESMTPSA id n74sm21076616wmi.1.2017.12.20.08.02.02 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 20 Dec 2017 08:02:02 -0800 (PST) Received: from chuck by debian64.daheim with local (Exim 4.90_RC4) (envelope-from ) id 1eRgoj-0004dx-V3; Wed, 20 Dec 2017 17:02:01 +0100 From: Christian Lamparter To: netdev@vger.kernel.org Cc: "David S . Miller" , Andrew Lunn , Christophe Jaillet 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> X-Mailer: git-send-email 2.15.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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);