On Fri, May 01, 2015 at 01:32:18PM -0500, [email protected] wrote:
> From: Will Davis <[email protected]>
>
> Simply pass through the physical address as the DMA address.
>
> Signed-off-by: Will Davis <[email protected]>
> Reviewed-by: Terence Ripperda <[email protected]>
> Reviewed-by: John Hubbard <[email protected]>
> ---
> 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 [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu