forked from mirrors/linux
		
	ACPI/PCI: PCIe ASPM _OSC support capabilities called when root bridge added
The _OSC capabilities OSC_ACTIVE_STATE_PWR_SUPPORT and OSC_CLOCK_PWR_CAPABILITY_SUPPORT are set when the root bridge is added with pci_acpi_osc_support(), so we no longer need to do it in the ASPM driver. Also add the function pcie_aspm_enabled, which returns true if pcie_aspm=off is not on the kernel command-line. Signed-off-by: Andrew Patterson <andrew.patterson@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
		
							parent
							
								
									0ef5f8f615
								
							
						
					
					
						commit
						3e1b16002a
					
				
					 3 changed files with 21 additions and 18 deletions
				
			
		|  | @ -347,6 +347,9 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device) | |||
| 	/* Indicate support for various _OSC capabilities. */ | ||||
| 	if (pci_ext_cfg_avail(root->bus->self)) | ||||
| 		flags |= OSC_EXT_PCI_CONFIG_SUPPORT; | ||||
| 	if (pcie_aspm_enabled()) | ||||
| 		flags |= OSC_ACTIVE_STATE_PWR_SUPPORT | | ||||
| 			OSC_CLOCK_PWR_CAPABILITY_SUPPORT; | ||||
| 	if (flags != base_flags) | ||||
| 		pci_acpi_osc_support(device->handle, flags); | ||||
| 
 | ||||
|  |  | |||
|  | @ -857,24 +857,15 @@ void pcie_no_aspm(void) | |||
| 		aspm_disabled = 1; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI | ||||
| #include <acpi/acpi_bus.h> | ||||
| #include <linux/pci-acpi.h> | ||||
| static void pcie_aspm_platform_init(void) | ||||
| /**
 | ||||
|  * pcie_aspm_enabled - is PCIe ASPM enabled? | ||||
|  * | ||||
|  * Returns true if ASPM has not been disabled by the command-line option | ||||
|  * pcie_aspm=off. | ||||
|  **/ | ||||
| int pcie_aspm_enabled(void) | ||||
| { | ||||
| 	pcie_osc_support_set(OSC_ACTIVE_STATE_PWR_SUPPORT| | ||||
| 		OSC_CLOCK_PWR_CAPABILITY_SUPPORT); | ||||
|        return !aspm_disabled; | ||||
| } | ||||
| #else | ||||
| static inline void pcie_aspm_platform_init(void) { } | ||||
| #endif | ||||
| EXPORT_SYMBOL(pcie_aspm_enabled); | ||||
| 
 | ||||
| static int __init pcie_aspm_init(void) | ||||
| { | ||||
| 	if (aspm_disabled) | ||||
| 		return 0; | ||||
| 	pcie_aspm_platform_init(); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| fs_initcall(pcie_aspm_init); | ||||
|  |  | |||
|  | @ -791,6 +791,15 @@ extern void msi_remove_pci_irq_vectors(struct pci_dev *dev); | |||
| extern void pci_restore_msi_state(struct pci_dev *dev); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef CONFIG_PCIEASPM | ||||
| static inline int pcie_aspm_enabled(void) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| #else | ||||
| extern int pcie_aspm_enabled(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_HT_IRQ | ||||
| /* The functions a driver should call */ | ||||
| int  ht_create_irq(struct pci_dev *dev, int idx); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Andrew Patterson
						Andrew Patterson