mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
Merge branch 'acpi-resources'
* acpi-resources: (23 commits) Merge branch 'pci/host-generic' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci into acpi-resources x86/irq, ACPI: Implement ACPI driver to support IOAPIC hotplug ACPI: Add interfaces to parse IOAPIC ID for IOAPIC hotplug x86/PCI: Refine the way to release PCI IRQ resources x86/PCI/ACPI: Use common ACPI resource interfaces to simplify implementation x86/PCI: Fix the range check for IO resources PCI: Use common resource list management code instead of private implementation resources: Move struct resource_list_entry from ACPI into resource core ACPI: Introduce helper function acpi_dev_filter_resource_type() ACPI: Add field offset to struct resource_list_entry ACPI: Translate resource into master side address for bridge window resources ACPI: Return translation offset when parsing ACPI address space resources ACPI: Enforce stricter checks for address space descriptors ACPI: Set flag IORESOURCE_UNSET for unassigned resources ACPI: Normalize return value of resource parser functions ACPI: Fix a bug in parsing ACPI Memory24 resource ACPI: Add prefetch decoding to the address space parser ACPI: Move the window flag logic to the combined parser ACPI: Unify the parsing of address_space and ext_address_space ACPI: Let the parser return false for disabled resources ...
This commit is contained in:
commit
8fbcf5ecb3
30 changed files with 879 additions and 456 deletions
|
@ -513,6 +513,31 @@ void __init pcibios_set_cache_line_size(void)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Some device drivers assume dev->irq won't change after calling
|
||||
* pci_disable_device(). So delay releasing of IRQ resource to driver
|
||||
* unbinding time. Otherwise it will break PM subsystem and drivers
|
||||
* like xen-pciback etc.
|
||||
*/
|
||||
static int pci_irq_notifier(struct notifier_block *nb, unsigned long action,
|
||||
void *data)
|
||||
{
|
||||
struct pci_dev *dev = to_pci_dev(data);
|
||||
|
||||
if (action != BUS_NOTIFY_UNBOUND_DRIVER)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
if (pcibios_disable_irq)
|
||||
pcibios_disable_irq(dev);
|
||||
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
|
||||
static struct notifier_block pci_irq_nb = {
|
||||
.notifier_call = pci_irq_notifier,
|
||||
.priority = INT_MIN,
|
||||
};
|
||||
|
||||
int __init pcibios_init(void)
|
||||
{
|
||||
if (!raw_pci_ops) {
|
||||
|
@ -525,6 +550,9 @@ int __init pcibios_init(void)
|
|||
|
||||
if (pci_bf_sort >= pci_force_bf)
|
||||
pci_sort_breadthfirst();
|
||||
|
||||
bus_register_notifier(&pci_bus_type, &pci_irq_nb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -683,12 +711,6 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void pcibios_disable_device (struct pci_dev *dev)
|
||||
{
|
||||
if (!pci_dev_msi_enabled(dev) && pcibios_disable_irq)
|
||||
pcibios_disable_irq(dev);
|
||||
}
|
||||
|
||||
int pci_ext_cfg_avail(void)
|
||||
{
|
||||
if (raw_pci_ext_ops)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue