diff options
Diffstat (limited to 'drivers/pci/pci.c')
| -rw-r--r-- | drivers/pci/pci.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 6f45a73c6e9..6d4a5319148 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -664,6 +664,9 @@ static int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)  		error = platform_pci_set_power_state(dev, state);  		if (!error)  			pci_update_current_state(dev, state); +		/* Fall back to PCI_D0 if native PM is not supported */ +		if (!dev->pm_cap) +			dev->current_state = PCI_D0;  	} else {  		error = -ENODEV;  		/* Fall back to PCI_D0 if native PM is not supported */ @@ -1126,7 +1129,11 @@ static int __pci_enable_device_flags(struct pci_dev *dev,  	if (atomic_add_return(1, &dev->enable_cnt) > 1)  		return 0;		/* already enabled */ -	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) +	/* only skip sriov related */ +	for (i = 0; i <= PCI_ROM_RESOURCE; i++) +		if (dev->resource[i].flags & flags) +			bars |= (1 << i); +	for (i = PCI_BRIDGE_RESOURCES; i < DEVICE_COUNT_RESOURCE; i++)  		if (dev->resource[i].flags & flags)  			bars |= (1 << i);  |