On Thu, 2016-05-05 at 08:53 -0700, Yinghai Lu wrote:
> For powerpc io port, we still need extra offset from resource address
> to final address.
>
> resource_size_t offset =
> ((resource_size_t)vma->vm_pgoff) << PAGE_SHIFT;
>
> + if (mmap_state == pci_mmap_io) {
> + struct pci_controller *hose = pci_bus_to_host(dev->bus);
> +
> + /* hose should never be NULL */
> + offset += hose->io_base_phys -
> + ((unsigned long)hose->io_base_virt - _IO_BASE);
> + }
>
> vma->vm_pgoff = offset >> PAGE_SHIFT;
>
> but sparc does not need that trick.
I'm not sure how sparc handles IO space but on powerpc, the IO resource
is not a physical address, it's a virtual address (coming from
ioremap).
Cheers,
Ben.