diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2014-02-26 17:30:24 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-03-19 17:00:15 -0400 |
commit | d75332325389a95c4ddbfa0f0cd7e5e08a54aa43 (patch) | |
tree | 215ffeb7ab4e87b15d94cd22af1a4542c1d50a9e | |
parent | 05d58f6075bfab1f4ef424c6e5a3e22ecc09f015 (diff) |
s390/PCI: Use generic pci_enable_resources()
The generic pci_enable_resources() does essentially the same thing as the
code in the s390 version of pcibios_enable_device().
There are differences, but I don't think any of them are a problem. The
generic code:
- Checks everything up to PCI_NUM_RESOURCES, not PCI_BAR_COUNT (6), so
we'll now check the ROM resource, IOV resources, and bridge windows.
- Checks for res->flags & IORESOURCE_UNSET. The s390 code never sets
IORESOURCE_UNSET, so this isn't a problem.
- Checks res->parent. The s390 pcibios_add_device() calls
pci_claim_resource() on all BARs (except ROM, IOV, and bridge windows)
so this isn't a problem either.
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
-rw-r--r-- | arch/s390/pci/pci.c | 16 |
1 files changed, 1 insertions, 15 deletions
diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index 66670ff262a0..1df1d29ac81d 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c | |||
@@ -686,27 +686,13 @@ int pcibios_add_device(struct pci_dev *pdev) | |||
686 | int pcibios_enable_device(struct pci_dev *pdev, int mask) | 686 | int pcibios_enable_device(struct pci_dev *pdev, int mask) |
687 | { | 687 | { |
688 | struct zpci_dev *zdev = get_zdev(pdev); | 688 | struct zpci_dev *zdev = get_zdev(pdev); |
689 | struct resource *res; | ||
690 | u16 cmd; | ||
691 | int i; | ||
692 | 689 | ||
693 | zdev->pdev = pdev; | 690 | zdev->pdev = pdev; |
694 | zpci_debug_init_device(zdev); | 691 | zpci_debug_init_device(zdev); |
695 | zpci_fmb_enable_device(zdev); | 692 | zpci_fmb_enable_device(zdev); |
696 | zpci_map_resources(zdev); | 693 | zpci_map_resources(zdev); |
697 | 694 | ||
698 | pci_read_config_word(pdev, PCI_COMMAND, &cmd); | 695 | return pci_enable_resources(pdev, mask); |
699 | for (i = 0; i < PCI_BAR_COUNT; i++) { | ||
700 | res = &pdev->resource[i]; | ||
701 | |||
702 | if (res->flags & IORESOURCE_IO) | ||
703 | return -EINVAL; | ||
704 | |||
705 | if (res->flags & IORESOURCE_MEM) | ||
706 | cmd |= PCI_COMMAND_MEMORY; | ||
707 | } | ||
708 | pci_write_config_word(pdev, PCI_COMMAND, cmd); | ||
709 | return 0; | ||
710 | } | 696 | } |
711 | 697 | ||
712 | void pcibios_disable_device(struct pci_dev *pdev) | 698 | void pcibios_disable_device(struct pci_dev *pdev) |