From patchwork Thu May 11 13:36:07 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: 92617 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3046:b0:115:7a1d:dabb with SMTP id p6csp4465544rwl; Thu, 11 May 2023 07:11:02 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7lRk/uBCcjlubkiNuyMV2L0UYFQRbau07DN8TjL+dcOOu+fAIdcWqn9Bgho1yPtpao2KlS X-Received: by 2002:a17:90b:97:b0:24d:fccf:7ba6 with SMTP id bb23-20020a17090b009700b0024dfccf7ba6mr21248638pjb.43.1683814261885; Thu, 11 May 2023 07:11:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683814261; cv=none; d=google.com; s=arc-20160816; b=xYzs9NuB/U0kBeneNA2L27L73YN9Ax7YahoiNuiYgx6nToWGEVhxPpPTsG4FlmPx36 HTW4mWz9TWcvBiQCVJo1hGaZsXdl/PxAEQgndtLmjxEe5kJof33YwaUj/dxiiYwEiByV 19an/7ysD7mo8Gsks863cK+16nSXV3oqK+dAHn8llLD5Ry/hdJZwW4EhBKYsux4NsJhW A7LXAYYORfE8lQa5lzxZswdp3XioQ/KcINg/UuG0VWDTQXmWow5hsru+YnuLhCBTlQM8 zsMGdUDkqhJVU5g4ldiKe14E06aJ7O1h8Mw7l3wun6ZIAydPBRz+gm03rVHXf5WpaMeb y/Bg== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=k6U60AfyHoi50EUXdw1yC205/vKIebqXK872eoYXLZ0=; b=hCjXAi5uASQ44f3YBmbU3f3Zigm8Y+GRtHRQUTChr4AxFzTruACfXuuTnVdWpu+xhL UzNVf6e/+ZrzdBg4hQw8AhwCwoFo0f6kV3u/ok7QBl2XQv7BljuHmsA4SgS1IkAq3a4n ljG09HomfTZ59WuSeEi2qOpN4ave7slmxfPVEg2Vn4ibhe7M6um4evITCApXnJIk+dN0 kUEdiMl3cTWLHj5ghnKMcSePqAAcjNhKC/UHKBVi6Y9iwQ97T1NsjxzMTSytfqU6L43K O9rBiMAiBGwWuPBdiFGO7kPgMVCKRuMsWqhjyzTf2C1hcbQ1urHBR6n7Re3RmsTC9GwD Ayow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=boAXbNMq; 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 p20-20020a17090a429400b00252873f1500si2153718pjg.138.2023.05.11.07.10.48; Thu, 11 May 2023 07:11:01 -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=boAXbNMq; 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 S237867AbjEKNpa (ORCPT + 99 others); Thu, 11 May 2023 09:45:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238046AbjEKNpR (ORCPT ); Thu, 11 May 2023 09:45:17 -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 B52DEC1; Thu, 11 May 2023 06:45:05 -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 46A3D42A99; Thu, 11 May 2023 13:36:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1683812218; bh=k6U60AfyHoi50EUXdw1yC205/vKIebqXK872eoYXLZ0=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=boAXbNMqDUHZwzGQv4J58ZS/mKyhZy13pTeRNv17MLiFusW7e6vhqXAKS0mcDdrGr LAmfQ3uwlG7oRvscmEMnBwBJEkgq7O23Vkc3n7vk+zOxczHzWS7rjuss6SdDO9x49i VGGer0xXbwzWTv45h33SY2Kebu7bhqe3dz6xrVNFrtN9WqSZkY7a1wa7Q9vaGU5rIU fAaXEmIwmim1zjLHss1DEk3xzE2QT3TLmDTLh2dKATTUgRNYHX4Fdq59dke3yAwT/U qqpQvcXqXi81i0GmpFbEThzUPamaKbvKFUj1j0g0yFJaRaxB64Rw0HzJnEVNAiEuu9 hsPURx+u0mV7Q== 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 , Jonathan Cameron , Mahesh J Salgaonkar , "Oliver O'Halloran" , linuxppc-dev@lists.ozlabs.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 1/3] PCI/AER: Factor out interrupt toggling into helpers Date: Thu, 11 May 2023 21:36:07 +0800 Message-Id: <20230511133610.99759-1-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764036537930310198?= X-GMAIL-MSGID: =?utf-8?q?1765607223359346025?= There are many places that enable and disable AER interrupt, so move them into helpers. Reviewed-by: Mika Westerberg Reviewed-by: Kuppuswamy Sathyanarayanan Reviewed-by: Jonathan Cameron Signed-off-by: Kai-Heng Feng --- v5 - Fix misspelling. v4: - No change. v3: - Correct subject. v2: - New patch. drivers/pci/pcie/aer.c | 45 +++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index f6c24ded134c..1420e1f27105 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -1227,6 +1227,28 @@ static irqreturn_t aer_irq(int irq, void *context) return IRQ_WAKE_THREAD; } +static void aer_enable_irq(struct pci_dev *pdev) +{ + int aer = pdev->aer_cap; + u32 reg32; + + /* Enable Root Port's interrupt in response to error messages */ + pci_read_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, ®32); + reg32 |= ROOT_PORT_INTR_ON_MESG_MASK; + pci_write_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, reg32); +} + +static void aer_disable_irq(struct pci_dev *pdev) +{ + int aer = pdev->aer_cap; + u32 reg32; + + /* Disable Root's interrupt in response to error messages */ + pci_read_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, ®32); + reg32 &= ~ROOT_PORT_INTR_ON_MESG_MASK; + pci_write_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, reg32); +} + /** * aer_enable_rootport - enable Root Port's interrupts when receiving messages * @rpc: pointer to a Root Port data structure @@ -1256,10 +1278,7 @@ static void aer_enable_rootport(struct aer_rpc *rpc) pci_read_config_dword(pdev, aer + PCI_ERR_UNCOR_STATUS, ®32); pci_write_config_dword(pdev, aer + PCI_ERR_UNCOR_STATUS, reg32); - /* Enable Root Port's interrupt in response to error messages */ - pci_read_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, ®32); - reg32 |= ROOT_PORT_INTR_ON_MESG_MASK; - pci_write_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, reg32); + aer_enable_irq(pdev); } /** @@ -1274,10 +1293,7 @@ static void aer_disable_rootport(struct aer_rpc *rpc) int aer = pdev->aer_cap; u32 reg32; - /* Disable Root's interrupt in response to error messages */ - pci_read_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, ®32); - reg32 &= ~ROOT_PORT_INTR_ON_MESG_MASK; - pci_write_config_dword(pdev, aer + PCI_ERR_ROOT_COMMAND, reg32); + aer_disable_irq(pdev); /* Clear Root's error status reg */ pci_read_config_dword(pdev, aer + PCI_ERR_ROOT_STATUS, ®32); @@ -1372,12 +1388,8 @@ static pci_ers_result_t aer_root_reset(struct pci_dev *dev) */ aer = root ? root->aer_cap : 0; - if ((host->native_aer || pcie_ports_native) && aer) { - /* Disable Root's interrupt in response to error messages */ - pci_read_config_dword(root, aer + PCI_ERR_ROOT_COMMAND, ®32); - reg32 &= ~ROOT_PORT_INTR_ON_MESG_MASK; - pci_write_config_dword(root, aer + PCI_ERR_ROOT_COMMAND, reg32); - } + if ((host->native_aer || pcie_ports_native) && aer) + aer_disable_irq(root); if (type == PCI_EXP_TYPE_RC_EC || type == PCI_EXP_TYPE_RC_END) { rc = pcie_reset_flr(dev, PCI_RESET_DO_RESET); @@ -1396,10 +1408,7 @@ static pci_ers_result_t aer_root_reset(struct pci_dev *dev) pci_read_config_dword(root, aer + PCI_ERR_ROOT_STATUS, ®32); pci_write_config_dword(root, aer + PCI_ERR_ROOT_STATUS, reg32); - /* Enable Root Port's interrupt in response to error messages */ - pci_read_config_dword(root, aer + PCI_ERR_ROOT_COMMAND, ®32); - reg32 |= ROOT_PORT_INTR_ON_MESG_MASK; - pci_write_config_dword(root, aer + PCI_ERR_ROOT_COMMAND, reg32); + aer_enable_irq(root); } return rc ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED; From patchwork Thu May 11 13:36:08 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: 92616 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp4397971vqo; Thu, 11 May 2023 07:04:45 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4yRHjKIMvayucMKNIevfKCs+3gTWGQU72Hn4yy9HnRMIvUIlXN3nyjlgSwT7VkG4grFDeb X-Received: by 2002:a67:b608:0:b0:42e:77ac:676d with SMTP id d8-20020a67b608000000b0042e77ac676dmr8210691vsm.25.1683813885244; Thu, 11 May 2023 07:04:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683813885; cv=none; d=google.com; s=arc-20160816; b=YBjuksg7b1H6dcchA5mHbeaPVtZj2xhjl65DjTxoGJMt2MBDlD2/5wBs7yQ4aYRjan g7sou+g+3fCjc1s84EVNoUd00R/QXeb2Y9hLOI+zplQt40VGeTgFqwFaM/067whe/j3H FM2HuA6kwUSmhNAP7VOpJ5Fv6LF7/cdG0uIeJEL6iz7TIWqBOk+GDopkKY8kGt/+8sQw eNuqbPWbtX/Hjw46YTPin2YbtN4z9ZJ8NDVMIuKXmTKAGaF3bI40vLs1/AXTFMBwbPfV +D23bxsVo0fmBu5l0+15oMDqKsC7bE8BjzdiNy97Cn393chqVLepcneEcgFhhW3WOHzZ 7LzA== 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=zDeq6WNnFmu62W80v5qru7iSzFHVe3swEok2WPL7q1w=; b=c/k5IMsNqAIp8gcWFIgbXtRXZ0M7tcnT8tGfngbBxwpQkY+xpPm8ni7FRxbPaYgJN+ V0AxREDU3UcOG6bQrI16twNYFwFdMZ354VkJ/BsbBqrULRHOlBQAKuYcMva5uF4K154u xFlqf7DCdJZbyvpnAB+O1DR+xhB17p7vKODhz9dEba1beUykF0ZHcEdh41cV+DMjjN7W EeOVuQzx5BUEoM6lVdfpfOW1vF++yICO4mXrgWvTufQLkdMLeUqj6L1KbOplIWXBb3H4 gDHxl2vy8AJg1t0glQZ9OAs7h6U9ZxySJy6mqc9wxL9JNMnHGYW3yBMvVxJtscOH7XEP tZLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b="Op+/4p5X"; 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 h1-20020a056102208100b0043602c05ef5si1225365vsr.19.2023.05.11.07.04.27; Thu, 11 May 2023 07:04:45 -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="Op+/4p5X"; 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 S237726AbjEKNkA (ORCPT + 99 others); Thu, 11 May 2023 09:40:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238069AbjEKNjk (ORCPT ); Thu, 11 May 2023 09:39:40 -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 8BAF52134; Thu, 11 May 2023 06:38: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 C05FB42AAC; Thu, 11 May 2023 13:36:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1683812222; bh=zDeq6WNnFmu62W80v5qru7iSzFHVe3swEok2WPL7q1w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Op+/4p5XNiVRgzrInZ35cUK7sV9g5PdUo+tUJn2Cy7s5aUHYgWL9uDO319te0nmoj EcPooBKj5jewAQX8jEZiSYwfGoVFHTK7xsP8t/axXbzqU/HZLV9eHEqVYFcP0b5CFp +jVUKdHag1dNLok5PUtgz9LvjpjAaeM+438n7RaJJgk9guU1+6PGIJp+v7gmC8xkVo iBFOXSkZi2TvNP+l/vzd1mr+xNA+iNwrMbgzi10FN+yvkbKSBDBMUz0932HoHSTp5n AQBAqKon2YXQ9Cv3FPxIrEOdTHJdSEVYbUHD35b/mbRKnTF/ItdI+TrONcN8RcA/aC PdPCRyoBlMV6g== 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 v5 2/3] PCI/AER: Disable AER interrupt on suspend Date: Thu, 11 May 2023 21:36:08 +0800 Message-Id: <20230511133610.99759-2-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230511133610.99759-1-kai.heng.feng@canonical.com> References: <20230511133610.99759-1-kai.heng.feng@canonical.com> MIME-Version: 1.0 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765606828421127211?= X-GMAIL-MSGID: =?utf-8?q?1765606828421127211?= PCIe service that shares IRQ with PME may cause spurious wakeup on system suspend. This is very similar to previous attempts to suspend AER and DPC [1], but this time disabling AER IRQ is to prevent immediate PME wakeup when AER shares the same IRQ line with PME. It's okay to disable AER because 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), hence we don't lose much here to disable AER IRQ during system suspend. [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 --- v5: - Wording. v4: v3: - No change. v2: - Only disable AER IRQ. - No more check on PME IRQ#. - Use helper. drivers/pci/pcie/aer.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 1420e1f27105..9c07fdbeb52d 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -1356,6 +1356,26 @@ static int aer_probe(struct pcie_device *dev) return 0; } +static int aer_suspend(struct pcie_device *dev) +{ + struct aer_rpc *rpc = get_service_data(dev); + struct pci_dev *pdev = rpc->rpd; + + aer_disable_irq(pdev); + + return 0; +} + +static int aer_resume(struct pcie_device *dev) +{ + struct aer_rpc *rpc = get_service_data(dev); + struct pci_dev *pdev = rpc->rpd; + + aer_enable_irq(pdev); + + return 0; +} + /** * aer_root_reset - reset Root Port hierarchy, RCEC, or RCiEP * @dev: pointer to Root Port, RCEC, or RCiEP @@ -1420,6 +1440,8 @@ static struct pcie_port_service_driver aerdriver = { .service = PCIE_PORT_SERVICE_AER, .probe = aer_probe, + .suspend = aer_suspend, + .resume = aer_resume, .remove = aer_remove, }; From patchwork Thu May 11 13:36:09 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: 92618 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3046:b0:115:7a1d:dabb with SMTP id p6csp4465628rwl; Thu, 11 May 2023 07:11:07 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6XjX2ZBGKKD6pjXhY56HXFWDuPV3Hb2OwYv3ImD277yILlnmnK/0NWGlcBtDJ4Jwnffzu6 X-Received: by 2002:a05:6a00:2e8f:b0:63d:2343:f9b with SMTP id fd15-20020a056a002e8f00b0063d23430f9bmr30397681pfb.19.1683814267386; Thu, 11 May 2023 07:11:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683814267; cv=none; d=google.com; s=arc-20160816; b=HshJqKy4A47LyLpOjbmjUeH+OzSGYGKqmGQXBxyFgQEtmk5H0w8oGnpuY7VlhTJ2OE DUw2lVEh0pMvA7S00nlKu6s2W63rE6KucB7QrXeT1IMGR/I2rWi8BZvk8VpkShjWfNWv 5l61Gz3fBEFUD0dPMI0PZ2snBcSQh2Sp0t1ICw3P2RzXpnEkMqcFAt5oCIWOV0ZYjUIZ XL4rhOFI7ZuIyDGFF64LKHnNzirWS8uM2uk8tzWC56nKZvdH7WHjJzp6KC9/A9hvtJs8 PBPn1jISRGcqOKb2D3i9I54ZAxXkIWyT0g/iFVVs/H96xbkG/cDVo6mO03/4faj3Kbyb fQqw== 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=/jWMueCzoMOVJ33QBenY907j4dy6f0ZLbi4Ji6SmwJU=; b=hMtH8q2YTnMn9vhTZOgeYrmwKd1kHMswKZQ+xMdCrl+CuKSRHltDzEZylF4/c5QwBp CJQLQPwfLVDqFUNcsqneXfPzPNQXSd51w01kH/cy90za1ExdIQF4D85/MWF+zujUVYgw 2bLVZvp1EpaX/XYbEuXS9EGlM3pihxGDVhnujbQmX9rkZ1few3ieW2N3YEPP2VnQja1W uqkKul6KjL/Eq9G3BgiCcVrBv+Vxijr2IVZARbbq6XqTLvyCFvNIqex1KLhrssVfdHaf 43dG8nHW83mzVRDY9vHcFr6wdiJlmgw51XyVdYgE1zqrbxJz+ZiR4TSkMY++olZsDtnu obpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=LXJMcg6F; 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 w1-20020aa79a01000000b0063d45a6d0e5si8106323pfj.17.2023.05.11.07.10.53; Thu, 11 May 2023 07:11:07 -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=LXJMcg6F; 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 S238162AbjEKNpc (ORCPT + 99 others); Thu, 11 May 2023 09:45:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238054AbjEKNpR (ORCPT ); Thu, 11 May 2023 09:45:17 -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 E452B1BE; Thu, 11 May 2023 06:45:05 -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 2EE2C42AAF; Thu, 11 May 2023 13:37:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1683812227; bh=/jWMueCzoMOVJ33QBenY907j4dy6f0ZLbi4Ji6SmwJU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LXJMcg6F9RUJNMo3hZzU+HLq5osdsPX+H9YoRDj7ckVglQpmM5hwQs0Oi0n5qLrlr YN4gdmoWuiE11eVj5sBunbh3Xf4ahe8Hc6+hmNN/E3KNizGO0Yoh0QIU/tIAkXAyLK xt392Fv5/d+W6poGq7jgdWWDe2sR2aBsgZG2p8bg26ppH1xg9j6jTglbeKPqTLQtEq iysasQd8nnIl3nBfZxUExcZmUfLV4FFdBCgVD+pJxjGUJZbO8vCh3F26VoaLGtTbEf 8y/GYPe7JXXx1FO8pyxZHzfF3Mo+PwZhIZ5NuGG11noyPVwFck9vWHLE4kbDOIvDR3 k/xyWpGVmiqtQ== 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 v5 3/3] PCI/DPC: Disable DPC interrupt during suspend Date: Thu, 11 May 2023 21:36:09 +0800 Message-Id: <20230511133610.99759-3-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230511133610.99759-1-kai.heng.feng@canonical.com> References: <20230511133610.99759-1-kai.heng.feng@canonical.com> MIME-Version: 1.0 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765607229084621143?= X-GMAIL-MSGID: =?utf-8?q?1765607229084621143?= 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. It's okay to disable DPC because 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), hence we don't lose much here to disable DPC during system suspend. [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 --- v5: - Wording. v4: 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 3ceed8e3de41..d2d845c20438 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -384,6 +384,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; @@ -399,6 +423,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, };