From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V3 13/21] pci, acpi: Provide generic way to assign bus domain number.
Date: Thu, 21 Jan 2016 18:22:18 +0000 [thread overview]
Message-ID: <20160121182218.GA21175@red-moon> (raw)
In-Reply-To: <1452691267-32240-14-git-send-email-tn@semihalf.com>
Hi Tomasz,
On Wed, Jan 13, 2016 at 02:20:59PM +0100, Tomasz Nowicki wrote:
[...]
> @@ -4796,14 +4797,34 @@ void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent)
> * API and update the use_dt_domains value to keep track of method we
> * are using to assign domain numbers (use_dt_domains = 0).
> *
> + * IF ACPI, we expect non-DT method (use_dt_domains == -1)
> + * and call _SEG method for corresponding host bridge device.
> + * If _SEG method does not exist, following ACPI spec (6.5.6)
> + * all PCI buses belong to domain 0.
> + *
> * All other combinations imply we have a platform that is trying
> - * to mix domain numbers obtained from DT and pci_get_new_domain_nr(),
> - * which is a recipe for domain mishandling and it is prevented by
> - * invalidating the domain value (domain = -1) and printing a
> - * corresponding error.
> + * to mix domain numbers obtained from DT, ACPI and
> + * pci_get_new_domain_nr(), which is a recipe for domain mishandling and
> + * it is prevented by invalidating the domain value (domain = -1) and
> + * printing a corresponding error.
> */
> +
> if (domain >= 0 && use_dt_domains) {
> use_dt_domains = 1;
> +#ifdef CONFIG_ACPI
> + } else if (!acpi_disabled && use_dt_domains == -1) {
> + struct acpi_device *acpi_dev = to_acpi_device(parent);
> + unsigned long long segment = 0;
> + acpi_status status;
> +
> + status = acpi_evaluate_integer(acpi_dev->handle,
> + METHOD_NAME__SEG, NULL,
> + &segment);
> + if (ACPI_FAILURE(status) && status != AE_NOT_FOUND)
> + dev_err(&acpi_dev->dev, "can't evaluate _SEG\n");
> +
> + domain = segment;
> +#endif
I think you can reshuffle a bit the code to make it easier to follow.
How about this ? (on top of mainline, I just compiled it do not
take it verbatim):
-- >8 --
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d1a7105..467a316 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -7,6 +7,7 @@
* Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
*/
+#include <linux/acpi.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/init.h>
@@ -4769,7 +4770,27 @@ int pci_get_new_domain_nr(void)
}
#ifdef CONFIG_PCI_DOMAINS_GENERIC
-void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent)
+/* Feel free to add this to drivers/acpi as a helper */
+#ifdef CONFIG_ACPI
+int pci_bus_acpi_domain_nr(struct device *parent)
+{
+ struct acpi_device *acpi_dev = to_acpi_device(parent);
+ unsigned long long segment = 0;
+ acpi_status status;
+
+ status = acpi_evaluate_integer(acpi_dev->handle,
+ METHOD_NAME__SEG, NULL,
+ &segment);
+ if (ACPI_FAILURE(status) && status != AE_NOT_FOUND)
+ dev_err(&acpi_dev->dev, "can't evaluate _SEG\n");
+
+ return segment;
+}
+#else
+int pci_bus_acpi_domain_nr(struct device *parent) { return -1; }
+#endif
+
+int pci_bus_of_domain_nr(struct device *parent)
{
static int use_dt_domains = -1;
int domain = of_get_pci_domain_nr(parent->of_node);
@@ -4811,7 +4832,13 @@ void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent)
domain = -1;
}
- bus->domain_nr = domain;
+ return domain;
+}
+
+void pci_bus_assign_domain_nr(struct pci_bus *bus, struct device *parent)
+{
+ bus->domain_nr = acpi_disabled ? pci_bus_of_domain_nr(parent) :
+ pci_bus_acpi_domain_nr(parent);
}
#endif
#endif
next prev parent reply other threads:[~2016-01-21 18:22 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-13 13:20 [PATCH V3 00/21] MMCONFIG refactoring and support for ARM64 PCI hostbridge init based on ACPI Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 01/21] x86, pci: Reorder logic of pci_mmconfig_insert() function Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 02/21] x86, pci, acpi: Move arch-agnostic MMCONFIG (aka ECAM) and ACPI code out of arch/x86/ directory Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 03/21] pci, acpi, mcfg: Provide generic implementation of MCFG code initialization Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 04/21] x86, pci: mmconfig_{32, 64}.c code refactoring - remove code duplication Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 05/21] x86, pci, ecam: mmconfig_64.c becomes default implementation for ECAM driver Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 06/21] XEN / PCI: Remove the dependence on arch x86 when PCI_MMCONFIG=y Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 07/21] pci, acpi, mcfg: Provide default RAW ACPI PCI config space accessors Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 08/21] arm64, acpi: Use empty PCI config space accessors from mcfg.c file Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 09/21] pci, acpi, ecam: Add flag to indicate whether ECAM region was hot added or not Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 10/21] x86, pci: Cleanup platform specific MCFG data using previously added ECAM hot_added flag Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 11/21] pci, acpi: Move ACPI host bridge device companion assignment to core code Tomasz Nowicki
2016-01-19 16:02 ` Lorenzo Pieralisi
2016-01-20 11:20 ` Tomasz Nowicki
2016-01-20 12:38 ` Lorenzo Pieralisi
2016-01-20 13:40 ` Tomasz Nowicki
2016-01-20 14:22 ` Lorenzo Pieralisi
2016-01-20 14:41 ` Tomasz Nowicki
2016-01-27 17:42 ` Lorenzo Pieralisi
2016-01-13 13:20 ` [PATCH V3 12/21] x86, ia64, pci: Remove ACPI companion device from platform specific data Tomasz Nowicki
2016-01-13 13:20 ` [PATCH V3 13/21] pci, acpi: Provide generic way to assign bus domain number Tomasz Nowicki
2016-01-21 18:22 ` Lorenzo Pieralisi [this message]
2016-01-21 18:38 ` Tomasz Nowicki
2016-01-22 11:25 ` Lorenzo Pieralisi
2016-01-13 13:21 ` [PATCH V3 14/21] x86, ia64: Include acpi_pci_{add|remove}_bus to the default pcibios_{add|remove}_bus implementation Tomasz Nowicki
2016-01-14 16:33 ` Lorenzo Pieralisi
2016-01-14 17:45 ` Tomasz Nowicki
2016-01-13 13:21 ` [PATCH V3 15/21] acpi, mcfg: Implement two calls that might be used to inject/remove MCFG region Tomasz Nowicki
2016-01-13 13:21 ` [PATCH V3 16/21] x86, acpi, pci: Use equivalent function introduced in previous patch Tomasz Nowicki
2016-01-13 13:21 ` [PATCH V3 17/21] acpi, mcfg: Add default PCI config accessors implementation and initial support for related quirks Tomasz Nowicki
2016-01-13 13:21 ` [PATCH V3 18/21] ACPI, PCI: Refine the way to handle translation_offset for ACPI resources Tomasz Nowicki
2016-01-14 12:13 ` Lorenzo Pieralisi
2016-01-19 12:20 ` Lorenzo Pieralisi
2016-01-25 9:52 ` Lorenzo Pieralisi
2016-01-25 16:57 ` Mark Salter
2016-01-28 10:23 ` Hanjun Guo
2016-01-13 13:21 ` [PATCH V3 19/21] pci, acpi: Support for ACPI based generic PCI host controller init Tomasz Nowicki
2016-01-15 9:57 ` Hanjun Guo
2016-01-18 9:57 ` Tomasz Nowicki
2016-01-18 9:25 ` liudongdong (C)
2016-01-18 10:34 ` Tomasz Nowicki
2016-01-19 11:58 ` Lorenzo Pieralisi
2016-01-20 15:01 ` Tomasz Nowicki
2016-01-13 13:21 ` [PATCH V3 20/21] pci, acpi: Match PCI config space accessors against platfrom specific quirks Tomasz Nowicki
2016-01-14 15:36 ` Mark Salter
2016-01-18 12:41 ` Tomasz Nowicki
2016-01-19 1:49 ` liudongdong (C)
2016-01-19 7:55 ` Tomasz Nowicki
2016-01-19 8:52 ` liudongdong (C)
2016-01-13 13:21 ` [PATCH V3 21/21] arm64, pci, acpi: Start using ACPI based PCI host bridge driver for ARM64 Tomasz Nowicki
2016-01-13 15:24 ` [PATCH V3 00/21] MMCONFIG refactoring and support for ARM64 PCI hostbridge init based on ACPI Sinan Kaya
2016-01-13 15:27 ` Tomasz Nowicki
2016-01-14 13:44 ` Graeme Gregory
2016-01-14 14:00 ` Catalin Marinas
2016-01-14 14:09 ` Mark Salter
2016-01-14 14:50 ` Catalin Marinas
2016-01-14 14:59 ` Mark Salter
2016-01-14 14:01 ` Mark Salter
2016-01-14 14:15 ` Graeme Gregory
2016-01-14 14:24 ` Mark Salter
2016-01-15 12:12 ` Graeme Gregory
2016-01-18 14:04 ` Graeme Gregory
2016-01-19 20:25 ` Bjorn Helgaas
2016-01-19 20:40 ` Russell King - ARM Linux
2016-01-19 23:37 ` Mark Salter
2016-01-14 15:29 ` Mark Salter
2016-01-14 15:38 ` Sinan Kaya
2016-01-14 16:12 ` Lorenzo Pieralisi
2016-01-14 16:38 ` Mark Salter
2016-01-14 17:07 ` Lorenzo Pieralisi
2016-01-14 17:32 ` Mark Salter
2016-01-14 17:59 ` Lorenzo Pieralisi
2016-01-14 18:44 ` Mark Salter
2016-01-14 22:51 ` Jeremy Linton
2016-01-14 22:55 ` Jeremy Linton
2016-01-15 11:00 ` Hanjun Guo
2016-01-18 14:37 ` Hanjun Guo
2016-01-29 6:43 ` liudongdong (C)
2016-02-01 19:58 ` Duc Dang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160121182218.GA21175@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).