From patchwork Sun Apr 21 19:09:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Helgaas X-Patchwork-Id: 13637495 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBBAB3FE5B; Sun, 21 Apr 2024 19:09:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713726569; cv=none; b=TYeTjjjakLPg5AIyNNHyhWfgngwYVqeQF9+kBkZjYKVFsIU8rvy271OoldxWXobheYDmN382JdNux39C4aBRfibSEyfpoEp+TDEtRqWKZiNS0ysg1kwiXDqQKLUe4zNLir7rJMkXpFJX5kGEGcrJlOH5HLaIyZBO/heM/Szm3fg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713726569; c=relaxed/simple; bh=DGGRnOnMETe5yLZBJXUtvMjEtQFRFyfHXXUU3JsalXQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MPOofRZ/k5Zywu2SQ7Ibd0Snmvxm29a+X3m3JsqvzNhkc+ZhzkVYjdKHJP+hNzyuuMRebCF9Z/qMn9lwGeUxjN6xLglCGhD1sqlT148Ly7QFgT4r63IQZc3s3ydFuRt5e0ocXyO+ByxCf1N375hT8B9jLXCgjq4Mh5N+dBdK5uU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cYww6CYR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cYww6CYR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E469FC2BD11; Sun, 21 Apr 2024 19:09:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713726569; bh=DGGRnOnMETe5yLZBJXUtvMjEtQFRFyfHXXUU3JsalXQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cYww6CYReqt2SCnm+5LCXLNaA5uLrkY05rRfufILRa0RUDjWgLgWCFRu27DiLILdU LvksBZpuUrNGSjXm9utvcOZ1Rh2cOBpsffkIQinFxoyrFwPqU/YsF42C55gEQHJy+p 99bDYudh00o61/py6z8uFX+5CySklCbHNA4v0A12PRdDxWyFs7yuGXPS1v3LQG481q MAccxDUiAeYb7mAiCYzklRPtU5Nq66kotm4EvbgUJaRH6D/UTyaR63mk/LkypVXX2e MoXhv0pQqMjmlsagiwef4meSxHn15hSJKnfCiSlxaZSymXA1zVQ+seMVSAIJsvR4bY Qn0BqtXwTJFMQ== From: Bjorn Helgaas To: Vidya Sagar Cc: "Rafael J . Wysocki" , Len Brown , Will Deacon , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Frank Rowand , Thierry Reding , Jonathan Hunter , Krishna Thota , Manikanta Maddireddy , Vidya Sagar , linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Bjorn Helgaas Subject: [PATCH v7-incomplete 1/3] PCI: Move PRESERVE_BOOT_CONFIG _DSM evaluation to pci_register_host_bridge() Date: Sun, 21 Apr 2024 14:09:12 -0500 Message-Id: <20240421190914.374399-2-helgaas@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240421190914.374399-1-helgaas@kernel.org> References: <20240418174043.3750240-1-vidyas@nvidia.com> <20240421190914.374399-1-helgaas@kernel.org> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Bjorn Helgaas Move the PRESERVE_BOOT_CONFIG _DSM evaluation from acpi_pci_root_create() to pci_register_host_bridge(). This will help unify the ACPI _DSM path and the DT-based "linux,pci-probe-only" paths. This should be safe because it happens earlier than it used to: acpi_pci_root_create pci_create_root_bus pci_register_host_bridge + bridge->preserve_config = pci_preserve_config(bridge) pci_acpi_preserve_config + acpi_evaluate_dsm_typed(DSM_PCI_PRESERVE_BOOT_CONFIG) - acpi_evaluate_dsm_typed(DSM_PCI_PRESERVE_BOOT_CONFIG) No functional change intended. --- drivers/acpi/pci_root.c | 12 ------------ drivers/pci/pci-acpi.c | 22 ++++++++++++++++++++++ drivers/pci/pci.h | 5 +++++ drivers/pci/probe.c | 11 +++++++++++ 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c index 58b89b8d950e..ddc2b3e89111 100644 --- a/drivers/acpi/pci_root.c +++ b/drivers/acpi/pci_root.c @@ -1008,7 +1008,6 @@ struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, int node = acpi_get_node(device->handle); struct pci_bus *bus; struct pci_host_bridge *host_bridge; - union acpi_object *obj; info->root = root; info->bridge = device; @@ -1050,17 +1049,6 @@ struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, if (!(root->osc_ext_control_set & OSC_CXL_ERROR_REPORTING_CONTROL)) host_bridge->native_cxl_error = 0; - /* - * Evaluate the "PCI Boot Configuration" _DSM Function. If it - * exists and returns 0, we must preserve any PCI resource - * assignments made by firmware for this host bridge. - */ - obj = acpi_evaluate_dsm_typed(ACPI_HANDLE(bus->bridge), &pci_acpi_dsm_guid, 1, - DSM_PCI_PRESERVE_BOOT_CONFIG, NULL, ACPI_TYPE_INTEGER); - if (obj && obj->integer.value == 0) - host_bridge->preserve_config = 1; - ACPI_FREE(obj); - acpi_dev_power_up_children_with_adr(device); pci_scan_child_bus(bus); diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index 004575091596..9cc447da9475 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c @@ -119,6 +119,28 @@ phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle) return (phys_addr_t)mcfg_addr; } +bool pci_acpi_preserve_config(struct pci_host_bridge *host_bridge) +{ + if (ACPI_HANDLE(&host_bridge->dev)) { + union acpi_object *obj; + + /* + * Evaluate the "PCI Boot Configuration" _DSM Function. If it + * exists and returns 0, we must preserve any PCI resource + * assignments made by firmware for this host bridge. + */ + obj = acpi_evaluate_dsm_typed(ACPI_HANDLE(&host_bridge->dev), + &pci_acpi_dsm_guid, + 1, DSM_PCI_PRESERVE_BOOT_CONFIG, + NULL, ACPI_TYPE_INTEGER); + if (obj && obj->integer.value == 0) + return true; + ACPI_FREE(obj); + } + + return false; +} + /* _HPX PCI Setting Record (Type 0); same as _HPP */ struct hpx_type0 { u32 revision; /* Not present in _HPP */ diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 17fed1846847..180d3907b543 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -734,6 +734,7 @@ static inline void pci_restore_aer_state(struct pci_dev *dev) { } #endif #ifdef CONFIG_ACPI +bool pci_acpi_preserve_config(struct pci_host_bridge *bridge); int pci_acpi_program_hp_params(struct pci_dev *dev); extern const struct attribute_group pci_dev_acpi_attr_group; void pci_set_acpi_fwnode(struct pci_dev *dev); @@ -747,6 +748,10 @@ int acpi_pci_wakeup(struct pci_dev *dev, bool enable); bool acpi_pci_need_resume(struct pci_dev *dev); pci_power_t acpi_pci_choose_state(struct pci_dev *pdev); #else +static inline bool pci_acpi_preserve_config(struct pci_host_bridge *bridge) +{ + return false; +} static inline int pci_dev_acpi_reset(struct pci_dev *dev, bool probe) { return -ENOTTY; diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 1325fbae2f28..ee086d029450 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -889,6 +889,14 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus) dev_set_msi_domain(&bus->dev, d); } +static bool pci_preserve_config(struct pci_host_bridge *host_bridge) +{ + if (pci_acpi_preserve_config(host_bridge)) + return true; + + return false; +} + static int pci_register_host_bridge(struct pci_host_bridge *bridge) { struct device *parent = bridge->dev.parent; @@ -983,6 +991,9 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge) if (nr_node_ids > 1 && pcibus_to_node(bus) == NUMA_NO_NODE) dev_warn(&bus->dev, "Unknown NUMA node; performance will be reduced\n"); + /* Check if the boot configuration by FW needs to be preserved */ + bridge->preserve_config = pci_preserve_config(bridge); + /* Coalesce contiguous windows */ resource_list_for_each_entry_safe(window, n, &resources) { if (list_is_last(&window->node, &resources)) From patchwork Sun Apr 21 19:09:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Helgaas X-Patchwork-Id: 13637496 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD2A142ABE; Sun, 21 Apr 2024 19:09:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713726571; cv=none; b=FuHbj7LCtHJNdqsqUq4iODGRPJriCEJBfh/mh6jYorloQFKAwdQP9LukZ8k0z5NXJc4hyYC0pZ5PdictsZ9PvGvGiLQZ44kVqvAEC1wEml7wfvSeCnwlA8nMqK/ipTR287NhAFiyvS/dZGEQggu/nObC5lCyACq1YAcSmp4UK04= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713726571; c=relaxed/simple; bh=5b1Rd+c4FpyVTxmhZ/c+aS1Qqo8vTZijXYkHUU+mNds=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZC/fz7AG8DP8vWGEjKVYBRnd1OKyumFOZ80kUumu6rXQhjZpGyAJ1l577gsiiSzFaO5IBcFXM8vYQrLZcFaTK9X/yH3HYG6CL4WQRhx1Wx3Ba8T9btlW6ifO4kXkbbg8CgN6b62omAyKBDhMH/FBaqCijqddCU9DXWfdM8AGRYA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l2uCX7za; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="l2uCX7za" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F3909C2BD11; Sun, 21 Apr 2024 19:09:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713726571; bh=5b1Rd+c4FpyVTxmhZ/c+aS1Qqo8vTZijXYkHUU+mNds=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l2uCX7zaTXjwYyn/HQscx0eZQElgdBDcegVeBMyoFW6Ni+fmor0aF/r+A6FlfHyxC Fnmd5OCyvRhDoMHR4NLJ3kEta8jWq+Duf9CwA/1CyA3XQc2npDjsgNP57BdfTPaqZo JL+yNZfOjIarLusj0UH4zrZu/beCz4R+iY+xchmh/nBT+oRSmlDoRWkrIZeZOa9eb0 K6cOgaqfPOKf1JE/accZjoJzhYGXFbbyFNAgjQ27n99xtjkO/N/kPmEscxthzbcPFL 6RJ4wrkv/pt+LogV3bvcwh63J4n+trLMGcepdbhk/LZowaVdA9k2SrYSMVEk0sr8iC Pc/POnBWBz0ug== From: Bjorn Helgaas To: Vidya Sagar Cc: "Rafael J . Wysocki" , Len Brown , Will Deacon , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Frank Rowand , Thierry Reding , Jonathan Hunter , Krishna Thota , Manikanta Maddireddy , Vidya Sagar , linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Bjorn Helgaas Subject: [PATCH v7-incomplete 2/3] PCI: of: Add of_pci_preserve_config() for per-host bridge support Date: Sun, 21 Apr 2024 14:09:13 -0500 Message-Id: <20240421190914.374399-3-helgaas@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240421190914.374399-1-helgaas@kernel.org> References: <20240418174043.3750240-1-vidyas@nvidia.com> <20240421190914.374399-1-helgaas@kernel.org> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Bjorn Helgaas Add of_pci_preserve_config() to look for the "linux,pci-probe-only" property under a specified node. If it's not found there, look under "of_chosen" in addition. If the caller didn't specify a node, look under "of_chosen". With a future patch, this will support "linux,pci-probe-only" on a per host bridge basis based on the presence of the property in the respective PCI host bridge DT node. Implement of_pci_check_probe_only() using of_pci_preserve_config(). --- drivers/pci/of.c | 60 +++++++++++++++++++++++++++++++++++++---------- drivers/pci/pci.h | 7 ++++++ 2 files changed, 54 insertions(+), 13 deletions(-) diff --git a/drivers/pci/of.c b/drivers/pci/of.c index 51e3dd0ea5ab..d21c0bed36f3 100644 --- a/drivers/pci/of.c +++ b/drivers/pci/of.c @@ -233,28 +233,62 @@ int of_get_pci_domain_nr(struct device_node *node) } EXPORT_SYMBOL_GPL(of_get_pci_domain_nr); +/** + * of_pci_preserve_config - Return true if the boot configuration needs to + * be preserved + * @node: Device tree node. + * + * This function looks for "linux,pci-probe-only" property for a given + * PCI controller's node and returns true if found. It will also look in the + * chosen node if the property is not found in the given controller's node. + * Having this property ensures that the kernel doesn't reconfigure the + * BARs and bridge windows that are already done by the platform firmware. + * + * Return: true if the property exists false otherwise. + */ +bool of_pci_preserve_config(struct device_node *node) +{ + u32 val = 0; + int ret; + + if (!node) { + pr_warn("device node is NULL, trying with of_chosen\n"); + node = of_chosen; + } + +retry: + ret = of_property_read_u32(node, "linux,pci-probe-only", &val); + if (ret) { + if (ret == -ENODATA || ret == -EOVERFLOW) { + pr_warn("Incorrect value for linux,pci-probe-only in %pOF, ignoring\n", + node); + return false; + } + if (ret == -EINVAL) { + if (node == of_chosen) + return false; + + node = of_chosen; + goto retry; + } + } + + if (val) + return true; + else + return false; +} + /** * of_pci_check_probe_only - Setup probe only mode if linux,pci-probe-only * is present and valid */ void of_pci_check_probe_only(void) { - u32 val; - int ret; - - ret = of_property_read_u32(of_chosen, "linux,pci-probe-only", &val); - if (ret) { - if (ret == -ENODATA || ret == -EOVERFLOW) - pr_warn("linux,pci-probe-only without valid value, ignoring\n"); - return; - } - - if (val) + if (of_pci_preserve_config(of_chosen)) pci_add_flags(PCI_PROBE_ONLY); else pci_clear_flags(PCI_PROBE_ONLY); - - pr_info("PROBE_ONLY %s\n", val ? "enabled" : "disabled"); } EXPORT_SYMBOL_GPL(of_pci_check_probe_only); diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 180d3907b543..feedbedd65df 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -650,6 +650,7 @@ int of_pci_get_max_link_speed(struct device_node *node); u32 of_pci_get_slot_power_limit(struct device_node *node, u8 *slot_power_limit_value, u8 *slot_power_limit_scale); +bool of_pci_preserve_config(struct device_node *node); int pci_set_of_node(struct pci_dev *dev); void pci_release_of_node(struct pci_dev *dev); void pci_set_bus_of_node(struct pci_bus *bus); @@ -688,6 +689,12 @@ of_pci_get_slot_power_limit(struct device_node *node, return 0; } +static inline bool +of_pci_preserve_config(struct device_node *node) +{ + return false; +} + static inline int pci_set_of_node(struct pci_dev *dev) { return 0; } static inline void pci_release_of_node(struct pci_dev *dev) { } static inline void pci_set_bus_of_node(struct pci_bus *bus) { } From patchwork Sun Apr 21 19:09:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Helgaas X-Patchwork-Id: 13637497 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AF417446D6; Sun, 21 Apr 2024 19:09:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713726573; cv=none; b=QHvcG8OY17JlhTgGn9clQK7f2BfwmRvqYZ8xE2KlkQzkh+9WPOrXourKVvUy+Dd2At8vBrrCcEPUjec6mEO8DrrQjES8o4L92Q9MyL0/qfyRx6S/ckfiwuN3ng5pKCZ7EsOZ6agIV0hv7IjKfqIwUznHCixPoSN8r78RYoSePb0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713726573; c=relaxed/simple; bh=X4v6M4Hrc9fFqCwB6oJpOXB8AHDIlZvB7tTwVOjiIBQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VEf+a4i6mjXBhHQtencuGd6/Di7h7tGlCPlLTHxJ3Sg+AyR/CO5rxoZBIrk8elPncIOBQcRneFyNei8u/W15zFS278Ea1Q/evBteFDRytb9QiMch3Eo/ud9nyoFX3Elke0Zw8lZgUKoy7xCZMjws6ReYlvk3lgcsjEPIwB1Lvh8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=i5oI+s6n; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="i5oI+s6n" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA839C2BD11; Sun, 21 Apr 2024 19:09:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713726573; bh=X4v6M4Hrc9fFqCwB6oJpOXB8AHDIlZvB7tTwVOjiIBQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i5oI+s6nKWpN0z3IPZBfeH924VIQIwoJZRC9V3Qr/WQ77udlfzgw42ev297ij29eZ OSZ0HZi3BRcBrYG1chpvFn9oKKB6jDegDUgL4KDux2N6SsBWgwZo3vy3NGn0tIJs1a YOXYRpuz0d+90tTAigwSsaYqZgDO/yX6BOG+HKqHjqTUVHRKjtX+JUrABiJz4+vpS5 SF12280Wl6LBSxX3uJvhzgyBLrp55BbaTjVvs1E6hYuuf0IE1hraZf585B8IQ6evOz NcQOdShN+JnZCKO/xmFNHuSTxRaoB7280FLU5rPW9XZorQtD1MWa+HO1xgyiJgrzXX wnevBopS+8bFg== From: Bjorn Helgaas To: Vidya Sagar Cc: "Rafael J . Wysocki" , Len Brown , Will Deacon , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Frank Rowand , Thierry Reding , Jonathan Hunter , Krishna Thota , Manikanta Maddireddy , Vidya Sagar , linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Bjorn Helgaas Subject: [PATCH v7-incomplete 3/3] PCI: Unify ACPI and DT 'preserve config' support Date: Sun, 21 Apr 2024 14:09:14 -0500 Message-Id: <20240421190914.374399-4-helgaas@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240421190914.374399-1-helgaas@kernel.org> References: <20240418174043.3750240-1-vidyas@nvidia.com> <20240421190914.374399-1-helgaas@kernel.org> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Bjorn Helgaas --- drivers/pci/probe.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index ee086d029450..2c232c22d6af 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -894,6 +894,9 @@ static bool pci_preserve_config(struct pci_host_bridge *host_bridge) if (pci_acpi_preserve_config(host_bridge)) return true; + if (host_bridge->dev.parent && host_bridge->dev.parent->of_node) + return of_pci_preserve_config(host_bridge->dev.parent->of_node); + return false; }