From patchwork Fri Oct 14 08:56:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koba Ko X-Patchwork-Id: 1689969 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=wcjQhbF5; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MpgHc5cQqz23k1 for ; Fri, 14 Oct 2022 19:57:00 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1ojGUu-0007cG-TH; Fri, 14 Oct 2022 08:56:52 +0000 Received: from smtp-relay-internal-1.internal ([10.131.114.114] helo=smtp-relay-internal-1.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1ojGUt-0007bj-AO for kernel-team@lists.ubuntu.com; Fri, 14 Oct 2022 08:56:51 +0000 Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id 153453F472 for ; Fri, 14 Oct 2022 08:56:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1665737811; bh=z6XaT6FVywAiEcIx5d8nxWJ1MWn8Z5dI44GZQ5mYNLo=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=wcjQhbF5KODwU/4p2/Ep67TSpyJu6XoTvTJ33oiUNMT+FkoY9HfKV/B2WJsCabNTI nDWC85T/Q/gOfFFacj3JG2nEC+znJ6KL/LF845IGIrB5n7DzucE8q5fZpkFq8R6KMQ GFyy9B6fyqakYmOsjGESBYfzmEz2jC+bDfu+XWZ/hGspViFWFpO7rKvdLX0QsqV9/u td+LC/6as5ZTbDnsVRDZSIkjQntuudg/Svwq24eFkx56jzYLdEChFn60sqvoU+jOhg F5ci8MDSKQyyI0ppWjAJXFY0ULvHCNA4Bo8aqUOKSQVGTw/mrezj9bUsQSCHbU0gbL uBohxlKBjDzvw== Received: by mail-pf1-f200.google.com with SMTP id cv12-20020a056a0044cc00b00562f6351e09so2595506pfb.3 for ; Fri, 14 Oct 2022 01:56:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=z6XaT6FVywAiEcIx5d8nxWJ1MWn8Z5dI44GZQ5mYNLo=; b=wMNvWOvXjWqasXgDr/QKQXgznR/EWsjmougZi3GeliBPZLolpf13zTQ/4QeRq0WoMF ZP28ANUwtuanNOnd0AJyZ7WD2eUix5GampGpU4al2EC2VUtW2qJQKTiRKojXkh8typBH jiem/DeCjQnJQDorDy9mSsmmOSuuAJXEnVy2fUTdMr6YZXZQzbiKnebCUX2wFMByCg+M 1X9Hufg0UUWGYmTDvLQfgF/3wJvtsqIwvmLVJ8bNBi0hxHQGr6u+xeCgV46SxQBzIczK 3uCPZ6Oq/73XuKfsw8cUhbpwuvWtzbAW4wzgWZ4mGzzKCSuzgXrirsD+lgpeGf56GO1x By8w== X-Gm-Message-State: ACrzQf25IFubQk4FYe/zM2ynT2X8Hwo3hKQKiOFSKL/l4QwuBBosTzT6 vczJHMvMLxZ+mMg5cyhJdY8WCBcxBVIPkpmJ3c63vxQkZsYu7j5WrzH3fhPRwKzMX0sIvsDxlxx mDcL6F8tIEP/4VJrquO/fNshOgp0VqMHLJQlraWCdyQ== X-Received: by 2002:a17:902:db0f:b0:176:e70f:6277 with SMTP id m15-20020a170902db0f00b00176e70f6277mr4248231plx.13.1665737809481; Fri, 14 Oct 2022 01:56:49 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6Nu2bt7aqYA4kyiYxVwnnu+OxMOvcykI0aKOwQ7ZE/IPIGHskYzCQd6NxkrtyNpP7K7YXFdA== X-Received: by 2002:a17:902:db0f:b0:176:e70f:6277 with SMTP id m15-20020a170902db0f00b00176e70f6277mr4248213plx.13.1665737809121; Fri, 14 Oct 2022 01:56:49 -0700 (PDT) Received: from canonical.com (2001-b011-3815-55ff-14f3-5026-35ff-19e0.dynamic-ip6.hinet.net. [2001:b011:3815:55ff:14f3:5026:35ff:19e0]) by smtp.gmail.com with ESMTPSA id a11-20020aa7970b000000b00562664d5027sm1122128pfg.61.2022.10.14.01.56.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Oct 2022 01:56:48 -0700 (PDT) From: Koba Ko To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/3 V3][SRU][OEM-5.17] UBUNTU: SAUCE: r8169: Enable chip-specific ASPM regardless of PCIe ASPM status Date: Fri, 14 Oct 2022 16:56:43 +0800 Message-Id: <20221014085645.1793722-2-koba.ko@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221014085645.1793722-1-koba.ko@canonical.com> References: <20221014085645.1793722-1-koba.ko@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Kai-Heng Feng BugLink: https://bugs.launchpad.net/bugs/1946433 To really enable ASPM on r8169 NICs, both standard PCIe ASPM and chip-specific ASPM have to be enabled at the same time. Since PCIe ASPM can be enabled or disabled vis sysfs and there's no mechanism to notify driver about ASPM change, unconditionally enable chip-specific ASPM to make ASPM really take into effect. Signed-off-by: Kai-Heng Feng (cherry picked from https://patchwork.kernel.org/project/netdevbpf/patch/20211016075442.650311-5-kai.heng.feng@canonical.com/) Signed-off-by: Koba Ko --- drivers/net/ethernet/realtek/r8169_main.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 6b2d71517eaa6..f1ce367f85a23 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -624,7 +624,6 @@ struct rtl8169_private { } wk; unsigned supports_gmii:1; - unsigned aspm_manageable:1; dma_addr_t counters_phys_addr; struct rtl8169_counters *counters; struct rtl8169_tc_offsets tc_offset; @@ -2680,8 +2679,13 @@ static void rtl_enable_exit_l1(struct rtl8169_private *tp) static void rtl_hw_aspm_clkreq_enable(struct rtl8169_private *tp, bool enable) { - /* Don't enable ASPM in the chip if OS can't control ASPM */ - if (enable && tp->aspm_manageable) { + struct pci_dev *pdev = tp->pci_dev; + + /* Skip if PCIe ASPM isn't possible */ + if (!pcie_aspm_support_enabled() || !pcie_aspm_capable(pdev)) + return; + + if (enable) { RTL_W8(tp, Config5, RTL_R8(tp, Config5) | ASPM_en); RTL_W8(tp, Config2, RTL_R8(tp, Config2) | ClkReqEn); } else { @@ -5335,10 +5339,9 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) * to work fine with L1 and L1.1. */ if (tp->mac_version >= RTL_GIGA_MAC_VER_45) - rc = pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2); + pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2); else - rc = pci_disable_link_state(pdev, PCIE_LINK_STATE_L1); - tp->aspm_manageable = !rc; + pci_disable_link_state(pdev, PCIE_LINK_STATE_L1); tp->dash_type = rtl_check_dash(tp); From patchwork Fri Oct 14 08:56:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koba Ko X-Patchwork-Id: 1689970 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=SFOiCgj3; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MpgHg2xPVz23jn for ; Fri, 14 Oct 2022 19:57:03 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1ojGUy-0007eE-4Y; Fri, 14 Oct 2022 08:56:56 +0000 Received: from smtp-relay-internal-0.internal ([10.131.114.225] helo=smtp-relay-internal-0.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1ojGUv-0007ck-Sv for kernel-team@lists.ubuntu.com; Fri, 14 Oct 2022 08:56:53 +0000 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 337ED3F484 for ; Fri, 14 Oct 2022 08:56:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1665737813; bh=O1L9FeeNQ2GnWkc/xvFI5kfWGvG3iXLCDbIOowyJG2I=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SFOiCgj3yydNr0Ti6tdcJfPX2V2YsW30k2f1zTu3wo2C1OkE3Mua8gyXdMxqlhl9y m0vtaoq/LdbbulOTZG8+hewchwFD4mNInGEvMR8KQvA1DliNKFwU2GBGe7MUP4DC8f EO6GLWlQTC2XKUF4wl767iBAe/RQMqJVXZBKjgL7OzUfZbIPUYapptdBZQ2Ueljj/A ee2LqZkXqk1a/ORWDeyGgCbbeg9SONjYZ82Ja4cPyZt6MGwP5Fjq022UIzixi06CRf MyxRE8J4seQUxiCS4zrb5YnhdiKujeFSkvrI3pCny7p8dws2VGEKCo8EWpDOwVJt1Q kerZ9Hh/rldyw== Received: by mail-pl1-f200.google.com with SMTP id d18-20020a170902ced200b00180680b8ed1so2919215plg.1 for ; Fri, 14 Oct 2022 01:56:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O1L9FeeNQ2GnWkc/xvFI5kfWGvG3iXLCDbIOowyJG2I=; b=EikuDY+o+RlqKNh/VVwIFBfbXP2Bu1F2+o3reWt4vC+MMe+TSXDc3YfHqqt1vv3CHZ U0vd5fGy0xt8Mg+lweZlbZxrpeTfRf5B6/oH0EJM0+W1zR5caq7B+jefxCATSUdckpIg HerODvWmOMZ1CJKoT5nLjGb4qVJlDFUseCvrHaI1T3pFt/WhkwaYy7VjNd0K9FnJfnce D0X7ojUTIz6qkWYuPq+oaMLF3FtdsmATvXZrKhznzS0Wlh2VZrra0fKHUa6uTwCt3jZT XLGcIJRzJOZDIuDjYNrxediNlNtVlGqX1JxPjNpnzrSprGUw7nmLM90qE/gv/Y4Q2hnX Ulgg== X-Gm-Message-State: ACrzQf3N1lRKzZn2WMeRkLPUU6pXEBGX5ThdabVKANVdtdICxzH7JWmp l4ncH19g/I/eITsHHIkijMDrbdpoftcaOemeyimf4RoKgdxfzCBesoxzG2+BMN0oJ0a3AXd9BLx y2X/XUoPTExB0aAHEXvZecHEUYP2wzhlP+F7UOe1otw== X-Received: by 2002:a63:5141:0:b0:43c:1471:7eb5 with SMTP id r1-20020a635141000000b0043c14717eb5mr3532695pgl.587.1665737811699; Fri, 14 Oct 2022 01:56:51 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6FniCzBzLobDeuk1LC76eVq1/9ZJhgpARSZr7x0B6rO4Z554wc1TP2B4n6fulqGFAACT6wrA== X-Received: by 2002:a63:5141:0:b0:43c:1471:7eb5 with SMTP id r1-20020a635141000000b0043c14717eb5mr3532679pgl.587.1665737811384; Fri, 14 Oct 2022 01:56:51 -0700 (PDT) Received: from canonical.com (2001-b011-3815-55ff-14f3-5026-35ff-19e0.dynamic-ip6.hinet.net. [2001:b011:3815:55ff:14f3:5026:35ff:19e0]) by smtp.gmail.com with ESMTPSA id p17-20020a170903249100b0017f57787a4asm1161537plw.229.2022.10.14.01.56.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Oct 2022 01:56:51 -0700 (PDT) From: Koba Ko To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/3 V3][SRU][OEM-5.17] UBUNTU: SAUCE: r8169: Use mutex to guard config register locking Date: Fri, 14 Oct 2022 16:56:44 +0800 Message-Id: <20221014085645.1793722-3-koba.ko@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221014085645.1793722-1-koba.ko@canonical.com> References: <20221014085645.1793722-1-koba.ko@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Kai-Heng Feng BugLink: https://bugs.launchpad.net/bugs/1946433 Right now r8169 doesn't have parallel access to its config register, but the next patch will access config register at anytime. So add a mutex to prevent the race. Signed-off-by: Kai-Heng Feng (cherry picked from https://patchwork.kernel.org/project/netdevbpf/patch/20211016075442.650311-5-kai.heng.feng@canonical.com/) Signed-off-by: Koba Ko --- drivers/net/ethernet/realtek/r8169_main.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index f1ce367f85a23..ce2cd5afd2515 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -623,6 +623,8 @@ struct rtl8169_private { struct work_struct work; } wk; + struct mutex config_lock; + unsigned supports_gmii:1; dma_addr_t counters_phys_addr; struct rtl8169_counters *counters; @@ -672,12 +674,14 @@ static inline struct device *tp_to_dev(struct rtl8169_private *tp) static void rtl_lock_config_regs(struct rtl8169_private *tp) { + mutex_lock(&tp->config_lock); RTL_W8(tp, Cfg9346, Cfg9346_Lock); } static void rtl_unlock_config_regs(struct rtl8169_private *tp) { RTL_W8(tp, Cfg9346, Cfg9346_Unlock); + mutex_unlock(&tp->config_lock); } static void rtl_pci_commit(struct rtl8169_private *tp) @@ -5320,6 +5324,8 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) return rc; } + mutex_init(&tp->config_lock); + tp->mmio_addr = pcim_iomap_table(pdev)[region]; xid = (RTL_R32(tp, TxConfig) >> 20) & 0xfcf; From patchwork Fri Oct 14 08:56:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koba Ko X-Patchwork-Id: 1689971 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=OVlWVvww; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MpgHl1RyTz23jn for ; Fri, 14 Oct 2022 19:57:07 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1ojGV1-0007hV-Bo; Fri, 14 Oct 2022 08:56:59 +0000 Received: from smtp-relay-internal-0.internal ([10.131.114.225] helo=smtp-relay-internal-0.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1ojGUx-0007dm-PC for kernel-team@lists.ubuntu.com; Fri, 14 Oct 2022 08:56:55 +0000 Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 1F35D3F484 for ; Fri, 14 Oct 2022 08:56:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1665737815; bh=o8AP783otLw81izHRCAQI8Qbc3Z33FPuCwgAyx2XRVY=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OVlWVvww9TfvoUBVJQSWgRDhhYUITl5G5ueO5jD5C06Kixy3ufkcKz/bBcQAUzqyj YkxHsdfqHNUJ/QSS6qorxRE3bVfnbhTA8HBIreJ9SsBfboeiwuCgcc7MvYZs/4gPHb PKthGxlvwG7s+0K9K3X33V0zzxuPTb7Qgdn4nkIZMNsSrwnmxFaUvuZtIeF156FHU3 ltlHYUOHirg1osyo+z9XSbiCV/pLNe3PrV0cdAcvnKe8UohPkB9uMR1PCvwTVfvAYo 8y2Of7evBAiVid4ZRxw7zUs5UnWhq1l0zUbOppHq9VHOf7LlZ7v9pla9vvqW/6jCN7 fLB0fSbw2UQlg== Received: by mail-pf1-f199.google.com with SMTP id t21-20020a056a0021d500b0056358536cdeso2603467pfj.22 for ; Fri, 14 Oct 2022 01:56:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=o8AP783otLw81izHRCAQI8Qbc3Z33FPuCwgAyx2XRVY=; b=Z8zTBMKBWUcdMFj/nNouSNnL62lURyimbui0vVmmKAvySMliGuIHHvDpE1yJPgzcPi SZb75vMW70Btrs7LduzhqL+bGA17JmvKy4ZD5nPUyMdPgebCJkIXfiJZDOUfcRJaTD/F ky6YNQp/rK9LpkGiA8TYUQaPOmBi6l3FUlbzDD0hTir6Bx7eFVUMM9By6P72EmyaZQOp Y6o8XgnqOiV+isN0xVEsHzzLsh8xDjMr5bzCHbauQPLkpTC4x+yb2YP9f/QKAwL0mn8Y B/Y1JfiKQkQ25V6/fwcogH2rllDTxu5qCTwQekSflpgd55mNvS+wsQcBEQ/zEc+uIpSK d0wQ== X-Gm-Message-State: ACrzQf1LlYvH+DFhH4V9cVp9JgJxTRjzwPueNOnJZ0vrJG/rC4VvtPL3 3X6PBzHWtXyz1tS3WvEo3OsFjLpwEJL5yfy9zu5w875XDxVpxegfss6pPL1P1g5EbnuYTTNzxDb bHhViX3I+VKv/LKbhy2bTUvV4MZVNvTj5Wk9qWomHCQ== X-Received: by 2002:a17:902:da8b:b0:178:3980:4597 with SMTP id j11-20020a170902da8b00b0017839804597mr4196709plx.113.1665737813550; Fri, 14 Oct 2022 01:56:53 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5mUufuV37OjyDOj6irvcVsaTD52eu/e4QQlcBstDVY9u0pL7IyuZsISOww65c3Kc9eP3hoZA== X-Received: by 2002:a17:902:da8b:b0:178:3980:4597 with SMTP id j11-20020a170902da8b00b0017839804597mr4196686plx.113.1665737813121; Fri, 14 Oct 2022 01:56:53 -0700 (PDT) Received: from canonical.com (2001-b011-3815-55ff-14f3-5026-35ff-19e0.dynamic-ip6.hinet.net. [2001:b011:3815:55ff:14f3:5026:35ff:19e0]) by smtp.gmail.com with ESMTPSA id z15-20020a17090a398f00b00202aa2b5295sm4488276pjb.36.2022.10.14.01.56.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Oct 2022 01:56:52 -0700 (PDT) From: Koba Ko To: kernel-team@lists.ubuntu.com Subject: [PATCH 3/3 V3][SRU][OEM-5.17] UBUNTU: SAUCE: r8169: Implement dynamic ASPM mechanism Date: Fri, 14 Oct 2022 16:56:45 +0800 Message-Id: <20221014085645.1793722-4-koba.ko@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221014085645.1793722-1-koba.ko@canonical.com> References: <20221014085645.1793722-1-koba.ko@canonical.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Kai-Heng Feng BugLink: https://bugs.launchpad.net/bugs/1946433 r8169 NICs on some platforms have abysmal speed when ASPM is enabled. Same issue can be observed with older vendor drivers. The issue is however solved by the latest vendor driver. There's a new mechanism, which disables r8169's internal ASPM when the NIC traffic has more than 10 packets per second, and vice versa. The possible reason for this is likely because the buffer on the chip is too small for its ASPM exit latency. Realtek confirmed that all their PCIe LAN NICs, r8106, r8168 and r8125 use dynamic ASPM under Windows. So implement the same mechanism here to resolve the issue. Also introduce a lock to prevent race on accessing config registers. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=214307 Signed-off-by: Kai-Heng Feng (cherry picked from https://patchwork.kernel.org/project/netdevbpf/patch/20211016075442.650311-5-kai.heng.feng@canonical.com/) Signed-off-by: Koba Ko --- drivers/net/ethernet/realtek/r8169_main.c | 58 +++++++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index ce2cd5afd2515..a11ef51bc5774 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -626,6 +626,10 @@ struct rtl8169_private { struct mutex config_lock; unsigned supports_gmii:1; + unsigned rtl_aspm_enabled:1; + struct delayed_work aspm_toggle; + atomic_t aspm_packet_count; + dma_addr_t counters_phys_addr; struct rtl8169_counters *counters; struct rtl8169_tc_offsets tc_offset; @@ -2689,6 +2693,8 @@ static void rtl_hw_aspm_clkreq_enable(struct rtl8169_private *tp, bool enable) if (!pcie_aspm_support_enabled() || !pcie_aspm_capable(pdev)) return; + tp->rtl_aspm_enabled = enable; + if (enable) { RTL_W8(tp, Config5, RTL_R8(tp, Config5) | ASPM_en); RTL_W8(tp, Config2, RTL_R8(tp, Config2) | ClkReqEn); @@ -4428,6 +4434,7 @@ static void rtl_tx(struct net_device *dev, struct rtl8169_private *tp, dirty_tx = tp->dirty_tx; + atomic_add(tp->cur_tx - dirty_tx, &tp->aspm_packet_count); while (READ_ONCE(tp->cur_tx) != dirty_tx) { unsigned int entry = dirty_tx % NUM_TX_DESC; u32 status; @@ -4572,6 +4579,8 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, int budget rtl8169_mark_to_asic(desc); } + atomic_add(count, &tp->aspm_packet_count); + return count; } @@ -4679,8 +4688,39 @@ static int r8169_phy_connect(struct rtl8169_private *tp) return 0; } +#define ASPM_PACKET_THRESHOLD 10 +#define ASPM_TOGGLE_INTERVAL 1000 + +static void rtl8169_aspm_toggle(struct work_struct *work) +{ + struct rtl8169_private *tp = container_of(work, struct rtl8169_private, + aspm_toggle.work); + int packet_count; + bool enable; + + packet_count = atomic_xchg(&tp->aspm_packet_count, 0); + + if (pcie_aspm_enabled(tp->pci_dev)) { + enable = packet_count <= ASPM_PACKET_THRESHOLD; + + if (tp->rtl_aspm_enabled != enable) { + rtl_unlock_config_regs(tp); + rtl_hw_aspm_clkreq_enable(tp, enable); + rtl_lock_config_regs(tp); + } + } else if (tp->rtl_aspm_enabled) { + rtl_unlock_config_regs(tp); + rtl_hw_aspm_clkreq_enable(tp, false); + rtl_lock_config_regs(tp); + } + + schedule_delayed_work(&tp->aspm_toggle, msecs_to_jiffies(ASPM_TOGGLE_INTERVAL)); +} + static void rtl8169_down(struct rtl8169_private *tp) { + cancel_delayed_work_sync(&tp->aspm_toggle); + /* Clear all task flags */ bitmap_zero(tp->wk.flags, RTL_FLAG_MAX); @@ -4707,6 +4747,10 @@ static void rtl8169_up(struct rtl8169_private *tp) rtl_reset_work(tp); phy_start(tp->phydev); + + /* pcie_aspm_capable may change after system resume */ + if (pcie_aspm_support_enabled() && pcie_aspm_capable(tp->pci_dev)) + schedule_delayed_work(&tp->aspm_toggle, 0); } static int rtl8169_close(struct net_device *dev) @@ -5339,16 +5383,6 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) tp->mac_version = chipset; - /* Disable ASPM L1 as that cause random device stop working - * problems as well as full system hangs for some PCIe devices users. - * Chips from RTL8168h partially have issues with L1.2, but seem - * to work fine with L1 and L1.1. - */ - if (tp->mac_version >= RTL_GIGA_MAC_VER_45) - pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2); - else - pci_disable_link_state(pdev, PCIE_LINK_STATE_L1); - tp->dash_type = rtl_check_dash(tp); tp->cp_cmd = RTL_R16(tp, CPlusCmd) & CPCMD_MASK; @@ -5374,6 +5408,10 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) INIT_WORK(&tp->wk.work, rtl_task); + INIT_DELAYED_WORK(&tp->aspm_toggle, rtl8169_aspm_toggle); + + atomic_set(&tp->aspm_packet_count, 0); + rtl_init_mac_address(tp); dev->ethtool_ops = &rtl8169_ethtool_ops;