From: Khalid Aziz Date: Tue, 3 May 2016 14:15:06 +0000 (-0600) Subject: Revert "sparc/PCI: Use correct bus address to resource offset" X-Git-Tag: v4.1.12-102.0.20170529_2200~81 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1f82e14b48eba413538386403043588bddfca455;p=users%2Fjedix%2Flinux-maple.git Revert "sparc/PCI: Use correct bus address to resource offset" This reverts commit dae731c1974171f6c85a7efe018625b72edfa82a. This commit causes hotplug to break as documented in Orabug 22855133. Orabug: 22855133 Signed-off-by: Khalid Aziz (cherry picked from commit 2dc2632b0b252f8f50c276efa9cc4f00c8e067b5) Signed-off-by: Allen Pais --- diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c index afa85d3f0202a..63b23aad0d0ca 100644 --- a/arch/sparc/kernel/pci.c +++ b/arch/sparc/kernel/pci.c @@ -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; diff --git a/arch/sparc/kernel/pci_common.c b/arch/sparc/kernel/pci_common.c index 28e976a233cd7..33524c1d5328b 100644 --- a/arch/sparc/kernel/pci_common.c +++ b/arch/sparc/kernel/pci_common.c @@ -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; diff --git a/arch/sparc/kernel/pci_impl.h b/arch/sparc/kernel/pci_impl.h index a3fec8f07c4da..6b262fe8d8e7d 100644 --- a/arch/sparc/kernel/pci_impl.h +++ b/arch/sparc/kernel/pci_impl.h @@ -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;