From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bjorn Helgaas Subject: Re: [PATCH 6/6] x86: add pci-nommu implementation of map_resource Date: Thu, 7 May 2015 10:08:04 -0500 Message-ID: <20150507150804.GJ24643@google.com> References: <1430505138-2877-1-git-send-email-wdavis@nvidia.com> <1430505138-2877-7-git-send-email-wdavis@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <1430505138-2877-7-git-send-email-wdavis@nvidia.com> Sender: linux-pci-owner@vger.kernel.org To: wdavis@nvidia.com Cc: joro@8bytes.org, iommu@lists.linux-foundation.org, linux-pci@vger.kernel.org, tripperda@nvidia.com, jhubbard@nvidia.com, jglisse@redhat.com List-Id: iommu@lists.linux-foundation.org On Fri, May 01, 2015 at 01:32:18PM -0500, wdavis@nvidia.com wrote: > From: Will Davis > > Simply pass through the physical address as the DMA address. > > Signed-off-by: Will Davis > Reviewed-by: Terence Ripperda > Reviewed-by: John Hubbard > --- > arch/x86/kernel/pci-nommu.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c > index da15918..6e9e66d 100644 > --- a/arch/x86/kernel/pci-nommu.c > +++ b/arch/x86/kernel/pci-nommu.c > @@ -38,6 +38,22 @@ static dma_addr_t nommu_map_page(struct device *dev, struct page *page, > return bus; > } > > +static dma_addr_t nommu_map_resource(struct device *dev, struct resource *res, > + unsigned long offset, size_t size, > + enum dma_data_direction dir, > + struct dma_attrs *attrs) > +{ > + dma_addr_t bus = res->start + offset; "res->start" is the CPU physical address, not the bus address. There is a pci_bus_address() interface to get the bus address. On many, but not all, x86 platforms the CPU physical address is identical to the PCI bus address. > + > + WARN_ON(size == 0); > + > + if (!check_addr("map_resource", dev, bus, size)) > + return DMA_ERROR_CODE; > + flush_write_buffers(); > + return bus; > +} > + > + > /* Map a set of buffers described by scatterlist in streaming > * mode for DMA. This is the scatter-gather version of the > * above pci_map_single interface. Here the scatter gather list > @@ -93,6 +109,7 @@ struct dma_map_ops nommu_dma_ops = { > .free = dma_generic_free_coherent, > .map_sg = nommu_map_sg, > .map_page = nommu_map_page, > + .map_resource = nommu_map_resource, > .sync_single_for_device = nommu_sync_single_for_device, > .sync_sg_for_device = nommu_sync_sg_for_device, > .is_phys = 1, > -- > 2.3.7 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pci" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html