diff options
Diffstat (limited to 'drivers/pci/pci.c')
| -rw-r--r-- | drivers/pci/pci.c | 25 | 
1 files changed, 14 insertions, 11 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 22c9b27fdd8..56098b3e17c 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -3284,31 +3284,34 @@ static int pci_set_vga_state_arch(struct pci_dev *dev, bool decode,   * @dev: the PCI device   * @decode: true = enable decoding, false = disable decoding   * @command_bits: PCI_COMMAND_IO and/or PCI_COMMAND_MEMORY - * @change_bridge: traverse ancestors and change bridges + * @change_bridge_flags: traverse ancestors and change bridges + * CHANGE_BRIDGE_ONLY / CHANGE_BRIDGE   */  int pci_set_vga_state(struct pci_dev *dev, bool decode, -		      unsigned int command_bits, bool change_bridge) +		      unsigned int command_bits, u32 flags)  {  	struct pci_bus *bus;  	struct pci_dev *bridge;  	u16 cmd;  	int rc; -	WARN_ON(command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY)); +	WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) & (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY)));  	/* ARCH specific VGA enables */ -	rc = pci_set_vga_state_arch(dev, decode, command_bits, change_bridge); +	rc = pci_set_vga_state_arch(dev, decode, command_bits, flags);  	if (rc)  		return rc; -	pci_read_config_word(dev, PCI_COMMAND, &cmd); -	if (decode == true) -		cmd |= command_bits; -	else -		cmd &= ~command_bits; -	pci_write_config_word(dev, PCI_COMMAND, cmd); +	if (flags & PCI_VGA_STATE_CHANGE_DECODES) { +		pci_read_config_word(dev, PCI_COMMAND, &cmd); +		if (decode == true) +			cmd |= command_bits; +		else +			cmd &= ~command_bits; +		pci_write_config_word(dev, PCI_COMMAND, cmd); +	} -	if (change_bridge == false) +	if (!(flags & PCI_VGA_STATE_CHANGE_BRIDGE))  		return 0;  	bus = dev->bus;  |