diff options
Diffstat (limited to 'drivers/pci/setup-res.c')
| -rw-r--r-- | drivers/pci/setup-res.c | 30 | 
1 files changed, 17 insertions, 13 deletions
| diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 0468c058b598..4e0e60256f04 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -527,22 +527,26 @@ int pci_enable_resources(struct pci_dev *dev, int mask)  		if (pci_resource_is_optional(dev, i))  			continue; -		if (r->flags & IORESOURCE_UNSET) { -			pci_err(dev, "%s %pR: not assigned; can't enable device\n", -				r_name, r); -			return -EINVAL; +		if (i < PCI_BRIDGE_RESOURCES) { +			if (r->flags & IORESOURCE_UNSET) { +				pci_err(dev, "%s %pR: not assigned; can't enable device\n", +					r_name, r); +				return -EINVAL; +			} + +			if (!r->parent) { +				pci_err(dev, "%s %pR: not claimed; can't enable device\n", +					r_name, r); +				return -EINVAL; +			}  		} -		if (!r->parent) { -			pci_err(dev, "%s %pR: not claimed; can't enable device\n", -				r_name, r); -			return -EINVAL; +		if (r->parent) { +			if (r->flags & IORESOURCE_IO) +				cmd |= PCI_COMMAND_IO; +			if (r->flags & IORESOURCE_MEM) +				cmd |= PCI_COMMAND_MEMORY;  		} - -		if (r->flags & IORESOURCE_IO) -			cmd |= PCI_COMMAND_IO; -		if (r->flags & IORESOURCE_MEM) -			cmd |= PCI_COMMAND_MEMORY;  	}  	if (cmd != old_cmd) { | 
