ACPI: Move PCI reset to a separate function
PATCH v12 1/7 ACPI: Move PCI reset to a separate function
In reply to a message not in the archiveGetting ready to factor out PCI specific code when CONFIG_PCI is unset. Create a acpi_pci_reset() that kick starts PCI specific reset.
--- drivers/acpi/reboot.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-)
drivers/acpi/reboot.c +19 -13
@@ -4,11 +4,27 @@#include <linux/acpi.h> #include <acpi/reboot.h> +static void acpi_pci_reboot (struct acpi_generic_address *rr,u8 reset_value) +{ +unsigned int devfn; +struct pci_bus *bus0; + +/* The reset register can only live on bus 0. */ + bus0 =pci_find_bus (0 ,0 ); +if (!bus0) +return ; +/* Form PCI device/function pair. */ + devfn =PCI_DEVFN ((rr->address >>32 ) &0xffff , + (rr->address >>16 ) &0xffff ); +pr_debug ("Resetting with ACPI PCI RESET_REG.\n" ); +/* Write the value that resets us. */ +pci_bus_write_config_byte (bus0, devfn, + (rr->address &0xffff ), reset_value); +} +void acpi_reboot (void ) {struct acpi_generic_address *rr; -struct pci_bus *bus0; -unsigned int devfn;u8 reset_value;if (acpi_disabled)
@@ -33,17 +49,7 @@ void acpi_reboot(void)* on a device on bus 0. */ switch (rr->space_id) {case ACPI_ADR_SPACE_PCI_CONFIG : -/* The reset register can only live on bus 0. */ - bus0 =pci_find_bus (0 ,0 ); -if (!bus0) -return ; -/* Form PCI device/function pair. */ - devfn =PCI_DEVFN ((rr->address >>32 ) &0xffff , - (rr->address >>16 ) &0xffff ); -printk (KERN_DEBUG "Resetting with ACPI PCI RESET_REG.\n" ); -/* Write the value that resets us. */ -pci_bus_write_config_byte (bus0, devfn, - (rr->address &0xffff ), reset_value); +acpi_pci_reboot (rr, reset_value);break ;case ACPI_ADR_SPACE_SYSTEM_MEMORY :
Signature · 1 line
2.19.0
PATCH v12 2/7 ACPI: Allow CONFIG_PCI to be unset for reboot
In reply to a message not in the archiveMake PCI reboot conditional on CONFIG_PCI set on the kernel configuration.
--- drivers/acpi/reboot.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/acpi/reboot.c +8 -0
@@ -4,6 +4,7 @@#include <linux/acpi.h> #include <acpi/reboot.h> +#ifdef CONFIG_PCI static void acpi_pci_reboot (struct acpi_generic_address *rr,u8 reset_value) {unsigned int devfn;
@@ -21,6 +22,13 @@ static void acpi_pci_reboot(struct acpi_generic_address *rr, u8 reset_value)pci_bus_write_config_byte (bus0, devfn, (rr->address & 0xffff), reset_value); } +#else +static inline void acpi_pci_reboot (struct acpi_generic_address *rr, +u8 reset_value) +{ +pr_warn_once ("PCI configuration space access is not supported\n" ); +} +#endif void acpi_reboot (void ) {
Signature · 1 line
2.19.0
PATCH v12 3/7 ACPICA: Remove PCI bits from ACPICA when CONFIG_PCI is unset
In reply to a message not in the archiveAllow ACPI to be built without PCI support in place.
--- drivers/acpi/acpica/Makefile | 2 +- drivers/acpi/acpica/achware.h | 9 +++++++++ drivers/acpi/acpica/evhandler.c | 8 ++++---- drivers/acpi/acpica/exregion.c | 4 ++++ drivers/acpi/osl.c | 2 ++ include/acpi/platform/aclinux.h | 4 ++++ 6 files changed, 24 insertions(+), 5 deletions(-)
drivers/acpi/acpica/Makefile +1 -1
@@ -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 += \
drivers/acpi/acpica/achware.h +9 -0
@@ -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__ */
drivers/acpi/acpica/evhandler.c +4 -4
@@ -364,25 +364,25 @@ acpi_ev_install_space_handler(struct acpi_namespace_node *node, handler = acpi_ex_system_io_space_handler; setup = acpi_ev_io_space_region_setup;break ; - +#ifdef ACPI_PCI_CONFIGURED case ACPI_ADR_SPACE_PCI_CONFIG : handler = acpi_ex_pci_config_space_handler; setup = acpi_ev_pci_config_region_setup;break ; - +#endif case ACPI_ADR_SPACE_CMOS : handler = acpi_ex_cmos_space_handler; setup = acpi_ev_cmos_region_setup;break ; - +#ifdef ACPI_PCI_CONFIGURED case ACPI_ADR_SPACE_PCI_BAR_TARGET : handler = acpi_ex_pci_bar_space_handler; setup = acpi_ev_pci_bar_region_setup;break ; - +#endif case ACPI_ADR_SPACE_DATA_TABLE : handler = acpi_ex_data_table_space_handler;
drivers/acpi/acpica/exregion.c +4 -0
@@ -311,6 +311,7 @@ acpi_ex_system_io_space_handler(u32 function,return_ACPI_STATUS (status); } +#ifdef ACPI_PCI_CONFIGURED /******************************************************************************* * * FUNCTION: acpi_ex_pci_config_space_handler
@@ -387,6 +388,7 @@ acpi_ex_pci_config_space_handler(u32 function, return_ACPI_STATUS(status); } +#endif /******************************************************************************* *
@@ -420,6 +422,7 @@ acpi_ex_cmos_space_handler(u32 function,return_ACPI_STATUS (status); } +#ifdef ACPI_PCI_CONFIGURED /******************************************************************************* * * FUNCTION: acpi_ex_pci_bar_space_handler
@@ -451,6 +454,7 @@ acpi_ex_pci_bar_space_handler(u32 function, return_ACPI_STATUS(status); } +#endif /******************************************************************************* *
drivers/acpi/osl.c +2 -0
@@ -769,6 +769,7 @@ acpi_os_write_memory(acpi_physical_address phys_addr, u64 value, u32 width)return AE_OK ; } +#ifdef CONFIG_PCI acpi_status acpi_os_read_pci_configuration (struct acpi_pci_id * pci_id,u32 reg,u64 *value,u32 width)
@@ -827,6 +828,7 @@ acpi_os_write_pci_configuration(struct acpi_pci_id * pci_id, u32 reg, return (result ? AE_ERROR : AE_OK); } +#endif static void acpi_os_execute_deferred (struct work_struct *work) {
include/acpi/platform/aclinux.h +4 -0
@@ -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
Signature · 1 line
2.19.0
PATCH v12 4/7 PCI/ACPI: Allow ACPI to be built without CONFIG_PCI set
In reply to a message not in the archiveWe are compiling PCI code today for systems with ACPI and no PCI device present. Remove the useless code and reduce the tight dependency.
--- 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(-)
arch/x86/include/asm/pci_x86.h +7 -0
@@ -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 );
drivers/acpi/Kconfig +0 -1
@@ -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
drivers/acpi/Makefile +1 -1
@@ -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
drivers/acpi/internal.h +5 -0
@@ -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 );
drivers/pci/Makefile +1 -1
@@ -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
include/acpi/acpi_drivers.h +7 -0
@@ -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 */
include/linux/acpi.h +7 -0
@@ -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);
include/linux/pci.h +4 -0
@@ -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 );
Signature · 1 line
2.19.0
PATCH v12 5/7 arm64: select ACPI PCI code only when both features are enabled
In reply to a message not in the archiveACPI and PCI are no longer coupled to each other. Specify requirements for both when pulling in code.
--- arch/arm64/Kconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm64/Kconfig +2 -2
@@ -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
Signature · 1 line
2.19.0
PATCH v12 6/7 ACPI/IORT: Stub out ACS functions when CONFIG_PCI is not set
In reply to a message not in the archiveRemove 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
--- drivers/acpi/arm64/iort.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
drivers/acpi/arm64/iort.c +13 -7
@@ -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,15 @@ 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; } +#else +static inline void iort_enable_acs (struct acpi_iort_node *iort_node) { } +#endif static void __init iort_init_platform_devices (void ) {
@@ -1472,7 +1480,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 +1500,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) {
Signature · 1 line
2.19.0
PATCH v12 7/7 ACPI: Make PCI slot detection driver depend on PCI
In reply to a message not in the archiveSince this is ACPI PCI slot detection driver for PCI, it doesn't make sense to compile this without PCI support in place.
--- drivers/acpi/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/acpi/Kconfig +1 -1
@@ -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,
Signature · 1 line
2.19.0