linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v11 1/7] ACPI: Allow CONFIG_PCI to be unset for reboot
       [not found] <20181218025606.32668-1-okaya@kernel.org>
@ 2018-12-18  2:56 ` Sinan Kaya
  2018-12-18  7:31   ` Christoph Hellwig
  2018-12-18  2:56 ` [PATCH v11 2/7] ACPI / OSL: Stub out acpi_os_(read/write)_pci_configurations() Sinan Kaya
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Sinan Kaya @ 2018-12-18  2:56 UTC (permalink / raw)
  To: linux-acpi; +Cc: Sinan Kaya, Rafael J. Wysocki, Len Brown, open list

Make PCI reboot conditional on PCI support being present on the kernel
configuration.

Signed-off-by: Sinan Kaya <okaya@kernel.org>
---
 drivers/acpi/reboot.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/acpi/reboot.c b/drivers/acpi/reboot.c
index 6fa9c2a4cfe9..d75e637ee36a 100644
--- a/drivers/acpi/reboot.c
+++ b/drivers/acpi/reboot.c
@@ -7,8 +7,6 @@
 void acpi_reboot(void)
 {
 	struct acpi_generic_address *rr;
-	struct pci_bus *bus0;
-	unsigned int devfn;
 	u8 reset_value;
 
 	if (acpi_disabled)
@@ -33,6 +31,11 @@ void acpi_reboot(void)
 	 * on a device on bus 0. */
 	switch (rr->space_id) {
 	case ACPI_ADR_SPACE_PCI_CONFIG:
+	{
+#ifdef CONFIG_PCI
+		unsigned int devfn;
+		struct pci_bus *bus0;
+
 		/* The reset register can only live on bus 0. */
 		bus0 = pci_find_bus(0, 0);
 		if (!bus0)
@@ -44,8 +47,9 @@ void acpi_reboot(void)
 		/* Write the value that resets us. */
 		pci_bus_write_config_byte(bus0, devfn,
 				(rr->address & 0xffff), reset_value);
+#endif
 		break;
-
+	}
 	case ACPI_ADR_SPACE_SYSTEM_MEMORY:
 	case ACPI_ADR_SPACE_SYSTEM_IO:
 		printk(KERN_DEBUG "ACPI MEMORY or I/O RESET_REG.\n");
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v11 2/7] ACPI / OSL: Stub out acpi_os_(read/write)_pci_configurations()
       [not found] <20181218025606.32668-1-okaya@kernel.org>
  2018-12-18  2:56 ` [PATCH v11 1/7] ACPI: Allow CONFIG_PCI to be unset for reboot Sinan Kaya
@ 2018-12-18  2:56 ` Sinan Kaya
  2018-12-18  7:32   ` Christoph Hellwig
  2018-12-18  2:56 ` [PATCH v11 3/7] PCI/ACPI: Allow ACPI to be built without CONFIG_PCI set Sinan Kaya
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Sinan Kaya @ 2018-12-18  2:56 UTC (permalink / raw)
  To: linux-acpi; +Cc: Sinan Kaya, Rafael J. Wysocki, Len Brown, open list

Getting ready to allow CONFIG_PCI to be unset with ACPI enabled. Stub out
acpi_os_read_pci_configuration and acpi_os_write_pci_configuration
functions when CONFIG_PCI is not defined.

Signed-off-by: Sinan Kaya <okaya@kernel.org>
---
 drivers/acpi/osl.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index b48874b8e1ea..524fd5f33ea4 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -773,6 +773,7 @@ acpi_status
 acpi_os_read_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
 			       u64 *value, u32 width)
 {
+#ifdef CONFIG_PCI
 	int result, size;
 	u32 value32;
 
@@ -799,12 +800,19 @@ acpi_os_read_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
 	*value = value32;
 
 	return (result ? AE_ERROR : AE_OK);
+#else
+	int rc;
+
+	rc = pr_warn_once("PCI configuration space access is not supported\n");
+	return rc ? AE_SUPPORT : AE_OK;
+#endif
 }
 
 acpi_status
 acpi_os_write_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
 				u64 value, u32 width)
 {
+#ifdef CONFIG_PCI
 	int result, size;
 
 	switch (width) {
@@ -826,6 +834,12 @@ acpi_os_write_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
 				reg, size, value);
 
 	return (result ? AE_ERROR : AE_OK);
+#else
+	int rc;
+
+	rc = pr_warn_once("PCI configuration space access is not supported\n");
+	return rc ? AE_SUPPORT : AE_OK;
+#endif
 }
 
 static void acpi_os_execute_deferred(struct work_struct *work)
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v11 3/7] PCI/ACPI: Allow ACPI to be built without CONFIG_PCI set
       [not found] <20181218025606.32668-1-okaya@kernel.org>
  2018-12-18  2:56 ` [PATCH v11 1/7] ACPI: Allow CONFIG_PCI to be unset for reboot Sinan Kaya
  2018-12-18  2:56 ` [PATCH v11 2/7] ACPI / OSL: Stub out acpi_os_(read/write)_pci_configurations() Sinan Kaya
@ 2018-12-18  2:56 ` Sinan Kaya
  2018-12-18  2:56 ` [PATCH v11 4/7] ACPICA: Remove PCI bits from ACPICA when CONFIG_PCI is unset Sinan Kaya
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Sinan Kaya @ 2018-12-18  2:56 UTC (permalink / raw)
  To: linux-acpi
  Cc: Sinan Kaya, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	H. Peter Anvin, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT),
	Rafael J. Wysocki, Len Brown, Bjorn Helgaas, Robert Moore,
	Erik Schmauss, Andy Shevchenko, Christian König,
	Christian König, Otavio Pontes,
	open list:X86 ARCHITECTURE (32-BIT AND 64-BIT),
	open list:PCI SUBSYSTEM,
	open list:ACPI COMPONENT ARCHITECTURE (ACPICA)

We are compiling PCI code today for systems with ACPI and no PCI
device present. Remove the useless code and reduce the tight
dependency.

Signed-off-by: Sinan Kaya <okaya@kernel.org>
Acked-by: Bjorn Helgaas <bhelgaas@google.com> # PCI parts
Acked-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/pci_x86.h | 7 +++++++
 drivers/acpi/Kconfig           | 1 -
 drivers/acpi/Makefile          | 2 +-
 drivers/acpi/internal.h        | 5 +++++
 drivers/pci/Makefile           | 2 +-
 include/acpi/acpi_drivers.h    | 7 +++++++
 include/linux/acpi.h           | 7 +++++++
 include/linux/pci.h            | 4 ++++
 8 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
index 959d618dbb17..73bb404f4d2a 100644
--- a/arch/x86/include/asm/pci_x86.h
+++ b/arch/x86/include/asm/pci_x86.h
@@ -121,7 +121,14 @@ extern void __init dmi_check_pciprobe(void);
 extern void __init dmi_check_skip_isa_align(void);
 
 /* some common used subsys_initcalls */
+#ifdef CONFIG_PCI
 extern int __init pci_acpi_init(void);
+#else
+static inline int  __init pci_acpi_init(void)
+{
+	return -EINVAL;
+}
+#endif
 extern void __init pcibios_irq_init(void);
 extern int __init pcibios_init(void);
 extern int pci_legacy_init(void);
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index 7cea769c37df..a0abcb3bd673 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -9,7 +9,6 @@ config ARCH_SUPPORTS_ACPI
 menuconfig ACPI
 	bool "ACPI (Advanced Configuration and Power Interface) Support"
 	depends on ARCH_SUPPORTS_ACPI
-	depends on PCI
 	select PNP
 	default y if X86
 	help
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index edc039313cd6..7c6afc111d76 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -39,7 +39,7 @@ acpi-y				+= processor_core.o
 acpi-$(CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC) += processor_pdc.o
 acpi-y				+= ec.o
 acpi-$(CONFIG_ACPI_DOCK)	+= dock.o
-acpi-y				+= pci_root.o pci_link.o pci_irq.o
+acpi-$(CONFIG_PCI)		+= pci_root.o pci_link.o pci_irq.o
 obj-$(CONFIG_ACPI_MCFG)		+= pci_mcfg.o
 acpi-y				+= acpi_lpss.o acpi_apd.o
 acpi-y				+= acpi_platform.o
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
index 530a3f675490..b7060dae2789 100644
--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -25,8 +25,13 @@ int acpi_osi_init(void);
 acpi_status acpi_os_initialize1(void);
 void init_acpi_device_notify(void);
 int acpi_scan_init(void);
+#ifdef CONFIG_PCI
 void acpi_pci_root_init(void);
 void acpi_pci_link_init(void);
+#else
+static inline void acpi_pci_root_init(void) {}
+static inline void acpi_pci_link_init(void) {}
+#endif
 void acpi_processor_init(void);
 void acpi_platform_init(void);
 void acpi_pnp_init(void);
diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile
index f2bda77a2df1..657d642fcc67 100644
--- a/drivers/pci/Makefile
+++ b/drivers/pci/Makefile
@@ -11,6 +11,7 @@ ifdef CONFIG_PCI
 obj-$(CONFIG_PROC_FS)		+= proc.o
 obj-$(CONFIG_SYSFS)		+= slot.o
 obj-$(CONFIG_OF)		+= of.o
+obj-$(CONFIG_ACPI)		+= pci-acpi.o
 endif
 
 obj-$(CONFIG_PCI_QUIRKS)	+= quirks.o
@@ -20,7 +21,6 @@ obj-$(CONFIG_PCI_MSI)		+= msi.o
 obj-$(CONFIG_PCI_ATS)		+= ats.o
 obj-$(CONFIG_PCI_IOV)		+= iov.o
 obj-$(CONFIG_PCI_BRIDGE_EMUL)	+= pci-bridge-emul.o
-obj-$(CONFIG_ACPI)		+= pci-acpi.o
 obj-$(CONFIG_PCI_LABEL)		+= pci-label.o
 obj-$(CONFIG_X86_INTEL_MID)	+= pci-mid.o
 obj-$(CONFIG_PCI_SYSCALL)	+= syscall.o
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index 14499757338f..de1804aeaf69 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -88,7 +88,14 @@ int acpi_pci_link_free_irq(acpi_handle handle);
 
 struct pci_bus;
 
+#ifdef CONFIG_PCI
 struct pci_dev *acpi_get_pci_dev(acpi_handle);
+#else
+static inline struct pci_dev *acpi_get_pci_dev(acpi_handle handle)
+{
+	return NULL;
+}
+#endif
 
 /* Arch-defined function to add a bus to the system */
 
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index ed80f147bd50..eb1fdf4c196a 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -340,7 +340,14 @@ struct pci_dev;
 int acpi_pci_irq_enable (struct pci_dev *dev);
 void acpi_penalize_isa_irq(int irq, int active);
 bool acpi_isa_irq_available(int irq);
+#ifdef CONFIG_PCI
 void acpi_penalize_sci_irq(int irq, int trigger, int polarity);
+#else
+static inline void acpi_penalize_sci_irq(int irq, int trigger,
+					int polarity)
+{
+}
+#endif
 void acpi_pci_irq_disable (struct pci_dev *dev);
 
 extern int ec_read(u8 addr, u8 *val);
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 11c71c4ecf75..51a5a5217667 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1960,7 +1960,11 @@ int pcibios_set_pcie_reset_state(struct pci_dev *dev,
 				 enum pcie_reset_state state);
 int pcibios_add_device(struct pci_dev *dev);
 void pcibios_release_device(struct pci_dev *dev);
+#ifdef CONFIG_PCI
 void pcibios_penalize_isa_irq(int irq, int active);
+#else
+static inline void pcibios_penalize_isa_irq(int irq, int active) {}
+#endif
 int pcibios_alloc_irq(struct pci_dev *dev);
 void pcibios_free_irq(struct pci_dev *dev);
 resource_size_t pcibios_default_alignment(void);
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v11 4/7] ACPICA: Remove PCI bits from ACPICA when CONFIG_PCI is unset
       [not found] <20181218025606.32668-1-okaya@kernel.org>
                   ` (2 preceding siblings ...)
  2018-12-18  2:56 ` [PATCH v11 3/7] PCI/ACPI: Allow ACPI to be built without CONFIG_PCI set Sinan Kaya
@ 2018-12-18  2:56 ` Sinan Kaya
  2018-12-18  2:56 ` [PATCH v11 5/7] arm64: select ACPI PCI code only both features are enabled Sinan Kaya
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Sinan Kaya @ 2018-12-18  2:56 UTC (permalink / raw)
  To: linux-acpi
  Cc: Sinan Kaya, Robert Moore, Erik Schmauss, Rafael J. Wysocki,
	Len Brown, Lv Zheng, Anuj Mittal, Sebastian Andrzej Siewior,
	open list:ACPI COMPONENT ARCHITECTURE (ACPICA),
	open list

Now that we allow CONFIG_PCI to be unset, remove useless code from ACPICA
too.

Signed-off-by: Sinan Kaya <okaya@kernel.org>
---
 drivers/acpi/acpica/Makefile    | 2 +-
 drivers/acpi/acpica/achware.h   | 9 +++++++++
 include/acpi/platform/aclinux.h | 4 ++++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/acpica/Makefile b/drivers/acpi/acpica/Makefile
index b14621da5413..59700433a96e 100644
--- a/drivers/acpi/acpica/Makefile
+++ b/drivers/acpi/acpica/Makefile
@@ -77,13 +77,13 @@ acpi-y +=		\
 	hwacpi.o	\
 	hwesleep.o	\
 	hwgpe.o		\
-	hwpci.o		\
 	hwregs.o	\
 	hwsleep.o	\
 	hwvalid.o	\
 	hwxface.o	\
 	hwxfsleep.o
 
+acpi-$(CONFIG_PCI) += hwpci.o
 acpi-$(ACPI_FUTURE_USAGE) += hwtimer.o
 
 acpi-y +=		\
diff --git a/drivers/acpi/acpica/achware.h b/drivers/acpi/acpica/achware.h
index 43ce67a9da1f..ef99e2fc37f8 100644
--- a/drivers/acpi/acpica/achware.h
+++ b/drivers/acpi/acpica/achware.h
@@ -106,11 +106,20 @@ acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
 				 struct acpi_gpe_block_info *gpe_block,
 				 void *context);
 
+#ifdef ACPI_PCI_CONFIGURED
 /*
  * hwpci - PCI configuration support
  */
 acpi_status
 acpi_hw_derive_pci_id(struct acpi_pci_id *pci_id,
 		      acpi_handle root_pci_device, acpi_handle pci_region);
+#else
+static inline acpi_status
+acpi_hw_derive_pci_id(struct acpi_pci_id *pci_id, acpi_handle root_pci_device,
+		      acpi_handle pci_region)
+{
+	return AE_SUPPORT;
+}
+#endif
 
 #endif				/* __ACHWARE_H__ */
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h
index 7451b3bca83a..e3d21d014fcc 100644
--- a/include/acpi/platform/aclinux.h
+++ b/include/acpi/platform/aclinux.h
@@ -33,6 +33,10 @@
 
 /* Kernel specific ACPICA configuration */
 
+#ifdef CONFIG_PCI
+#define ACPI_PCI_CONFIGURED
+#endif
+
 #ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY
 #define ACPI_REDUCED_HARDWARE 1
 #endif
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v11 5/7] arm64: select ACPI PCI code only both features are enabled
       [not found] <20181218025606.32668-1-okaya@kernel.org>
                   ` (3 preceding siblings ...)
  2018-12-18  2:56 ` [PATCH v11 4/7] ACPICA: Remove PCI bits from ACPICA when CONFIG_PCI is unset Sinan Kaya
@ 2018-12-18  2:56 ` Sinan Kaya
  2018-12-18  2:56 ` [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set Sinan Kaya
  2018-12-18  2:56 ` [PATCH v11 7/7] ACPI: Make PCI slot detection driver depend on PCI Sinan Kaya
  6 siblings, 0 replies; 13+ messages in thread
From: Sinan Kaya @ 2018-12-18  2:56 UTC (permalink / raw)
  To: linux-acpi
  Cc: Sinan Kaya, Catalin Marinas, Will Deacon,
	moderated list:ARM64 PORT (AARCH64 ARCHITECTURE),
	open list

ACPI and PCI are no longer coupled to each other. Specify requirements
for both when pulling in code.

Signed-off-by: Sinan Kaya <okaya@kernel.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
---
 arch/arm64/Kconfig | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index ea2ab0330e3a..bcb6262044d8 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -5,7 +5,7 @@ config ARM64
 	select ACPI_GTDT if ACPI
 	select ACPI_IORT if ACPI
 	select ACPI_REDUCED_HARDWARE_ONLY if ACPI
-	select ACPI_MCFG if ACPI
+	select ACPI_MCFG if (ACPI && PCI)
 	select ACPI_SPCR_TABLE if ACPI
 	select ACPI_PPTT if ACPI
 	select ARCH_CLOCKSOURCE_DATA
@@ -163,7 +163,7 @@ config ARM64
 	select OF
 	select OF_EARLY_FLATTREE
 	select OF_RESERVED_MEM
-	select PCI_ECAM if ACPI
+	select PCI_ECAM if (ACPI && PCI)
 	select POWER_RESET
 	select POWER_SUPPLY
 	select REFCOUNT_FULL
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set
       [not found] <20181218025606.32668-1-okaya@kernel.org>
                   ` (4 preceding siblings ...)
  2018-12-18  2:56 ` [PATCH v11 5/7] arm64: select ACPI PCI code only both features are enabled Sinan Kaya
@ 2018-12-18  2:56 ` Sinan Kaya
  2018-12-18  7:44   ` Hanjun Guo
  2018-12-18 12:00   ` Lorenzo Pieralisi
  2018-12-18  2:56 ` [PATCH v11 7/7] ACPI: Make PCI slot detection driver depend on PCI Sinan Kaya
  6 siblings, 2 replies; 13+ messages in thread
From: Sinan Kaya @ 2018-12-18  2:56 UTC (permalink / raw)
  To: linux-acpi
  Cc: Sinan Kaya, Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla,
	Rafael J. Wysocki, Len Brown, open list

Remove PCI dependent code out of iort.c when CONFIG_PCI is not defined.
A quick search reveals the following functions:
1. pci_request_acs()
2. pci_domain_nr()
3. pci_is_root_bus()
4. to_pci_dev()

Both pci_domain_nr() and pci_is_root_bus() are defined in linux/pci.h.
pci_domain_nr() is a stub function when CONFIG_PCI is not set and
pci_is_root_bus() just returns a reference to a structure member which
is still valid without CONFIG_PCI set.

to_pci_dev() is a macro that expands to container_of.

pci_request_acs() is the only code that gets pulled in from drivers/pci/*.c

Signed-off-by: Sinan Kaya <okaya@kernel.org>
---
 drivers/acpi/arm64/iort.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index 70f4e80b9246..beb7e4c05bf5 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -1435,8 +1435,14 @@ static int __init iort_add_platform_device(struct acpi_iort_node *node,
 	return ret;
 }
 
-static bool __init iort_enable_acs(struct acpi_iort_node *iort_node)
+#ifdef CONFIG_PCI
+static void __init iort_enable_acs(struct acpi_iort_node *iort_node)
 {
+	static bool acs_enabled __initdata;
+
+	if (acs_enabled)
+		return;
+
 	if (iort_node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
 		struct acpi_iort_node *parent;
 		struct acpi_iort_id_mapping *map;
@@ -1458,13 +1464,16 @@ static bool __init iort_enable_acs(struct acpi_iort_node *iort_node)
 			if ((parent->type == ACPI_IORT_NODE_SMMU) ||
 				(parent->type == ACPI_IORT_NODE_SMMU_V3)) {
 				pci_request_acs();
-				return true;
+				acs_enabled = true;
+				return;
 			}
 		}
 	}
-
-	return false;
+	return;
 }
+#else
+static inline void iort_enable_acs(struct acpi_iort_node *iort_node) { }
+#endif
 
 static void __init iort_init_platform_devices(void)
 {
@@ -1472,7 +1481,6 @@ static void __init iort_init_platform_devices(void)
 	struct acpi_table_iort *iort;
 	struct fwnode_handle *fwnode;
 	int i, ret;
-	bool acs_enabled = false;
 	const struct iort_dev_config *ops;
 
 	/*
@@ -1493,8 +1501,7 @@ static void __init iort_init_platform_devices(void)
 			return;
 		}
 
-		if (!acs_enabled)
-			acs_enabled = iort_enable_acs(iort_node);
+		iort_enable_acs(iort_node);
 
 		ops = iort_get_dev_cfg(iort_node);
 		if (ops) {
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v11 7/7] ACPI: Make PCI slot detection driver depend on PCI
       [not found] <20181218025606.32668-1-okaya@kernel.org>
                   ` (5 preceding siblings ...)
  2018-12-18  2:56 ` [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set Sinan Kaya
@ 2018-12-18  2:56 ` Sinan Kaya
  6 siblings, 0 replies; 13+ messages in thread
From: Sinan Kaya @ 2018-12-18  2:56 UTC (permalink / raw)
  To: linux-acpi; +Cc: Sinan Kaya, Rafael J. Wysocki, Len Brown, open list

Since this is ACPI PCI slot detection driver for PCI, it doesn't make sense
to compile this without PCI support in place.

Signed-off-by: Sinan Kaya <okaya@kernel.org>
---
 drivers/acpi/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index a0abcb3bd673..8b6ff80a69cd 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -369,7 +369,7 @@ config ACPI_DEBUG
 
 config ACPI_PCI_SLOT
 	bool "PCI slot detection driver"
-	depends on SYSFS
+	depends on SYSFS && PCI
 	help
 	  This driver creates entries in /sys/bus/pci/slots/ for all PCI
 	  slots in the system.  This can help correlate PCI bus addresses,
-- 
2.19.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v11 1/7] ACPI: Allow CONFIG_PCI to be unset for reboot
  2018-12-18  2:56 ` [PATCH v11 1/7] ACPI: Allow CONFIG_PCI to be unset for reboot Sinan Kaya
@ 2018-12-18  7:31   ` Christoph Hellwig
  2018-12-19 22:21     ` Sinan Kaya
  0 siblings, 1 reply; 13+ messages in thread
From: Christoph Hellwig @ 2018-12-18  7:31 UTC (permalink / raw)
  To: Sinan Kaya; +Cc: linux-acpi, Rafael J. Wysocki, Len Brown, open list

> +#ifdef CONFIG_PCI
> +		unsigned int devfn;
> +		struct pci_bus *bus0;
> +
>  		/* The reset register can only live on bus 0. */
>  		bus0 = pci_find_bus(0, 0);
>  		if (!bus0)
> @@ -44,8 +47,9 @@ void acpi_reboot(void)
>  		/* Write the value that resets us. */
>  		pci_bus_write_config_byte(bus0, devfn,
>  				(rr->address & 0xffff), reset_value);
> +#endif

This would be a lot cleaner if this was split into a little helper
function.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v11 2/7] ACPI / OSL: Stub out acpi_os_(read/write)_pci_configurations()
  2018-12-18  2:56 ` [PATCH v11 2/7] ACPI / OSL: Stub out acpi_os_(read/write)_pci_configurations() Sinan Kaya
@ 2018-12-18  7:32   ` Christoph Hellwig
  2018-12-19 22:22     ` Sinan Kaya
  0 siblings, 1 reply; 13+ messages in thread
From: Christoph Hellwig @ 2018-12-18  7:32 UTC (permalink / raw)
  To: Sinan Kaya; +Cc: linux-acpi, Rafael J. Wysocki, Len Brown, open list

On Tue, Dec 18, 2018 at 02:56:01AM +0000, Sinan Kaya wrote:
> Getting ready to allow CONFIG_PCI to be unset with ACPI enabled. Stub out
> acpi_os_read_pci_configuration and acpi_os_write_pci_configuration
> functions when CONFIG_PCI is not defined.
> 
> Signed-off-by: Sinan Kaya <okaya@kernel.org>
> ---
>  drivers/acpi/osl.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
> index b48874b8e1ea..524fd5f33ea4 100644
> --- a/drivers/acpi/osl.c
> +++ b/drivers/acpi/osl.c
> @@ -773,6 +773,7 @@ acpi_status
>  acpi_os_read_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
>  			       u64 *value, u32 width)
>  {
> +#ifdef CONFIG_PCI
>  	int result, size;
>  	u32 value32;
>  
> @@ -799,12 +800,19 @@ acpi_os_read_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
>  	*value = value32;
>  
>  	return (result ? AE_ERROR : AE_OK);
> +#else
> +	int rc;
> +
> +	rc = pr_warn_once("PCI configuration space access is not supported\n");
> +	return rc ? AE_SUPPORT : AE_OK;
> +#endif

Normally we provide a full separate stub version.  If we have enough
of them in a separate file.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set
  2018-12-18  2:56 ` [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set Sinan Kaya
@ 2018-12-18  7:44   ` Hanjun Guo
  2018-12-18 12:00   ` Lorenzo Pieralisi
  1 sibling, 0 replies; 13+ messages in thread
From: Hanjun Guo @ 2018-12-18  7:44 UTC (permalink / raw)
  To: Sinan Kaya, linux-acpi
  Cc: Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla, Rafael J. Wysocki,
	Len Brown, open list

On 2018/12/18 10:56, Sinan Kaya wrote:
> Remove PCI dependent code out of iort.c when CONFIG_PCI is not defined.
> A quick search reveals the following functions:
> 1. pci_request_acs()
> 2. pci_domain_nr()
> 3. pci_is_root_bus()
> 4. to_pci_dev()
> 
> Both pci_domain_nr() and pci_is_root_bus() are defined in linux/pci.h.
> pci_domain_nr() is a stub function when CONFIG_PCI is not set and
> pci_is_root_bus() just returns a reference to a structure member which
> is still valid without CONFIG_PCI set.
> 
> to_pci_dev() is a macro that expands to container_of.
> 
> pci_request_acs() is the only code that gets pulled in from drivers/pci/*.c

Actually we have pci_for_each_dma_alias() too which is from
drivers/pci/search.c without stub function in linux/pci.h, but I
didn't get the compile error at link time, I think the compiler
just do some optimization to remove the dead code because
dev_is_pci() is obvious false.

Thanks
Hanjun


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set
  2018-12-18  2:56 ` [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set Sinan Kaya
  2018-12-18  7:44   ` Hanjun Guo
@ 2018-12-18 12:00   ` Lorenzo Pieralisi
  1 sibling, 0 replies; 13+ messages in thread
From: Lorenzo Pieralisi @ 2018-12-18 12:00 UTC (permalink / raw)
  To: Sinan Kaya
  Cc: linux-acpi, Hanjun Guo, Sudeep Holla, Rafael J. Wysocki,
	Len Brown, open list

On Tue, Dec 18, 2018 at 02:56:05AM +0000, Sinan Kaya wrote:
> Remove PCI dependent code out of iort.c when CONFIG_PCI is not defined.
> A quick search reveals the following functions:
> 1. pci_request_acs()
> 2. pci_domain_nr()
> 3. pci_is_root_bus()
> 4. to_pci_dev()
> 
> Both pci_domain_nr() and pci_is_root_bus() are defined in linux/pci.h.
> pci_domain_nr() is a stub function when CONFIG_PCI is not set and
> pci_is_root_bus() just returns a reference to a structure member which
> is still valid without CONFIG_PCI set.
> 
> to_pci_dev() is a macro that expands to container_of.
> 
> pci_request_acs() is the only code that gets pulled in from drivers/pci/*.c

I am not a big fan of these assumptions but we can stub all code
relying on those behind the CONFIG_PCI guard later, which would result
in cleaner code too.

> 
> Signed-off-by: Sinan Kaya <okaya@kernel.org>
> ---
>  drivers/acpi/arm64/iort.c | 21 ++++++++++++++-------
>  1 file changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index 70f4e80b9246..beb7e4c05bf5 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -1435,8 +1435,14 @@ static int __init iort_add_platform_device(struct acpi_iort_node *node,
>  	return ret;
>  }
>  
> -static bool __init iort_enable_acs(struct acpi_iort_node *iort_node)
> +#ifdef CONFIG_PCI
> +static void __init iort_enable_acs(struct acpi_iort_node *iort_node)
>  {
> +	static bool acs_enabled __initdata;
> +
> +	if (acs_enabled)
> +		return;
> +
>  	if (iort_node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) {
>  		struct acpi_iort_node *parent;
>  		struct acpi_iort_id_mapping *map;
> @@ -1458,13 +1464,16 @@ static bool __init iort_enable_acs(struct acpi_iort_node *iort_node)
>  			if ((parent->type == ACPI_IORT_NODE_SMMU) ||
>  				(parent->type == ACPI_IORT_NODE_SMMU_V3)) {
>  				pci_request_acs();
> -				return true;
> +				acs_enabled = true;
> +				return;
>  			}
>  		}
>  	}
> -
> -	return false;
> +	return;

Remove this return;

With that updated:

Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

>  }
> +#else
> +static inline void iort_enable_acs(struct acpi_iort_node *iort_node) { }
> +#endif
>  
>  static void __init iort_init_platform_devices(void)
>  {
> @@ -1472,7 +1481,6 @@ static void __init iort_init_platform_devices(void)
>  	struct acpi_table_iort *iort;
>  	struct fwnode_handle *fwnode;
>  	int i, ret;
> -	bool acs_enabled = false;
>  	const struct iort_dev_config *ops;
>  
>  	/*
> @@ -1493,8 +1501,7 @@ static void __init iort_init_platform_devices(void)
>  			return;
>  		}
>  
> -		if (!acs_enabled)
> -			acs_enabled = iort_enable_acs(iort_node);
> +		iort_enable_acs(iort_node);
>  
>  		ops = iort_get_dev_cfg(iort_node);
>  		if (ops) {
> -- 
> 2.19.0
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v11 1/7] ACPI: Allow CONFIG_PCI to be unset for reboot
  2018-12-18  7:31   ` Christoph Hellwig
@ 2018-12-19 22:21     ` Sinan Kaya
  0 siblings, 0 replies; 13+ messages in thread
From: Sinan Kaya @ 2018-12-19 22:21 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-acpi, Rafael J. Wysocki, Len Brown, open list

On 12/18/2018 8:31 AM, Christoph Hellwig wrote:
>> @@ -44,8 +47,9 @@ void acpi_reboot(void)
>>   		/* Write the value that resets us. */
>>   		pci_bus_write_config_byte(bus0, devfn,
>>   				(rr->address & 0xffff), reset_value);
>> +#endif
> This would be a lot cleaner if this was split into a little helper
> function.
> 

done.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v11 2/7] ACPI / OSL: Stub out acpi_os_(read/write)_pci_configurations()
  2018-12-18  7:32   ` Christoph Hellwig
@ 2018-12-19 22:22     ` Sinan Kaya
  0 siblings, 0 replies; 13+ messages in thread
From: Sinan Kaya @ 2018-12-19 22:22 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-acpi, Rafael J. Wysocki, Len Brown, open list

On 12/18/2018 8:32 AM, Christoph Hellwig wrote:
>> +
>> +	rc = pr_warn_once("PCI configuration space access is not supported\n");
>> +	return rc ? AE_SUPPORT : AE_OK;
>> +#endif
> Normally we provide a full separate stub version.  If we have enough
> of them in a separate file.
> 

I removed the dependent functions from ACPICA and moved #ifdef outside of these
two function scopes.

Got rid of the inline piece.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2018-12-19 22:22 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20181218025606.32668-1-okaya@kernel.org>
2018-12-18  2:56 ` [PATCH v11 1/7] ACPI: Allow CONFIG_PCI to be unset for reboot Sinan Kaya
2018-12-18  7:31   ` Christoph Hellwig
2018-12-19 22:21     ` Sinan Kaya
2018-12-18  2:56 ` [PATCH v11 2/7] ACPI / OSL: Stub out acpi_os_(read/write)_pci_configurations() Sinan Kaya
2018-12-18  7:32   ` Christoph Hellwig
2018-12-19 22:22     ` Sinan Kaya
2018-12-18  2:56 ` [PATCH v11 3/7] PCI/ACPI: Allow ACPI to be built without CONFIG_PCI set Sinan Kaya
2018-12-18  2:56 ` [PATCH v11 4/7] ACPICA: Remove PCI bits from ACPICA when CONFIG_PCI is unset Sinan Kaya
2018-12-18  2:56 ` [PATCH v11 5/7] arm64: select ACPI PCI code only both features are enabled Sinan Kaya
2018-12-18  2:56 ` [PATCH v11 6/7] ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set Sinan Kaya
2018-12-18  7:44   ` Hanjun Guo
2018-12-18 12:00   ` Lorenzo Pieralisi
2018-12-18  2:56 ` [PATCH v11 7/7] ACPI: Make PCI slot detection driver depend on PCI Sinan Kaya

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).