diff options
Diffstat (limited to 'drivers/pci/pcie')
-rw-r--r-- | drivers/pci/pcie/aer/aer_inject.c | 2 | ||||
-rw-r--r-- | drivers/pci/pcie/aer/aerdrv.h | 9 | ||||
-rw-r--r-- | drivers/pci/pcie/aspm.c | 21 |
3 files changed, 18 insertions, 14 deletions
diff --git a/drivers/pci/pcie/aer/aer_inject.c b/drivers/pci/pcie/aer/aer_inject.c index f62079ff06dd..95489cd9a555 100644 --- a/drivers/pci/pcie/aer/aer_inject.c +++ b/drivers/pci/pcie/aer/aer_inject.c | |||
@@ -326,7 +326,7 @@ static int aer_inject(struct aer_error_inj *einj) | |||
326 | unsigned long flags; | 326 | unsigned long flags; |
327 | unsigned int devfn = PCI_DEVFN(einj->dev, einj->fn); | 327 | unsigned int devfn = PCI_DEVFN(einj->dev, einj->fn); |
328 | int pos_cap_err, rp_pos_cap_err; | 328 | int pos_cap_err, rp_pos_cap_err; |
329 | u32 sever, cor_mask, uncor_mask, cor_mask_orig, uncor_mask_orig; | 329 | u32 sever, cor_mask, uncor_mask, cor_mask_orig = 0, uncor_mask_orig = 0; |
330 | int ret = 0; | 330 | int ret = 0; |
331 | 331 | ||
332 | dev = pci_get_domain_bus_and_slot((int)einj->domain, einj->bus, devfn); | 332 | dev = pci_get_domain_bus_and_slot((int)einj->domain, einj->bus, devfn); |
diff --git a/drivers/pci/pcie/aer/aerdrv.h b/drivers/pci/pcie/aer/aerdrv.h index 3eb77080366a..94a7598eb262 100644 --- a/drivers/pci/pcie/aer/aerdrv.h +++ b/drivers/pci/pcie/aer/aerdrv.h | |||
@@ -114,15 +114,6 @@ extern void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); | |||
114 | extern void aer_print_port_info(struct pci_dev *dev, struct aer_err_info *info); | 114 | extern void aer_print_port_info(struct pci_dev *dev, struct aer_err_info *info); |
115 | extern irqreturn_t aer_irq(int irq, void *context); | 115 | extern irqreturn_t aer_irq(int irq, void *context); |
116 | 116 | ||
117 | #ifdef CONFIG_ACPI | ||
118 | extern int aer_osc_setup(struct pcie_device *pciedev); | ||
119 | #else | ||
120 | static inline int aer_osc_setup(struct pcie_device *pciedev) | ||
121 | { | ||
122 | return 0; | ||
123 | } | ||
124 | #endif | ||
125 | |||
126 | #ifdef CONFIG_ACPI_APEI | 117 | #ifdef CONFIG_ACPI_APEI |
127 | extern int pcie_aer_get_firmware_first(struct pci_dev *pci_dev); | 118 | extern int pcie_aer_get_firmware_first(struct pci_dev *pci_dev); |
128 | #else | 119 | #else |
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index eee09f756ec9..6892601fc76f 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c | |||
@@ -608,7 +608,7 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev) | |||
608 | * the BIOS's expectation, we'll do so once pci_enable_device() is | 608 | * the BIOS's expectation, we'll do so once pci_enable_device() is |
609 | * called. | 609 | * called. |
610 | */ | 610 | */ |
611 | if (aspm_policy != POLICY_POWERSAVE) { | 611 | if (aspm_policy != POLICY_POWERSAVE || aspm_clear_state) { |
612 | pcie_config_aspm_path(link); | 612 | pcie_config_aspm_path(link); |
613 | pcie_set_clkpm(link, policy_to_clkpm_state(link)); | 613 | pcie_set_clkpm(link, policy_to_clkpm_state(link)); |
614 | } | 614 | } |
@@ -734,7 +734,7 @@ void pcie_aspm_powersave_config_link(struct pci_dev *pdev) | |||
734 | * pci_disable_link_state - disable pci device's link state, so the link will | 734 | * pci_disable_link_state - disable pci device's link state, so the link will |
735 | * never enter specific states | 735 | * never enter specific states |
736 | */ | 736 | */ |
737 | void pci_disable_link_state(struct pci_dev *pdev, int state) | 737 | static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem) |
738 | { | 738 | { |
739 | struct pci_dev *parent = pdev->bus->self; | 739 | struct pci_dev *parent = pdev->bus->self; |
740 | struct pcie_link_state *link; | 740 | struct pcie_link_state *link; |
@@ -747,7 +747,8 @@ void pci_disable_link_state(struct pci_dev *pdev, int state) | |||
747 | if (!parent || !parent->link_state) | 747 | if (!parent || !parent->link_state) |
748 | return; | 748 | return; |
749 | 749 | ||
750 | down_read(&pci_bus_sem); | 750 | if (sem) |
751 | down_read(&pci_bus_sem); | ||
751 | mutex_lock(&aspm_lock); | 752 | mutex_lock(&aspm_lock); |
752 | link = parent->link_state; | 753 | link = parent->link_state; |
753 | if (state & PCIE_LINK_STATE_L0S) | 754 | if (state & PCIE_LINK_STATE_L0S) |
@@ -761,7 +762,19 @@ void pci_disable_link_state(struct pci_dev *pdev, int state) | |||
761 | pcie_set_clkpm(link, 0); | 762 | pcie_set_clkpm(link, 0); |
762 | } | 763 | } |
763 | mutex_unlock(&aspm_lock); | 764 | mutex_unlock(&aspm_lock); |
764 | up_read(&pci_bus_sem); | 765 | if (sem) |
766 | up_read(&pci_bus_sem); | ||
767 | } | ||
768 | |||
769 | void pci_disable_link_state_locked(struct pci_dev *pdev, int state) | ||
770 | { | ||
771 | __pci_disable_link_state(pdev, state, false); | ||
772 | } | ||
773 | EXPORT_SYMBOL(pci_disable_link_state_locked); | ||
774 | |||
775 | void pci_disable_link_state(struct pci_dev *pdev, int state) | ||
776 | { | ||
777 | __pci_disable_link_state(pdev, state, true); | ||
765 | } | 778 | } |
766 | EXPORT_SYMBOL(pci_disable_link_state); | 779 | EXPORT_SYMBOL(pci_disable_link_state); |
767 | 780 | ||