Received: by 10.223.185.116 with SMTP id b49csp3722949wrg; Mon, 19 Feb 2018 05:02:46 -0800 (PST) X-Google-Smtp-Source: AH8x227T1NB9qK16c6+3HgppZLROiTnSpDtqRvc+NfF0qev66vGsd2g3/Lv0gjGM4NW62Qv6wu2s X-Received: by 2002:a17:902:5481:: with SMTP id e1-v6mr14187881pli.300.1519045366567; Mon, 19 Feb 2018 05:02:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519045366; cv=none; d=google.com; s=arc-20160816; b=UoUzgtsJiObHvPZpVjOTGEbt07j5CMV3v6LDYaPsmV5omF91jsiaZUD+V7xeyXPlxo B+rwfmpCJfiTwlE75zorA2VUwy6yPqX9ZOzQGtklNZYbA27rpHEO1Awv+srFqScbuXXk 8/wzZ5DtW9T6wWAOn+ucpO+iiBZWpA/eWoiVdb2DDxM/l2tXL0ZGYV9Jj+kxY3GI1saM Vl/ONcpVmh2aX3CmDZcKQV6QjCkFGcjF6/FsIXMDanZnCndOvMto/CSHufXyQF8DtiqD FjH4NmOd5tx46P50IzsXwpyT7I9NMBfD4bJVjBXtOMl4Q9D4SJ0nkaBMbPsL8J5acJXi iPKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:to:from :dkim-signature:arc-authentication-results; bh=WgKjsjoLr+/6OKXFqeXGUbq9qNMS3Iri5gb2FWdg55k=; b=fe8r8AW42O7+iNzCflZghFGDUCOFVKbG5vOkh2sf60ayO3IJOwShlBIJHVEz11iSc6 Go3NRhYNXOdkh936qe3tbmzDWdnOxIsXsoPzhWMy2NWgo2Vr0pjwOzqkcTlgCyADd7Px N4M7wqvXLtZ9E1F3HXD1pgsHOFFGv6inwumd5g7cqexVF18gPtBw/CkwLYb9BBaZ1KJ7 vbS2sNP4Jzw4giyFWac9aCkFyY0x/SL7ynoLBFW4Pu23waMeOBWpc+PBbujYZaP8xjRI c+o/VH7Dtkp1x3aBn5/sNF5vTj2xGci4N4RZNtrmLbe6xJbv5/F8FTVKDtGzrV0IYi6+ 6t/A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.co.uk header.s=amazon201209 header.b=OQFgBAi2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.co.uk Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 141si11138652pfz.106.2018.02.19.05.02.19; Mon, 19 Feb 2018 05:02:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@amazon.co.uk header.s=amazon201209 header.b=OQFgBAi2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.co.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752803AbeBSNBi (ORCPT + 99 others); Mon, 19 Feb 2018 08:01:38 -0500 Received: from smtp-fw-33001.amazon.com ([207.171.190.10]:5714 "EHLO smtp-fw-33001.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752691AbeBSNBf (ORCPT ); Mon, 19 Feb 2018 08:01:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.co.uk; i=@amazon.co.uk; q=dns/txt; s=amazon201209; t=1519045294; x=1550581294; h=from:to:subject:date:message-id; bh=WgKjsjoLr+/6OKXFqeXGUbq9qNMS3Iri5gb2FWdg55k=; b=OQFgBAi2gqZSbl4niT3uEEthUZKtfjH6aiwbnZtFnxO1m+CGBwxVMEJk m+6BaRq+pO2cpORRQyEOrqGxRZz2JR33A2YtEqd7BZg+pjTisM/6NMJ6H 1fGGF19oLq/aiqmPsUfLMmstnGOhb4KYVPWTA2M+mRyXpjkbgbVH5zd0I I=; X-IronPort-AV: E=Sophos;i="5.46,535,1511827200"; d="scan'208";a="720363854" Received: from sea3-co-svc-lb6-vlan2.sea.amazon.com (HELO email-inbound-relay-2b-c300ac87.us-west-2.amazon.com) ([10.47.22.34]) by smtp-border-fw-out-33001.sea14.amazon.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 19 Feb 2018 13:01:34 +0000 Received: from uc8d3ff76b9bc5848a9cc.ant.amazon.com (pdx2-ws-svc-lb17-vlan3.amazon.com [10.247.140.70]) by email-inbound-relay-2b-c300ac87.us-west-2.amazon.com (8.14.7/8.14.7) with ESMTP id w1JD1Vgt014899 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 19 Feb 2018 13:01:33 GMT Received: from uc8d3ff76b9bc5848a9cc.ant.amazon.com (localhost [127.0.0.1]) by uc8d3ff76b9bc5848a9cc.ant.amazon.com (8.15.2/8.15.2/Debian-3) with ESMTP id w1JD1VA1022418; Mon, 19 Feb 2018 13:01:31 GMT Received: (from dwmw@localhost) by uc8d3ff76b9bc5848a9cc.ant.amazon.com (8.15.2/8.15.2/Submit) id w1JD1UUh022417; Mon, 19 Feb 2018 13:01:30 GMT From: David Woodhouse To: monstr@monstr.eu, bhelgaas@google.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Subject: [PATCH] microblaze: Use generic pci_mmap_resource_range() Date: Mon, 19 Feb 2018 13:01:23 +0000 Message-Id: <1519045283-22350-1-git-send-email-dwmw@amazon.co.uk> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit f719582435 ("PCI: Add pci_mmap_resource_range() and use it for ARM64") added this generic function with the intent of using it everywhere and ultimately killing the old arch-specific implementations. Let's get on with that eradication... Signed-off-by: David Woodhouse --- arch/microblaze/include/asm/pci.h | 7 +-- arch/microblaze/pci/pci-common.c | 99 ++++----------------------------------- 2 files changed, 13 insertions(+), 93 deletions(-) diff --git a/arch/microblaze/include/asm/pci.h b/arch/microblaze/include/asm/pci.h index 114b934..5de871e 100644 --- a/arch/microblaze/include/asm/pci.h +++ b/arch/microblaze/include/asm/pci.h @@ -47,9 +47,10 @@ extern int pci_proc_domain(struct pci_bus *bus); struct vm_area_struct; -/* Tell drivers/pci/proc.c that we have pci_mmap_page_range() */ -#define HAVE_PCI_MMAP 1 -#define arch_can_pci_mmap_io() 1 +/* Tell PCI code what kind of PCI resource mappings we support */ +#define HAVE_PCI_MMAP 1 +#define ARCH_GENERIC_PCI_MMAP_RESOURCE 1 +#define arch_can_pci_mmap_io() 1 extern int pci_legacy_read(struct pci_bus *bus, loff_t port, u32 *val, size_t count); diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c index ae79e86..161f975 100644 --- a/arch/microblaze/pci/pci-common.c +++ b/arch/microblaze/pci/pci-common.c @@ -151,72 +151,22 @@ void pcibios_set_master(struct pci_dev *dev) } /* - * Platform support for /proc/bus/pci/X/Y mmap()s, - * modelled on the sparc64 implementation by Dave Miller. - * -- paulus. + * Platform support for /proc/bus/pci/X/Y mmap()s. */ -/* - * Adjust vm_pgoff of VMA such that it is the physical page offset - * corresponding to the 32-bit pci bus offset for DEV requested by the user. - * - * Basically, the user finds the base address for his device which he wishes - * to mmap. They read the 32-bit value from the config space base register, - * add whatever PAGE_SIZE multiple offset they wish, and feed this into the - * offset parameter of mmap on /proc/bus/pci/XXX for that device. - * - * Returns negative error code on failure, zero on success. - */ -static struct resource *__pci_mmap_make_offset(struct pci_dev *dev, - resource_size_t *offset, - enum pci_mmap_state mmap_state) +int pci_iobar_pfn(struct pci_dev *pdev, int bar, struct vm_area_struct *vma) { - struct pci_controller *hose = pci_bus_to_host(dev->bus); - unsigned long io_offset = 0; - int i, res_bit; + struct pci_controller *hose = pci_bus_to_host(pdev->bus); + resource_size_t ioaddr = pci_resource_start(pdev, bar); if (!hose) - return NULL; /* should never happen */ - - /* If memory, add on the PCI bridge address offset */ - if (mmap_state == pci_mmap_mem) { -#if 0 /* See comment in pci_resource_to_user() for why this is disabled */ - *offset += hose->pci_mem_offset; -#endif - res_bit = IORESOURCE_MEM; - } else { - io_offset = (unsigned long)hose->io_base_virt - _IO_BASE; - *offset += io_offset; - res_bit = IORESOURCE_IO; - } - - /* - * Check that the offset requested corresponds to one of the - * resources of the device. - */ - for (i = 0; i <= PCI_ROM_RESOURCE; i++) { - struct resource *rp = &dev->resource[i]; - int flags = rp->flags; + return -EINVAL; /* should never happen */ - /* treat ROM as memory (should be already) */ - if (i == PCI_ROM_RESOURCE) - flags |= IORESOURCE_MEM; - - /* Active and same type? */ - if ((flags & res_bit) == 0) - continue; - - /* In the range of this resource? */ - if (*offset < (rp->start & PAGE_MASK) || *offset > rp->end) - continue; - - /* found it! construct the final physical address */ - if (mmap_state == pci_mmap_io) - *offset += hose->io_base_phys - io_offset; - return rp; - } + /* Convert to an offset within this PCI controller */ + ioaddr -= (unsigned long)hose->io_base_virt - _IO_BASE; - return NULL; + vma->vm_pgoff += (ioaddr + hose->io_base_phys) >> PAGE_SHIFT; + return 0; } /* @@ -268,37 +218,6 @@ pgprot_t pci_phys_mem_access_prot(struct file *file, return prot; } -/* - * Perform the actual remap of the pages for a PCI device mapping, as - * appropriate for this architecture. The region in the process to map - * is described by vm_start and vm_end members of VMA, the base physical - * address is found in vm_pgoff. - * The pci device structure is provided so that architectures may make mapping - * decisions on a per-device or per-bus basis. - * - * Returns a negative error code on failure, zero on success. - */ -int pci_mmap_page_range(struct pci_dev *dev, int bar, struct vm_area_struct *vma, - enum pci_mmap_state mmap_state, int write_combine) -{ - resource_size_t offset = - ((resource_size_t)vma->vm_pgoff) << PAGE_SHIFT; - struct resource *rp; - int ret; - - rp = __pci_mmap_make_offset(dev, &offset, mmap_state); - if (rp == NULL) - return -EINVAL; - - vma->vm_pgoff = offset >> PAGE_SHIFT; - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - - ret = remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, - vma->vm_end - vma->vm_start, vma->vm_page_prot); - - return ret; -} - /* This provides legacy IO read access on a bus */ int pci_legacy_read(struct pci_bus *bus, loff_t port, u32 *val, size_t size) { -- 2.7.4