mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
PCI updates for v3.10:
Moorestown Revert "x86/pci/mrst: Use configuration mechanism 1 for 00:00.0, 00:02.0, 00:03.0" Hotplug PCI: acpiphp: Re-enumerate devices when host bridge receives Bus Check -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJRnnUuAAoJEFmIoMA60/r8+JwQALrHdQvA8rGl/TNF0xkJjsU+ EfdkBj23+qYYsYNla7Z/CfY7k5gXTtymqauhzpa1VRoY/bkpSWMDBxK551CxgBae RW0JbZxfoswLlA9eVRUz6mlUl7hL0Ky0/E6d9/UBXSAC0wsN6BB11lqKgi/uxAr2 ACuZBZW1EZP9zoD615Id5gtRAZe8+9w47p8d6kQcyJntmCoZwo8Na/HRE/tR+wVY o3AHMxMOr9Ac+G3/rFl5ffzoHkLwTws4UEVNhvKBek3ogsAau3tgeIgjjvFRToFh HxsdpCmgOAfjCF/RC0AxRugtykHw4n3WlaND2WM6JWolLeIQTZr41GlwYy4F1CRG gSRk0dMNGBYs9OgDC81KJGYqstHwL0MTig2ul4BvlrLanLnySgVu1kbhaerR3WzA 11k0GwlJbkFMCbQLZDaq51KHAdDYnCsRVG/tOGmsM8puUPOTXu3pLbPk3SbgWVGc 7vbUkjJlHwlNoUbeyOOOElUMCRnIiCl/IetwjgZb+Qibq2dO4v6WF5GR+2DPBwua 8GNbzQXyNxOPzvYBHE4YgK5lcb7yVeLvlOtPgbM0UMqC1SnFISzJRiNpfbj21rAk ADT4lqL29vqkX37uIQ55KPeTTThA65EKUoI3+dNtGHLSPoKdt3QlJc9wwQNKxEzx EEHxGRkebYNcPB1GqwEl =M8/H -----END PGP SIGNATURE----- Merge tag 'pci-v3.10-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci Pull PCI updates from Bjorn Helgaas: "Here are some more fixes for v3.10. The Moorestown update broke Intel Medfield devices, so I reverted it. The acpiphp change fixes a regression: we broke hotplug notifications to host bridges when we split acpiphp into the host-bridge related part and the endpoint-related part. Moorestown Revert "x86/pci/mrst: Use configuration mechanism 1 for 00:00.0, 00:02.0, 00:03.0" Hotplug PCI: acpiphp: Re-enumerate devices when host bridge receives Bus Check" * tag 'pci-v3.10-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: Revert "x86/pci/mrst: Use configuration mechanism 1 for 00:00.0, 00:02.0, 00:03.0" PCI: acpiphp: Re-enumerate devices when host bridge receives Bus Check
This commit is contained in:
commit
b91fd4d5aa
@ -141,11 +141,6 @@ static int pci_device_update_fixed(struct pci_bus *bus, unsigned int devfn,
|
||||
*/
|
||||
static bool type1_access_ok(unsigned int bus, unsigned int devfn, int reg)
|
||||
{
|
||||
if (bus == 0 && (devfn == PCI_DEVFN(2, 0)
|
||||
|| devfn == PCI_DEVFN(0, 0)
|
||||
|| devfn == PCI_DEVFN(3, 0)))
|
||||
return 1;
|
||||
|
||||
/* This is a workaround for A0 LNC bug where PCI status register does
|
||||
* not have new CAP bit set. can not be written by SW either.
|
||||
*
|
||||
@ -155,7 +150,10 @@ static bool type1_access_ok(unsigned int bus, unsigned int devfn, int reg)
|
||||
*/
|
||||
if (reg >= 0x100 || reg == PCI_STATUS || reg == PCI_HEADER_TYPE)
|
||||
return 0;
|
||||
|
||||
if (bus == 0 && (devfn == PCI_DEVFN(2, 0)
|
||||
|| devfn == PCI_DEVFN(0, 0)
|
||||
|| devfn == PCI_DEVFN(3, 0)))
|
||||
return 1;
|
||||
return 0; /* langwell on others */
|
||||
}
|
||||
|
||||
|
@ -641,7 +641,9 @@ static void _handle_hotplug_event_root(struct work_struct *work)
|
||||
/* bus enumerate */
|
||||
printk(KERN_DEBUG "%s: Bus check notify on %s\n", __func__,
|
||||
(char *)buffer.pointer);
|
||||
if (!root)
|
||||
if (root)
|
||||
acpiphp_check_host_bridge(handle);
|
||||
else
|
||||
handle_root_bridge_insertion(handle);
|
||||
|
||||
break;
|
||||
|
@ -950,6 +950,20 @@ check_sub_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
|
||||
return AE_OK ;
|
||||
}
|
||||
|
||||
void acpiphp_check_host_bridge(acpi_handle handle)
|
||||
{
|
||||
struct acpiphp_bridge *bridge;
|
||||
|
||||
bridge = acpiphp_handle_to_bridge(handle);
|
||||
if (bridge) {
|
||||
acpiphp_check_bridge(bridge);
|
||||
put_bridge(bridge);
|
||||
}
|
||||
|
||||
acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
|
||||
ACPI_UINT32_MAX, check_sub_bridges, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
static void _handle_hotplug_event_bridge(struct work_struct *work)
|
||||
{
|
||||
struct acpiphp_bridge *bridge;
|
||||
|
@ -60,11 +60,13 @@ static inline void acpi_pci_slot_remove(struct pci_bus *bus) { }
|
||||
void acpiphp_init(void);
|
||||
void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle);
|
||||
void acpiphp_remove_slots(struct pci_bus *bus);
|
||||
void acpiphp_check_host_bridge(acpi_handle handle);
|
||||
#else
|
||||
static inline void acpiphp_init(void) { }
|
||||
static inline void acpiphp_enumerate_slots(struct pci_bus *bus,
|
||||
acpi_handle handle) { }
|
||||
static inline void acpiphp_remove_slots(struct pci_bus *bus) { }
|
||||
static inline void acpiphp_check_host_bridge(acpi_handle handle) { }
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_ACPI */
|
||||
|
Loading…
Reference in New Issue
Block a user