From patchwork Sun Dec 17 21:51:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Lamparter X-Patchwork-Id: 849711 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="mVFgLiKG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3z0HtW4spHz9sCZ for ; Mon, 18 Dec 2017 08:51:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757530AbdLQVv1 (ORCPT ); Sun, 17 Dec 2017 16:51:27 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:36294 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752540AbdLQVv0 (ORCPT ); Sun, 17 Dec 2017 16:51:26 -0500 Received: by mail-wm0-f65.google.com with SMTP id b76so26264666wmg.1 for ; Sun, 17 Dec 2017 13:51:25 -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=0xikoiB6pbU7zjqATrgwjBT4eY14qnQfvc4SW2N+XhU=; b=mVFgLiKGqpcM0McwXaMAPWSi8yx2f538ae2dwkZFxMMUeOgkZIIMUw/7ptV2H1iAsG ThYrBFRgw8YyjrKWLmmOGC7sYojM4U4A0zkyTqRpqT3+EAZJ8OKzC5UlIvAQBtwY4X+F dHCPyXjLSCZ/Ztspvgbr1CVHGblzBMOPB/MM2C/bi6LHpJ6xbJ6pwxukBdLSn5cGJDlX yGlEWTtvFrSPCDGXgB/HNWXrNUPccCWFZ+GGvdQ+mN8EmVeOBpZigHBLyGVo+nlqZHtp zfhO1gKd5jT2l7NbTXZpZTKugDyhcfYqShlHStHyxUrtLB9pYm7gZhrP5jaqTIS1zIeK +QIg== 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=0xikoiB6pbU7zjqATrgwjBT4eY14qnQfvc4SW2N+XhU=; b=EjJJO3+y6mkjn6PjP7UZswREuviHUpZ19209oMtbdtLVYBrhTe8sqKlAiEswAV3eky UzCzE0oV36FuQLkrw/D7vPUUXmLgXQYakHEk7S9cCyp2vncjRBQPWSqlStN9J8PjBeCq z2bmoJDAX6fpHsAhdCDAo5c4Nx3k2J6z2UXL6+9aWsXDTZEjf/8ot6lGmXyDUQfDddqu xsR9EtRKd/dOgJGLaDbztUNDbBgfpM5E7bGhmE5LH0Aa5TI6jjSlxqWIOafP+nLNS5YR 6C6rIuwWrEDi/ltS6zDUf4tKrGtb7+wb3wwx6LwRt9hi7CRccGyoVXlCa8cJxxnKKAhq KNJQ== X-Gm-Message-State: AKGB3mKJukZH7ZX7FEAInW8Vc9AvQ4Dmig66v59hP5DiPKdqQmOixdwg FnP+dbFOyqjNu7se4XqjsG6UtCau X-Google-Smtp-Source: ACJfBov4ktSHX2e71yUfny0btyYAlL+JfepKWk4kt0z6icq0HjIIk7RoU0yKm9g70LAPbyGfDf2VHQ== X-Received: by 10.28.87.207 with SMTP id l198mr10113410wmb.45.1513547484604; Sun, 17 Dec 2017 13:51:24 -0800 (PST) Received: from debian64.daheim (p200300D5FBDD4AFC0000000000000830.dip0.t-ipconnect.de. [2003:d5:fbdd:4afc::830]) by smtp.gmail.com with ESMTPSA id q74sm13102562wmg.22.2017.12.17.13.51.23 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 17 Dec 2017 13:51:23 -0800 (PST) Received: from root by debian64.daheim with local (Exim 4.90_RC4) (envelope-from ) id 1eQgqA-0006GZ-NK; Sun, 17 Dec 2017 22:51:22 +0100 From: Christian Lamparter To: netdev@vger.kernel.org Cc: "David S . Miller" , Andrew Lunn , Christophe Jaillet Subject: [PATCH] net: ibm: emac: support RGMII-[RX|TX]ID phymode Date: Sun, 17 Dec 2017 22:51:22 +0100 Message-Id: <20171217215122.24045-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 --- drivers/net/ethernet/ibm/emac/core.c | 3 +++ drivers/net/ethernet/ibm/emac/emac.h | 3 +++ drivers/net/ethernet/ibm/emac/rgmii.c | 9 +++++++++ 3 files changed, 15 insertions(+) diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 7feff2450ed6..820173bee168 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -201,6 +201,9 @@ static inline int emac_phy_supports_gige(int phy_mode) { return phy_mode == PHY_MODE_GMII || phy_mode == PHY_MODE_RGMII || + phy_mode == PHY_MODE_RGMII_ID || + phy_mode == PHY_MODE_RGMII_RXID || + phy_mode == PHY_MODE_RGMII_TXID || 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..7963adffbb1c 100644 --- a/drivers/net/ethernet/ibm/emac/rgmii.c +++ b/drivers/net/ethernet/ibm/emac/rgmii.c @@ -55,6 +55,9 @@ static inline int rgmii_valid_mode(int phy_mode) return phy_mode == PHY_MODE_GMII || phy_mode == PHY_MODE_MII || phy_mode == PHY_MODE_RGMII || + phy_mode == PHY_MODE_RGMII_ID || + phy_mode == PHY_MODE_RGMII_RXID || + phy_mode == PHY_MODE_RGMII_TXID || phy_mode == PHY_MODE_TBI || phy_mode == PHY_MODE_RTBI; } @@ -63,6 +66,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 +87,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);