From patchwork Wed Aug 28 20:24:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154834 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="W3V3DXPt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Jcm72wGXz9sDB for ; Thu, 29 Aug 2019 06:29:27 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726863AbfH1U30 (ORCPT ); Wed, 28 Aug 2019 16:29:26 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:37324 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726315AbfH1U30 (ORCPT ); Wed, 28 Aug 2019 16:29:26 -0400 Received: by mail-wr1-f68.google.com with SMTP id z11so1118532wrt.4 for ; Wed, 28 Aug 2019 13:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=AOgz7Tb91jUSRfZhoxyhI620yzpgzcGdmZwJVxUTKMQ=; b=W3V3DXPtbO4dqOvUrsKDbn/cmoUu6eMQtYyMaBwVhg5sQ5Tu3vikqlFJCA4ep0Cb6g QFHnpBT2Olr9XNO+6HJk9HDsUYt4LL3RkZ+/EVs+8tMOmqpuDeGC1SJN9rU318cQFnsm UakHxOn5g1m7wtZGYTGEXcud6bLOcZSP1tlxyLmfjI7XEEIn2hUY/YM3btlfb7PxQ9L8 m0QVbpLcQ7+8DzfKoUVagp1FqqH6HdgFyFBXeq0KGK9gXdRPmBOjxU4+xCHO+NA0LKs8 auNisfN03nlaepzTvNxR3cEiYJ2EG/Uk/o3o3JtrPHEnwX9aHB3Md/jZ/zU6Fi1PytJd wHmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=AOgz7Tb91jUSRfZhoxyhI620yzpgzcGdmZwJVxUTKMQ=; b=ZjFnTkOyoHz+3VIaHS+tuFPgvIC0nIHFelGPLYVNFuw7j+hrzNdV2IpjcXdVETwAsk ZNh9ulPjLFtXiG9vyIqjylsvBKhSPmAzRP2zNQf8RnZOkUg/KUbV7LJg/YrJY6IZu9kl yl/rmwBGI3AVJvwKcyx6z96S1XRmQN9hs7i10wkLeDp/7ntyGGcvmYNAp10lj0F0I55E EMw0T+/WOPUvhlO15r4WvDBbfKsol0rE4aVIUWuKN36nBdXEbSq3bxNjAARKy9V9NlKt wC7RKN4P6eucEvq1T/2qkeCscbW3jaMRJaIs0wZhmRohvvNUcHxVitAOjOGvHBeXXXcJ TbeQ== X-Gm-Message-State: APjAAAUKhzrkCrXAMPUA+YcqIXtPqBoNzvI89zbcNfTAMi0mL9ReXvdO TA/52ZhAoYu0DOxIT4vZ6BLzlI7k X-Google-Smtp-Source: APXvYqwkuEumwDm/HIorMDEGHnDVvPWACpE7vWKlHwQCrLgjtkwAVBe6lo3csaWu6JHxK+juUA8J5g== X-Received: by 2002:adf:a1c4:: with SMTP id v4mr6755785wrv.108.1567024163681; Wed, 28 Aug 2019 13:29:23 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id j17sm183586wru.24.2019.08.28.13.29.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:23 -0700 (PDT) Subject: [PATCH net-next v2 1/9] r8169: change interrupt mask type to u32 From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: <56f1823d-e0c0-f54d-978e-c2430b964339@gmail.com> Date: Wed, 28 Aug 2019 22:24:13 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RTL8125 uses a 32 bit interrupt mask even though only bits in the lower 16 bits are used. Change interrupt mask size to u32 to be prepared and reintroduce helper rtl_get_events. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index faa4041cf..bf00c3d8f 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -645,7 +645,7 @@ struct rtl8169_private { struct page *Rx_databuff[NUM_RX_DESC]; /* Rx data buffers */ struct ring_info tx_skb[NUM_TX_DESC]; /* Tx data buffers */ u16 cp_cmd; - u16 irq_mask; + u32 irq_mask; struct clk *clk; struct { @@ -1313,7 +1313,12 @@ static u8 rtl8168d_efuse_read(struct rtl8169_private *tp, int reg_addr) RTL_R32(tp, EFUSEAR) & EFUSEAR_DATA_MASK : ~0; } -static void rtl_ack_events(struct rtl8169_private *tp, u16 bits) +static u32 rtl_get_events(struct rtl8169_private *tp) +{ + return RTL_R16(tp, IntrStatus); +} + +static void rtl_ack_events(struct rtl8169_private *tp, u32 bits) { RTL_W16(tp, IntrStatus, bits); } @@ -1337,7 +1342,7 @@ static void rtl_irq_enable(struct rtl8169_private *tp) static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp) { rtl_irq_disable(tp); - rtl_ack_events(tp, 0xffff); + rtl_ack_events(tp, 0xffffffff); /* PCI commit */ RTL_R8(tp, ChipCmd); } @@ -5854,9 +5859,10 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance) { struct rtl8169_private *tp = dev_instance; - u16 status = RTL_R16(tp, IntrStatus); + u32 status = rtl_get_events(tp); - if (!tp->irq_enabled || status == 0xffff || !(status & tp->irq_mask)) + if (!tp->irq_enabled || (status & 0xffff) == 0xffff || + !(status & tp->irq_mask)) return IRQ_NONE; if (unlikely(status & SYSErr)) { From patchwork Wed Aug 28 20:24:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154836 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="PpOChrVD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Jcm90cZLz9sMr for ; Thu, 29 Aug 2019 06:29:29 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726992AbfH1U32 (ORCPT ); Wed, 28 Aug 2019 16:29:28 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:36193 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726617AbfH1U30 (ORCPT ); Wed, 28 Aug 2019 16:29:26 -0400 Received: by mail-wr1-f65.google.com with SMTP id y19so1127043wrd.3 for ; Wed, 28 Aug 2019 13:29:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=mP0oWuvYIIai4oGQm0JXIEO1a6KCIGfpdj9/FpSZJUk=; b=PpOChrVDOzp/mWn+9faGVH8jY+RaLdKoSXuFHrTKeOwXnkJL502k5Qk3CotnCqObkA 6lwPbuEqv/2lRaCPoe8Bu4jIjnXUPPwV5EEQxqa7xXpm2Y1zlsMNcQr30R+YHlAEEVw4 oWKR+jOSLTdhQg1gUvT2DqBoqJV+zsBkFsAoagrR7Z4SHwCx4nkXMMEergVxkmy/iGdb RXNgxYf8W+y4xHx4FOK6gmCUr9zzsfwrqp0cLYK6JfePPWoW1U5/1WNrPSD2iXVHNQz8 cWcnlUHl7rsuzNAdbtOJ6VNyeXx/0/CCPLu3MKdS5JKXkT3eJiEM3lS7RbvQw4ysg8JF ggLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=mP0oWuvYIIai4oGQm0JXIEO1a6KCIGfpdj9/FpSZJUk=; b=Vt/hwd62tm4cOMWr1+TjjihcGelb0pz66RwjR+b/sGgRiqPwksehbD0ISDKIo/jBk2 IsvrkPTvprSiAeW/lpYfrdibbwh+SL4K5/NOO85/PGa/fwQWgdmEGIh8G8NmojJaCSJ1 idRoPmBZZpsegWCVrqX8qMymXGKsPfKZV5qJkVpTtomgHm/VmyfEIMZih0tIic48bYGl 9+1wvvFfJFIXX2uDjxBpLi1thC8maeTMK/z08GLKRCdjT+D8ebB8wicZMaTBYTaVwDNY sX/d+NHgZ6Ubo9niyv10UTitiqMbXg7cRO6QWKK5RDhHT4ScOaGkVES39UQ3cMDQ15XW Qf9g== X-Gm-Message-State: APjAAAXZLp7a8ZsX8ccWPzph2Fp5rUeKmjsQBW3meRes/k0B+Ussd3hJ rFw0NuGniblMTqIhhBBqOHs= X-Google-Smtp-Source: APXvYqzVO2S/47elQdtSvpQMs1CaVZjwQJtxNO6YZmEvlY2WSEUUIcRvoOAzzHqXpeok4kDfEk+mTw== X-Received: by 2002:adf:f1cc:: with SMTP id z12mr6852385wro.125.1567024164994; Wed, 28 Aug 2019 13:29:24 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id m23sm503776wml.41.2019.08.28.13.29.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:24 -0700 (PDT) Subject: [PATCH net-next v2 2/9] r8169: restrict rtl_is_8168evl_up to RTL8168 chip versions From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: <06dccc41-712f-0eec-3304-8f82c296aa4b@gmail.com> Date: Wed, 28 Aug 2019 22:24:54 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Extend helper rtl_is_8168evl_up to properly work once we add mac version numbers >51 for RTL8125. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index bf00c3d8f..e9d900c11 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -730,7 +730,8 @@ static void rtl_tx_performance_tweak(struct rtl8169_private *tp, u16 force) static bool rtl_is_8168evl_up(struct rtl8169_private *tp) { return tp->mac_version >= RTL_GIGA_MAC_VER_34 && - tp->mac_version != RTL_GIGA_MAC_VER_39; + tp->mac_version != RTL_GIGA_MAC_VER_39 && + tp->mac_version <= RTL_GIGA_MAC_VER_51; } static bool rtl_supports_eee(struct rtl8169_private *tp) From patchwork Wed Aug 28 20:25:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154842 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="mIXs+hVj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46JcmP4Zgnz9sML for ; Thu, 29 Aug 2019 06:29:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727131AbfH1U33 (ORCPT ); Wed, 28 Aug 2019 16:29:29 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:35710 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726315AbfH1U32 (ORCPT ); Wed, 28 Aug 2019 16:29:28 -0400 Received: by mail-wm1-f68.google.com with SMTP id l2so1452005wmg.0 for ; Wed, 28 Aug 2019 13:29:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=8Rv4AAo8R3kQnDh7ur1n9pm4iYI4Aizo/u0DQ/4aK4I=; b=mIXs+hVjNbofK7/NLU2XzEBf+P+Y9unYciCA8yWX2/qrbDPyDKaryrGij79qWQrtkn OLT8gL4SSuvrzPHDAd7om4xw1nwAM18M/qbW/8YB9IYQaS0wEbwSvYwIbqYRXrSeEdMT xpvFHz3baERUq/HpFmG+uqpeXLWgl1I5RBSiv2Z4y8lfoOKSGz3Mozr/HXawDBFU+fT7 9ioc7fbtljp7JeOf0aLR59NHHngsRXDLCS80luJD7az/ITPC8KPg3g1FVWcYmwIZ0t6M Qyf/BaOPvaKHb9VaucAUiBolmHp9xl6IiXs4kLFvQ3peSuFYLDnhbB3LU8GgBV9oRrT5 dbnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=8Rv4AAo8R3kQnDh7ur1n9pm4iYI4Aizo/u0DQ/4aK4I=; b=GkVFtlgFTnWD//TxxEWUtKt5cruyZKpcUHeYEnUQ7+/bsLgUxo+BC5w9WtvxRMQXk9 yX1uUw6chcOYtGxI0CZ/5GtgCiafof+5EkeboZEMhpQY/dA+ogI9LdJLrg6hVx+K0Les //3BjmatSeZXc6Kw7/Zo/kDEOYLfpgcIGu4e8U5BogF/Yh8Y7KCP94WSEl8CTxD4/daC eYuVQziI5ZiCW6p6i/xjFGXBFFA2dv2w6r99+qtPA8yqnpEov75fmX4cZW/Qx2NkDUwQ X+tAf4uxAgIqKPw8UsZJPQQhZXhJKbqlGpSrK+MtbqkNgQ+EE+3qW/IATmbA09iDw49Q f0SQ== X-Gm-Message-State: APjAAAXq++agn/Ad+M8lK1/GMy8J5qRJ99etkhgs658skAvV5Bck+n4d OJ59hJyqLslD5O97Ofk0ENckawit X-Google-Smtp-Source: APXvYqyzQ0lea2I6D53lt2x4cNZ7GIp4zJvsf1jW8pKFpF9gcCEuxfXQg/YiXekyWR84klKP3uT0MQ== X-Received: by 2002:a1c:4d05:: with SMTP id o5mr6980496wmh.63.1567024166187; Wed, 28 Aug 2019 13:29:26 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id w13sm428824wre.44.2019.08.28.13.29.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:25 -0700 (PDT) Subject: [PATCH net-next v2 3/9] r8169: factor out reading MAC address from registers From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: <48558933-b4f0-7d4a-b61d-103b76f013b6@gmail.com> Date: Wed, 28 Aug 2019 22:25:32 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For RTL8125 we will have to read the MAC address also from another register range, therefore create a small helper. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index e9d900c11..7d89826cb 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -741,6 +741,14 @@ static bool rtl_supports_eee(struct rtl8169_private *tp) tp->mac_version != RTL_GIGA_MAC_VER_39; } +static void rtl_read_mac_from_reg(struct rtl8169_private *tp, u8 *mac, int reg) +{ + int i; + + for (i = 0; i < ETH_ALEN; i++) + mac[i] = RTL_R8(tp, reg + i); +} + struct rtl_cond { bool (*check)(struct rtl8169_private *); const char *msg; @@ -6630,7 +6638,7 @@ static void rtl_init_mac_address(struct rtl8169_private *tp) { struct net_device *dev = tp->dev; u8 *mac_addr = dev->dev_addr; - int rc, i; + int rc; rc = eth_platform_get_mac_address(tp_to_dev(tp), mac_addr); if (!rc) @@ -6640,8 +6648,7 @@ static void rtl_init_mac_address(struct rtl8169_private *tp) if (is_valid_ether_addr(mac_addr)) goto done; - for (i = 0; i < ETH_ALEN; i++) - mac_addr[i] = RTL_R8(tp, MAC0 + i); + rtl_read_mac_from_reg(tp, mac_addr, MAC0); if (is_valid_ether_addr(mac_addr)) goto done; From patchwork Wed Aug 28 20:26:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154843 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="mwkoHb96"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46JcmS1Rzwz9sDB for ; Thu, 29 Aug 2019 06:29:44 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727233AbfH1U3n (ORCPT ); Wed, 28 Aug 2019 16:29:43 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:36198 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726961AbfH1U33 (ORCPT ); Wed, 28 Aug 2019 16:29:29 -0400 Received: by mail-wr1-f67.google.com with SMTP id y19so1127162wrd.3 for ; Wed, 28 Aug 2019 13:29:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=SH09Ek+ColuRMDrFrC/atuCbkMFA4SeE1Yb2H1oDIuA=; b=mwkoHb96FW0pCFPmZZqmNMNfEqVIbxQlmqVh+aYjr+CxIqcsofYVOkwiz/+GGTIR3X ZlL/xT+rtUShBleCYYjPmDsETliTugMbodp6F8WTX5/U3Mq9I4J1GxtuuO8dqqZ56ABL zrXlXTZ4yjbWwHfxYNlE3q3fPPFc0muf0PWUecPF6TXc974PrbGPx3Z82ZhZt2vWTArz E+ERZtwiaor5dQkgTsMNVurZwNbdm622Lv8WiK1YYCGolS1C7EpIrTtPP6JmZlWegIKA +WXnHgtob1YRs/RTpetLpo4o9BN4uPVG2loJ3O8GERpJeVKa1UKP6gSCd3OgptSMz/9+ dCOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=SH09Ek+ColuRMDrFrC/atuCbkMFA4SeE1Yb2H1oDIuA=; b=qTzaTgrzi+lWjZNQeXZPSjThtVXB9wWftAS0wtschmCrXQu73zLGY3OCk2u498PhdC uyc7qHicsiJEmi1hE+msIrRvj/RDpZFcWkiDcYxQRXviclm0aRKIYp+pNw5oJE6O2l4Y pQg+JdQO1ooj2a0122SZJE0by7T/9VKJNSRO26BrT6u0Y4ltANhCMVcwlr9kG8ISUA0p tT+S9Iipf0/3xUyDSsoaHdP0jtB5wXQBE9REm0zie5FldT4EpmZIgXMRQXG4uXH0VYzr 8UIfnJyXIizU6/ZxTCZ0IBK8Aq70ZI6cEzjL1UNryXO1mnLbRAo+OM/RJLNl/Hi1ng9r nyCg== X-Gm-Message-State: APjAAAWLp9bemvAY1meAb8DMahoxI9wz9bdZWNVWBmr/DOC4QnbhxO5m rXSeNly8oSQNP0yya3h5lIM= X-Google-Smtp-Source: APXvYqwKq6nmyWUq87jwkQ7d39ZiK4KO7bm1Eilyg/7qgg/+w3UxmZQdHx4X1LTCyL1CP56yRQB2SQ== X-Received: by 2002:adf:8b13:: with SMTP id n19mr6516825wra.203.1567024167391; Wed, 28 Aug 2019 13:29:27 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id b18sm389457wro.34.2019.08.28.13.29.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:26 -0700 (PDT) Subject: [PATCH net-next v2 4/9] r8169: move disabling interrupt coalescing to RTL8169/RTL8168 init From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: Date: Wed, 28 Aug 2019 22:26:13 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RTL8125 doesn't support the same coalescing registers, therefore move this initialization to the 8168/6169-specific init. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 7d89826cb..dc799528f 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -5087,6 +5087,9 @@ static void rtl_hw_start_8168(struct rtl8169_private *tp) RTL_W8(tp, MaxTxPacketSize, TxPacketMax); rtl_hw_config(tp); + + /* disable interrupt coalescing */ + RTL_W16(tp, IntrMitigate, 0x0000); } static void rtl_hw_start_8169(struct rtl8169_private *tp) @@ -5110,6 +5113,9 @@ static void rtl_hw_start_8169(struct rtl8169_private *tp) rtl8169_set_magic_reg(tp, tp->mac_version); RTL_W32(tp, RxMissed, 0); + + /* disable interrupt coalescing */ + RTL_W16(tp, IntrMitigate, 0x0000); } static void rtl_hw_start(struct rtl8169_private *tp) @@ -5128,8 +5134,6 @@ static void rtl_hw_start(struct rtl8169_private *tp) rtl_set_rx_tx_desc_registers(tp); rtl_lock_config_regs(tp); - /* disable interrupt coalescing */ - RTL_W16(tp, IntrMitigate, 0x0000); /* Initially a 10 us delay. Turned it into a PCI commit. - FR */ RTL_R8(tp, IntrMask); RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb); From patchwork Wed Aug 28 20:26:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154837 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="bAT8PR9l"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46JcmC69Bpz9sML for ; Thu, 29 Aug 2019 06:29:31 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726982AbfH1U3b (ORCPT ); Wed, 28 Aug 2019 16:29:31 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:41372 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727138AbfH1U33 (ORCPT ); Wed, 28 Aug 2019 16:29:29 -0400 Received: by mail-wr1-f65.google.com with SMTP id j16so1090934wrr.8 for ; Wed, 28 Aug 2019 13:29:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=B9KRSV3Ie7zDC6ctyCzWFy91B1UvsfnDrO3NodMbSCw=; b=bAT8PR9ljIpd5hN6rrZWdSunAU1IoEJ27rZh5hvRMS23UWO1LBXRSRcibX2dyWoYh+ 6hOjksFjb1PfRX7UqpKYo1t04LWJkLjwuEIdPbbhAocAz5hqLGuJHr3OPO3jv0Itlp3a YW6b2mLdqLfijODnYmdqWSoNWyBfQrVvAy6aUWUpFzDwiZuX1AejiBWUQ7HnJ5D/XK6Z weUHK5fje4p0y5kMXXY2zSH8+R88gzp6kBfA6xNiKK1xFGausQuatIpre3FBvv+k2J2b 2RdHfLb3XGTeZ2DkcMdXdLvvV2NyZdPqsnrZ2SBFVadMkafH607CTGn45K5N/D7RkCtv 5B3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=B9KRSV3Ie7zDC6ctyCzWFy91B1UvsfnDrO3NodMbSCw=; b=nATUHlEc4Vcnzpi7MNXr2EE5zLg2kguTLQumJBuSu5PgrMaE3g431TbI6Wo+0r/Q1U A73JVelpt5NDbbdD8jJbtnb+4oRb6nZRRbXo6uBkW1cyTxG0dXpvqXY1/C5tmJRSy1Yd lfmqQf40FGU9YM6Ue6C/jK0IHtGvgk189DUNOCspjkmzd0p51jF1hvT2TS9nBeRneqoc yi9Qbi6KDBn3JdJK4x2i80xdpug/oJfULS/OyRAlyzmN3zQPib1EuD0bHgnDbjehuJ2Y SDkT51HYRJ63bjalnfDrJ3blciuDSYS4WLKndIKJHnHy5RXqJIs2pULKqQKLfiYPINr8 Ul+Q== X-Gm-Message-State: APjAAAWo/iUxYG6uST0jNokl5k6uYNF6RBBZv28S7KmyjOVic9fP3fQA VH56HSaQCa4E5xYKESMP6pw= X-Google-Smtp-Source: APXvYqyqlWt0g0muh8vHFGGSUDAub8LucVoCegKrqCm3s3o0cZELVy1k0ffE7OWeN9QE5yuYit5X/Q== X-Received: by 2002:adf:c594:: with SMTP id m20mr7423574wrg.126.1567024168588; Wed, 28 Aug 2019 13:29:28 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id y3sm4052649wmg.2.2019.08.28.13.29.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:28 -0700 (PDT) Subject: [PATCH net-next v2 5/9] r8169: read common register for PCI commit From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: Date: Wed, 28 Aug 2019 22:26:51 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RTL8125 uses a different register number for IntrMask. To net have side effects by reading a random register let's use a register that is the same on all supported chip families. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index dc799528f..652bacf62 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -5135,7 +5135,7 @@ static void rtl_hw_start(struct rtl8169_private *tp) rtl_lock_config_regs(tp); /* Initially a 10 us delay. Turned it into a PCI commit. - FR */ - RTL_R8(tp, IntrMask); + RTL_R16(tp, CPlusCmd); RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb); rtl_init_rxcfg(tp); rtl_set_tx_config_registers(tp); From patchwork Wed Aug 28 20:27:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154838 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="G1COOZCh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46JcmH46tJz9sML for ; Thu, 29 Aug 2019 06:29:35 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727189AbfH1U3d (ORCPT ); Wed, 28 Aug 2019 16:29:33 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:35725 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727164AbfH1U3b (ORCPT ); Wed, 28 Aug 2019 16:29:31 -0400 Received: by mail-wm1-f66.google.com with SMTP id l2so1452206wmg.0 for ; Wed, 28 Aug 2019 13:29:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=EbXh4ddYz6TARFMi2XUURwqh1TgZvehKpIM9ZBR2Ftw=; b=G1COOZChGgzyq7K1tYlynzI86JZZk6+B9qPuFvld26F45N2zbcAOSoC+0w+iJ3IFjc XV+lfJaAtDgTiJrJWR1KgA+i6iSMo2IYLzlwt5V5vEvjdqb1Zc+qrUVwdu4W+877NWbO poptnYTieQE3Rx0GitQPbsVRL8iHN3d/myIKMrusxMw2lIcPfG67yU9QQWKkfEGeYcJ5 zUbk6pBKAfsproTggS9SKr8FYzGcl7JCwd0lIHUQ6dNzz6jecPbSAmnJX/mZG+eUQtJK LY/vH0xjUsLmq/RkQz+9vbs8peH97NyH1K0AJ+hKjv09kYIJK3mRVa3QiVyCogDUUlis z8MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=EbXh4ddYz6TARFMi2XUURwqh1TgZvehKpIM9ZBR2Ftw=; b=iFnnii9431ul2lHIT+TqkQQpjp3Wn6nWBj/alDJU5zDEkxvqg7BkZxNygSlUP8LVjc dKgGdtnhs4O4g3aP4uM8deS9/wEExHsZAW4h+U7Efllc5kIuGdDsserMYhj8ojG5srkh ePRJDObyRMI1Q9Gj/NofDYSPlRS3fceeCaDyg6kOKpaKwHlSItJv/OESif8Gl4VMACX1 TIiRDTeZ8p0iqcOuAAZz4KQ9u++ZUU/aHTjAujRHPnRv9ES61Em4/2rVtQhc/2Fp5xAF 6xCscgbq0pI2tnMVRZnWgXi7SI4WmgZ4jcny1WUogVf3dZTpCmZ1hrK0vQagDkXPTVSr rWrQ== X-Gm-Message-State: APjAAAWTWuQuKYWH37wPjSIZ4yakzTDt38yAH0SnkNig68mInj0n8tja HFmpy+V9n9rDiAt9peNY9Nw= X-Google-Smtp-Source: APXvYqx1N/+wIryb39zTG2hDS6wo04re+9ZCc5jTvvQDnOGIYEJHfGJdbk0M3/rpkEthpGEfv0wh7Q== X-Received: by 2002:a1c:9950:: with SMTP id b77mr7332956wme.46.1567024169782; Wed, 28 Aug 2019 13:29:29 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id w8sm10906209wmc.1.2019.08.28.13.29.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:29 -0700 (PDT) Subject: [PATCH net-next v2 6/9] r8169: don't use bit LastFrag in tx descriptor after send From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: <5b4c94bf-4571-7b36-1d83-c169980a6867@gmail.com> Date: Wed, 28 Aug 2019 22:27:30 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On RTL8125 this bit is always cleared after send. Therefore check for tx_skb->skb being set what is functionally equivalent. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 652bacf62..4489cd9f2 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -5713,7 +5713,7 @@ static void rtl_tx(struct net_device *dev, struct rtl8169_private *tp, rtl8169_unmap_tx_skb(tp_to_dev(tp), tx_skb, tp->TxDescArray + entry); - if (status & LastFrag) { + if (tx_skb->skb) { pkts_compl++; bytes_compl += tx_skb->skb->len; napi_consume_skb(tx_skb->skb, budget); From patchwork Wed Aug 28 20:28:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154839 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="ZmlR0Tnp"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46JcmJ6Q9Nz9sMr for ; Thu, 29 Aug 2019 06:29:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727205AbfH1U3f (ORCPT ); Wed, 28 Aug 2019 16:29:35 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:40640 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727179AbfH1U3e (ORCPT ); Wed, 28 Aug 2019 16:29:34 -0400 Received: by mail-wr1-f68.google.com with SMTP id c3so1103387wrd.7 for ; Wed, 28 Aug 2019 13:29:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=FCsM4eiq4nnr15cZS0T9CEdwdsOBmsmuabQUwpGZKHk=; b=ZmlR0Tnp2ukKKodGoQSjTWTpoqhEbsapXUe0XRBTtSJloAl+xY6cCvlOTHUJxOVCeL zvUmkKO+2J2TkLhxnOn9hFfQsLGmUdi+7Zk5mEZpcRAKZNUTfhO0BsfUjNnPCQXfIM2p E7AlyPRO2XePy0J7OvwiF1hGSvKCDxjGIGHfCoAfIoqRpcry2k2q+gmpKPPeEQh8ZOmy fH18QP+KRNlsWYJohwxvqFxsIR7oXuwagrZf+VNMVKI+1nN1SkRus/YfIhmP45KzGNdO xuCbQlTUPf0uyGXrYLYOpfRXCBbPSHymAEpjUtUL6JFLxNQVOfZih8IdAeeyvsr9lP1r RMFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=FCsM4eiq4nnr15cZS0T9CEdwdsOBmsmuabQUwpGZKHk=; b=ar52VekPqBQAr9BJwNnlKFJcMtB1bYr0BSEiXT1yyDCtybeycImIX18nSCAoPY6VGZ 5TnXgH//l9MM2V5uN/E14RwIP1Y7FAysim9rvz7Z0ghh4NZ0FgMZ7H/UOnn70dEpIFkM rEUM0UIive1GkpaYaaceBGZr6uQaoMgdXYOF0JCAXVwMXiyqj0FSwcLPmorAPEAZRMVt E7rtbMx6Mq5+XoApqxqn202cj7NHOCm2FMmMZ4RCccqoPLlVEvnp5TnWM30j3XViGgzB 0Y6D1o+3cYf5oZC7vnTlM7joL2yim9DRa24IEdJKFMVyOSsvtuquRSAbVFfAGrk/+g11 61ig== X-Gm-Message-State: APjAAAXTREAurR/lKI8WzPccnZ/Xu/DyOTjuEPm1393ks+QalWa8LBq6 M+q67cbFfdaHEf/aa8hTj7Y= X-Google-Smtp-Source: APXvYqz6E+A0liSRJDCjzDzBH9aoWtmoaE80YnshcCFeH+np7EG45gT8+cmd6Iwp4FvyrrVmBq4oHQ== X-Received: by 2002:adf:db49:: with SMTP id f9mr7035331wrj.112.1567024171038; Wed, 28 Aug 2019 13:29:31 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id j15sm172443wrn.70.2019.08.28.13.29.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:30 -0700 (PDT) Subject: [PATCH net-next v2 7/9] r8169: add support for RTL8125 From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: Date: Wed, 28 Aug 2019 22:28:03 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This adds support for 2.5Gbps chip RTL8125, it's partially based on the r8125 vendor driver. Tested with a Delock 89531 PCIe card against a Netgear GS110MX Multi-Gig switch. Firmware isn't strictly needed, but on some systems there may be compatibility issues w/o firmware. Firmware has been submitted to linux-firmware. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/Kconfig | 9 +- drivers/net/ethernet/realtek/r8169_main.c | 274 ++++++++++++++++++++-- 2 files changed, 265 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/realtek/Kconfig b/drivers/net/ethernet/realtek/Kconfig index b18e7a91d..5e0b9d2f1 100644 --- a/drivers/net/ethernet/realtek/Kconfig +++ b/drivers/net/ethernet/realtek/Kconfig @@ -96,14 +96,19 @@ config 8139_OLD_RX_RESET old RX-reset behavior. If unsure, say N. config R8169 - tristate "Realtek 8169 gigabit ethernet support" + tristate "Realtek 8169/8168/8101/8125 ethernet support" depends on PCI select FW_LOADER select CRC32 select PHYLIB select REALTEK_PHY ---help--- - Say Y here if you have a Realtek 8169 PCI Gigabit Ethernet adapter. + Say Y here if you have a Realtek Ethernet adapter belonging to + the following families: + RTL8169 Gigabit Ethernet + RTL8168 Gigabit Ethernet + RTL8101 Fast Ethernet + RTL8125 2.5GBit Ethernet To compile this driver as a module, choose M here: the module will be called r8169. This is recommended. diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 4489cd9f2..4d1779e39 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -135,6 +135,8 @@ enum mac_version { RTL_GIGA_MAC_VER_49, RTL_GIGA_MAC_VER_50, RTL_GIGA_MAC_VER_51, + RTL_GIGA_MAC_VER_60, + RTL_GIGA_MAC_VER_61, RTL_GIGA_MAC_NONE }; @@ -200,6 +202,8 @@ static const struct { [RTL_GIGA_MAC_VER_49] = {"RTL8168ep/8111ep" }, [RTL_GIGA_MAC_VER_50] = {"RTL8168ep/8111ep" }, [RTL_GIGA_MAC_VER_51] = {"RTL8168ep/8111ep" }, + [RTL_GIGA_MAC_VER_60] = {"RTL8125" }, + [RTL_GIGA_MAC_VER_61] = {"RTL8125" }, }; static const struct pci_device_id rtl8169_pci_tbl[] = { @@ -220,6 +224,8 @@ static const struct pci_device_id rtl8169_pci_tbl[] = { { PCI_VDEVICE(USR, 0x0116) }, { PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, 0x0024 }, { 0x0001, 0x8168, PCI_ANY_ID, 0x2410 }, + { PCI_VDEVICE(REALTEK, 0x8125) }, + { PCI_VDEVICE(REALTEK, 0x3000) }, {} }; @@ -384,6 +390,19 @@ enum rtl8168_registers { #define EARLY_TALLY_EN (1 << 16) }; +enum rtl8125_registers { + IntrMask_8125 = 0x38, + IntrStatus_8125 = 0x3c, + TxPoll_8125 = 0x90, + MAC0_BKP = 0x19e0, +}; + +#define RX_VLAN_INNER_8125 BIT(22) +#define RX_VLAN_OUTER_8125 BIT(23) +#define RX_VLAN_8125 (RX_VLAN_INNER_8125 | RX_VLAN_OUTER_8125) + +#define RX_FETCH_DFLT_8125 (8 << 27) + enum rtl_register_content { /* InterruptStatusBits */ SYSErr = 0x8000, @@ -727,6 +746,11 @@ static void rtl_tx_performance_tweak(struct rtl8169_private *tp, u16 force) PCI_EXP_DEVCTL_READRQ, force); } +static bool rtl_is_8125(struct rtl8169_private *tp) +{ + return tp->mac_version >= RTL_GIGA_MAC_VER_60; +} + static bool rtl_is_8168evl_up(struct rtl8169_private *tp) { return tp->mac_version >= RTL_GIGA_MAC_VER_34 && @@ -1023,7 +1047,7 @@ static void rtl_writephy(struct rtl8169_private *tp, int location, int val) case RTL_GIGA_MAC_VER_31: r8168dp_2_mdio_write(tp, location, val); break; - case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51: + case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61: r8168g_mdio_write(tp, location, val); break; default: @@ -1040,7 +1064,7 @@ static int rtl_readphy(struct rtl8169_private *tp, int location) case RTL_GIGA_MAC_VER_28: case RTL_GIGA_MAC_VER_31: return r8168dp_2_mdio_read(tp, location); - case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51: + case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61: return r8168g_mdio_read(tp, location); default: return r8169_mdio_read(tp, location); @@ -1324,17 +1348,26 @@ static u8 rtl8168d_efuse_read(struct rtl8169_private *tp, int reg_addr) static u32 rtl_get_events(struct rtl8169_private *tp) { - return RTL_R16(tp, IntrStatus); + if (rtl_is_8125(tp)) + return RTL_R32(tp, IntrStatus_8125); + else + return RTL_R16(tp, IntrStatus); } static void rtl_ack_events(struct rtl8169_private *tp, u32 bits) { - RTL_W16(tp, IntrStatus, bits); + if (rtl_is_8125(tp)) + RTL_W32(tp, IntrStatus_8125, bits); + else + RTL_W16(tp, IntrStatus, bits); } static void rtl_irq_disable(struct rtl8169_private *tp) { - RTL_W16(tp, IntrMask, 0); + if (rtl_is_8125(tp)) + RTL_W32(tp, IntrMask_8125, 0); + else + RTL_W16(tp, IntrMask, 0); tp->irq_enabled = 0; } @@ -1345,7 +1378,10 @@ static void rtl_irq_disable(struct rtl8169_private *tp) static void rtl_irq_enable(struct rtl8169_private *tp) { tp->irq_enabled = 1; - RTL_W16(tp, IntrMask, tp->irq_mask); + if (rtl_is_8125(tp)) + RTL_W32(tp, IntrMask_8125, tp->irq_mask); + else + RTL_W16(tp, IntrMask, tp->irq_mask); } static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp) @@ -1410,7 +1446,6 @@ static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts) { - unsigned int i, tmp; static const struct { u32 opt; u16 reg; @@ -1423,20 +1458,25 @@ static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts) { WAKE_ANY, Config5, LanWake }, { WAKE_MAGIC, Config3, MagicPacket } }; + unsigned int i, tmp = ARRAY_SIZE(cfg); u8 options; rtl_unlock_config_regs(tp); if (rtl_is_8168evl_up(tp)) { - tmp = ARRAY_SIZE(cfg) - 1; + tmp--; if (wolopts & WAKE_MAGIC) rtl_eri_set_bits(tp, 0x0dc, ERIAR_MASK_0100, MagicPacket_v2); else rtl_eri_clear_bits(tp, 0x0dc, ERIAR_MASK_0100, MagicPacket_v2); - } else { - tmp = ARRAY_SIZE(cfg); + } else if (rtl_is_8125(tp)) { + tmp--; + if (wolopts & WAKE_MAGIC) + r8168_mac_ocp_modify(tp, 0xc0b6, 0, BIT(0)); + else + r8168_mac_ocp_modify(tp, 0xc0b6, BIT(0), 0); } for (i = 0; i < tmp; i++) { @@ -1542,6 +1582,13 @@ static int rtl8169_set_features(struct net_device *dev, else rx_config &= ~(AcceptErr | AcceptRunt); + if (rtl_is_8125(tp)) { + if (features & NETIF_F_HW_VLAN_CTAG_RX) + rx_config |= RX_VLAN_8125; + else + rx_config &= ~RX_VLAN_8125; + } + RTL_W32(tp, RxConfig, rx_config); if (features & NETIF_F_RXCSUM) @@ -1549,10 +1596,12 @@ static int rtl8169_set_features(struct net_device *dev, else tp->cp_cmd &= ~RxChkSum; - if (features & NETIF_F_HW_VLAN_CTAG_RX) - tp->cp_cmd |= RxVlan; - else - tp->cp_cmd &= ~RxVlan; + if (!rtl_is_8125(tp)) { + if (features & NETIF_F_HW_VLAN_CTAG_RX) + tp->cp_cmd |= RxVlan; + else + tp->cp_cmd &= ~RxVlan; + } RTL_W16(tp, CPlusCmd, tp->cp_cmd); RTL_R16(tp, CPlusCmd); @@ -1851,6 +1900,9 @@ static int rtl_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) int i; u16 w; + if (rtl_is_8125(tp)) + return -EOPNOTSUPP; + memset(ec, 0, sizeof(*ec)); /* get rx/tx scale corresponding to current speed and CPlusCmd[0:1] */ @@ -1919,6 +1971,9 @@ static int rtl_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) u16 w = 0, cp01; int i; + if (rtl_is_8125(tp)) + return -EOPNOTSUPP; + scale = rtl_coalesce_choose_scale(dev, max(p[0].usecs, p[1].usecs) * 1000, &cp01); if (IS_ERR(scale)) @@ -2065,6 +2120,10 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp) u16 val; u16 mac_version; } mac_info[] = { + /* 8125 family. */ + { 0x7cf, 0x608, RTL_GIGA_MAC_VER_60 }, + { 0x7c8, 0x608, RTL_GIGA_MAC_VER_61 }, + /* 8168EP family. */ { 0x7cf, 0x502, RTL_GIGA_MAC_VER_51 }, { 0x7cf, 0x501, RTL_GIGA_MAC_VER_50 }, @@ -3615,6 +3674,8 @@ static void rtl_hw_phy_config(struct net_device *dev) [RTL_GIGA_MAC_VER_49] = rtl8168ep_1_hw_phy_config, [RTL_GIGA_MAC_VER_50] = rtl8168ep_2_hw_phy_config, [RTL_GIGA_MAC_VER_51] = rtl8168ep_2_hw_phy_config, + [RTL_GIGA_MAC_VER_60] = NULL, + [RTL_GIGA_MAC_VER_61] = NULL, }; struct rtl8169_private *tp = netdev_priv(dev); @@ -3742,6 +3803,8 @@ static void rtl_pll_power_down(struct rtl8169_private *tp) case RTL_GIGA_MAC_VER_48: case RTL_GIGA_MAC_VER_50: case RTL_GIGA_MAC_VER_51: + case RTL_GIGA_MAC_VER_60: + case RTL_GIGA_MAC_VER_61: RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~0x80); break; case RTL_GIGA_MAC_VER_40: @@ -3771,6 +3834,8 @@ static void rtl_pll_power_up(struct rtl8169_private *tp) case RTL_GIGA_MAC_VER_48: case RTL_GIGA_MAC_VER_50: case RTL_GIGA_MAC_VER_51: + case RTL_GIGA_MAC_VER_60: + case RTL_GIGA_MAC_VER_61: RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) | 0xc0); break; case RTL_GIGA_MAC_VER_40: @@ -3803,6 +3868,10 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp) case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51: RTL_W32(tp, RxConfig, RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST | RX_EARLY_OFF); break; + case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_61: + RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_VLAN_8125 | + RX_DMA_BURST); + break; default: RTL_W32(tp, RxConfig, RX128_INT_EN | RX_DMA_BURST); break; @@ -5020,6 +5089,126 @@ static void rtl_hw_start_8106(struct rtl8169_private *tp) rtl_hw_aspm_clkreq_enable(tp, true); } +DECLARE_RTL_COND(rtl_mac_ocp_e00e_cond) +{ + return r8168_mac_ocp_read(tp, 0xe00e) & BIT(13); +} + +static void rtl_hw_start_8125_common(struct rtl8169_private *tp) +{ + rtl_pcie_state_l2l3_disable(tp); + + RTL_W16(tp, 0x382, 0x221b); + RTL_W8(tp, 0x4500, 0); + RTL_W16(tp, 0x4800, 0); + + /* disable UPS */ + r8168_mac_ocp_modify(tp, 0xd40a, 0x0010, 0x0000); + + RTL_W8(tp, Config1, RTL_R8(tp, Config1) & ~0x10); + + r8168_mac_ocp_write(tp, 0xc140, 0xffff); + r8168_mac_ocp_write(tp, 0xc142, 0xffff); + + r8168_mac_ocp_modify(tp, 0xd3e2, 0x0fff, 0x03a9); + r8168_mac_ocp_modify(tp, 0xd3e4, 0x00ff, 0x0000); + r8168_mac_ocp_modify(tp, 0xe860, 0x0000, 0x0080); + + /* disable new tx descriptor format */ + r8168_mac_ocp_modify(tp, 0xeb58, 0x0001, 0x0000); + + r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0400); + r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0020); + r8168_mac_ocp_modify(tp, 0xc0b4, 0x0000, 0x000c); + r8168_mac_ocp_modify(tp, 0xeb6a, 0x00ff, 0x0033); + r8168_mac_ocp_modify(tp, 0xeb50, 0x03e0, 0x0040); + r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030); + r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000); + r8168_mac_ocp_modify(tp, 0xe0c0, 0x4f0f, 0x4403); + r8168_mac_ocp_modify(tp, 0xe052, 0x0080, 0x0067); + r8168_mac_ocp_modify(tp, 0xc0ac, 0x0080, 0x1f00); + r8168_mac_ocp_modify(tp, 0xd430, 0x0fff, 0x047f); + r8168_mac_ocp_modify(tp, 0xe84c, 0x0000, 0x00c0); + r8168_mac_ocp_modify(tp, 0xea1c, 0x0004, 0x0000); + r8168_mac_ocp_modify(tp, 0xeb54, 0x0000, 0x0001); + udelay(1); + r8168_mac_ocp_modify(tp, 0xeb54, 0x0001, 0x0000); + RTL_W16(tp, 0x1880, RTL_R16(tp, 0x1880) & ~0x0030); + + r8168_mac_ocp_write(tp, 0xe098, 0xc302); + + rtl_udelay_loop_wait_low(tp, &rtl_mac_ocp_e00e_cond, 1000, 10); + + RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~RXDV_GATED_EN); + udelay(10); +} + +static void rtl_hw_start_8125_1(struct rtl8169_private *tp) +{ + static const struct ephy_info e_info_8125_1[] = { + { 0x01, 0xffff, 0xa812 }, + { 0x09, 0xffff, 0x520c }, + { 0x04, 0xffff, 0xd000 }, + { 0x0d, 0xffff, 0xf702 }, + { 0x0a, 0xffff, 0x8653 }, + { 0x06, 0xffff, 0x001e }, + { 0x08, 0xffff, 0x3595 }, + { 0x20, 0xffff, 0x9455 }, + { 0x21, 0xffff, 0x99ff }, + { 0x02, 0xffff, 0x6046 }, + { 0x29, 0xffff, 0xfe00 }, + { 0x23, 0xffff, 0xab62 }, + + { 0x41, 0xffff, 0xa80c }, + { 0x49, 0xffff, 0x520c }, + { 0x44, 0xffff, 0xd000 }, + { 0x4d, 0xffff, 0xf702 }, + { 0x4a, 0xffff, 0x8653 }, + { 0x46, 0xffff, 0x001e }, + { 0x48, 0xffff, 0x3595 }, + { 0x60, 0xffff, 0x9455 }, + { 0x61, 0xffff, 0x99ff }, + { 0x42, 0xffff, 0x6046 }, + { 0x69, 0xffff, 0xfe00 }, + { 0x63, 0xffff, 0xab62 }, + }; + + rtl_set_def_aspm_entry_latency(tp); + + /* disable aspm and clock request before access ephy */ + rtl_hw_aspm_clkreq_enable(tp, false); + rtl_ephy_init(tp, e_info_8125_1); + + rtl_hw_start_8125_common(tp); +} + +static void rtl_hw_start_8125_2(struct rtl8169_private *tp) +{ + static const struct ephy_info e_info_8125_2[] = { + { 0x04, 0xffff, 0xd000 }, + { 0x0a, 0xffff, 0x8653 }, + { 0x23, 0xffff, 0xab66 }, + { 0x20, 0xffff, 0x9455 }, + { 0x21, 0xffff, 0x99ff }, + { 0x29, 0xffff, 0xfe04 }, + + { 0x44, 0xffff, 0xd000 }, + { 0x4a, 0xffff, 0x8653 }, + { 0x63, 0xffff, 0xab66 }, + { 0x60, 0xffff, 0x9455 }, + { 0x61, 0xffff, 0x99ff }, + { 0x69, 0xffff, 0xfe04 }, + }; + + rtl_set_def_aspm_entry_latency(tp); + + /* disable aspm and clock request before access ephy */ + rtl_hw_aspm_clkreq_enable(tp, false); + rtl_ephy_init(tp, e_info_8125_2); + + rtl_hw_start_8125_common(tp); +} + static void rtl_hw_config(struct rtl8169_private *tp) { static const rtl_generic_fct hw_configs[] = { @@ -5068,12 +5257,25 @@ static void rtl_hw_config(struct rtl8169_private *tp) [RTL_GIGA_MAC_VER_49] = rtl_hw_start_8168ep_1, [RTL_GIGA_MAC_VER_50] = rtl_hw_start_8168ep_2, [RTL_GIGA_MAC_VER_51] = rtl_hw_start_8168ep_3, + [RTL_GIGA_MAC_VER_60] = rtl_hw_start_8125_1, + [RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125_2, }; if (hw_configs[tp->mac_version]) hw_configs[tp->mac_version](tp); } +static void rtl_hw_start_8125(struct rtl8169_private *tp) +{ + int i; + + /* disable interrupt coalescing */ + for (i = 0xa00; i < 0xb00; i += 4) + RTL_W32(tp, i, 0); + + rtl_hw_config(tp); +} + static void rtl_hw_start_8168(struct rtl8169_private *tp) { if (tp->mac_version == RTL_GIGA_MAC_VER_13 || @@ -5127,6 +5329,8 @@ static void rtl_hw_start(struct rtl8169_private *tp) if (tp->mac_version <= RTL_GIGA_MAC_VER_06) rtl_hw_start_8169(tp); + else if (rtl_is_8125(tp)) + rtl_hw_start_8125(tp); else rtl_hw_start_8168(tp); @@ -5510,6 +5714,14 @@ static bool rtl_chip_supports_csum_v2(struct rtl8169_private *tp) } } +static void rtl8169_doorbell(struct rtl8169_private *tp) +{ + if (rtl_is_8125(tp)) + RTL_W16(tp, TxPoll_8125, BIT(0)); + else + RTL_W8(tp, TxPoll, NPQ); +} + static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev) { @@ -5589,7 +5801,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, } if (door_bell) - RTL_W8(tp, TxPoll, NPQ); + rtl8169_doorbell(tp); if (unlikely(stop_queue)) { /* Sync with rtl_tx: @@ -5751,7 +5963,7 @@ static void rtl_tx(struct net_device *dev, struct rtl8169_private *tp, * it is slow enough). -- FR */ if (tp->cur_tx != dirty_tx) - RTL_W8(tp, TxPoll, NPQ); + rtl8169_doorbell(tp); } } @@ -6473,6 +6685,8 @@ static void rtl_read_mac_address(struct rtl8169_private *tp, value = rtl_eri_read(tp, 0xe4); mac_addr[4] = (value >> 0) & 0xff; mac_addr[5] = (value >> 8) & 0xff; + } else if (rtl_is_8125(tp)) { + rtl_read_mac_from_reg(tp, mac_addr, MAC0_BKP); } } @@ -6570,6 +6784,31 @@ static void rtl_hw_init_8168g(struct rtl8169_private *tp) rtl_udelay_loop_wait_high(tp, &rtl_link_list_ready_cond, 100, 42); } +static void rtl_hw_init_8125(struct rtl8169_private *tp) +{ + tp->ocp_base = OCP_STD_PHY_BASE; + + RTL_W32(tp, MISC, RTL_R32(tp, MISC) | RXDV_GATED_EN); + + if (!rtl_udelay_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42)) + return; + + RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) & ~(CmdTxEnb | CmdRxEnb)); + msleep(1); + RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB); + + r8168_mac_ocp_modify(tp, 0xe8de, BIT(14), 0); + + if (!rtl_udelay_loop_wait_high(tp, &rtl_link_list_ready_cond, 100, 42)) + return; + + r8168_mac_ocp_write(tp, 0xc0aa, 0x07d0); + r8168_mac_ocp_write(tp, 0xc0a6, 0x0150); + r8168_mac_ocp_write(tp, 0xc01e, 0x5555); + + rtl_udelay_loop_wait_high(tp, &rtl_link_list_ready_cond, 100, 42); +} + static void rtl_hw_initialize(struct rtl8169_private *tp) { switch (tp->mac_version) { @@ -6579,6 +6818,9 @@ static void rtl_hw_initialize(struct rtl8169_private *tp) case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_48: rtl_hw_init_8168g(tp); break; + case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_61: + rtl_hw_init_8125(tp); + break; default: break; } From patchwork Wed Aug 28 20:28:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154840 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="tr6MlCF3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46JcmL5s90z9sML for ; Thu, 29 Aug 2019 06:29:38 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727222AbfH1U3g (ORCPT ); Wed, 28 Aug 2019 16:29:36 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:37345 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727187AbfH1U3e (ORCPT ); Wed, 28 Aug 2019 16:29:34 -0400 Received: by mail-wr1-f67.google.com with SMTP id z11so1118946wrt.4 for ; Wed, 28 Aug 2019 13:29:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=riqi5MR+tqkFqhRuQExHa0xRub2TLb+K8OW8HWrcsdk=; b=tr6MlCF3RqYlJppbDB51tpICB5z/uwBItN7ZB4ke3VH7xsrsC2cQuKYWiJbhAqktdc xwT+XiDb2L5Bpf7OV2hqnYldoFHkvXaCcOpbJTfWb2f/GHudrgb50zHY1et548gTnAnt B4vW87cwg1aMlbA+X25isS7N4u/j+fxie7UFzL+oYKhDfZ3+iqVQWWc8REr9gxG4IJW+ l73zVV8315bUGlbjvJedNOxnuXFg1x61XSP20N+oSACqc9bjUTVW58JabAFslB7x2/KK 04Kv1tVBv7o7lcsrynXyBqUDywC8tcTzbVzxrQ5xqUtxYp6/fOffX1k5LdkSZo4pBGDP KIPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=riqi5MR+tqkFqhRuQExHa0xRub2TLb+K8OW8HWrcsdk=; b=tVHv/3Ra19QPYkpJl46XQlvxMId2etrG3IJGBt7EC/A12GCKSTXsdMWcx9Yq4jIqIc zKRlk1apWIe2GXaxH8pwVRE4qP3+MohLPsm83HraZs00wSw2SSxX3v2tIKV/Q4ZiVRIB 3HMi2cG7RSXtPGU83IlUPdbtIcjWf2CHAhlv9kT6FO9vu5z41QsrCUT88koU1Yo7UZJ6 JEZm42dUpIerq/TqE7iK/mJgtBDkYNo1CTow9ObBR3K1532m9+qZQOg6J8ViA9G2dH2d fOUzVAFCWhqK/C1f1sJG6lu7OsKciddiAMKYc3V6sxp6G/cMzTylMJ5z/QFkujGz3AX/ RMmg== X-Gm-Message-State: APjAAAXdhBAjPA92s70mELVD+vP695eA/m5DSDOUL0gJvWs06fR4EpMS Xy02nA/HSUAtfHAZndYJKpowMOgM X-Google-Smtp-Source: APXvYqzeWjTp5FXK8SWtn9SvpPS1VMOv+jOFDjwkIWmhftk6iyHiZ5YD7BeHbIxKPBMJg6Ubfx/JZA== X-Received: by 2002:adf:fac1:: with SMTP id a1mr7319126wrs.56.1567024172226; Wed, 28 Aug 2019 13:29:32 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id w8sm10906290wmc.1.2019.08.28.13.29.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:31 -0700 (PDT) Subject: [PATCH net-next v2 8/9] r8169: add RTL8125 PHY initialization From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: Date: Wed, 28 Aug 2019 22:28:32 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds PHY initialization magic copied from the r8125 vendor driver. In addition it supports loading the firmware for chip version RTL_GIGA_MAC_VER_61. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 130 +++++++++++++++++++++- 1 file changed, 127 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 4d1779e39..99176a9a8 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -55,6 +55,7 @@ #define FIRMWARE_8168H_2 "rtl_nic/rtl8168h-2.fw" #define FIRMWARE_8107E_1 "rtl_nic/rtl8107e-1.fw" #define FIRMWARE_8107E_2 "rtl_nic/rtl8107e-2.fw" +#define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw" #define R8169_MSG_DEFAULT \ (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN) @@ -203,7 +204,7 @@ static const struct { [RTL_GIGA_MAC_VER_50] = {"RTL8168ep/8111ep" }, [RTL_GIGA_MAC_VER_51] = {"RTL8168ep/8111ep" }, [RTL_GIGA_MAC_VER_60] = {"RTL8125" }, - [RTL_GIGA_MAC_VER_61] = {"RTL8125" }, + [RTL_GIGA_MAC_VER_61] = {"RTL8125", FIRMWARE_8125A_3}, }; static const struct pci_device_id rtl8169_pci_tbl[] = { @@ -714,6 +715,7 @@ MODULE_FIRMWARE(FIRMWARE_8168H_1); MODULE_FIRMWARE(FIRMWARE_8168H_2); MODULE_FIRMWARE(FIRMWARE_8107E_1); MODULE_FIRMWARE(FIRMWARE_8107E_2); +MODULE_FIRMWARE(FIRMWARE_8125A_3); static inline struct device *tp_to_dev(struct rtl8169_private *tp) { @@ -3619,6 +3621,128 @@ static void rtl8106e_hw_phy_config(struct rtl8169_private *tp) rtl_eri_write(tp, 0x1d0, ERIAR_MASK_0011, 0x0000); } +static void rtl8125_1_hw_phy_config(struct rtl8169_private *tp) +{ + struct phy_device *phydev = tp->phydev; + + phy_modify_paged(phydev, 0xad4, 0x10, 0x03ff, 0x0084); + phy_modify_paged(phydev, 0xad4, 0x17, 0x0000, 0x0010); + phy_modify_paged(phydev, 0xad1, 0x13, 0x03ff, 0x0006); + phy_modify_paged(phydev, 0xad3, 0x11, 0x003f, 0x0006); + phy_modify_paged(phydev, 0xac0, 0x14, 0x0000, 0x1100); + phy_modify_paged(phydev, 0xac8, 0x15, 0xf000, 0x7000); + phy_modify_paged(phydev, 0xad1, 0x14, 0x0000, 0x0400); + phy_modify_paged(phydev, 0xad1, 0x15, 0x0000, 0x03ff); + phy_modify_paged(phydev, 0xad1, 0x16, 0x0000, 0x03ff); + + phy_write(phydev, 0x1f, 0x0a43); + phy_write(phydev, 0x13, 0x80ea); + phy_modify(phydev, 0x14, 0xff00, 0xc400); + phy_write(phydev, 0x13, 0x80eb); + phy_modify(phydev, 0x14, 0x0700, 0x0300); + phy_write(phydev, 0x13, 0x80f8); + phy_modify(phydev, 0x14, 0xff00, 0x1c00); + phy_write(phydev, 0x13, 0x80f1); + phy_modify(phydev, 0x14, 0xff00, 0x3000); + phy_write(phydev, 0x13, 0x80fe); + phy_modify(phydev, 0x14, 0xff00, 0xa500); + phy_write(phydev, 0x13, 0x8102); + phy_modify(phydev, 0x14, 0xff00, 0x5000); + phy_write(phydev, 0x13, 0x8105); + phy_modify(phydev, 0x14, 0xff00, 0x3300); + phy_write(phydev, 0x13, 0x8100); + phy_modify(phydev, 0x14, 0xff00, 0x7000); + phy_write(phydev, 0x13, 0x8104); + phy_modify(phydev, 0x14, 0xff00, 0xf000); + phy_write(phydev, 0x13, 0x8106); + phy_modify(phydev, 0x14, 0xff00, 0x6500); + phy_write(phydev, 0x13, 0x80dc); + phy_modify(phydev, 0x14, 0xff00, 0xed00); + phy_write(phydev, 0x13, 0x80df); + phy_set_bits(phydev, 0x14, BIT(8)); + phy_write(phydev, 0x13, 0x80e1); + phy_clear_bits(phydev, 0x14, BIT(8)); + phy_write(phydev, 0x1f, 0x0000); + + phy_modify_paged(phydev, 0xbf0, 0x13, 0x003f, 0x0038); + phy_write_paged(phydev, 0xa43, 0x13, 0x819f); + phy_write_paged(phydev, 0xa43, 0x14, 0xd0b6); + + phy_write_paged(phydev, 0xbc3, 0x12, 0x5555); + phy_modify_paged(phydev, 0xbf0, 0x15, 0x0e00, 0x0a00); + phy_modify_paged(phydev, 0xa5c, 0x10, 0x0400, 0x0000); + phy_modify_paged(phydev, 0xa44, 0x11, 0x0000, 0x0800); +} + +static void rtl8125_2_hw_phy_config(struct rtl8169_private *tp) +{ + struct phy_device *phydev = tp->phydev; + int i; + + phy_modify_paged(phydev, 0xad4, 0x17, 0x0000, 0x0010); + phy_modify_paged(phydev, 0xad1, 0x13, 0x03ff, 0x03ff); + phy_modify_paged(phydev, 0xad3, 0x11, 0x003f, 0x0006); + phy_modify_paged(phydev, 0xac0, 0x14, 0x1100, 0x0000); + phy_modify_paged(phydev, 0xacc, 0x10, 0x0003, 0x0002); + phy_modify_paged(phydev, 0xad4, 0x10, 0x00e7, 0x0044); + phy_modify_paged(phydev, 0xac1, 0x12, 0x0080, 0x0000); + phy_modify_paged(phydev, 0xac8, 0x10, 0x0300, 0x0000); + phy_modify_paged(phydev, 0xac5, 0x17, 0x0007, 0x0002); + phy_write_paged(phydev, 0xad4, 0x16, 0x00a8); + phy_write_paged(phydev, 0xac5, 0x16, 0x01ff); + phy_modify_paged(phydev, 0xac8, 0x15, 0x00f0, 0x0030); + + phy_write(phydev, 0x1f, 0x0b87); + phy_write(phydev, 0x16, 0x80a2); + phy_write(phydev, 0x17, 0x0153); + phy_write(phydev, 0x16, 0x809c); + phy_write(phydev, 0x17, 0x0153); + phy_write(phydev, 0x1f, 0x0000); + + phy_write(phydev, 0x1f, 0x0a43); + phy_write(phydev, 0x13, 0x81B3); + phy_write(phydev, 0x14, 0x0043); + phy_write(phydev, 0x14, 0x00A7); + phy_write(phydev, 0x14, 0x00D6); + phy_write(phydev, 0x14, 0x00EC); + phy_write(phydev, 0x14, 0x00F6); + phy_write(phydev, 0x14, 0x00FB); + phy_write(phydev, 0x14, 0x00FD); + phy_write(phydev, 0x14, 0x00FF); + phy_write(phydev, 0x14, 0x00BB); + phy_write(phydev, 0x14, 0x0058); + phy_write(phydev, 0x14, 0x0029); + phy_write(phydev, 0x14, 0x0013); + phy_write(phydev, 0x14, 0x0009); + phy_write(phydev, 0x14, 0x0004); + phy_write(phydev, 0x14, 0x0002); + for (i = 0; i < 25; i++) + phy_write(phydev, 0x14, 0x0000); + + phy_write(phydev, 0x13, 0x8257); + phy_write(phydev, 0x14, 0x020F); + + phy_write(phydev, 0x13, 0x80EA); + phy_write(phydev, 0x14, 0x7843); + phy_write(phydev, 0x1f, 0x0000); + + rtl_apply_firmware(tp); + + phy_modify_paged(phydev, 0xd06, 0x14, 0x0000, 0x2000); + + phy_write(phydev, 0x1f, 0x0a43); + phy_write(phydev, 0x13, 0x81a2); + phy_set_bits(phydev, 0x14, BIT(8)); + phy_write(phydev, 0x1f, 0x0000); + + phy_modify_paged(phydev, 0xb54, 0x16, 0xff00, 0xdb00); + phy_modify_paged(phydev, 0xa45, 0x12, 0x0001, 0x0000); + phy_modify_paged(phydev, 0xa5d, 0x12, 0x0000, 0x0020); + phy_modify_paged(phydev, 0xad4, 0x17, 0x0010, 0x0000); + phy_modify_paged(phydev, 0xa86, 0x15, 0x0001, 0x0000); + phy_modify_paged(phydev, 0xa44, 0x11, 0x0000, 0x0800); +} + static void rtl_hw_phy_config(struct net_device *dev) { static const rtl_generic_fct phy_configs[] = { @@ -3674,8 +3798,8 @@ static void rtl_hw_phy_config(struct net_device *dev) [RTL_GIGA_MAC_VER_49] = rtl8168ep_1_hw_phy_config, [RTL_GIGA_MAC_VER_50] = rtl8168ep_2_hw_phy_config, [RTL_GIGA_MAC_VER_51] = rtl8168ep_2_hw_phy_config, - [RTL_GIGA_MAC_VER_60] = NULL, - [RTL_GIGA_MAC_VER_61] = NULL, + [RTL_GIGA_MAC_VER_60] = rtl8125_1_hw_phy_config, + [RTL_GIGA_MAC_VER_61] = rtl8125_2_hw_phy_config, }; struct rtl8169_private *tp = netdev_priv(dev); From patchwork Wed Aug 28 20:29:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 1154841 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="Rh9HS5CI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46JcmM6hP2z9sN6 for ; Thu, 29 Aug 2019 06:29:39 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727230AbfH1U3i (ORCPT ); Wed, 28 Aug 2019 16:29:38 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:39679 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727042AbfH1U3f (ORCPT ); Wed, 28 Aug 2019 16:29:35 -0400 Received: by mail-wm1-f65.google.com with SMTP id n2so42493wmk.4 for ; Wed, 28 Aug 2019 13:29:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=tfo7dcRrfMqsJOD9wbmhoG1nvGt3A1BKQEcCALV7Lo0=; b=Rh9HS5CIpKgOQeDKhvcCXjKHGpjopbQ/K2qufik0A+Bh6iOLiu0vDo4yHqCwiXcAx/ HOnSnpabKp9JUhkeNUArIohIjFUqqxr84it3w0iezR48LxnIh3F8F59iOxvyMZo6OjPG zaQjg8tvpbRCsArdEJe39/PJ5Hu+io104pk5aRz2ry6YnR+w78s16xsCZgBu6RvXXlJu 7w/oRfemCp9Bh2oWom2N6tAvONP0zbyZFJ0QHJvFGf+EG94mWxDO4LjhkvXzHfUMIkpS 2Fn0VfC5l02eHEQthSDM5Cxjve3chkC8grtaW6mk4qrx/njwsVu8QZnGmEGCUZn1dCov Ao0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=tfo7dcRrfMqsJOD9wbmhoG1nvGt3A1BKQEcCALV7Lo0=; b=q/a069TTwZFbGRfplAfM2R590H0IY/SiiZydc5axXPpJjQG8QAjjDgRP/MvLYWajsK +WmtxYCON2G8i+lfE6aJQUGrzrBhI/oohswdp6HjYUzIU/kYHrl6/fJbJRvd7rZqc17s gjZ1uAQnlkhpbVHwxJC/I+ebnLt1snXb+yIvrsE4UGg3fMGRueQQI60Nbr2E5D7/DEVE fkTVb1B1g37IpqI0OEAyaonpSbVM0pnn031saC1jFe5yocRFfH3P0ezyHKR3shRR83Pc eeZqGGXyqma+A3x/tnMSEik8ybO/4VEbfIh+ztJikASSPQ0Mgkf1dxG42hc2MO8sSBw5 sqvA== X-Gm-Message-State: APjAAAU779639F+br/M/HxBzm3IU6mwPiw8y0CZQeUV7lMbPFKweGVsx Ma/ZoXPx9ZN5j5uTUUfJqSB9sVUB X-Google-Smtp-Source: APXvYqx/eGTcmwWpsg3po0yxOeNS2MtvYa/BN5nEwdVkuV9YffPeO8+QOge0FAWCzvJbyY+IQLkG6A== X-Received: by 2002:a7b:c954:: with SMTP id i20mr4011889wml.169.1567024173493; Wed, 28 Aug 2019 13:29:33 -0700 (PDT) Received: from ?IPv6:2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9? (p200300EA8F047C00AC08EFF5E9D677A9.dip0.t-ipconnect.de. [2003:ea:8f04:7c00:ac08:eff5:e9d6:77a9]) by smtp.googlemail.com with ESMTPSA id r190sm594432wmf.0.2019.08.28.13.29.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Aug 2019 13:29:33 -0700 (PDT) Subject: [PATCH net-next v2 9/9] r8169: add support for EEE on RTL8125 From: Heiner Kallweit To: Realtek linux nic maintainers , David Miller Cc: "netdev@vger.kernel.org" , Chun-Hao Lin References: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Message-ID: <9dd5c8fe-a3c1-9cba-ab5e-9b58ec1c28bd@gmail.com> Date: Wed, 28 Aug 2019 22:29:05 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <8181244b-24ac-73e2-bac7-d01f644ebb3f@gmail.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This adds EEE support for RTL8125 based on the vendor driver. Supported is EEE for 100Mbps and 1Gbps. Realtek recommended to not yet enable EEE for 2.5Gbps due to potential compatibility issues. Also ethtool doesn't support yet controlling EEE for 2.5Gbps and 5Gbps. Signed-off-by: Heiner Kallweit --- drivers/net/ethernet/realtek/r8169_main.c | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 99176a9a8..f337f81e4 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -2271,6 +2271,12 @@ static void rtl8168_config_eee_mac(struct rtl8169_private *tp) rtl_eri_set_bits(tp, 0x1b0, ERIAR_MASK_1111, 0x0003); } +static void rtl8125_config_eee_mac(struct rtl8169_private *tp) +{ + r8168_mac_ocp_modify(tp, 0xe040, 0, BIT(1) | BIT(0)); + r8168_mac_ocp_modify(tp, 0xeb62, 0, BIT(2) | BIT(1)); +} + static void rtl8168f_config_eee_phy(struct rtl8169_private *tp) { struct phy_device *phydev = tp->phydev; @@ -2301,6 +2307,16 @@ static void rtl8168h_config_eee_phy(struct rtl8169_private *tp) phy_modify_paged(phydev, 0xa42, 0x14, 0x0000, 0x0080); } +static void rtl8125_config_eee_phy(struct rtl8169_private *tp) +{ + struct phy_device *phydev = tp->phydev; + + rtl8168h_config_eee_phy(tp); + + phy_modify_paged(phydev, 0xa6d, 0x12, 0x0001, 0x0000); + phy_modify_paged(phydev, 0xa6d, 0x14, 0x0010, 0x0000); +} + static void rtl8169s_hw_phy_config(struct rtl8169_private *tp) { static const struct phy_reg phy_reg_init[] = { @@ -3672,6 +3688,9 @@ static void rtl8125_1_hw_phy_config(struct rtl8169_private *tp) phy_modify_paged(phydev, 0xbf0, 0x15, 0x0e00, 0x0a00); phy_modify_paged(phydev, 0xa5c, 0x10, 0x0400, 0x0000); phy_modify_paged(phydev, 0xa44, 0x11, 0x0000, 0x0800); + + rtl8125_config_eee_phy(tp); + rtl_enable_eee(tp); } static void rtl8125_2_hw_phy_config(struct rtl8169_private *tp) @@ -3741,6 +3760,9 @@ static void rtl8125_2_hw_phy_config(struct rtl8169_private *tp) phy_modify_paged(phydev, 0xad4, 0x17, 0x0010, 0x0000); phy_modify_paged(phydev, 0xa86, 0x15, 0x0001, 0x0000); phy_modify_paged(phydev, 0xa44, 0x11, 0x0000, 0x0800); + + rtl8125_config_eee_phy(tp); + rtl_enable_eee(tp); } static void rtl_hw_phy_config(struct net_device *dev) @@ -5263,6 +5285,8 @@ static void rtl_hw_start_8125_common(struct rtl8169_private *tp) rtl_udelay_loop_wait_low(tp, &rtl_mac_ocp_e00e_cond, 1000, 10); + rtl8125_config_eee_mac(tp); + RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~RXDV_GATED_EN); udelay(10); }