]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Revert "sparc/PCI: Use correct bus address to resource offset"
authorKhalid Aziz <khalid.aziz@oracle.com>
Tue, 3 May 2016 14:15:06 +0000 (08:15 -0600)
committerChuck Anderson <chuck.anderson@oracle.com>
Sun, 28 May 2017 02:43:58 +0000 (19:43 -0700)
This reverts commit dae731c1974171f6c85a7efe018625b72edfa82a. This
commit causes hotplug to break as documented in Orabug 22855133.

Orabug: 22855133

Signed-off-by: Khalid Aziz <khalid.aziz@oracle.com>
(cherry picked from commit 2dc2632b0b252f8f50c276efa9cc4f00c8e067b5)
Signed-off-by: Allen Pais <allen.pais@oracle.com>
arch/sparc/kernel/pci.c
arch/sparc/kernel/pci_common.c
arch/sparc/kernel/pci_impl.h

index afa85d3f0202a683c521a442427c4c8ff3c3cfec..63b23aad0d0ca2f0903e2a8237c0a5203fb422f1 100644 (file)
@@ -660,12 +660,12 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,
        printk("PCI: Scanning PBM %s\n", node->full_name);
 
        pci_add_resource_offset(&resources, &pbm->io_space,
-                               pbm->io_offset);
+                               pbm->io_space.start);
        pci_add_resource_offset(&resources, &pbm->mem_space,
-                               pbm->mem_offset);
+                               pbm->mem_space.start);
        if (pbm->mem64_space.flags)
                pci_add_resource_offset(&resources, &pbm->mem64_space,
-                                       pbm->mem_offset);
+                                       pbm->mem_space.start);
        pbm->busn.start = pbm->pci_first_busno;
        pbm->busn.end   = pbm->pci_last_busno;
        pbm->busn.flags = IORESOURCE_BUS;
@@ -768,10 +768,10 @@ static int __pci_mmap_make_offset_bus(struct pci_dev *pdev, struct vm_area_struc
                return -EINVAL;
 
        if (mmap_state == pci_mmap_io) {
-               vma->vm_pgoff = (pbm->io_offset +
+               vma->vm_pgoff = (pbm->io_space.start +
                                 user_offset) >> PAGE_SHIFT;
        } else {
-               vma->vm_pgoff = (pbm->mem_offset +
+               vma->vm_pgoff = (pbm->mem_space.start +
                                 user_offset) >> PAGE_SHIFT;
        }
 
@@ -998,9 +998,9 @@ void pci_resource_to_user(const struct pci_dev *pdev, int bar,
        unsigned long offset;
 
        if (rp->flags & IORESOURCE_IO)
-               offset = pbm->io_offset;
+               offset = pbm->io_space.start;
        else
-               offset = pbm->mem_offset;
+               offset = pbm->mem_space.start;
 
        *start = rp->start - offset;
        *end = rp->end - offset;
index 28e976a233cd7ce22ee42224e4a30647ae21afc9..33524c1d5328b051172e52faf8751bf0d33d5333 100644 (file)
@@ -393,7 +393,6 @@ static void pci_register_iommu_region(struct pci_pbm_info *pbm)
 void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
 {
        const struct linux_prom_pci_ranges *pbm_ranges;
-       resource_size_t mem64_offset = 0;
        int i, saw_mem, saw_io;
        int num_pbm_ranges;
 
@@ -411,16 +410,13 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
 
        for (i = 0; i < num_pbm_ranges; i++) {
                const struct linux_prom_pci_ranges *pr = &pbm_ranges[i];
-               unsigned long a, size, region_a;
+               unsigned long a, size;
                u32 parent_phys_hi, parent_phys_lo;
-               u32 child_phys_mid, child_phys_lo;
                u32 size_hi, size_lo;
                int type;
 
                parent_phys_hi = pr->parent_phys_hi;
                parent_phys_lo = pr->parent_phys_lo;
-               child_phys_mid = pr->child_phys_mid;
-               child_phys_lo = pr->child_phys_lo;
                if (tlb_type == hypervisor)
                        parent_phys_hi &= 0x0fffffff;
 
@@ -430,8 +426,6 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
                type = (pr->child_phys_hi >> 24) & 0x3;
                a = (((unsigned long)parent_phys_hi << 32UL) |
                     ((unsigned long)parent_phys_lo  <<  0UL));
-               region_a = (((unsigned long)child_phys_mid << 32UL) |
-                    ((unsigned long)child_phys_lo  <<  0UL));
                size = (((unsigned long)size_hi << 32UL) |
                        ((unsigned long)size_lo  <<  0UL));
 
@@ -446,7 +440,6 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
                        pbm->io_space.start = a;
                        pbm->io_space.end = a + size - 1UL;
                        pbm->io_space.flags = IORESOURCE_IO;
-                       pbm->io_offset = a - region_a;
                        saw_io = 1;
                        break;
 
@@ -455,7 +448,6 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
                        pbm->mem_space.start = a;
                        pbm->mem_space.end = a + size - 1UL;
                        pbm->mem_space.flags = IORESOURCE_MEM;
-                       pbm->mem_offset = a - region_a;
                        saw_mem = 1;
                        break;
 
@@ -464,7 +456,6 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
                        pbm->mem64_space.start = a;
                        pbm->mem64_space.end = a + size - 1UL;
                        pbm->mem64_space.flags = IORESOURCE_MEM;
-                       mem64_offset = a - region_a;
                        saw_mem = 1;
                        break;
 
@@ -480,23 +471,14 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
                prom_halt();
        }
 
-       if (pbm->io_space.flags)
-               printk("%s: PCI IO %pR offset %llx\n",
-                      pbm->name, &pbm->io_space, pbm->io_offset);
-       if (pbm->mem_space.flags)
-               printk("%s: PCI MEM %pR offset %llx\n",
-                      pbm->name, &pbm->mem_space, pbm->mem_offset);
-       if (pbm->mem64_space.flags) {
-               if (pbm->mem_space.flags) {
-                       if (mem64_offset != pbm->mem_offset)
-                               panic("mem offset %llx != mem64 offset %llx\n",
-                                       pbm->mem_offset, mem64_offset);
-               } else
-                       pbm->mem_offset = mem64_offset;
-
-               printk("%s: PCI MEM64 %pR offset %llx\n",
-                      pbm->name, &pbm->mem64_space, pbm->mem_offset);
-       }
+       printk("%s: PCI IO[%llx] MEM[%llx]",
+              pbm->name,
+              pbm->io_space.start,
+              pbm->mem_space.start);
+       if (pbm->mem64_space.flags)
+               printk(" MEM64[%llx]",
+                      pbm->mem64_space.start);
+       printk("\n");
 
        pbm->io_space.name = pbm->mem_space.name = pbm->name;
        pbm->mem64_space.name = pbm->name;
index a3fec8f07c4dad6800178d9e012974136bc762f6..6b262fe8d8e7d684d43ae39363c528634fd413ca 100644 (file)
@@ -110,9 +110,6 @@ struct pci_pbm_info {
        struct resource                 mem_space;
        struct resource                 mem64_space;
        struct resource                 busn;
-       /* offset */
-       resource_size_t                 io_offset;
-       resource_size_t                 mem_offset;
 
        /* Base of PCI Config space, can be per-PBM or shared. */
        unsigned long                   config_space;