1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * A fairly generic DMA-API to IOMMU-API glue layer. 4 * 5 * Copyright (C) 2014-2015 ARM Ltd. 6 * 7 * based in part on arch/arm/mm/dma-mapping.c: 8 * Copyright (C) 2000-2004 Russell King 9 */ 10 11 #include <linux/acpi_iort.h> 12 #include <linux/device.h> 13 #include <linux/dma-map-ops.h> 14 #include <linux/dma-iommu.h> 15 #include <linux/gfp.h> 16 #include <linux/huge_mm.h> 17 #include <linux/iommu.h> 18 #include <linux/iova.h> 19 #include <linux/irq.h> 20 #include <linux/mm.h> 21 #include <linux/mutex.h> 22 #include <linux/pci.h> 23 #include <linux/swiotlb.h> 24 #include <linux/scatterlist.h> 25 #include <linux/vmalloc.h> 26 #include <linux/crash_dump.h> 27 #include <linux/dma-direct.h> 28 29 struct iommu_dma_msi_page { 30 struct list_head list; 31 dma_addr_t iova; 32 phys_addr_t phys; 33 }; 34 35 enum iommu_dma_cookie_type { 36 IOMMU_DMA_IOVA_COOKIE, 37 IOMMU_DMA_MSI_COOKIE, 38 }; 39 40 struct iommu_dma_cookie { 41 enum iommu_dma_cookie_type type; 42 union { 43 /* Full allocator for IOMMU_DMA_IOVA_COOKIE */ 44 struct iova_domain iovad; 45 /* Trivial linear page allocator for IOMMU_DMA_MSI_COOKIE */ 46 dma_addr_t msi_iova; 47 }; 48 struct list_head msi_page_list; 49 50 /* Domain for flush queue callback; NULL if flush queue not in use */ 51 struct iommu_domain *fq_domain; 52 }; 53 54 static DEFINE_STATIC_KEY_FALSE(iommu_deferred_attach_enabled); 55 bool iommu_dma_forcedac __read_mostly; 56 57 static int __init iommu_dma_forcedac_setup(char *str) 58 { 59 int ret = kstrtobool(str, &iommu_dma_forcedac); 60 61 if (!ret && iommu_dma_forcedac) 62 pr_info("Forcing DAC for PCI devices\n"); 63 return ret; 64 } 65 early_param("iommu.forcedac", iommu_dma_forcedac_setup); 66 67 static void iommu_dma_entry_dtor(unsigned long data) 68 { 69 struct page *freelist = (struct page *)data; 70 71 while (freelist) { 72 unsigned long p = (unsigned long)page_address(freelist); 73 74 freelist = freelist->freelist; 75 free_page(p); 76 } 77 } 78 79 static inline size_t cookie_msi_granule(struct iommu_dma_cookie *cookie) 80 { 81 if (cookie->type == IOMMU_DMA_IOVA_COOKIE) 82 return cookie->iovad.granule; 83 return PAGE_SIZE; 84 } 85 86 static struct iommu_dma_cookie *cookie_alloc(enum iommu_dma_cookie_type type) 87 { 88 struct iommu_dma_cookie *cookie; 89 90 cookie = kzalloc(sizeof(*cookie), GFP_KERNEL); 91 if (cookie) { 92 INIT_LIST_HEAD(&cookie->msi_page_list); 93 cookie->type = type; 94 } 95 return cookie; 96 } 97 98 /** 99 * iommu_get_dma_cookie - Acquire DMA-API resources for a domain 100 * @domain: IOMMU domain to prepare for DMA-API usage 101 * 102 * IOMMU drivers should normally call this from their domain_alloc 103 * callback when domain->type == IOMMU_DOMAIN_DMA. 104 */ 105 int iommu_get_dma_cookie(struct iommu_domain *domain) 106 { 107 if (domain->iova_cookie) 108 return -EEXIST; 109 110 domain->iova_cookie = cookie_alloc(IOMMU_DMA_IOVA_COOKIE); 111 if (!domain->iova_cookie) 112 return -ENOMEM; 113 114 return 0; 115 } 116 EXPORT_SYMBOL(iommu_get_dma_cookie); 117 118 /** 119 * iommu_get_msi_cookie - Acquire just MSI remapping resources 120 * @domain: IOMMU domain to prepare 121 * @base: Start address of IOVA region for MSI mappings 122 * 123 * Users who manage their own IOVA allocation and do not want DMA API support, 124 * but would still like to take advantage of automatic MSI remapping, can use 125 * this to initialise their own domain appropriately. Users should reserve a 126 * contiguous IOVA region, starting at @base, large enough to accommodate the 127 * number of PAGE_SIZE mappings necessary to cover every MSI doorbell address 128 * used by the devices attached to @domain. 129 */ 130 int iommu_get_msi_cookie(struct iommu_domain *domain, dma_addr_t base) 131 { 132 struct iommu_dma_cookie *cookie; 133 134 if (domain->type != IOMMU_DOMAIN_UNMANAGED) 135 return -EINVAL; 136 137 if (domain->iova_cookie) 138 return -EEXIST; 139 140 cookie = cookie_alloc(IOMMU_DMA_MSI_COOKIE); 141 if (!cookie) 142 return -ENOMEM; 143 144 cookie->msi_iova = base; 145 domain->iova_cookie = cookie; 146 return 0; 147 } 148 EXPORT_SYMBOL(iommu_get_msi_cookie); 149 150 /** 151 * iommu_put_dma_cookie - Release a domain's DMA mapping resources 152 * @domain: IOMMU domain previously prepared by iommu_get_dma_cookie() or 153 * iommu_get_msi_cookie() 154 * 155 * IOMMU drivers should normally call this from their domain_free callback. 156 */ 157 void iommu_put_dma_cookie(struct iommu_domain *domain) 158 { 159 struct iommu_dma_cookie *cookie = domain->iova_cookie; 160 struct iommu_dma_msi_page *msi, *tmp; 161 162 if (!cookie) 163 return; 164 165 if (cookie->type == IOMMU_DMA_IOVA_COOKIE && cookie->iovad.granule) 166 put_iova_domain(&cookie->iovad); 167 168 list_for_each_entry_safe(msi, tmp, &cookie->msi_page_list, list) { 169 list_del(&msi->list); 170 kfree(msi); 171 } 172 kfree(cookie); 173 domain->iova_cookie = NULL; 174 } 175 EXPORT_SYMBOL(iommu_put_dma_cookie); 176 177 /** 178 * iommu_dma_get_resv_regions - Reserved region driver helper 179 * @dev: Device from iommu_get_resv_regions() 180 * @list: Reserved region list from iommu_get_resv_regions() 181 * 182 * IOMMU drivers can use this to implement their .get_resv_regions callback 183 * for general non-IOMMU-specific reservations. Currently, this covers GICv3 184 * ITS region reservation on ACPI based ARM platforms that may require HW MSI 185 * reservation. 186 */ 187 void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list) 188 { 189 190 if (!is_of_node(dev_iommu_fwspec_get(dev)->iommu_fwnode)) 191 iort_iommu_msi_get_resv_regions(dev, list); 192 193 } 194 EXPORT_SYMBOL(iommu_dma_get_resv_regions); 195 196 static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie, 197 phys_addr_t start, phys_addr_t end) 198 { 199 struct iova_domain *iovad = &cookie->iovad; 200 struct iommu_dma_msi_page *msi_page; 201 int i, num_pages; 202 203 start -= iova_offset(iovad, start); 204 num_pages = iova_align(iovad, end - start) >> iova_shift(iovad); 205 206 for (i = 0; i < num_pages; i++) { 207 msi_page = kmalloc(sizeof(*msi_page), GFP_KERNEL); 208 if (!msi_page) 209 return -ENOMEM; 210 211 msi_page->phys = start; 212 msi_page->iova = start; 213 INIT_LIST_HEAD(&msi_page->list); 214 list_add(&msi_page->list, &cookie->msi_page_list); 215 start += iovad->granule; 216 } 217 218 return 0; 219 } 220 221 static int iova_reserve_pci_windows(struct pci_dev *dev, 222 struct iova_domain *iovad) 223 { 224 struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus); 225 struct resource_entry *window; 226 unsigned long lo, hi; 227 phys_addr_t start = 0, end; 228 229 resource_list_for_each_entry(window, &bridge->windows) { 230 if (resource_type(window->res) != IORESOURCE_MEM) 231 continue; 232 233 lo = iova_pfn(iovad, window->res->start - window->offset); 234 hi = iova_pfn(iovad, window->res->end - window->offset); 235 reserve_iova(iovad, lo, hi); 236 } 237 238 /* Get reserved DMA windows from host bridge */ 239 resource_list_for_each_entry(window, &bridge->dma_ranges) { 240 end = window->res->start - window->offset; 241 resv_iova: 242 if (end > start) { 243 lo = iova_pfn(iovad, start); 244 hi = iova_pfn(iovad, end); 245 reserve_iova(iovad, lo, hi); 246 } else { 247 /* dma_ranges list should be sorted */ 248 dev_err(&dev->dev, "Failed to reserve IOVA\n"); 249 return -EINVAL; 250 } 251 252 start = window->res->end - window->offset + 1; 253 /* If window is last entry */ 254 if (window->node.next == &bridge->dma_ranges && 255 end != ~(phys_addr_t)0) { 256 end = ~(phys_addr_t)0; 257 goto resv_iova; 258 } 259 } 260 261 return 0; 262 } 263 264 static int iova_reserve_iommu_regions(struct device *dev, 265 struct iommu_domain *domain) 266 { 267 struct iommu_dma_cookie *cookie = domain->iova_cookie; 268 struct iova_domain *iovad = &cookie->iovad; 269 struct iommu_resv_region *region; 270 LIST_HEAD(resv_regions); 271 int ret = 0; 272 273 if (dev_is_pci(dev)) { 274 ret = iova_reserve_pci_windows(to_pci_dev(dev), iovad); 275 if (ret) 276 return ret; 277 } 278 279 iommu_get_resv_regions(dev, &resv_regions); 280 list_for_each_entry(region, &resv_regions, list) { 281 unsigned long lo, hi; 282 283 /* We ARE the software that manages these! */ 284 if (region->type == IOMMU_RESV_SW_MSI) 285 continue; 286 287 lo = iova_pfn(iovad, region->start); 288 hi = iova_pfn(iovad, region->start + region->length - 1); 289 reserve_iova(iovad, lo, hi); 290 291 if (region->type == IOMMU_RESV_MSI) 292 ret = cookie_init_hw_msi_region(cookie, region->start, 293 region->start + region->length); 294 if (ret) 295 break; 296 } 297 iommu_put_resv_regions(dev, &resv_regions); 298 299 return ret; 300 } 301 302 static void iommu_dma_flush_iotlb_all(struct iova_domain *iovad) 303 { 304 struct iommu_dma_cookie *cookie; 305 struct iommu_domain *domain; 306 307 cookie = container_of(iovad, struct iommu_dma_cookie, iovad); 308 domain = cookie->fq_domain; 309 310 domain->ops->flush_iotlb_all(domain); 311 } 312 313 static bool dev_is_untrusted(struct device *dev) 314 { 315 return dev_is_pci(dev) && to_pci_dev(dev)->untrusted; 316 } 317 318 /** 319 * iommu_dma_init_domain - Initialise a DMA mapping domain 320 * @domain: IOMMU domain previously prepared by iommu_get_dma_cookie() 321 * @base: IOVA at which the mappable address space starts 322 * @size: Size of IOVA space 323 * @dev: Device the domain is being initialised for 324 * 325 * @base and @size should be exact multiples of IOMMU page granularity to 326 * avoid rounding surprises. If necessary, we reserve the page at address 0 327 * to ensure it is an invalid IOVA. It is safe to reinitialise a domain, but 328 * any change which could make prior IOVAs invalid will fail. 329 */ 330 static int iommu_dma_init_domain(struct iommu_domain *domain, dma_addr_t base, 331 u64 size, struct device *dev) 332 { 333 struct iommu_dma_cookie *cookie = domain->iova_cookie; 334 unsigned long order, base_pfn; 335 struct iova_domain *iovad; 336 337 if (!cookie || cookie->type != IOMMU_DMA_IOVA_COOKIE) 338 return -EINVAL; 339 340 iovad = &cookie->iovad; 341 342 /* Use the smallest supported page size for IOVA granularity */ 343 order = __ffs(domain->pgsize_bitmap); 344 base_pfn = max_t(unsigned long, 1, base >> order); 345 346 /* Check the domain allows at least some access to the device... */ 347 if (domain->geometry.force_aperture) { 348 if (base > domain->geometry.aperture_end || 349 base + size <= domain->geometry.aperture_start) { 350 pr_warn("specified DMA range outside IOMMU capability\n"); 351 return -EFAULT; 352 } 353 /* ...then finally give it a kicking to make sure it fits */ 354 base_pfn = max_t(unsigned long, base_pfn, 355 domain->geometry.aperture_start >> order); 356 } 357 358 /* start_pfn is always nonzero for an already-initialised domain */ 359 if (iovad->start_pfn) { 360 if (1UL << order != iovad->granule || 361 base_pfn != iovad->start_pfn) { 362 pr_warn("Incompatible range for DMA domain\n"); 363 return -EFAULT; 364 } 365 366 return 0; 367 } 368 369 init_iova_domain(iovad, 1UL << order, base_pfn); 370 371 if (!cookie->fq_domain && (!dev || !dev_is_untrusted(dev)) && 372 domain->ops->flush_iotlb_all && !iommu_get_dma_strict(domain)) { 373 if (init_iova_flush_queue(iovad, iommu_dma_flush_iotlb_all, 374 iommu_dma_entry_dtor)) 375 pr_warn("iova flush queue initialization failed\n"); 376 else 377 cookie->fq_domain = domain; 378 } 379 380 if (!dev) 381 return 0; 382 383 return iova_reserve_iommu_regions(dev, domain); 384 } 385 386 /** 387 * dma_info_to_prot - Translate DMA API directions and attributes to IOMMU API 388 * page flags. 389 * @dir: Direction of DMA transfer 390 * @coherent: Is the DMA master cache-coherent? 391 * @attrs: DMA attributes for the mapping 392 * 393 * Return: corresponding IOMMU API page protection flags 394 */ 395 static int dma_info_to_prot(enum dma_data_direction dir, bool coherent, 396 unsigned long attrs) 397 { 398 int prot = coherent ? IOMMU_CACHE : 0; 399 400 if (attrs & DMA_ATTR_PRIVILEGED) 401 prot |= IOMMU_PRIV; 402 403 switch (dir) { 404 case DMA_BIDIRECTIONAL: 405 return prot | IOMMU_READ | IOMMU_WRITE; 406 case DMA_TO_DEVICE: 407 return prot | IOMMU_READ; 408 case DMA_FROM_DEVICE: 409 return prot | IOMMU_WRITE; 410 default: 411 return 0; 412 } 413 } 414 415 static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, 416 size_t size, u64 dma_limit, struct device *dev) 417 { 418 struct iommu_dma_cookie *cookie = domain->iova_cookie; 419 struct iova_domain *iovad = &cookie->iovad; 420 unsigned long shift, iova_len, iova = 0; 421 422 if (cookie->type == IOMMU_DMA_MSI_COOKIE) { 423 cookie->msi_iova += size; 424 return cookie->msi_iova - size; 425 } 426 427 shift = iova_shift(iovad); 428 iova_len = size >> shift; 429 /* 430 * Freeing non-power-of-two-sized allocations back into the IOVA caches 431 * will come back to bite us badly, so we have to waste a bit of space 432 * rounding up anything cacheable to make sure that can't happen. The 433 * order of the unadjusted size will still match upon freeing. 434 */ 435 if (iova_len < (1 << (IOVA_RANGE_CACHE_MAX_SIZE - 1))) 436 iova_len = roundup_pow_of_two(iova_len); 437 438 dma_limit = min_not_zero(dma_limit, dev->bus_dma_limit); 439 440 if (domain->geometry.force_aperture) 441 dma_limit = min(dma_limit, (u64)domain->geometry.aperture_end); 442 443 /* Try to get PCI devices a SAC address */ 444 if (dma_limit > DMA_BIT_MASK(32) && !iommu_dma_forcedac && dev_is_pci(dev)) 445 iova = alloc_iova_fast(iovad, iova_len, 446 DMA_BIT_MASK(32) >> shift, false); 447 448 if (!iova) 449 iova = alloc_iova_fast(iovad, iova_len, dma_limit >> shift, 450 true); 451 452 return (dma_addr_t)iova << shift; 453 } 454 455 static void iommu_dma_free_iova(struct iommu_dma_cookie *cookie, 456 dma_addr_t iova, size_t size, struct page *freelist) 457 { 458 struct iova_domain *iovad = &cookie->iovad; 459 460 /* The MSI case is only ever cleaning up its most recent allocation */ 461 if (cookie->type == IOMMU_DMA_MSI_COOKIE) 462 cookie->msi_iova -= size; 463 else if (cookie->fq_domain) /* non-strict mode */ 464 queue_iova(iovad, iova_pfn(iovad, iova), 465 size >> iova_shift(iovad), 466 (unsigned long)freelist); 467 else 468 free_iova_fast(iovad, iova_pfn(iovad, iova), 469 size >> iova_shift(iovad)); 470 } 471 472 static void __iommu_dma_unmap(struct device *dev, dma_addr_t dma_addr, 473 size_t size) 474 { 475 struct iommu_domain *domain = iommu_get_dma_domain(dev); 476 struct iommu_dma_cookie *cookie = domain->iova_cookie; 477 struct iova_domain *iovad = &cookie->iovad; 478 size_t iova_off = iova_offset(iovad, dma_addr); 479 struct iommu_iotlb_gather iotlb_gather; 480 size_t unmapped; 481 482 dma_addr -= iova_off; 483 size = iova_align(iovad, size + iova_off); 484 iommu_iotlb_gather_init(&iotlb_gather); 485 486 unmapped = iommu_unmap_fast(domain, dma_addr, size, &iotlb_gather); 487 WARN_ON(unmapped != size); 488 489 if (!cookie->fq_domain) 490 iommu_iotlb_sync(domain, &iotlb_gather); 491 iommu_dma_free_iova(cookie, dma_addr, size, iotlb_gather.freelist); 492 } 493 494 static void __iommu_dma_unmap_swiotlb(struct device *dev, dma_addr_t dma_addr, 495 size_t size, enum dma_data_direction dir, 496 unsigned long attrs) 497 { 498 struct iommu_domain *domain = iommu_get_dma_domain(dev); 499 struct iommu_dma_cookie *cookie = domain->iova_cookie; 500 struct iova_domain *iovad = &cookie->iovad; 501 phys_addr_t phys; 502 503 phys = iommu_iova_to_phys(domain, dma_addr); 504 if (WARN_ON(!phys)) 505 return; 506 507 __iommu_dma_unmap(dev, dma_addr, size); 508 509 if (unlikely(is_swiotlb_buffer(phys))) 510 swiotlb_tbl_unmap_single(dev, phys, size, 511 iova_align(iovad, size), dir, attrs); 512 } 513 514 static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys, 515 size_t size, int prot, u64 dma_mask) 516 { 517 struct iommu_domain *domain = iommu_get_dma_domain(dev); 518 struct iommu_dma_cookie *cookie = domain->iova_cookie; 519 struct iova_domain *iovad = &cookie->iovad; 520 size_t iova_off = iova_offset(iovad, phys); 521 dma_addr_t iova; 522 523 if (static_branch_unlikely(&iommu_deferred_attach_enabled) && 524 iommu_deferred_attach(dev, domain)) 525 return DMA_MAPPING_ERROR; 526 527 size = iova_align(iovad, size + iova_off); 528 529 iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev); 530 if (!iova) 531 return DMA_MAPPING_ERROR; 532 533 if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) { 534 iommu_dma_free_iova(cookie, iova, size, NULL); 535 return DMA_MAPPING_ERROR; 536 } 537 return iova + iova_off; 538 } 539 540 static dma_addr_t __iommu_dma_map_swiotlb(struct device *dev, phys_addr_t phys, 541 size_t org_size, dma_addr_t dma_mask, bool coherent, 542 enum dma_data_direction dir, unsigned long attrs) 543 { 544 int prot = dma_info_to_prot(dir, coherent, attrs); 545 struct iommu_domain *domain = iommu_get_dma_domain(dev); 546 struct iommu_dma_cookie *cookie = domain->iova_cookie; 547 struct iova_domain *iovad = &cookie->iovad; 548 size_t aligned_size = org_size; 549 void *padding_start; 550 size_t padding_size; 551 dma_addr_t iova; 552 553 /* 554 * If both the physical buffer start address and size are 555 * page aligned, we don't need to use a bounce page. 556 */ 557 if (IS_ENABLED(CONFIG_SWIOTLB) && dev_is_untrusted(dev) && 558 iova_offset(iovad, phys | org_size)) { 559 aligned_size = iova_align(iovad, org_size); 560 phys = swiotlb_tbl_map_single(dev, phys, org_size, 561 aligned_size, dir, attrs); 562 563 if (phys == DMA_MAPPING_ERROR) 564 return DMA_MAPPING_ERROR; 565 566 /* Cleanup the padding area. */ 567 padding_start = phys_to_virt(phys); 568 padding_size = aligned_size; 569 570 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) && 571 (dir == DMA_TO_DEVICE || 572 dir == DMA_BIDIRECTIONAL)) { 573 padding_start += org_size; 574 padding_size -= org_size; 575 } 576 577 memset(padding_start, 0, padding_size); 578 } 579 580 iova = __iommu_dma_map(dev, phys, aligned_size, prot, dma_mask); 581 if ((iova == DMA_MAPPING_ERROR) && is_swiotlb_buffer(phys)) 582 swiotlb_tbl_unmap_single(dev, phys, org_size, 583 aligned_size, dir, attrs); 584 585 return iova; 586 } 587 588 static void __iommu_dma_free_pages(struct page **pages, int count) 589 { 590 while (count--) 591 __free_page(pages[count]); 592 kvfree(pages); 593 } 594 595 static struct page **__iommu_dma_alloc_pages(struct device *dev, 596 unsigned int count, unsigned long order_mask, gfp_t gfp) 597 { 598 struct page **pages; 599 unsigned int i = 0, nid = dev_to_node(dev); 600 601 order_mask &= (2U << MAX_ORDER) - 1; 602 if (!order_mask) 603 return NULL; 604 605 pages = kvzalloc(count * sizeof(*pages), GFP_KERNEL); 606 if (!pages) 607 return NULL; 608 609 /* IOMMU can map any pages, so himem can also be used here */ 610 gfp |= __GFP_NOWARN | __GFP_HIGHMEM; 611 612 /* It makes no sense to muck about with huge pages */ 613 gfp &= ~__GFP_COMP; 614 615 while (count) { 616 struct page *page = NULL; 617 unsigned int order_size; 618 619 /* 620 * Higher-order allocations are a convenience rather 621 * than a necessity, hence using __GFP_NORETRY until 622 * falling back to minimum-order allocations. 623 */ 624 for (order_mask &= (2U << __fls(count)) - 1; 625 order_mask; order_mask &= ~order_size) { 626 unsigned int order = __fls(order_mask); 627 gfp_t alloc_flags = gfp; 628 629 order_size = 1U << order; 630 if (order_mask > order_size) 631 alloc_flags |= __GFP_NORETRY; 632 page = alloc_pages_node(nid, alloc_flags, order); 633 if (!page) 634 continue; 635 if (order) 636 split_page(page, order); 637 break; 638 } 639 if (!page) { 640 __iommu_dma_free_pages(pages, i); 641 return NULL; 642 } 643 count -= order_size; 644 while (order_size--) 645 pages[i++] = page++; 646 } 647 return pages; 648 } 649 650 /** 651 * iommu_dma_alloc_remap - Allocate and map a buffer contiguous in IOVA space 652 * @dev: Device to allocate memory for. Must be a real device 653 * attached to an iommu_dma_domain 654 * @size: Size of buffer in bytes 655 * @dma_handle: Out argument for allocated DMA handle 656 * @gfp: Allocation flags 657 * @prot: pgprot_t to use for the remapped mapping 658 * @attrs: DMA attributes for this allocation 659 * 660 * If @size is less than PAGE_SIZE, then a full CPU page will be allocated, 661 * but an IOMMU which supports smaller pages might not map the whole thing. 662 * 663 * Return: Mapped virtual address, or NULL on failure. 664 */ 665 static void *iommu_dma_alloc_remap(struct device *dev, size_t size, 666 dma_addr_t *dma_handle, gfp_t gfp, pgprot_t prot, 667 unsigned long attrs) 668 { 669 struct iommu_domain *domain = iommu_get_dma_domain(dev); 670 struct iommu_dma_cookie *cookie = domain->iova_cookie; 671 struct iova_domain *iovad = &cookie->iovad; 672 bool coherent = dev_is_dma_coherent(dev); 673 int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs); 674 unsigned int count, min_size, alloc_sizes = domain->pgsize_bitmap; 675 struct page **pages; 676 struct sg_table sgt; 677 dma_addr_t iova; 678 void *vaddr; 679 680 *dma_handle = DMA_MAPPING_ERROR; 681 682 if (static_branch_unlikely(&iommu_deferred_attach_enabled) && 683 iommu_deferred_attach(dev, domain)) 684 return NULL; 685 686 min_size = alloc_sizes & -alloc_sizes; 687 if (min_size < PAGE_SIZE) { 688 min_size = PAGE_SIZE; 689 alloc_sizes |= PAGE_SIZE; 690 } else { 691 size = ALIGN(size, min_size); 692 } 693 if (attrs & DMA_ATTR_ALLOC_SINGLE_PAGES) 694 alloc_sizes = min_size; 695 696 count = PAGE_ALIGN(size) >> PAGE_SHIFT; 697 pages = __iommu_dma_alloc_pages(dev, count, alloc_sizes >> PAGE_SHIFT, 698 gfp); 699 if (!pages) 700 return NULL; 701 702 size = iova_align(iovad, size); 703 iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev); 704 if (!iova) 705 goto out_free_pages; 706 707 if (sg_alloc_table_from_pages(&sgt, pages, count, 0, size, GFP_KERNEL)) 708 goto out_free_iova; 709 710 if (!(ioprot & IOMMU_CACHE)) { 711 struct scatterlist *sg; 712 int i; 713 714 for_each_sg(sgt.sgl, sg, sgt.orig_nents, i) 715 arch_dma_prep_coherent(sg_page(sg), sg->length); 716 } 717 718 if (iommu_map_sg_atomic(domain, iova, sgt.sgl, sgt.orig_nents, ioprot) 719 < size) 720 goto out_free_sg; 721 722 vaddr = dma_common_pages_remap(pages, size, prot, 723 __builtin_return_address(0)); 724 if (!vaddr) 725 goto out_unmap; 726 727 *dma_handle = iova; 728 sg_free_table(&sgt); 729 return vaddr; 730 731 out_unmap: 732 __iommu_dma_unmap(dev, iova, size); 733 out_free_sg: 734 sg_free_table(&sgt); 735 out_free_iova: 736 iommu_dma_free_iova(cookie, iova, size, NULL); 737 out_free_pages: 738 __iommu_dma_free_pages(pages, count); 739 return NULL; 740 } 741 742 static void iommu_dma_sync_single_for_cpu(struct device *dev, 743 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir) 744 { 745 phys_addr_t phys; 746 747 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 748 return; 749 750 phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle); 751 if (!dev_is_dma_coherent(dev)) 752 arch_sync_dma_for_cpu(phys, size, dir); 753 754 if (is_swiotlb_buffer(phys)) 755 swiotlb_tbl_sync_single(dev, phys, size, dir, SYNC_FOR_CPU); 756 } 757 758 static void iommu_dma_sync_single_for_device(struct device *dev, 759 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir) 760 { 761 phys_addr_t phys; 762 763 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 764 return; 765 766 phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle); 767 if (is_swiotlb_buffer(phys)) 768 swiotlb_tbl_sync_single(dev, phys, size, dir, SYNC_FOR_DEVICE); 769 770 if (!dev_is_dma_coherent(dev)) 771 arch_sync_dma_for_device(phys, size, dir); 772 } 773 774 static void iommu_dma_sync_sg_for_cpu(struct device *dev, 775 struct scatterlist *sgl, int nelems, 776 enum dma_data_direction dir) 777 { 778 struct scatterlist *sg; 779 int i; 780 781 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 782 return; 783 784 for_each_sg(sgl, sg, nelems, i) { 785 if (!dev_is_dma_coherent(dev)) 786 arch_sync_dma_for_cpu(sg_phys(sg), sg->length, dir); 787 788 if (is_swiotlb_buffer(sg_phys(sg))) 789 swiotlb_tbl_sync_single(dev, sg_phys(sg), sg->length, 790 dir, SYNC_FOR_CPU); 791 } 792 } 793 794 static void iommu_dma_sync_sg_for_device(struct device *dev, 795 struct scatterlist *sgl, int nelems, 796 enum dma_data_direction dir) 797 { 798 struct scatterlist *sg; 799 int i; 800 801 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 802 return; 803 804 for_each_sg(sgl, sg, nelems, i) { 805 if (is_swiotlb_buffer(sg_phys(sg))) 806 swiotlb_tbl_sync_single(dev, sg_phys(sg), sg->length, 807 dir, SYNC_FOR_DEVICE); 808 809 if (!dev_is_dma_coherent(dev)) 810 arch_sync_dma_for_device(sg_phys(sg), sg->length, dir); 811 } 812 } 813 814 static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, 815 unsigned long offset, size_t size, enum dma_data_direction dir, 816 unsigned long attrs) 817 { 818 phys_addr_t phys = page_to_phys(page) + offset; 819 bool coherent = dev_is_dma_coherent(dev); 820 dma_addr_t dma_handle; 821 822 dma_handle = __iommu_dma_map_swiotlb(dev, phys, size, dma_get_mask(dev), 823 coherent, dir, attrs); 824 if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC) && 825 dma_handle != DMA_MAPPING_ERROR) 826 arch_sync_dma_for_device(phys, size, dir); 827 return dma_handle; 828 } 829 830 static void iommu_dma_unmap_page(struct device *dev, dma_addr_t dma_handle, 831 size_t size, enum dma_data_direction dir, unsigned long attrs) 832 { 833 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) 834 iommu_dma_sync_single_for_cpu(dev, dma_handle, size, dir); 835 __iommu_dma_unmap_swiotlb(dev, dma_handle, size, dir, attrs); 836 } 837 838 /* 839 * Prepare a successfully-mapped scatterlist to give back to the caller. 840 * 841 * At this point the segments are already laid out by iommu_dma_map_sg() to 842 * avoid individually crossing any boundaries, so we merely need to check a 843 * segment's start address to avoid concatenating across one. 844 */ 845 static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents, 846 dma_addr_t dma_addr) 847 { 848 struct scatterlist *s, *cur = sg; 849 unsigned long seg_mask = dma_get_seg_boundary(dev); 850 unsigned int cur_len = 0, max_len = dma_get_max_seg_size(dev); 851 int i, count = 0; 852 853 for_each_sg(sg, s, nents, i) { 854 /* Restore this segment's original unaligned fields first */ 855 unsigned int s_iova_off = sg_dma_address(s); 856 unsigned int s_length = sg_dma_len(s); 857 unsigned int s_iova_len = s->length; 858 859 s->offset += s_iova_off; 860 s->length = s_length; 861 sg_dma_address(s) = DMA_MAPPING_ERROR; 862 sg_dma_len(s) = 0; 863 864 /* 865 * Now fill in the real DMA data. If... 866 * - there is a valid output segment to append to 867 * - and this segment starts on an IOVA page boundary 868 * - but doesn't fall at a segment boundary 869 * - and wouldn't make the resulting output segment too long 870 */ 871 if (cur_len && !s_iova_off && (dma_addr & seg_mask) && 872 (max_len - cur_len >= s_length)) { 873 /* ...then concatenate it with the previous one */ 874 cur_len += s_length; 875 } else { 876 /* Otherwise start the next output segment */ 877 if (i > 0) 878 cur = sg_next(cur); 879 cur_len = s_length; 880 count++; 881 882 sg_dma_address(cur) = dma_addr + s_iova_off; 883 } 884 885 sg_dma_len(cur) = cur_len; 886 dma_addr += s_iova_len; 887 888 if (s_length + s_iova_off < s_iova_len) 889 cur_len = 0; 890 } 891 return count; 892 } 893 894 /* 895 * If mapping failed, then just restore the original list, 896 * but making sure the DMA fields are invalidated. 897 */ 898 static void __invalidate_sg(struct scatterlist *sg, int nents) 899 { 900 struct scatterlist *s; 901 int i; 902 903 for_each_sg(sg, s, nents, i) { 904 if (sg_dma_address(s) != DMA_MAPPING_ERROR) 905 s->offset += sg_dma_address(s); 906 if (sg_dma_len(s)) 907 s->length = sg_dma_len(s); 908 sg_dma_address(s) = DMA_MAPPING_ERROR; 909 sg_dma_len(s) = 0; 910 } 911 } 912 913 static void iommu_dma_unmap_sg_swiotlb(struct device *dev, struct scatterlist *sg, 914 int nents, enum dma_data_direction dir, unsigned long attrs) 915 { 916 struct scatterlist *s; 917 int i; 918 919 for_each_sg(sg, s, nents, i) 920 __iommu_dma_unmap_swiotlb(dev, sg_dma_address(s), 921 sg_dma_len(s), dir, attrs); 922 } 923 924 static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg, 925 int nents, enum dma_data_direction dir, unsigned long attrs) 926 { 927 struct scatterlist *s; 928 int i; 929 930 for_each_sg(sg, s, nents, i) { 931 sg_dma_address(s) = __iommu_dma_map_swiotlb(dev, sg_phys(s), 932 s->length, dma_get_mask(dev), 933 dev_is_dma_coherent(dev), dir, attrs); 934 if (sg_dma_address(s) == DMA_MAPPING_ERROR) 935 goto out_unmap; 936 sg_dma_len(s) = s->length; 937 } 938 939 return nents; 940 941 out_unmap: 942 iommu_dma_unmap_sg_swiotlb(dev, sg, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC); 943 return 0; 944 } 945 946 /* 947 * The DMA API client is passing in a scatterlist which could describe 948 * any old buffer layout, but the IOMMU API requires everything to be 949 * aligned to IOMMU pages. Hence the need for this complicated bit of 950 * impedance-matching, to be able to hand off a suitably-aligned list, 951 * but still preserve the original offsets and sizes for the caller. 952 */ 953 static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, 954 int nents, enum dma_data_direction dir, unsigned long attrs) 955 { 956 struct iommu_domain *domain = iommu_get_dma_domain(dev); 957 struct iommu_dma_cookie *cookie = domain->iova_cookie; 958 struct iova_domain *iovad = &cookie->iovad; 959 struct scatterlist *s, *prev = NULL; 960 int prot = dma_info_to_prot(dir, dev_is_dma_coherent(dev), attrs); 961 dma_addr_t iova; 962 size_t iova_len = 0; 963 unsigned long mask = dma_get_seg_boundary(dev); 964 int i; 965 966 if (static_branch_unlikely(&iommu_deferred_attach_enabled) && 967 iommu_deferred_attach(dev, domain)) 968 return 0; 969 970 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) 971 iommu_dma_sync_sg_for_device(dev, sg, nents, dir); 972 973 if (dev_is_untrusted(dev)) 974 return iommu_dma_map_sg_swiotlb(dev, sg, nents, dir, attrs); 975 976 /* 977 * Work out how much IOVA space we need, and align the segments to 978 * IOVA granules for the IOMMU driver to handle. With some clever 979 * trickery we can modify the list in-place, but reversibly, by 980 * stashing the unaligned parts in the as-yet-unused DMA fields. 981 */ 982 for_each_sg(sg, s, nents, i) { 983 size_t s_iova_off = iova_offset(iovad, s->offset); 984 size_t s_length = s->length; 985 size_t pad_len = (mask - iova_len + 1) & mask; 986 987 sg_dma_address(s) = s_iova_off; 988 sg_dma_len(s) = s_length; 989 s->offset -= s_iova_off; 990 s_length = iova_align(iovad, s_length + s_iova_off); 991 s->length = s_length; 992 993 /* 994 * Due to the alignment of our single IOVA allocation, we can 995 * depend on these assumptions about the segment boundary mask: 996 * - If mask size >= IOVA size, then the IOVA range cannot 997 * possibly fall across a boundary, so we don't care. 998 * - If mask size < IOVA size, then the IOVA range must start 999 * exactly on a boundary, therefore we can lay things out 1000 * based purely on segment lengths without needing to know 1001 * the actual addresses beforehand. 1002 * - The mask must be a power of 2, so pad_len == 0 if 1003 * iova_len == 0, thus we cannot dereference prev the first 1004 * time through here (i.e. before it has a meaningful value). 1005 */ 1006 if (pad_len && pad_len < s_length - 1) { 1007 prev->length += pad_len; 1008 iova_len += pad_len; 1009 } 1010 1011 iova_len += s_length; 1012 prev = s; 1013 } 1014 1015 iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); 1016 if (!iova) 1017 goto out_restore_sg; 1018 1019 /* 1020 * We'll leave any physical concatenation to the IOMMU driver's 1021 * implementation - it knows better than we do. 1022 */ 1023 if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len) 1024 goto out_free_iova; 1025 1026 return __finalise_sg(dev, sg, nents, iova); 1027 1028 out_free_iova: 1029 iommu_dma_free_iova(cookie, iova, iova_len, NULL); 1030 out_restore_sg: 1031 __invalidate_sg(sg, nents); 1032 return 0; 1033 } 1034 1035 static void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg, 1036 int nents, enum dma_data_direction dir, unsigned long attrs) 1037 { 1038 dma_addr_t start, end; 1039 struct scatterlist *tmp; 1040 int i; 1041 1042 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) 1043 iommu_dma_sync_sg_for_cpu(dev, sg, nents, dir); 1044 1045 if (dev_is_untrusted(dev)) { 1046 iommu_dma_unmap_sg_swiotlb(dev, sg, nents, dir, attrs); 1047 return; 1048 } 1049 1050 /* 1051 * The scatterlist segments are mapped into a single 1052 * contiguous IOVA allocation, so this is incredibly easy. 1053 */ 1054 start = sg_dma_address(sg); 1055 for_each_sg(sg_next(sg), tmp, nents - 1, i) { 1056 if (sg_dma_len(tmp) == 0) 1057 break; 1058 sg = tmp; 1059 } 1060 end = sg_dma_address(sg) + sg_dma_len(sg); 1061 __iommu_dma_unmap(dev, start, end - start); 1062 } 1063 1064 static dma_addr_t iommu_dma_map_resource(struct device *dev, phys_addr_t phys, 1065 size_t size, enum dma_data_direction dir, unsigned long attrs) 1066 { 1067 return __iommu_dma_map(dev, phys, size, 1068 dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO, 1069 dma_get_mask(dev)); 1070 } 1071 1072 static void iommu_dma_unmap_resource(struct device *dev, dma_addr_t handle, 1073 size_t size, enum dma_data_direction dir, unsigned long attrs) 1074 { 1075 __iommu_dma_unmap(dev, handle, size); 1076 } 1077 1078 static void __iommu_dma_free(struct device *dev, size_t size, void *cpu_addr) 1079 { 1080 size_t alloc_size = PAGE_ALIGN(size); 1081 int count = alloc_size >> PAGE_SHIFT; 1082 struct page *page = NULL, **pages = NULL; 1083 1084 /* Non-coherent atomic allocation? Easy */ 1085 if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) && 1086 dma_free_from_pool(dev, cpu_addr, alloc_size)) 1087 return; 1088 1089 if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) { 1090 /* 1091 * If it the address is remapped, then it's either non-coherent 1092 * or highmem CMA, or an iommu_dma_alloc_remap() construction. 1093 */ 1094 pages = dma_common_find_pages(cpu_addr); 1095 if (!pages) 1096 page = vmalloc_to_page(cpu_addr); 1097 dma_common_free_remap(cpu_addr, alloc_size); 1098 } else { 1099 /* Lowmem means a coherent atomic or CMA allocation */ 1100 page = virt_to_page(cpu_addr); 1101 } 1102 1103 if (pages) 1104 __iommu_dma_free_pages(pages, count); 1105 if (page) 1106 dma_free_contiguous(dev, page, alloc_size); 1107 } 1108 1109 static void iommu_dma_free(struct device *dev, size_t size, void *cpu_addr, 1110 dma_addr_t handle, unsigned long attrs) 1111 { 1112 __iommu_dma_unmap(dev, handle, size); 1113 __iommu_dma_free(dev, size, cpu_addr); 1114 } 1115 1116 static void *iommu_dma_alloc_pages(struct device *dev, size_t size, 1117 struct page **pagep, gfp_t gfp, unsigned long attrs) 1118 { 1119 bool coherent = dev_is_dma_coherent(dev); 1120 size_t alloc_size = PAGE_ALIGN(size); 1121 int node = dev_to_node(dev); 1122 struct page *page = NULL; 1123 void *cpu_addr; 1124 1125 page = dma_alloc_contiguous(dev, alloc_size, gfp); 1126 if (!page) 1127 page = alloc_pages_node(node, gfp, get_order(alloc_size)); 1128 if (!page) 1129 return NULL; 1130 1131 if (IS_ENABLED(CONFIG_DMA_REMAP) && (!coherent || PageHighMem(page))) { 1132 pgprot_t prot = dma_pgprot(dev, PAGE_KERNEL, attrs); 1133 1134 cpu_addr = dma_common_contiguous_remap(page, alloc_size, 1135 prot, __builtin_return_address(0)); 1136 if (!cpu_addr) 1137 goto out_free_pages; 1138 1139 if (!coherent) 1140 arch_dma_prep_coherent(page, size); 1141 } else { 1142 cpu_addr = page_address(page); 1143 } 1144 1145 *pagep = page; 1146 memset(cpu_addr, 0, alloc_size); 1147 return cpu_addr; 1148 out_free_pages: 1149 dma_free_contiguous(dev, page, alloc_size); 1150 return NULL; 1151 } 1152 1153 static void *iommu_dma_alloc(struct device *dev, size_t size, 1154 dma_addr_t *handle, gfp_t gfp, unsigned long attrs) 1155 { 1156 bool coherent = dev_is_dma_coherent(dev); 1157 int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs); 1158 struct page *page = NULL; 1159 void *cpu_addr; 1160 1161 gfp |= __GFP_ZERO; 1162 1163 if (IS_ENABLED(CONFIG_DMA_REMAP) && gfpflags_allow_blocking(gfp) && 1164 !(attrs & DMA_ATTR_FORCE_CONTIGUOUS)) { 1165 return iommu_dma_alloc_remap(dev, size, handle, gfp, 1166 dma_pgprot(dev, PAGE_KERNEL, attrs), attrs); 1167 } 1168 1169 if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) && 1170 !gfpflags_allow_blocking(gfp) && !coherent) 1171 page = dma_alloc_from_pool(dev, PAGE_ALIGN(size), &cpu_addr, 1172 gfp, NULL); 1173 else 1174 cpu_addr = iommu_dma_alloc_pages(dev, size, &page, gfp, attrs); 1175 if (!cpu_addr) 1176 return NULL; 1177 1178 *handle = __iommu_dma_map(dev, page_to_phys(page), size, ioprot, 1179 dev->coherent_dma_mask); 1180 if (*handle == DMA_MAPPING_ERROR) { 1181 __iommu_dma_free(dev, size, cpu_addr); 1182 return NULL; 1183 } 1184 1185 return cpu_addr; 1186 } 1187 1188 static int iommu_dma_mmap(struct device *dev, struct vm_area_struct *vma, 1189 void *cpu_addr, dma_addr_t dma_addr, size_t size, 1190 unsigned long attrs) 1191 { 1192 unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT; 1193 unsigned long pfn, off = vma->vm_pgoff; 1194 int ret; 1195 1196 vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs); 1197 1198 if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret)) 1199 return ret; 1200 1201 if (off >= nr_pages || vma_pages(vma) > nr_pages - off) 1202 return -ENXIO; 1203 1204 if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) { 1205 struct page **pages = dma_common_find_pages(cpu_addr); 1206 1207 if (pages) 1208 return vm_map_pages(vma, pages, nr_pages); 1209 pfn = vmalloc_to_pfn(cpu_addr); 1210 } else { 1211 pfn = page_to_pfn(virt_to_page(cpu_addr)); 1212 } 1213 1214 return remap_pfn_range(vma, vma->vm_start, pfn + off, 1215 vma->vm_end - vma->vm_start, 1216 vma->vm_page_prot); 1217 } 1218 1219 static int iommu_dma_get_sgtable(struct device *dev, struct sg_table *sgt, 1220 void *cpu_addr, dma_addr_t dma_addr, size_t size, 1221 unsigned long attrs) 1222 { 1223 struct page *page; 1224 int ret; 1225 1226 if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) { 1227 struct page **pages = dma_common_find_pages(cpu_addr); 1228 1229 if (pages) { 1230 return sg_alloc_table_from_pages(sgt, pages, 1231 PAGE_ALIGN(size) >> PAGE_SHIFT, 1232 0, size, GFP_KERNEL); 1233 } 1234 1235 page = vmalloc_to_page(cpu_addr); 1236 } else { 1237 page = virt_to_page(cpu_addr); 1238 } 1239 1240 ret = sg_alloc_table(sgt, 1, GFP_KERNEL); 1241 if (!ret) 1242 sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0); 1243 return ret; 1244 } 1245 1246 static unsigned long iommu_dma_get_merge_boundary(struct device *dev) 1247 { 1248 struct iommu_domain *domain = iommu_get_dma_domain(dev); 1249 1250 return (1UL << __ffs(domain->pgsize_bitmap)) - 1; 1251 } 1252 1253 static const struct dma_map_ops iommu_dma_ops = { 1254 .alloc = iommu_dma_alloc, 1255 .free = iommu_dma_free, 1256 .alloc_pages = dma_common_alloc_pages, 1257 .free_pages = dma_common_free_pages, 1258 .mmap = iommu_dma_mmap, 1259 .get_sgtable = iommu_dma_get_sgtable, 1260 .map_page = iommu_dma_map_page, 1261 .unmap_page = iommu_dma_unmap_page, 1262 .map_sg = iommu_dma_map_sg, 1263 .unmap_sg = iommu_dma_unmap_sg, 1264 .sync_single_for_cpu = iommu_dma_sync_single_for_cpu, 1265 .sync_single_for_device = iommu_dma_sync_single_for_device, 1266 .sync_sg_for_cpu = iommu_dma_sync_sg_for_cpu, 1267 .sync_sg_for_device = iommu_dma_sync_sg_for_device, 1268 .map_resource = iommu_dma_map_resource, 1269 .unmap_resource = iommu_dma_unmap_resource, 1270 .get_merge_boundary = iommu_dma_get_merge_boundary, 1271 }; 1272 1273 /* 1274 * The IOMMU core code allocates the default DMA domain, which the underlying 1275 * IOMMU driver needs to support via the dma-iommu layer. 1276 */ 1277 void iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 size) 1278 { 1279 struct iommu_domain *domain = iommu_get_domain_for_dev(dev); 1280 1281 if (!domain) 1282 goto out_err; 1283 1284 /* 1285 * The IOMMU core code allocates the default DMA domain, which the 1286 * underlying IOMMU driver needs to support via the dma-iommu layer. 1287 */ 1288 if (domain->type == IOMMU_DOMAIN_DMA) { 1289 if (iommu_dma_init_domain(domain, dma_base, size, dev)) 1290 goto out_err; 1291 dev->dma_ops = &iommu_dma_ops; 1292 } 1293 1294 return; 1295 out_err: 1296 pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n", 1297 dev_name(dev)); 1298 } 1299 1300 static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, 1301 phys_addr_t msi_addr, struct iommu_domain *domain) 1302 { 1303 struct iommu_dma_cookie *cookie = domain->iova_cookie; 1304 struct iommu_dma_msi_page *msi_page; 1305 dma_addr_t iova; 1306 int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO; 1307 size_t size = cookie_msi_granule(cookie); 1308 1309 msi_addr &= ~(phys_addr_t)(size - 1); 1310 list_for_each_entry(msi_page, &cookie->msi_page_list, list) 1311 if (msi_page->phys == msi_addr) 1312 return msi_page; 1313 1314 msi_page = kzalloc(sizeof(*msi_page), GFP_KERNEL); 1315 if (!msi_page) 1316 return NULL; 1317 1318 iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); 1319 if (!iova) 1320 goto out_free_page; 1321 1322 if (iommu_map(domain, iova, msi_addr, size, prot)) 1323 goto out_free_iova; 1324 1325 INIT_LIST_HEAD(&msi_page->list); 1326 msi_page->phys = msi_addr; 1327 msi_page->iova = iova; 1328 list_add(&msi_page->list, &cookie->msi_page_list); 1329 return msi_page; 1330 1331 out_free_iova: 1332 iommu_dma_free_iova(cookie, iova, size, NULL); 1333 out_free_page: 1334 kfree(msi_page); 1335 return NULL; 1336 } 1337 1338 int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr) 1339 { 1340 struct device *dev = msi_desc_to_dev(desc); 1341 struct iommu_domain *domain = iommu_get_domain_for_dev(dev); 1342 struct iommu_dma_msi_page *msi_page; 1343 static DEFINE_MUTEX(msi_prepare_lock); /* see below */ 1344 1345 if (!domain || !domain->iova_cookie) { 1346 desc->iommu_cookie = NULL; 1347 return 0; 1348 } 1349 1350 /* 1351 * In fact the whole prepare operation should already be serialised by 1352 * irq_domain_mutex further up the callchain, but that's pretty subtle 1353 * on its own, so consider this locking as failsafe documentation... 1354 */ 1355 mutex_lock(&msi_prepare_lock); 1356 msi_page = iommu_dma_get_msi_page(dev, msi_addr, domain); 1357 mutex_unlock(&msi_prepare_lock); 1358 1359 msi_desc_set_iommu_cookie(desc, msi_page); 1360 1361 if (!msi_page) 1362 return -ENOMEM; 1363 return 0; 1364 } 1365 1366 void iommu_dma_compose_msi_msg(struct msi_desc *desc, 1367 struct msi_msg *msg) 1368 { 1369 struct device *dev = msi_desc_to_dev(desc); 1370 const struct iommu_domain *domain = iommu_get_domain_for_dev(dev); 1371 const struct iommu_dma_msi_page *msi_page; 1372 1373 msi_page = msi_desc_get_iommu_cookie(desc); 1374 1375 if (!domain || !domain->iova_cookie || WARN_ON(!msi_page)) 1376 return; 1377 1378 msg->address_hi = upper_32_bits(msi_page->iova); 1379 msg->address_lo &= cookie_msi_granule(domain->iova_cookie) - 1; 1380 msg->address_lo += lower_32_bits(msi_page->iova); 1381 } 1382 1383 static int iommu_dma_init(void) 1384 { 1385 if (is_kdump_kernel()) 1386 static_branch_enable(&iommu_deferred_attach_enabled); 1387 1388 return iova_cache_get(); 1389 } 1390 arch_initcall(iommu_dma_init); 1391