forked from luck/tmp_suning_uos_patched
PCI aerdrv: use correct bit defines and add 2ms delay to aer_root_reset
While testing completion timeouts I found that hardware was not recovering. It looks like the hot reset was never being propagated to the endpoint devices on the bus due to the fact that we were clearing the bit too quickly. The documentation I have states that we should be transmitting hot reset TS1s for 2ms. To achieve this I have added a 2ms delay from the time we set the secondary bus reset bit to the time we clear it. In addition I changed the define used for the secondary bus reset bit to match the register define that was being used. Reviewed-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
73a0e61458
commit
4352aa5bbf
@ -244,11 +244,17 @@ static pci_ers_result_t aer_root_reset(struct pci_dev *dev)
|
||||
|
||||
/* Assert Secondary Bus Reset */
|
||||
pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &p2p_ctrl);
|
||||
p2p_ctrl |= PCI_CB_BRIDGE_CTL_CB_RESET;
|
||||
p2p_ctrl |= PCI_BRIDGE_CTL_BUS_RESET;
|
||||
pci_write_config_word(dev, PCI_BRIDGE_CONTROL, p2p_ctrl);
|
||||
|
||||
/*
|
||||
* we should send hot reset message for 2ms to allow it time to
|
||||
* propogate to all downstream ports
|
||||
*/
|
||||
msleep(2);
|
||||
|
||||
/* De-assert Secondary Bus Reset */
|
||||
p2p_ctrl &= ~PCI_CB_BRIDGE_CTL_CB_RESET;
|
||||
p2p_ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET;
|
||||
pci_write_config_word(dev, PCI_BRIDGE_CONTROL, p2p_ctrl);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user