diff options
Diffstat (limited to 'drivers/pci/pci.c')
| -rw-r--r-- | drivers/pci/pci.c | 24 | 
1 files changed, 15 insertions, 9 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index d20f1334792..111569ccab4 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -991,8 +991,8 @@ static void pci_restore_config_dword(struct pci_dev *pdev, int offset,  	}  } -static void pci_restore_config_space(struct pci_dev *pdev, int start, int end, -				     int retry) +static void pci_restore_config_space_range(struct pci_dev *pdev, +					   int start, int end, int retry)  {  	int index; @@ -1002,6 +1002,18 @@ static void pci_restore_config_space(struct pci_dev *pdev, int start, int end,  					 retry);  } +static void pci_restore_config_space(struct pci_dev *pdev) +{ +	if (pdev->hdr_type == PCI_HEADER_TYPE_NORMAL) { +		pci_restore_config_space_range(pdev, 10, 15, 0); +		/* Restore BARs before the command register. */ +		pci_restore_config_space_range(pdev, 4, 9, 10); +		pci_restore_config_space_range(pdev, 0, 3, 0); +	} else { +		pci_restore_config_space_range(pdev, 0, 15, 0); +	} +} +  /**    * pci_restore_state - Restore the saved state of a PCI device   * @dev: - PCI device that we're dealing with @@ -1015,13 +1027,7 @@ void pci_restore_state(struct pci_dev *dev)  	pci_restore_pcie_state(dev);  	pci_restore_ats_state(dev); -	pci_restore_config_space(dev, 10, 15, 0); -	/* -	 * The Base Address register should be programmed before the command -	 * register(s) -	 */ -	pci_restore_config_space(dev, 4, 9, 10); -	pci_restore_config_space(dev, 0, 3, 0); +	pci_restore_config_space(dev);  	pci_restore_pcix_state(dev);  	pci_restore_msi_state(dev);  |