From patchwork Sat Jun 9 08:48:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kirill Kranke X-Patchwork-Id: 927113 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Nz52kblj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 412tJv51Tcz9s0W for ; Sat, 9 Jun 2018 18:50:23 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753216AbeFIIuU (ORCPT ); Sat, 9 Jun 2018 04:50:20 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:40164 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753116AbeFIIuS (ORCPT ); Sat, 9 Jun 2018 04:50:18 -0400 Received: by mail-lf0-f68.google.com with SMTP id q11-v6so23457013lfc.7 for ; Sat, 09 Jun 2018 01:50:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=buRVAwrUlhXcLKhs8ZeY9xJlTUGkUYsKLUcFh53x6gg=; b=Nz52kbljAZOU4sPT56w4CzBPyyGObruAt4nTQ0bq+AF+j6yoWeW7MkvL3DxHO8aYri ZtVUBu0K70eXVQ/QUkK/O43BWsROpgQZzXnuo0C5cHgGjR7I7WrmdE3VcdyC+XL4Zo1+ VuQa2I1iSzlpZEGhUMR7jUIJs16rEdiJgccU/Jg2HizAuI/VJIJsqV1DEjmVEkQa1Ogl ujv3Q8XUZMAIwjuDYllwtR3I3Csgmr8rBRw1j6VSP75qnP4c2k1n3bTQLfyjMO2vN8ev PbFFwQn+97toqcEyxf9aYhWHe8/OTfzgckyUsosGI99v/S9RcKrgmtuxRwXe/4E6JsWa sOug== 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=buRVAwrUlhXcLKhs8ZeY9xJlTUGkUYsKLUcFh53x6gg=; b=iejNuBJ2lHdc3MUTLLbrOtPPHX+jQf+mSVc9yGQYMs2imf4TRKZpNqesbOsm8Z0sY+ AsrSWb4+hi4DRa9fNt8VcCj1jjilUEwkbCSk3cwBEf2X9Gl60jjiPB0iC4h/PUBNzurv hPhw2I9mN6eFAuEpLlrXBibCtQKeIQ4I1uCARTNEe5YH8kY3Kvu0kYXg725URAl60aEl Cj5VZhgGbw6KyzbOwaEMYfgBH83FnVx1RNm1HdV/18+VbFye5Y0K1ItncDmbaDZlIFTR AWTIMNSyUBm62C+NVX48O+YEtij92w2Ej1v45wlcrMsKBocIppMu7GC0OU9SMSQiI+4B J6eg== X-Gm-Message-State: APt69E2kaT5PLzAV0m7yrVkjMQg2jycYBSBtE5Ju6K1AS0WZQDjxUNMU eWzSgokVKVGVWV9r6CcHvvQ= X-Google-Smtp-Source: ADUXVKJlAU5rTUz6B7LeW/4hpho0d47DDZAzjmxish0qiQGNlCIXJSXHQ8S1BCAmBrg9APL5GNBFrQ== X-Received: by 2002:a19:c7c8:: with SMTP id x191-v6mr5655787lff.122.1528534216712; Sat, 09 Jun 2018 01:50:16 -0700 (PDT) Received: from krtkr-OptiPlex-7020.TOPCON.COM ([193.232.110.5]) by smtp.googlemail.com with ESMTPSA id a125-v6sm5363109lfb.61.2018.06.09.01.50.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 09 Jun 2018 01:50:15 -0700 (PDT) From: Kirill Kranke To: andrew@lunn.ch, f.fainelli@gmail.com, davem@davemloft.net, netdev@vger.kernel.org Cc: Kirill Kranke Subject: [PATCH net-next V3] net: phy: Add TJA1100 BroadR-Reach PHY driver. Date: Sat, 9 Jun 2018 11:48:47 +0300 Message-Id: <1528534127-6213-1-git-send-email-kranke.kirill@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Current generic PHY driver does not work with TJA1100 BroadR-REACH PHY properly. TJA1100 does not have any standard ability enabled at MII_BMSR register. Instead it has BroadR-REACH ability at MII_ESTATUS enabled, which is not handled by generic driver yet. Therefore generic driver is unable to guess required link speed, duplex etc. Device is started up with 10Mbps halfduplex which is incorrect. BroadR-REACH able flag is not specified in IEEE802.3-2015. Which is why I did not add BroadR-REACH able flag support at generic driver. Once BroadR-REACH able flag gets into IEEE802.3 it should be reasonable to support it in the generic PHY driver. Signed-off-by: Kirill Kranke --- Notes: Second edition of the patch miss changes list and V2 flag. Changes are included here. Changes from V1 to V2: - Remove unused #define from tja1100.c - Do not touch phydev->supported and phydev->advertising at tja1100_phy_config_init - Use proper error codes at tja1100_phy_config_aneg - Use phydev_err instead of pr_err - Do not specify read_status and soft_reset while they are default to required value - Correct wrong Signed-off-by email address Changes from V2 to V3: - Add 'net-next' tree - Add this notes - Rename config option from TJA1100_PHY to NXP_TJA1100_PHY - Minor update to config help message: specify that able flag is TJA1100's custom - Add SUPPORTED_TP feature diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 343989f..ec30de4 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -387,6 +387,15 @@ config NATIONAL_PHY ---help--- Currently supports the DP83865 PHY. +config NXP_TJA1100_PHY + tristate "NXP TJA1100 PHY" + help + Support of NXP TJA1100 BroadR-REACH ethernet PHY. + Generic driver is not suitable for TJA1100 PHY while the PHY does not + advertise any standard IEEE capabilities. It uses custom BroadR-REACH + able flag instead. This driver configures capabilities of the PHY + properly. + config QSEMI_PHY tristate "Quality Semiconductor PHYs" ---help--- diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile index 5805c0b..c1bc14d4 100644 --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile @@ -76,6 +76,7 @@ obj-$(CONFIG_MICROCHIP_PHY) += microchip.o obj-$(CONFIG_MICROCHIP_T1_PHY) += microchip_t1.o obj-$(CONFIG_MICROSEMI_PHY) += mscc.o obj-$(CONFIG_NATIONAL_PHY) += national.o +obj-$(CONFIG_NXP_TJA1100_PHY) += tja1100.o obj-$(CONFIG_QSEMI_PHY) += qsemi.o obj-$(CONFIG_REALTEK_PHY) += realtek.o obj-$(CONFIG_RENESAS_PHY) += uPD60620.o diff --git a/drivers/net/phy/tja1100.c b/drivers/net/phy/tja1100.c new file mode 100644 index 0000000..2b03057 --- /dev/null +++ b/drivers/net/phy/tja1100.c @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0 +/* tja1100.c: TJA1100 BoardR-REACH PHY driver. + * + * Copyright (c) 2017 Kirill Kranke + * Author: Kirill Kranke + */ + +#include +#include +#include + +static int tja1100_phy_config_init(struct phy_device *phydev) +{ + phydev->autoneg = AUTONEG_DISABLE; + phydev->speed = SPEED_100; + phydev->duplex = DUPLEX_FULL; + + return 0; +} + +static int tja1100_phy_config_aneg(struct phy_device *phydev) +{ + if (phydev->autoneg == AUTONEG_ENABLE) { + phydev_err(phydev, "autonegotiation is not supported\n"); + return -EINVAL; + } + + if (phydev->speed != SPEED_100 || phydev->duplex != DUPLEX_FULL) { + phydev_err(phydev, "only 100MBps Full Duplex allowed\n"); + return -EINVAL; + } + + return 0; +} + +static struct phy_driver tja1100_phy_driver[] = { + { + .phy_id = 0x0180dc48, + .phy_id_mask = 0xfffffff0, + .name = "NXP TJA1100", + + /* TJA1100 has only 100BASE-BroadR-REACH ability specified + * at MII_ESTATUS register. Standard modes are not + * supported. Therefore BroadR-REACH allow only 100Mbps + * full duplex without autoneg. + */ + .features = SUPPORTED_100baseT_Full | SUPPORTED_MII + | SUPPORTED_TP, + + .config_aneg = tja1100_phy_config_aneg, + .config_init = tja1100_phy_config_init, + + .suspend = genphy_suspend, + .resume = genphy_resume, + } +}; + +module_phy_driver(tja1100_phy_driver); + +MODULE_DESCRIPTION("NXP TJA1100 driver"); +MODULE_AUTHOR("Kirill Kranke "); +MODULE_LICENSE("GPL"); + +static struct mdio_device_id __maybe_unused nxp_tbl[] = { + { 0x0180dc48, 0xfffffff0 }, + {} +}; + +MODULE_DEVICE_TABLE(mdio, nxp_tbl);