From patchwork Mon Apr 24 05:52:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kai-Heng Feng X-Patchwork-Id: 86871 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2530437vqo; Sun, 23 Apr 2023 23:06:37 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4TSLtKLmrJYAeTY8IqF5KF4SXDYUY8EyIx6o+4LuLmRwUcRq0wd304vGR9j+9gC8X5rs+X X-Received: by 2002:a17:902:ea03:b0:1a9:79e7:2ba with SMTP id s3-20020a170902ea0300b001a979e702bamr2725503plg.23.1682316397429; Sun, 23 Apr 2023 23:06:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682316397; cv=none; d=google.com; s=arc-20160816; b=S2V3Fc3JQzdKxSejIdch57VsEIFUkOlq9kWiOs1+bbwPB2Yi6xtHZbB3UUdpmWtQrI gZM5DVdCAEPS9Oe0kO4yCRFeg3W7lxccD2clewXY/WV1XatylkOc3kROQcjNopRWexzJ /f9pnqSO/Ggl14pRd0lzvW8eeYGfDG1Y5JiZReKN2G2EB0ubnU5FmrTaY9z/07Vh68wp J+E9Fy+W3Fv65JM9H+bLa4uQy613UM0HPMmDWm9pl6c3sFEqTBgX/MFzVr+hkcrqqzrB wuB9qW3iWFCePMM4NV0f985f1cwvJ8mXy4BEgvab3sceawkUh2NUUlK8INS9piVzuYEy L08w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=SVJsrjo3kGR6zf7Nkbs6TXOKtUb7RWji64dwjLyjcMI=; b=qFOIr6Nb+TRvPwIp5G9Fx6K/ByL9I7zbjgNZf4Uux3ZbenXvonaHY32lUMlkIlNi6a 94jztfZezZ6if5cbV4MZ0wH1/vMXwdqYScP4TETDaUn505gm/7gYIKiyCQ6/Xd+DHjYX QnrClXMnlnPMYD0GSuzey3X8+3HzZ42r1bj5M3IQD60K4aXY81mkQ/FuPaAohHsWkB6C +hYQkDDc5Nighyr+Zcr52dpIG5jo9yZeVtDm1cFAu8UuH/7rfks2y19jqjePCsFTgsIP X7vLMO0nQOEj3a9B6sD2Y+kfaYevSWZKALiLvR0wXOkG6zzjDPzKnLv9521nKwrI2QpB 9b/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=oU8NDVHY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c17-20020a170903235100b001a216e882f0si3782965plh.558.2023.04.23.23.06.25; Sun, 23 Apr 2023 23:06:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=oU8NDVHY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231297AbjDXGBk (ORCPT + 99 others); Mon, 24 Apr 2023 02:01:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231713AbjDXGAv (ORCPT ); Mon, 24 Apr 2023 02:00:51 -0400 Received: from smtp-relay-canonical-1.canonical.com (smtp-relay-canonical-1.canonical.com [185.125.188.121]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DFB0B3ABD; Sun, 23 Apr 2023 23:00:10 -0700 (PDT) Received: from localhost.localdomain (unknown [10.101.196.174]) (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-canonical-1.canonical.com (Postfix) with ESMTPSA id 7BF9541CC4; Mon, 24 Apr 2023 05:53:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1682315627; bh=SVJsrjo3kGR6zf7Nkbs6TXOKtUb7RWji64dwjLyjcMI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=oU8NDVHY0v/w6AGl0EDJdswZavo9YYs9SIS9j29MwskmfF8Lc4zCTyfGat9cEqgF5 9qYMSBkQgZGAFBSkkLLaZ+syIamyWBA8LXT1yvPSKAgKs2p64DGsnLi1xJxN0LYlQH xenKlugV1ZRtjFkNGtXIpXUqEFLfexqHQ45kdmfaYjf/O2nLJslDMPFKW6dFK6XSQb cwA2hGu0tM5dDsuZwVs1urh34WlAkmYuljTxXSF+lmw4XKqpXrEpPXUKcXiOKQ67DJ 3imetsMRjJfaydGmpLo9mk0yKrhavjZPhwH3lEidsrYm5BcR+U3dad/njAaU4YRnuA DkY479Z0/4dPg== From: Kai-Heng Feng To: bhelgaas@google.com Cc: mika.westerberg@linux.intel.com, koba.ko@canonical.com, sathyanarayanan.kuppuswamy@linux.intel.com, Kai-Heng Feng , Mahesh J Salgaonkar , "Oliver O'Halloran" , linuxppc-dev@lists.ozlabs.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/3] PCI/DPC: Disable DPC interrupt during suspend Date: Mon, 24 Apr 2023 13:52:49 +0800 Message-Id: <20230424055249.460381-3-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230424055249.460381-1-kai.heng.feng@canonical.com> References: <20230424055249.460381-1-kai.heng.feng@canonical.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764036598537588626?= X-GMAIL-MSGID: =?utf-8?q?1764036598537588626?= PCIe service that shares IRQ with PME may cause spurious wakeup on system suspend. Since AER is conditionally disabled in previous patch, also apply the same logic to disable DPC which depends on AER to work. PCIe Base Spec 5.0, section 5.2 "Link State Power Management" states that TLP and DLLP transmission is disabled for a Link in L2/L3 Ready (D3hot), L2 (D3cold with aux power) and L3 (D3cold), so we don't lose much here to disable DPC during system suspend. This is very similar to previous attempts to suspend AER and DPC [1], but with a different reason. [1] https://lore.kernel.org/linux-pci/20220408153159.106741-1-kai.heng.feng@canonical.com/ Link: https://bugzilla.kernel.org/show_bug.cgi?id=216295 Reviewed-by: Mika Westerberg Signed-off-by: Kai-Heng Feng --- drivers/pci/pcie/dpc.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index a5d7c69b764e..98bdefde6df1 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -385,6 +385,30 @@ static int dpc_probe(struct pcie_device *dev) return status; } +static int dpc_suspend(struct pcie_device *dev) +{ + struct pci_dev *pdev = dev->port; + u16 ctl; + + pci_read_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CTL, &ctl); + ctl &= ~PCI_EXP_DPC_CTL_INT_EN; + pci_write_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CTL, ctl); + + return 0; +} + +static int dpc_resume(struct pcie_device *dev) +{ + struct pci_dev *pdev = dev->port; + u16 ctl; + + pci_read_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CTL, &ctl); + ctl |= PCI_EXP_DPC_CTL_INT_EN; + pci_write_config_word(pdev, pdev->dpc_cap + PCI_EXP_DPC_CTL, ctl); + + return 0; +} + static void dpc_remove(struct pcie_device *dev) { struct pci_dev *pdev = dev->port; @@ -400,6 +424,8 @@ static struct pcie_port_service_driver dpcdriver = { .port_type = PCIE_ANY_PORT, .service = PCIE_PORT_SERVICE_DPC, .probe = dpc_probe, + .suspend = dpc_suspend, + .resume = dpc_resume, .remove = dpc_remove, };