Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp1852104lqt; Sun, 21 Apr 2024 12:10:18 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWcaSQDZxbV+OYCJmivKbm3W+MVcw0pbtbXav06vplSow4MwhIh/1RXgfjIZbXHu7DTGllSWW3hMIevH9XbDEyMpkvX+h1ZJbJfc+lMcw== X-Google-Smtp-Source: AGHT+IH64kkcJxvN+TFXvlH8pkW+7dXax+ZJW3CHx6bbjwHQznjei56pOm25WeTSaP/JAu5TMvP1 X-Received: by 2002:a05:6870:3108:b0:239:c163:a400 with SMTP id v8-20020a056870310800b00239c163a400mr5406254oaa.29.1713726618098; Sun, 21 Apr 2024 12:10:18 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713726618; cv=pass; d=google.com; s=arc-20160816; b=GXjy0pfRRt2+zSxRoD+I4ni+Z7+B8ureX1t7Iz5zWlF4R5iL7PXaXsKY9UQr4VRuVh 3eSTRvmNviWgjSakB8JJNDbvwAK4D0pw9tXihgeUC3f8NGnGKOgIwIoaMvf3lQEODzjq E40bfCaRpdvjvrazWaJwMzMAnUI/jz78k+YiyMyR3MvsARZHOLBIu+iA6503irUApl8x w/1cM89Ifl4gkcQpekByFA2lTh7DaJTRGFb8fvf11bkG0bA5do39LdmWyCvqiAvwa9DF UqvD6QfWKtSy4M7t8NNo6mXf8lY9oZQKXkWpJH0s0I1P8bC7QpyWynvEHvR2CzeXQSRr 6SSQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=axtKWoR57qW0n38Ixt0W43eeRT0+JKX+/SvvFBu9GSM=; fh=SjyyLJaug74WeH+YBfITVzrTrUuKP2sS83jRs9MsakU=; b=H8aN0O/E1CdImMdxj3ohBnQ5dcH5WXEV2H+/G6bqx6efPkDyKUPlKCNmTzgHkefx3j kr4a25I26z/0n7Hfl7UFYv2CqZAxPMKHdNLWXNwnP2Rk4eW666EmS0Wb4RrnCCdhvLLL e/IBWNf1m91vMTJhEmG0SJVXK2UR57yRY8fzJt5ce4GdH0p9sYd8eVU39wqQOaCjou0U lQ9FgzqWw11JvKMucamJAM5MFBUS0YE6RuhEGDyAaWFFkSK8xIx9oEQh83ojuqqUuY/h OK6zieS2U75e0BG6USw1VwsgxpjWXMF6WsNlOwLxFn15RUd4annVek6nNNhbwnZ0QWeD fG8w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=cYww6CYR; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-152590-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-152590-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id bw17-20020a056a02049100b005fcf67c8af3si2056489pgb.474.2024.04.21.12.10.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Apr 2024 12:10:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-152590-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=cYww6CYR; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-152590-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-152590-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 005E7B20DBF for ; Sun, 21 Apr 2024 19:10:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BBF7041C87; Sun, 21 Apr 2024 19:09:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cYww6CYR" 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 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=20Wilczy=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-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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)) -- 2.34.1