Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp744605rwr; Thu, 20 Apr 2023 06:03:04 -0700 (PDT) X-Google-Smtp-Source: AKy350YuThFNZHGXU+fZUce7V/7Sc3SUKkMFRmCLJ3/i7Y19uZUGocH68zMWm/rAfz3xhqEc6fr6 X-Received: by 2002:a67:f5cd:0:b0:42f:fc09:3290 with SMTP id t13-20020a67f5cd000000b0042ffc093290mr536062vso.9.1681995784476; Thu, 20 Apr 2023 06:03:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681995784; cv=none; d=google.com; s=arc-20160816; b=DmfB4C7pEicDPIMAeoIjzXurg49qtdedKMpOvkHIq1qBx2JRclMsQTubDx9KVfqO1R LWY+AkSwgKoPMQJcNu12v4bGF+SAtWM/pE07anNkPrdtybsla1XaSDQ73ah7AIU+PtJQ wqE1S0QJ9rm0/MIlbXivIzlS3vZkZtvh/HJMqw5QbzRlNHbC/PJa4jKraf7R4Q0Pdhez 1gvATpgHb+hzWsMXF7yFXzN9ZahA+r0dkfmCwlUIJoikj/b8XcWy/0CYzRWZQk9pxkZ6 JtsoQEbQGNTX60s3Qv8K98ooRC3y64cGumxxuyeCnq8pOMF1DeUvNT4vXDrlLzSOLKpe hEpQ== 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=jsxRECAWKxu6+FKz10CvYEuv0vI1s8ubwhCbdG4uyhM=; b=LlLKKw1RBs1mS2vXHvMVvzjx3dy90xPZRXUXauwx/rLgdz1hH6HElOekTbuKZpcSfi 3Ir+GCEQ8caBGnwe+0iGbQgOBZhpulv/tPtTgnuRQaqc/oX/cDilFv+ANN+pmq13Tfuj aJAT8tXUh/zmMV3D2CV7XFTCnlP5BCBv4anWpYnfFp/VmZGWcHFkCQKyU4JOAO0bFmxJ 1MQ11/Pxn1YT67dNqaS7nChbnBTAqd06tAFZCYrlzdAe35qj8iRkTEcpF2seiXeBo9ys Tcl9w2USFZMxMWeXWK2tFmLftmlJNf6ClfeGb9ovasUhFkOWk5I5NJEo8q/Ec6YBRlv2 H4Ag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=I2dT33Sw; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j13-20020a056102334d00b0042c9a85422dsi360390vse.105.2023.04.20.06.02.40; Thu, 20 Apr 2023 06:03:04 -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=I2dT33Sw; 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 S231293AbjDTNAz (ORCPT + 99 others); Thu, 20 Apr 2023 09:00:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231269AbjDTNAw (ORCPT ); Thu, 20 Apr 2023 09:00:52 -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 4EA597DA3; Thu, 20 Apr 2023 06:00:45 -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 2C90A3F182; Thu, 20 Apr 2023 13:00:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1681995640; bh=jsxRECAWKxu6+FKz10CvYEuv0vI1s8ubwhCbdG4uyhM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=I2dT33SwEwSdFk7KGFxupIRUuxkjltc/yu7z08vMH3PZWXnsr3zZNi1LO3a7lU81O lHcPGkM3bMbt1guWrUScGOcF0Z+p4wW63hItblzr2U9wcSgpCrVRqpULqUePLf6g4P 4v4PS30sBdIXDe7aDnAWa5FgKNx6VottwDGJct1zAJ44wz/8LFZXbP2NTDAYpKP4sI tn4bq3S1tyN2SIMR00A3Tg8z1X4cAfUoE68PkVkUpo3pkg9tD3FNCa3GaKhDDM+9tI gyMbgAz1PYpOB75rMgAgVBCeLg15f7bqL4XRMif8Fl3tjnZv3lU8y01rz4LBSRaH2i 20R97yQOvwgMQ== 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 v3 4/4] PCI/DPC: Disable DPC interrupt during suspend Date: Thu, 20 Apr 2023 20:59:40 +0800 Message-Id: <20230420125941.333675-4-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230420125941.333675-1-kai.heng.feng@canonical.com> References: <20230420125941.333675-1-kai.heng.feng@canonical.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.4 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 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 --- v3: - No change. v2: - Only disable DPC IRQ. - No more check on PME IRQ#. 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, }; -- 2.34.1