return dma;
 }
 
-static inline phys_addr_t xen_bus_to_phys(dma_addr_t baddr)
+static inline phys_addr_t xen_bus_to_phys(struct device *dev, dma_addr_t baddr)
 {
        unsigned long xen_pfn = bfn_to_pfn(XEN_PFN_DOWN(baddr));
        dma_addr_t dma = (dma_addr_t)xen_pfn << XEN_PAGE_SHIFT;
 
        /* do not use virt_to_phys because on ARM it doesn't return you the
         * physical address */
-       phys = xen_bus_to_phys(dev_addr);
+       phys = xen_bus_to_phys(hwdev, dev_addr);
 
        /* Convert the size to actually allocated. */
        size = 1UL << (order + XEN_PAGE_SHIFT);
 static void xen_swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
                size_t size, enum dma_data_direction dir, unsigned long attrs)
 {
-       phys_addr_t paddr = xen_bus_to_phys(dev_addr);
+       phys_addr_t paddr = xen_bus_to_phys(hwdev, dev_addr);
 
        BUG_ON(dir == DMA_NONE);
 
 xen_swiotlb_sync_single_for_cpu(struct device *dev, dma_addr_t dma_addr,
                size_t size, enum dma_data_direction dir)
 {
-       phys_addr_t paddr = xen_bus_to_phys(dma_addr);
+       phys_addr_t paddr = xen_bus_to_phys(dev, dma_addr);
 
        if (!dev_is_dma_coherent(dev))
                xen_dma_sync_for_cpu(dma_addr, paddr, size, dir);
 xen_swiotlb_sync_single_for_device(struct device *dev, dma_addr_t dma_addr,
                size_t size, enum dma_data_direction dir)
 {
-       phys_addr_t paddr = xen_bus_to_phys(dma_addr);
+       phys_addr_t paddr = xen_bus_to_phys(dev, dma_addr);
 
        if (is_xen_swiotlb_buffer(dma_addr))
                swiotlb_tbl_sync_single(dev, paddr, size, dir, SYNC_FOR_DEVICE);