Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp8009623ybn; Tue, 1 Oct 2019 01:33:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqxyCo6OQhA3U1gxAwmD08xID2Trild5ss59hQC5qo65Uj0qnazRM6vaXCUWUZRUsDZGZQzu X-Received: by 2002:a50:d2d4:: with SMTP id q20mr24457147edg.172.1569918792378; Tue, 01 Oct 2019 01:33:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569918792; cv=none; d=google.com; s=arc-20160816; b=q/Sf1f2jDmT/R6hejJU+D4WkNPQPDU/nw8bsb2ZnraF89UDlN6M5vH6xxJHCQbZe65 wYpHYZE8+W5t/9TCq2fkv9B7WcFBJ4zK/nXemjo3ok1V+Nr1JBiZNaFR+vLqsoXg0IcA VzqH7g/ZKZFD04BllRFDoqjrzExiXQ5cAUzbcpkS0G1pvUfyGD9q3fgcUJFCizkRGaM4 z0pIqhRZuz6PXECSi6DmAK+5wpu4UY5EEwLIYGIWOXBd+ohPCMHDWkXutP4WdYtktI2t XU6iFOQQhFHjpz2cKvH1OCpd7eck7SaKBb8WxTCqLnPtvwmNpFTOW0nLWmAWNHukIOFC /7zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iK7UzpSlxDs8Ee0KtUe+4eiiE9PRPKVrwNNuTr/sBW8=; b=mG0sB119Guyzdkj3+M2xc2yM6dR/1PpqU6V96zg+oCQeqhfyK4V/DG6iLJgqE+c0oO bDAveTLtj8+aoarjLUcrsZ0WlEsUUXOOlegb/YLylPq69V79wJ8IDK2r3Dft9tKCRJdr 3Azk0DPk1JFQv7ZrU1vKVxrzrXR4XJvt6wEWHDoU2qHVr47Jpx7weXpDTNCm4mEAYEtB hrzrjQxvxiJO/UJ2t0nSHYDXx58hvYUJJt6W+jV/TDZFLEGneYvw0t+sil8GF5xld3BN vZ6gXaPFSygAOGmfHAt45jFmQ0qe0me9SQpzHcuteCcOwJtZ7Jcq9bPLKck7I8yBs4To GEpg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b8si8301036eju.351.2019.10.01.01.32.47; Tue, 01 Oct 2019 01:33:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733069AbfJAIcR (ORCPT + 99 others); Tue, 1 Oct 2019 04:32:17 -0400 Received: from hermes.aosc.io ([199.195.250.187]:51778 "EHLO hermes.aosc.io" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727361AbfJAIcR (ORCPT ); Tue, 1 Oct 2019 04:32:17 -0400 Received: from localhost (localhost [127.0.0.1]) (Authenticated sender: icenowy@aosc.io) by hermes.aosc.io (Postfix) with ESMTPSA id 5342182B0F; Tue, 1 Oct 2019 08:32:12 +0000 (UTC) From: Icenowy Zheng To: "David S . Miller" , Rob Herring , Mark Rutland , Maxime Ripard , Chen-Yu Tsai , Andrew Lunn , Florian Fainelli , Heiner Kallweit Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, Icenowy Zheng Subject: [PATCH 2/3] net: phy: realtek: add config hack for broken RTL8211E on Pine64+ boards Date: Tue, 1 Oct 2019 16:29:11 +0800 Message-Id: <20191001082912.12905-3-icenowy@aosc.io> In-Reply-To: <20191001082912.12905-1-icenowy@aosc.io> References: <20191001082912.12905-1-icenowy@aosc.io> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some RTL8211E chips have broken GbE function, which needs a hack to fix. Currently only some Pine64+ boards are known to used this broken batch of RTL8211E chips. Enable this hack when a certain device tree property is set. As this hack is not documented on the datasheet at all, it contains magic numbers, and could not be revealed. These magic numbers are received from Realtek via Pine64. Signed-off-by: Icenowy Zheng --- drivers/net/phy/realtek.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c index 677c45985338..f696f2085368 100644 --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c @@ -9,6 +9,7 @@ * Copyright (c) 2004 Freescale Semiconductor, Inc. */ #include +#include #include #include @@ -32,6 +33,12 @@ #define RTL8211E_TX_DELAY BIT(1) #define RTL8211E_RX_DELAY BIT(2) #define RTL8211E_MODE_MII_GMII BIT(3) +/* The following number resides in the same register with + * the delay bits and mode bit above. However, no known + * document can explain this, and this value is directly + * received from Realtek via Pine64. + */ +#define RTL8211E_CONF_MAGIC_PINE64 0xb400 #define RTL8201F_ISR 0x1e #define RTL8201F_IER 0x13 @@ -196,6 +203,7 @@ static int rtl8211e_config_init(struct phy_device *phydev) { int ret = 0, oldpage; u16 val; + struct device_node *of_node = phydev->mdio.dev.of_node; /* enable TX/RX delay for rgmii-* modes, and disable them for rgmii. */ switch (phydev->interface) { @@ -234,6 +242,12 @@ static int rtl8211e_config_init(struct phy_device *phydev) ret = __phy_modify(phydev, 0x1c, RTL8211E_TX_DELAY | RTL8211E_RX_DELAY, val); + if (of_node && + of_property_read_bool(of_node, "realtek,config-magic-for-pine64")) { + ret = __phy_modify(phydev, 0x1c, GENMASK(15, 8), + RTL8211E_CONF_MAGIC_PINE64); + } + err_restore_page: return phy_restore_page(phydev, oldpage, ret); } -- 2.21.0