diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2013-08-15 16:41:33 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-08-15 16:41:33 -0400 |
commit | 7d8c4a2c5ae6d76f1142fb052d698b3c40ce518c (patch) | |
tree | e5f4d7779bd2e6b4e9ccc3e73d5c40bb537513e8 /drivers/pci/pcie | |
parent | 63ef41811b86432101b4627ff07c9671f93a483f (diff) | |
parent | 9a3d2b9beefd5b07c1d8f70ded01b88f203ee304 (diff) |
Merge branch 'pci/aw-reset-v5' into next
* pci/aw-reset-v5:
PCI: Add pci_probe_reset_slot() and pci_probe_reset_bus()
PCI: Remove aer_do_secondary_bus_reset()
PCI: Tune secondary bus reset timing
PCI: Wake-up devices before saving config space for reset
PCI: Add pci_reset_slot() and pci_reset_bus()
PCI: Split out pci_dev lock/unlock and save/restore
PCI: Add slot reset option to pci_dev_reset()
PCI: pciehp: Add reset_slot() method
PCI: Add hotplug_slot_ops.reset_slot()
PCI: Add pci_reset_bridge_secondary_bus()
Diffstat (limited to 'drivers/pci/pcie')
-rw-r--r-- | drivers/pci/pcie/aer/aerdrv.c | 2 | ||||
-rw-r--r-- | drivers/pci/pcie/aer/aerdrv.h | 1 | ||||
-rw-r--r-- | drivers/pci/pcie/aer/aerdrv_core.c | 35 |
3 files changed, 2 insertions, 36 deletions
diff --git a/drivers/pci/pcie/aer/aerdrv.c b/drivers/pci/pcie/aer/aerdrv.c index 76ef634caf6f..0bf82a20a0fb 100644 --- a/drivers/pci/pcie/aer/aerdrv.c +++ b/drivers/pci/pcie/aer/aerdrv.c | |||
@@ -352,7 +352,7 @@ static pci_ers_result_t aer_root_reset(struct pci_dev *dev) | |||
352 | reg32 &= ~ROOT_PORT_INTR_ON_MESG_MASK; | 352 | reg32 &= ~ROOT_PORT_INTR_ON_MESG_MASK; |
353 | pci_write_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, reg32); | 353 | pci_write_config_dword(dev, pos + PCI_ERR_ROOT_COMMAND, reg32); |
354 | 354 | ||
355 | aer_do_secondary_bus_reset(dev); | 355 | pci_reset_bridge_secondary_bus(dev); |
356 | dev_printk(KERN_DEBUG, &dev->dev, "Root Port link has been reset\n"); | 356 | dev_printk(KERN_DEBUG, &dev->dev, "Root Port link has been reset\n"); |
357 | 357 | ||
358 | /* Clear Root Error Status */ | 358 | /* Clear Root Error Status */ |
diff --git a/drivers/pci/pcie/aer/aerdrv.h b/drivers/pci/pcie/aer/aerdrv.h index 90ea3e88041f..84420b7c9456 100644 --- a/drivers/pci/pcie/aer/aerdrv.h +++ b/drivers/pci/pcie/aer/aerdrv.h | |||
@@ -106,7 +106,6 @@ static inline pci_ers_result_t merge_result(enum pci_ers_result orig, | |||
106 | } | 106 | } |
107 | 107 | ||
108 | extern struct bus_type pcie_port_bus_type; | 108 | extern struct bus_type pcie_port_bus_type; |
109 | void aer_do_secondary_bus_reset(struct pci_dev *dev); | ||
110 | int aer_init(struct pcie_device *dev); | 109 | int aer_init(struct pcie_device *dev); |
111 | void aer_isr(struct work_struct *work); | 110 | void aer_isr(struct work_struct *work); |
112 | void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); | 111 | void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); |
diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c index 8b68ae59b7b6..85ca36f2136d 100644 --- a/drivers/pci/pcie/aer/aerdrv_core.c +++ b/drivers/pci/pcie/aer/aerdrv_core.c | |||
@@ -367,39 +367,6 @@ static pci_ers_result_t broadcast_error_message(struct pci_dev *dev, | |||
367 | } | 367 | } |
368 | 368 | ||
369 | /** | 369 | /** |
370 | * aer_do_secondary_bus_reset - perform secondary bus reset | ||
371 | * @dev: pointer to bridge's pci_dev data structure | ||
372 | * | ||
373 | * Invoked when performing link reset at Root Port or Downstream Port. | ||
374 | */ | ||
375 | void aer_do_secondary_bus_reset(struct pci_dev *dev) | ||
376 | { | ||
377 | u16 p2p_ctrl; | ||
378 | |||
379 | /* Assert Secondary Bus Reset */ | ||
380 | pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &p2p_ctrl); | ||
381 | p2p_ctrl |= PCI_BRIDGE_CTL_BUS_RESET; | ||
382 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, p2p_ctrl); | ||
383 | |||
384 | /* | ||
385 | * we should send hot reset message for 2ms to allow it time to | ||
386 | * propagate to all downstream ports | ||
387 | */ | ||
388 | msleep(2); | ||
389 | |||
390 | /* De-assert Secondary Bus Reset */ | ||
391 | p2p_ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET; | ||
392 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, p2p_ctrl); | ||
393 | |||
394 | /* | ||
395 | * System software must wait for at least 100ms from the end | ||
396 | * of a reset of one or more device before it is permitted | ||
397 | * to issue Configuration Requests to those devices. | ||
398 | */ | ||
399 | msleep(200); | ||
400 | } | ||
401 | |||
402 | /** | ||
403 | * default_reset_link - default reset function | 370 | * default_reset_link - default reset function |
404 | * @dev: pointer to pci_dev data structure | 371 | * @dev: pointer to pci_dev data structure |
405 | * | 372 | * |
@@ -408,7 +375,7 @@ void aer_do_secondary_bus_reset(struct pci_dev *dev) | |||
408 | */ | 375 | */ |
409 | static pci_ers_result_t default_reset_link(struct pci_dev *dev) | 376 | static pci_ers_result_t default_reset_link(struct pci_dev *dev) |
410 | { | 377 | { |
411 | aer_do_secondary_bus_reset(dev); | 378 | pci_reset_bridge_secondary_bus(dev); |
412 | dev_printk(KERN_DEBUG, &dev->dev, "downstream link has been reset\n"); | 379 | dev_printk(KERN_DEBUG, &dev->dev, "downstream link has been reset\n"); |
413 | return PCI_ERS_RESULT_RECOVERED; | 380 | return PCI_ERS_RESULT_RECOVERED; |
414 | } | 381 | } |