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 phys_addr_t phys; 500 501 phys = iommu_iova_to_phys(domain, dma_addr); 502 if (WARN_ON(!phys)) 503 return; 504 505 __iommu_dma_unmap(dev, dma_addr, size); 506 507 if (unlikely(is_swiotlb_buffer(phys))) 508 swiotlb_tbl_unmap_single(dev, phys, size, dir, attrs); 509 } 510 511 static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys, 512 size_t size, int prot, u64 dma_mask) 513 { 514 struct iommu_domain *domain = iommu_get_dma_domain(dev); 515 struct iommu_dma_cookie *cookie = domain->iova_cookie; 516 struct iova_domain *iovad = &cookie->iovad; 517 size_t iova_off = iova_offset(iovad, phys); 518 dma_addr_t iova; 519 520 if (static_branch_unlikely(&iommu_deferred_attach_enabled) && 521 iommu_deferred_attach(dev, domain)) 522 return DMA_MAPPING_ERROR; 523 524 size = iova_align(iovad, size + iova_off); 525 526 iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev); 527 if (!iova) 528 return DMA_MAPPING_ERROR; 529 530 if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) { 531 iommu_dma_free_iova(cookie, iova, size, NULL); 532 return DMA_MAPPING_ERROR; 533 } 534 return iova + iova_off; 535 } 536 537 static dma_addr_t __iommu_dma_map_swiotlb(struct device *dev, phys_addr_t phys, 538 size_t org_size, dma_addr_t dma_mask, bool coherent, 539 enum dma_data_direction dir, unsigned long attrs) 540 { 541 int prot = dma_info_to_prot(dir, coherent, attrs); 542 struct iommu_domain *domain = iommu_get_dma_domain(dev); 543 struct iommu_dma_cookie *cookie = domain->iova_cookie; 544 struct iova_domain *iovad = &cookie->iovad; 545 size_t aligned_size = org_size; 546 void *padding_start; 547 size_t padding_size; 548 dma_addr_t iova; 549 550 /* 551 * If both the physical buffer start address and size are 552 * page aligned, we don't need to use a bounce page. 553 */ 554 if (IS_ENABLED(CONFIG_SWIOTLB) && dev_is_untrusted(dev) && 555 iova_offset(iovad, phys | org_size)) { 556 aligned_size = iova_align(iovad, org_size); 557 phys = swiotlb_tbl_map_single(dev, phys, org_size, 558 aligned_size, dir, attrs); 559 560 if (phys == DMA_MAPPING_ERROR) 561 return DMA_MAPPING_ERROR; 562 563 /* Cleanup the padding area. */ 564 padding_start = phys_to_virt(phys); 565 padding_size = aligned_size; 566 567 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) && 568 (dir == DMA_TO_DEVICE || 569 dir == DMA_BIDIRECTIONAL)) { 570 padding_start += org_size; 571 padding_size -= org_size; 572 } 573 574 memset(padding_start, 0, padding_size); 575 } 576 577 iova = __iommu_dma_map(dev, phys, aligned_size, prot, dma_mask); 578 if (iova == DMA_MAPPING_ERROR && is_swiotlb_buffer(phys)) 579 swiotlb_tbl_unmap_single(dev, phys, org_size, dir, attrs); 580 return iova; 581 } 582 583 static void __iommu_dma_free_pages(struct page **pages, int count) 584 { 585 while (count--) 586 __free_page(pages[count]); 587 kvfree(pages); 588 } 589 590 static struct page **__iommu_dma_alloc_pages(struct device *dev, 591 unsigned int count, unsigned long order_mask, gfp_t gfp) 592 { 593 struct page **pages; 594 unsigned int i = 0, nid = dev_to_node(dev); 595 596 order_mask &= (2U << MAX_ORDER) - 1; 597 if (!order_mask) 598 return NULL; 599 600 pages = kvzalloc(count * sizeof(*pages), GFP_KERNEL); 601 if (!pages) 602 return NULL; 603 604 /* IOMMU can map any pages, so himem can also be used here */ 605 gfp |= __GFP_NOWARN | __GFP_HIGHMEM; 606 607 /* It makes no sense to muck about with huge pages */ 608 gfp &= ~__GFP_COMP; 609 610 while (count) { 611 struct page *page = NULL; 612 unsigned int order_size; 613 614 /* 615 * Higher-order allocations are a convenience rather 616 * than a necessity, hence using __GFP_NORETRY until 617 * falling back to minimum-order allocations. 618 */ 619 for (order_mask &= (2U << __fls(count)) - 1; 620 order_mask; order_mask &= ~order_size) { 621 unsigned int order = __fls(order_mask); 622 gfp_t alloc_flags = gfp; 623 624 order_size = 1U << order; 625 if (order_mask > order_size) 626 alloc_flags |= __GFP_NORETRY; 627 page = alloc_pages_node(nid, alloc_flags, order); 628 if (!page) 629 continue; 630 if (order) 631 split_page(page, order); 632 break; 633 } 634 if (!page) { 635 __iommu_dma_free_pages(pages, i); 636 return NULL; 637 } 638 count -= order_size; 639 while (order_size--) 640 pages[i++] = page++; 641 } 642 return pages; 643 } 644 645 /* 646 * If size is less than PAGE_SIZE, then a full CPU page will be allocated, 647 * but an IOMMU which supports smaller pages might not map the whole thing. 648 */ 649 static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, 650 size_t size, struct sg_table *sgt, gfp_t gfp, pgprot_t prot, 651 unsigned long attrs) 652 { 653 struct iommu_domain *domain = iommu_get_dma_domain(dev); 654 struct iommu_dma_cookie *cookie = domain->iova_cookie; 655 struct iova_domain *iovad = &cookie->iovad; 656 bool coherent = dev_is_dma_coherent(dev); 657 int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs); 658 unsigned int count, min_size, alloc_sizes = domain->pgsize_bitmap; 659 struct page **pages; 660 dma_addr_t iova; 661 662 if (static_branch_unlikely(&iommu_deferred_attach_enabled) && 663 iommu_deferred_attach(dev, domain)) 664 return NULL; 665 666 min_size = alloc_sizes & -alloc_sizes; 667 if (min_size < PAGE_SIZE) { 668 min_size = PAGE_SIZE; 669 alloc_sizes |= PAGE_SIZE; 670 } else { 671 size = ALIGN(size, min_size); 672 } 673 if (attrs & DMA_ATTR_ALLOC_SINGLE_PAGES) 674 alloc_sizes = min_size; 675 676 count = PAGE_ALIGN(size) >> PAGE_SHIFT; 677 pages = __iommu_dma_alloc_pages(dev, count, alloc_sizes >> PAGE_SHIFT, 678 gfp); 679 if (!pages) 680 return NULL; 681 682 size = iova_align(iovad, size); 683 iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev); 684 if (!iova) 685 goto out_free_pages; 686 687 if (sg_alloc_table_from_pages(sgt, pages, count, 0, size, GFP_KERNEL)) 688 goto out_free_iova; 689 690 if (!(ioprot & IOMMU_CACHE)) { 691 struct scatterlist *sg; 692 int i; 693 694 for_each_sg(sgt->sgl, sg, sgt->orig_nents, i) 695 arch_dma_prep_coherent(sg_page(sg), sg->length); 696 } 697 698 if (iommu_map_sg_atomic(domain, iova, sgt->sgl, sgt->orig_nents, ioprot) 699 < size) 700 goto out_free_sg; 701 702 sgt->sgl->dma_address = iova; 703 sgt->sgl->dma_length = size; 704 return pages; 705 706 out_free_sg: 707 sg_free_table(sgt); 708 out_free_iova: 709 iommu_dma_free_iova(cookie, iova, size, NULL); 710 out_free_pages: 711 __iommu_dma_free_pages(pages, count); 712 return NULL; 713 } 714 715 static void *iommu_dma_alloc_remap(struct device *dev, size_t size, 716 dma_addr_t *dma_handle, gfp_t gfp, pgprot_t prot, 717 unsigned long attrs) 718 { 719 struct page **pages; 720 struct sg_table sgt; 721 void *vaddr; 722 723 pages = __iommu_dma_alloc_noncontiguous(dev, size, &sgt, gfp, prot, 724 attrs); 725 if (!pages) 726 return NULL; 727 *dma_handle = sgt.sgl->dma_address; 728 sg_free_table(&sgt); 729 vaddr = dma_common_pages_remap(pages, size, prot, 730 __builtin_return_address(0)); 731 if (!vaddr) 732 goto out_unmap; 733 return vaddr; 734 735 out_unmap: 736 __iommu_dma_unmap(dev, *dma_handle, size); 737 __iommu_dma_free_pages(pages, PAGE_ALIGN(size) >> PAGE_SHIFT); 738 return NULL; 739 } 740 741 #ifdef CONFIG_DMA_REMAP 742 static struct sg_table *iommu_dma_alloc_noncontiguous(struct device *dev, 743 size_t size, enum dma_data_direction dir, gfp_t gfp, 744 unsigned long attrs) 745 { 746 struct dma_sgt_handle *sh; 747 748 sh = kmalloc(sizeof(*sh), gfp); 749 if (!sh) 750 return NULL; 751 752 sh->pages = __iommu_dma_alloc_noncontiguous(dev, size, &sh->sgt, gfp, 753 PAGE_KERNEL, attrs); 754 if (!sh->pages) { 755 kfree(sh); 756 return NULL; 757 } 758 return &sh->sgt; 759 } 760 761 static void iommu_dma_free_noncontiguous(struct device *dev, size_t size, 762 struct sg_table *sgt, enum dma_data_direction dir) 763 { 764 struct dma_sgt_handle *sh = sgt_handle(sgt); 765 766 __iommu_dma_unmap(dev, sgt->sgl->dma_address, size); 767 __iommu_dma_free_pages(sh->pages, PAGE_ALIGN(size) >> PAGE_SHIFT); 768 sg_free_table(&sh->sgt); 769 } 770 #endif /* CONFIG_DMA_REMAP */ 771 772 static void iommu_dma_sync_single_for_cpu(struct device *dev, 773 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir) 774 { 775 phys_addr_t phys; 776 777 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 778 return; 779 780 phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle); 781 if (!dev_is_dma_coherent(dev)) 782 arch_sync_dma_for_cpu(phys, size, dir); 783 784 if (is_swiotlb_buffer(phys)) 785 swiotlb_sync_single_for_cpu(dev, phys, size, dir); 786 } 787 788 static void iommu_dma_sync_single_for_device(struct device *dev, 789 dma_addr_t dma_handle, size_t size, enum dma_data_direction dir) 790 { 791 phys_addr_t phys; 792 793 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 794 return; 795 796 phys = iommu_iova_to_phys(iommu_get_dma_domain(dev), dma_handle); 797 if (is_swiotlb_buffer(phys)) 798 swiotlb_sync_single_for_device(dev, phys, size, dir); 799 800 if (!dev_is_dma_coherent(dev)) 801 arch_sync_dma_for_device(phys, size, dir); 802 } 803 804 static void iommu_dma_sync_sg_for_cpu(struct device *dev, 805 struct scatterlist *sgl, int nelems, 806 enum dma_data_direction dir) 807 { 808 struct scatterlist *sg; 809 int i; 810 811 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 812 return; 813 814 for_each_sg(sgl, sg, nelems, i) { 815 if (!dev_is_dma_coherent(dev)) 816 arch_sync_dma_for_cpu(sg_phys(sg), sg->length, dir); 817 818 if (is_swiotlb_buffer(sg_phys(sg))) 819 swiotlb_sync_single_for_cpu(dev, sg_phys(sg), 820 sg->length, dir); 821 } 822 } 823 824 static void iommu_dma_sync_sg_for_device(struct device *dev, 825 struct scatterlist *sgl, int nelems, 826 enum dma_data_direction dir) 827 { 828 struct scatterlist *sg; 829 int i; 830 831 if (dev_is_dma_coherent(dev) && !dev_is_untrusted(dev)) 832 return; 833 834 for_each_sg(sgl, sg, nelems, i) { 835 if (is_swiotlb_buffer(sg_phys(sg))) 836 swiotlb_sync_single_for_device(dev, sg_phys(sg), 837 sg->length, dir); 838 839 if (!dev_is_dma_coherent(dev)) 840 arch_sync_dma_for_device(sg_phys(sg), sg->length, dir); 841 } 842 } 843 844 static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, 845 unsigned long offset, size_t size, enum dma_data_direction dir, 846 unsigned long attrs) 847 { 848 phys_addr_t phys = page_to_phys(page) + offset; 849 bool coherent = dev_is_dma_coherent(dev); 850 dma_addr_t dma_handle; 851 852 dma_handle = __iommu_dma_map_swiotlb(dev, phys, size, dma_get_mask(dev), 853 coherent, dir, attrs); 854 if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC) && 855 dma_handle != DMA_MAPPING_ERROR) 856 arch_sync_dma_for_device(phys, size, dir); 857 return dma_handle; 858 } 859 860 static void iommu_dma_unmap_page(struct device *dev, dma_addr_t dma_handle, 861 size_t size, enum dma_data_direction dir, unsigned long attrs) 862 { 863 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) 864 iommu_dma_sync_single_for_cpu(dev, dma_handle, size, dir); 865 __iommu_dma_unmap_swiotlb(dev, dma_handle, size, dir, attrs); 866 } 867 868 /* 869 * Prepare a successfully-mapped scatterlist to give back to the caller. 870 * 871 * At this point the segments are already laid out by iommu_dma_map_sg() to 872 * avoid individually crossing any boundaries, so we merely need to check a 873 * segment's start address to avoid concatenating across one. 874 */ 875 static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents, 876 dma_addr_t dma_addr) 877 { 878 struct scatterlist *s, *cur = sg; 879 unsigned long seg_mask = dma_get_seg_boundary(dev); 880 unsigned int cur_len = 0, max_len = dma_get_max_seg_size(dev); 881 int i, count = 0; 882 883 for_each_sg(sg, s, nents, i) { 884 /* Restore this segment's original unaligned fields first */ 885 unsigned int s_iova_off = sg_dma_address(s); 886 unsigned int s_length = sg_dma_len(s); 887 unsigned int s_iova_len = s->length; 888 889 s->offset += s_iova_off; 890 s->length = s_length; 891 sg_dma_address(s) = DMA_MAPPING_ERROR; 892 sg_dma_len(s) = 0; 893 894 /* 895 * Now fill in the real DMA data. If... 896 * - there is a valid output segment to append to 897 * - and this segment starts on an IOVA page boundary 898 * - but doesn't fall at a segment boundary 899 * - and wouldn't make the resulting output segment too long 900 */ 901 if (cur_len && !s_iova_off && (dma_addr & seg_mask) && 902 (max_len - cur_len >= s_length)) { 903 /* ...then concatenate it with the previous one */ 904 cur_len += s_length; 905 } else { 906 /* Otherwise start the next output segment */ 907 if (i > 0) 908 cur = sg_next(cur); 909 cur_len = s_length; 910 count++; 911 912 sg_dma_address(cur) = dma_addr + s_iova_off; 913 } 914 915 sg_dma_len(cur) = cur_len; 916 dma_addr += s_iova_len; 917 918 if (s_length + s_iova_off < s_iova_len) 919 cur_len = 0; 920 } 921 return count; 922 } 923 924 /* 925 * If mapping failed, then just restore the original list, 926 * but making sure the DMA fields are invalidated. 927 */ 928 static void __invalidate_sg(struct scatterlist *sg, int nents) 929 { 930 struct scatterlist *s; 931 int i; 932 933 for_each_sg(sg, s, nents, i) { 934 if (sg_dma_address(s) != DMA_MAPPING_ERROR) 935 s->offset += sg_dma_address(s); 936 if (sg_dma_len(s)) 937 s->length = sg_dma_len(s); 938 sg_dma_address(s) = DMA_MAPPING_ERROR; 939 sg_dma_len(s) = 0; 940 } 941 } 942 943 static void iommu_dma_unmap_sg_swiotlb(struct device *dev, struct scatterlist *sg, 944 int nents, enum dma_data_direction dir, unsigned long attrs) 945 { 946 struct scatterlist *s; 947 int i; 948 949 for_each_sg(sg, s, nents, i) 950 __iommu_dma_unmap_swiotlb(dev, sg_dma_address(s), 951 sg_dma_len(s), dir, attrs); 952 } 953 954 static int iommu_dma_map_sg_swiotlb(struct device *dev, struct scatterlist *sg, 955 int nents, enum dma_data_direction dir, unsigned long attrs) 956 { 957 struct scatterlist *s; 958 int i; 959 960 for_each_sg(sg, s, nents, i) { 961 sg_dma_address(s) = __iommu_dma_map_swiotlb(dev, sg_phys(s), 962 s->length, dma_get_mask(dev), 963 dev_is_dma_coherent(dev), dir, attrs); 964 if (sg_dma_address(s) == DMA_MAPPING_ERROR) 965 goto out_unmap; 966 sg_dma_len(s) = s->length; 967 } 968 969 return nents; 970 971 out_unmap: 972 iommu_dma_unmap_sg_swiotlb(dev, sg, i, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC); 973 return 0; 974 } 975 976 /* 977 * The DMA API client is passing in a scatterlist which could describe 978 * any old buffer layout, but the IOMMU API requires everything to be 979 * aligned to IOMMU pages. Hence the need for this complicated bit of 980 * impedance-matching, to be able to hand off a suitably-aligned list, 981 * but still preserve the original offsets and sizes for the caller. 982 */ 983 static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, 984 int nents, enum dma_data_direction dir, unsigned long attrs) 985 { 986 struct iommu_domain *domain = iommu_get_dma_domain(dev); 987 struct iommu_dma_cookie *cookie = domain->iova_cookie; 988 struct iova_domain *iovad = &cookie->iovad; 989 struct scatterlist *s, *prev = NULL; 990 int prot = dma_info_to_prot(dir, dev_is_dma_coherent(dev), attrs); 991 dma_addr_t iova; 992 size_t iova_len = 0; 993 unsigned long mask = dma_get_seg_boundary(dev); 994 int i; 995 996 if (static_branch_unlikely(&iommu_deferred_attach_enabled) && 997 iommu_deferred_attach(dev, domain)) 998 return 0; 999 1000 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) 1001 iommu_dma_sync_sg_for_device(dev, sg, nents, dir); 1002 1003 if (dev_is_untrusted(dev)) 1004 return iommu_dma_map_sg_swiotlb(dev, sg, nents, dir, attrs); 1005 1006 /* 1007 * Work out how much IOVA space we need, and align the segments to 1008 * IOVA granules for the IOMMU driver to handle. With some clever 1009 * trickery we can modify the list in-place, but reversibly, by 1010 * stashing the unaligned parts in the as-yet-unused DMA fields. 1011 */ 1012 for_each_sg(sg, s, nents, i) { 1013 size_t s_iova_off = iova_offset(iovad, s->offset); 1014 size_t s_length = s->length; 1015 size_t pad_len = (mask - iova_len + 1) & mask; 1016 1017 sg_dma_address(s) = s_iova_off; 1018 sg_dma_len(s) = s_length; 1019 s->offset -= s_iova_off; 1020 s_length = iova_align(iovad, s_length + s_iova_off); 1021 s->length = s_length; 1022 1023 /* 1024 * Due to the alignment of our single IOVA allocation, we can 1025 * depend on these assumptions about the segment boundary mask: 1026 * - If mask size >= IOVA size, then the IOVA range cannot 1027 * possibly fall across a boundary, so we don't care. 1028 * - If mask size < IOVA size, then the IOVA range must start 1029 * exactly on a boundary, therefore we can lay things out 1030 * based purely on segment lengths without needing to know 1031 * the actual addresses beforehand. 1032 * - The mask must be a power of 2, so pad_len == 0 if 1033 * iova_len == 0, thus we cannot dereference prev the first 1034 * time through here (i.e. before it has a meaningful value). 1035 */ 1036 if (pad_len && pad_len < s_length - 1) { 1037 prev->length += pad_len; 1038 iova_len += pad_len; 1039 } 1040 1041 iova_len += s_length; 1042 prev = s; 1043 } 1044 1045 iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); 1046 if (!iova) 1047 goto out_restore_sg; 1048 1049 /* 1050 * We'll leave any physical concatenation to the IOMMU driver's 1051 * implementation - it knows better than we do. 1052 */ 1053 if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len) 1054 goto out_free_iova; 1055 1056 return __finalise_sg(dev, sg, nents, iova); 1057 1058 out_free_iova: 1059 iommu_dma_free_iova(cookie, iova, iova_len, NULL); 1060 out_restore_sg: 1061 __invalidate_sg(sg, nents); 1062 return 0; 1063 } 1064 1065 static void iommu_dma_unmap_sg(struct device *dev, struct scatterlist *sg, 1066 int nents, enum dma_data_direction dir, unsigned long attrs) 1067 { 1068 dma_addr_t start, end; 1069 struct scatterlist *tmp; 1070 int i; 1071 1072 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) 1073 iommu_dma_sync_sg_for_cpu(dev, sg, nents, dir); 1074 1075 if (dev_is_untrusted(dev)) { 1076 iommu_dma_unmap_sg_swiotlb(dev, sg, nents, dir, attrs); 1077 return; 1078 } 1079 1080 /* 1081 * The scatterlist segments are mapped into a single 1082 * contiguous IOVA allocation, so this is incredibly easy. 1083 */ 1084 start = sg_dma_address(sg); 1085 for_each_sg(sg_next(sg), tmp, nents - 1, i) { 1086 if (sg_dma_len(tmp) == 0) 1087 break; 1088 sg = tmp; 1089 } 1090 end = sg_dma_address(sg) + sg_dma_len(sg); 1091 __iommu_dma_unmap(dev, start, end - start); 1092 } 1093 1094 static dma_addr_t iommu_dma_map_resource(struct device *dev, phys_addr_t phys, 1095 size_t size, enum dma_data_direction dir, unsigned long attrs) 1096 { 1097 return __iommu_dma_map(dev, phys, size, 1098 dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO, 1099 dma_get_mask(dev)); 1100 } 1101 1102 static void iommu_dma_unmap_resource(struct device *dev, dma_addr_t handle, 1103 size_t size, enum dma_data_direction dir, unsigned long attrs) 1104 { 1105 __iommu_dma_unmap(dev, handle, size); 1106 } 1107 1108 static void __iommu_dma_free(struct device *dev, size_t size, void *cpu_addr) 1109 { 1110 size_t alloc_size = PAGE_ALIGN(size); 1111 int count = alloc_size >> PAGE_SHIFT; 1112 struct page *page = NULL, **pages = NULL; 1113 1114 /* Non-coherent atomic allocation? Easy */ 1115 if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) && 1116 dma_free_from_pool(dev, cpu_addr, alloc_size)) 1117 return; 1118 1119 if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) { 1120 /* 1121 * If it the address is remapped, then it's either non-coherent 1122 * or highmem CMA, or an iommu_dma_alloc_remap() construction. 1123 */ 1124 pages = dma_common_find_pages(cpu_addr); 1125 if (!pages) 1126 page = vmalloc_to_page(cpu_addr); 1127 dma_common_free_remap(cpu_addr, alloc_size); 1128 } else { 1129 /* Lowmem means a coherent atomic or CMA allocation */ 1130 page = virt_to_page(cpu_addr); 1131 } 1132 1133 if (pages) 1134 __iommu_dma_free_pages(pages, count); 1135 if (page) 1136 dma_free_contiguous(dev, page, alloc_size); 1137 } 1138 1139 static void iommu_dma_free(struct device *dev, size_t size, void *cpu_addr, 1140 dma_addr_t handle, unsigned long attrs) 1141 { 1142 __iommu_dma_unmap(dev, handle, size); 1143 __iommu_dma_free(dev, size, cpu_addr); 1144 } 1145 1146 static void *iommu_dma_alloc_pages(struct device *dev, size_t size, 1147 struct page **pagep, gfp_t gfp, unsigned long attrs) 1148 { 1149 bool coherent = dev_is_dma_coherent(dev); 1150 size_t alloc_size = PAGE_ALIGN(size); 1151 int node = dev_to_node(dev); 1152 struct page *page = NULL; 1153 void *cpu_addr; 1154 1155 page = dma_alloc_contiguous(dev, alloc_size, gfp); 1156 if (!page) 1157 page = alloc_pages_node(node, gfp, get_order(alloc_size)); 1158 if (!page) 1159 return NULL; 1160 1161 if (IS_ENABLED(CONFIG_DMA_REMAP) && (!coherent || PageHighMem(page))) { 1162 pgprot_t prot = dma_pgprot(dev, PAGE_KERNEL, attrs); 1163 1164 cpu_addr = dma_common_contiguous_remap(page, alloc_size, 1165 prot, __builtin_return_address(0)); 1166 if (!cpu_addr) 1167 goto out_free_pages; 1168 1169 if (!coherent) 1170 arch_dma_prep_coherent(page, size); 1171 } else { 1172 cpu_addr = page_address(page); 1173 } 1174 1175 *pagep = page; 1176 memset(cpu_addr, 0, alloc_size); 1177 return cpu_addr; 1178 out_free_pages: 1179 dma_free_contiguous(dev, page, alloc_size); 1180 return NULL; 1181 } 1182 1183 static void *iommu_dma_alloc(struct device *dev, size_t size, 1184 dma_addr_t *handle, gfp_t gfp, unsigned long attrs) 1185 { 1186 bool coherent = dev_is_dma_coherent(dev); 1187 int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs); 1188 struct page *page = NULL; 1189 void *cpu_addr; 1190 1191 gfp |= __GFP_ZERO; 1192 1193 if (IS_ENABLED(CONFIG_DMA_REMAP) && gfpflags_allow_blocking(gfp) && 1194 !(attrs & DMA_ATTR_FORCE_CONTIGUOUS)) { 1195 return iommu_dma_alloc_remap(dev, size, handle, gfp, 1196 dma_pgprot(dev, PAGE_KERNEL, attrs), attrs); 1197 } 1198 1199 if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) && 1200 !gfpflags_allow_blocking(gfp) && !coherent) 1201 page = dma_alloc_from_pool(dev, PAGE_ALIGN(size), &cpu_addr, 1202 gfp, NULL); 1203 else 1204 cpu_addr = iommu_dma_alloc_pages(dev, size, &page, gfp, attrs); 1205 if (!cpu_addr) 1206 return NULL; 1207 1208 *handle = __iommu_dma_map(dev, page_to_phys(page), size, ioprot, 1209 dev->coherent_dma_mask); 1210 if (*handle == DMA_MAPPING_ERROR) { 1211 __iommu_dma_free(dev, size, cpu_addr); 1212 return NULL; 1213 } 1214 1215 return cpu_addr; 1216 } 1217 1218 static int iommu_dma_mmap(struct device *dev, struct vm_area_struct *vma, 1219 void *cpu_addr, dma_addr_t dma_addr, size_t size, 1220 unsigned long attrs) 1221 { 1222 unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT; 1223 unsigned long pfn, off = vma->vm_pgoff; 1224 int ret; 1225 1226 vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs); 1227 1228 if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret)) 1229 return ret; 1230 1231 if (off >= nr_pages || vma_pages(vma) > nr_pages - off) 1232 return -ENXIO; 1233 1234 if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) { 1235 struct page **pages = dma_common_find_pages(cpu_addr); 1236 1237 if (pages) 1238 return vm_map_pages(vma, pages, nr_pages); 1239 pfn = vmalloc_to_pfn(cpu_addr); 1240 } else { 1241 pfn = page_to_pfn(virt_to_page(cpu_addr)); 1242 } 1243 1244 return remap_pfn_range(vma, vma->vm_start, pfn + off, 1245 vma->vm_end - vma->vm_start, 1246 vma->vm_page_prot); 1247 } 1248 1249 static int iommu_dma_get_sgtable(struct device *dev, struct sg_table *sgt, 1250 void *cpu_addr, dma_addr_t dma_addr, size_t size, 1251 unsigned long attrs) 1252 { 1253 struct page *page; 1254 int ret; 1255 1256 if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) { 1257 struct page **pages = dma_common_find_pages(cpu_addr); 1258 1259 if (pages) { 1260 return sg_alloc_table_from_pages(sgt, pages, 1261 PAGE_ALIGN(size) >> PAGE_SHIFT, 1262 0, size, GFP_KERNEL); 1263 } 1264 1265 page = vmalloc_to_page(cpu_addr); 1266 } else { 1267 page = virt_to_page(cpu_addr); 1268 } 1269 1270 ret = sg_alloc_table(sgt, 1, GFP_KERNEL); 1271 if (!ret) 1272 sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0); 1273 return ret; 1274 } 1275 1276 static unsigned long iommu_dma_get_merge_boundary(struct device *dev) 1277 { 1278 struct iommu_domain *domain = iommu_get_dma_domain(dev); 1279 1280 return (1UL << __ffs(domain->pgsize_bitmap)) - 1; 1281 } 1282 1283 static const struct dma_map_ops iommu_dma_ops = { 1284 .alloc = iommu_dma_alloc, 1285 .free = iommu_dma_free, 1286 .alloc_pages = dma_common_alloc_pages, 1287 .free_pages = dma_common_free_pages, 1288 #ifdef CONFIG_DMA_REMAP 1289 .alloc_noncontiguous = iommu_dma_alloc_noncontiguous, 1290 .free_noncontiguous = iommu_dma_free_noncontiguous, 1291 #endif 1292 .mmap = iommu_dma_mmap, 1293 .get_sgtable = iommu_dma_get_sgtable, 1294 .map_page = iommu_dma_map_page, 1295 .unmap_page = iommu_dma_unmap_page, 1296 .map_sg = iommu_dma_map_sg, 1297 .unmap_sg = iommu_dma_unmap_sg, 1298 .sync_single_for_cpu = iommu_dma_sync_single_for_cpu, 1299 .sync_single_for_device = iommu_dma_sync_single_for_device, 1300 .sync_sg_for_cpu = iommu_dma_sync_sg_for_cpu, 1301 .sync_sg_for_device = iommu_dma_sync_sg_for_device, 1302 .map_resource = iommu_dma_map_resource, 1303 .unmap_resource = iommu_dma_unmap_resource, 1304 .get_merge_boundary = iommu_dma_get_merge_boundary, 1305 }; 1306 1307 /* 1308 * The IOMMU core code allocates the default DMA domain, which the underlying 1309 * IOMMU driver needs to support via the dma-iommu layer. 1310 */ 1311 void iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 size) 1312 { 1313 struct iommu_domain *domain = iommu_get_domain_for_dev(dev); 1314 1315 if (!domain) 1316 goto out_err; 1317 1318 /* 1319 * The IOMMU core code allocates the default DMA domain, which the 1320 * underlying IOMMU driver needs to support via the dma-iommu layer. 1321 */ 1322 if (domain->type == IOMMU_DOMAIN_DMA) { 1323 if (iommu_dma_init_domain(domain, dma_base, size, dev)) 1324 goto out_err; 1325 dev->dma_ops = &iommu_dma_ops; 1326 } 1327 1328 return; 1329 out_err: 1330 pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n", 1331 dev_name(dev)); 1332 } 1333 1334 static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, 1335 phys_addr_t msi_addr, struct iommu_domain *domain) 1336 { 1337 struct iommu_dma_cookie *cookie = domain->iova_cookie; 1338 struct iommu_dma_msi_page *msi_page; 1339 dma_addr_t iova; 1340 int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO; 1341 size_t size = cookie_msi_granule(cookie); 1342 1343 msi_addr &= ~(phys_addr_t)(size - 1); 1344 list_for_each_entry(msi_page, &cookie->msi_page_list, list) 1345 if (msi_page->phys == msi_addr) 1346 return msi_page; 1347 1348 msi_page = kzalloc(sizeof(*msi_page), GFP_KERNEL); 1349 if (!msi_page) 1350 return NULL; 1351 1352 iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); 1353 if (!iova) 1354 goto out_free_page; 1355 1356 if (iommu_map(domain, iova, msi_addr, size, prot)) 1357 goto out_free_iova; 1358 1359 INIT_LIST_HEAD(&msi_page->list); 1360 msi_page->phys = msi_addr; 1361 msi_page->iova = iova; 1362 list_add(&msi_page->list, &cookie->msi_page_list); 1363 return msi_page; 1364 1365 out_free_iova: 1366 iommu_dma_free_iova(cookie, iova, size, NULL); 1367 out_free_page: 1368 kfree(msi_page); 1369 return NULL; 1370 } 1371 1372 int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr) 1373 { 1374 struct device *dev = msi_desc_to_dev(desc); 1375 struct iommu_domain *domain = iommu_get_domain_for_dev(dev); 1376 struct iommu_dma_msi_page *msi_page; 1377 static DEFINE_MUTEX(msi_prepare_lock); /* see below */ 1378 1379 if (!domain || !domain->iova_cookie) { 1380 desc->iommu_cookie = NULL; 1381 return 0; 1382 } 1383 1384 /* 1385 * In fact the whole prepare operation should already be serialised by 1386 * irq_domain_mutex further up the callchain, but that's pretty subtle 1387 * on its own, so consider this locking as failsafe documentation... 1388 */ 1389 mutex_lock(&msi_prepare_lock); 1390 msi_page = iommu_dma_get_msi_page(dev, msi_addr, domain); 1391 mutex_unlock(&msi_prepare_lock); 1392 1393 msi_desc_set_iommu_cookie(desc, msi_page); 1394 1395 if (!msi_page) 1396 return -ENOMEM; 1397 return 0; 1398 } 1399 1400 void iommu_dma_compose_msi_msg(struct msi_desc *desc, 1401 struct msi_msg *msg) 1402 { 1403 struct device *dev = msi_desc_to_dev(desc); 1404 const struct iommu_domain *domain = iommu_get_domain_for_dev(dev); 1405 const struct iommu_dma_msi_page *msi_page; 1406 1407 msi_page = msi_desc_get_iommu_cookie(desc); 1408 1409 if (!domain || !domain->iova_cookie || WARN_ON(!msi_page)) 1410 return; 1411 1412 msg->address_hi = upper_32_bits(msi_page->iova); 1413 msg->address_lo &= cookie_msi_granule(domain->iova_cookie) - 1; 1414 msg->address_lo += lower_32_bits(msi_page->iova); 1415 } 1416 1417 static int iommu_dma_init(void) 1418 { 1419 if (is_kdump_kernel()) 1420 static_branch_enable(&iommu_deferred_attach_enabled); 1421 1422 return iova_cache_get(); 1423 } 1424 arch_initcall(iommu_dma_init); 1425