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. */
 | 
						/* Indicate support for various _OSC capabilities. */
 | 
				
			||||||
	if (pci_ext_cfg_avail(root->bus->self))
 | 
						if (pci_ext_cfg_avail(root->bus->self))
 | 
				
			||||||
		flags |= OSC_EXT_PCI_CONFIG_SUPPORT;
 | 
							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)
 | 
						if (flags != base_flags)
 | 
				
			||||||
		pci_acpi_osc_support(device->handle, flags);
 | 
							pci_acpi_osc_support(device->handle, flags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -857,24 +857,15 @@ void pcie_no_aspm(void)
 | 
				
			||||||
		aspm_disabled = 1;
 | 
							aspm_disabled = 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_ACPI
 | 
					/**
 | 
				
			||||||
#include <acpi/acpi_bus.h>
 | 
					 * pcie_aspm_enabled - is PCIe ASPM enabled?
 | 
				
			||||||
#include <linux/pci-acpi.h>
 | 
					 *
 | 
				
			||||||
static void pcie_aspm_platform_init(void)
 | 
					 * 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|
 | 
					       return !aspm_disabled;
 | 
				
			||||||
		OSC_CLOCK_PWR_CAPABILITY_SUPPORT);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else
 | 
					EXPORT_SYMBOL(pcie_aspm_enabled);
 | 
				
			||||||
static inline void pcie_aspm_platform_init(void) { }
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
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);
 | 
					extern void pci_restore_msi_state(struct pci_dev *dev);
 | 
				
			||||||
#endif
 | 
					#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
 | 
					#ifdef CONFIG_HT_IRQ
 | 
				
			||||||
/* The functions a driver should call */
 | 
					/* The functions a driver should call */
 | 
				
			||||||
int  ht_create_irq(struct pci_dev *dev, int idx);
 | 
					int  ht_create_irq(struct pci_dev *dev, int idx);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue