1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * linux/arch/alpha/kernel/pci_iommu.c 4 */ 5 6 #include <linux/kernel.h> 7 #include <linux/mm.h> 8 #include <linux/pci.h> 9 #include <linux/gfp.h> 10 #include <linux/memblock.h> 11 #include <linux/export.h> 12 #include <linux/scatterlist.h> 13 #include <linux/log2.h> 14 #include <linux/dma-map-ops.h> 15 #include <linux/iommu-helper.h> 16 #include <linux/string_choices.h> 17 18 #include <asm/io.h> 19 #include <asm/hwrpb.h> 20 21 #include "proto.h" 22 #include "pci_impl.h" 23 24 25 #define DEBUG_ALLOC 0 26 #if DEBUG_ALLOC > 0 27 # define DBGA(args...) printk(KERN_DEBUG args) 28 #else 29 # define DBGA(args...) 30 #endif 31 #if DEBUG_ALLOC > 1 32 # define DBGA2(args...) printk(KERN_DEBUG args) 33 #else 34 # define DBGA2(args...) 35 #endif 36 37 #define DEBUG_NODIRECT 0 38 39 #define ISA_DMA_MASK 0x00ffffff 40 41 static inline unsigned long 42 mk_iommu_pte(unsigned long paddr) 43 { 44 return (paddr >> (PAGE_SHIFT-1)) | 1; 45 } 46 47 /* Return the minimum of MAX or the first power of two larger 48 than main memory. */ 49 50 unsigned long 51 size_for_memory(unsigned long max) 52 { 53 unsigned long mem = max_low_pfn << PAGE_SHIFT; 54 if (mem < max) 55 max = roundup_pow_of_two(mem); 56 return max; 57 } 58 59 struct pci_iommu_arena * __init 60 iommu_arena_new_node(int nid, struct pci_controller *hose, dma_addr_t base, 61 unsigned long window_size, unsigned long align) 62 { 63 unsigned long mem_size; 64 struct pci_iommu_arena *arena; 65 66 mem_size = window_size / (PAGE_SIZE / sizeof(unsigned long)); 67 68 /* Note that the TLB lookup logic uses bitwise concatenation, 69 not addition, so the required arena alignment is based on 70 the size of the window. Retain the align parameter so that 71 particular systems can over-align the arena. */ 72 if (align < mem_size) 73 align = mem_size; 74 75 arena = memblock_alloc_or_panic(sizeof(*arena), SMP_CACHE_BYTES); 76 arena->ptes = memblock_alloc_or_panic(mem_size, align); 77 78 spin_lock_init(&arena->lock); 79 arena->hose = hose; 80 arena->dma_base = base; 81 arena->size = window_size; 82 arena->next_entry = 0; 83 84 /* Align allocations to a multiple of a page size. Not needed 85 unless there are chip bugs. */ 86 arena->align_entry = 1; 87 88 return arena; 89 } 90 91 struct pci_iommu_arena * __init 92 iommu_arena_new(struct pci_controller *hose, dma_addr_t base, 93 unsigned long window_size, unsigned long align) 94 { 95 return iommu_arena_new_node(0, hose, base, window_size, align); 96 } 97 98 /* Must be called with the arena lock held */ 99 static long 100 iommu_arena_find_pages(struct device *dev, struct pci_iommu_arena *arena, 101 long n, long mask) 102 { 103 unsigned long *ptes; 104 long i, p, nent; 105 int pass = 0; 106 unsigned long base; 107 unsigned long boundary_size; 108 109 base = arena->dma_base >> PAGE_SHIFT; 110 boundary_size = dma_get_seg_boundary_nr_pages(dev, PAGE_SHIFT); 111 112 /* Search forward for the first mask-aligned sequence of N free ptes */ 113 ptes = arena->ptes; 114 nent = arena->size >> PAGE_SHIFT; 115 p = ALIGN(arena->next_entry, mask + 1); 116 i = 0; 117 118 again: 119 while (i < n && p+i < nent) { 120 if (!i && iommu_is_span_boundary(p, n, base, boundary_size)) { 121 p = ALIGN(p + 1, mask + 1); 122 goto again; 123 } 124 125 if (ptes[p+i]) { 126 p = ALIGN(p + i + 1, mask + 1); 127 i = 0; 128 } else { 129 i = i + 1; 130 } 131 } 132 133 if (i < n) { 134 if (pass < 1) { 135 /* 136 * Reached the end. Flush the TLB and restart 137 * the search from the beginning. 138 */ 139 alpha_mv.mv_pci_tbi(arena->hose, 0, -1); 140 141 pass++; 142 p = 0; 143 i = 0; 144 goto again; 145 } else 146 return -1; 147 } 148 149 /* Success. It's the responsibility of the caller to mark them 150 in use before releasing the lock */ 151 return p; 152 } 153 154 static long 155 iommu_arena_alloc(struct device *dev, struct pci_iommu_arena *arena, long n, 156 unsigned int align) 157 { 158 unsigned long flags; 159 unsigned long *ptes; 160 long i, p, mask; 161 162 spin_lock_irqsave(&arena->lock, flags); 163 164 /* Search for N empty ptes */ 165 ptes = arena->ptes; 166 mask = max(align, arena->align_entry) - 1; 167 p = iommu_arena_find_pages(dev, arena, n, mask); 168 if (p < 0) { 169 spin_unlock_irqrestore(&arena->lock, flags); 170 return -1; 171 } 172 173 /* Success. Mark them all in use, ie not zero and invalid 174 for the iommu tlb that could load them from under us. 175 The chip specific bits will fill this in with something 176 kosher when we return. */ 177 for (i = 0; i < n; ++i) 178 ptes[p+i] = IOMMU_INVALID_PTE; 179 180 arena->next_entry = p + n; 181 spin_unlock_irqrestore(&arena->lock, flags); 182 183 return p; 184 } 185 186 static void 187 iommu_arena_free(struct pci_iommu_arena *arena, long ofs, long n) 188 { 189 unsigned long *p; 190 long i; 191 192 p = arena->ptes + ofs; 193 for (i = 0; i < n; ++i) 194 p[i] = 0; 195 } 196 197 /* 198 * True if the machine supports DAC addressing, and DEV can 199 * make use of it given MASK. 200 */ 201 static int pci_dac_dma_supported(struct pci_dev *dev, u64 mask) 202 { 203 dma_addr_t dac_offset = alpha_mv.pci_dac_offset; 204 int ok = 1; 205 206 /* If this is not set, the machine doesn't support DAC at all. */ 207 if (dac_offset == 0) 208 ok = 0; 209 210 /* The device has to be able to address our DAC bit. */ 211 if ((dac_offset & dev->dma_mask) != dac_offset) 212 ok = 0; 213 214 /* If both conditions above are met, we are fine. */ 215 DBGA("pci_dac_dma_supported %s from %ps\n", 216 str_yes_no(ok), __builtin_return_address(0)); 217 218 return ok; 219 } 220 221 /* Map a single buffer of the indicated size for PCI DMA in streaming 222 mode. The 32-bit PCI bus mastering address to use is returned. 223 Once the device is given the dma address, the device owns this memory 224 until either pci_unmap_single or pci_dma_sync_single is performed. */ 225 226 static dma_addr_t 227 pci_map_single_1(struct pci_dev *pdev, phys_addr_t paddr, size_t size, 228 int dac_allowed) 229 { 230 struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose; 231 dma_addr_t max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK; 232 unsigned long offset = offset_in_page(paddr); 233 struct pci_iommu_arena *arena; 234 long npages, dma_ofs, i; 235 dma_addr_t ret; 236 unsigned int align = 0; 237 struct device *dev = pdev ? &pdev->dev : NULL; 238 239 #if !DEBUG_NODIRECT 240 /* First check to see if we can use the direct map window. */ 241 if (paddr + size + __direct_map_base - 1 <= max_dma 242 && paddr + size <= __direct_map_size) { 243 ret = paddr + __direct_map_base; 244 245 DBGA2("pci_map_single: [%pa,%zx] -> direct %llx from %ps\n", 246 &paddr, size, ret, __builtin_return_address(0)); 247 248 return ret; 249 } 250 #endif 251 252 /* Next, use DAC if selected earlier. */ 253 if (dac_allowed) { 254 ret = paddr + alpha_mv.pci_dac_offset; 255 256 DBGA2("pci_map_single: [%pa,%zx] -> DAC %llx from %ps\n", 257 &paddr, size, ret, __builtin_return_address(0)); 258 259 return ret; 260 } 261 262 /* If the machine doesn't define a pci_tbi routine, we have to 263 assume it doesn't support sg mapping, and, since we tried to 264 use direct_map above, it now must be considered an error. */ 265 if (! alpha_mv.mv_pci_tbi) { 266 printk_once(KERN_WARNING "pci_map_single: no HW sg\n"); 267 return DMA_MAPPING_ERROR; 268 } 269 270 arena = hose->sg_pci; 271 if (!arena || arena->dma_base + arena->size - 1 > max_dma) 272 arena = hose->sg_isa; 273 274 npages = iommu_num_pages(paddr, size, PAGE_SIZE); 275 276 /* Force allocation to 64KB boundary for ISA bridges. */ 277 if (pdev && pdev == isa_bridge) 278 align = 8; 279 dma_ofs = iommu_arena_alloc(dev, arena, npages, align); 280 if (dma_ofs < 0) { 281 printk(KERN_WARNING "pci_map_single failed: " 282 "could not allocate dma page tables\n"); 283 return DMA_MAPPING_ERROR; 284 } 285 286 paddr &= PAGE_MASK; 287 for (i = 0; i < npages; ++i, paddr += PAGE_SIZE) 288 arena->ptes[i + dma_ofs] = mk_iommu_pte(paddr); 289 290 ret = arena->dma_base + dma_ofs * PAGE_SIZE; 291 ret += offset; 292 293 DBGA2("pci_map_single: [%pa,%zx] np %ld -> sg %llx from %ps\n", 294 &paddr, size, npages, ret, __builtin_return_address(0)); 295 296 return ret; 297 } 298 299 /* Helper for generic DMA-mapping functions. */ 300 static struct pci_dev *alpha_gendev_to_pci(struct device *dev) 301 { 302 if (dev && dev_is_pci(dev)) 303 return to_pci_dev(dev); 304 305 /* Assume that non-PCI devices asking for DMA are either ISA or EISA, 306 BUG() otherwise. */ 307 BUG_ON(!isa_bridge); 308 309 /* Assume non-busmaster ISA DMA when dma_mask is not set (the ISA 310 bridge is bus master then). */ 311 if (!dev || !dev->dma_mask || !*dev->dma_mask) 312 return isa_bridge; 313 314 /* For EISA bus masters, return isa_bridge (it might have smaller 315 dma_mask due to wiring limitations). */ 316 if (*dev->dma_mask >= isa_bridge->dma_mask) 317 return isa_bridge; 318 319 /* This assumes ISA bus master with dma_mask 0xffffff. */ 320 return NULL; 321 } 322 323 static dma_addr_t alpha_pci_map_phys(struct device *dev, phys_addr_t phys, 324 size_t size, enum dma_data_direction dir, 325 unsigned long attrs) 326 { 327 struct pci_dev *pdev = alpha_gendev_to_pci(dev); 328 int dac_allowed; 329 330 if (unlikely(attrs & DMA_ATTR_MMIO)) 331 return DMA_MAPPING_ERROR; 332 333 dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; 334 return pci_map_single_1(pdev, phys, size, dac_allowed); 335 } 336 337 /* Unmap a single streaming mode DMA translation. The DMA_ADDR and 338 SIZE must match what was provided for in a previous pci_map_single 339 call. All other usages are undefined. After this call, reads by 340 the cpu to the buffer are guaranteed to see whatever the device 341 wrote there. */ 342 343 static void alpha_pci_unmap_phys(struct device *dev, dma_addr_t dma_addr, 344 size_t size, enum dma_data_direction dir, 345 unsigned long attrs) 346 { 347 unsigned long flags; 348 struct pci_dev *pdev = alpha_gendev_to_pci(dev); 349 struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose; 350 struct pci_iommu_arena *arena; 351 long dma_ofs, npages; 352 353 if (dma_addr >= __direct_map_base 354 && dma_addr < __direct_map_base + __direct_map_size) { 355 /* Nothing to do. */ 356 357 DBGA2("pci_unmap_single: direct [%llx,%zx] from %ps\n", 358 dma_addr, size, __builtin_return_address(0)); 359 360 return; 361 } 362 363 if (dma_addr > 0xffffffff) { 364 DBGA2("pci64_unmap_single: DAC [%llx,%zx] from %ps\n", 365 dma_addr, size, __builtin_return_address(0)); 366 return; 367 } 368 369 arena = hose->sg_pci; 370 if (!arena || dma_addr < arena->dma_base) 371 arena = hose->sg_isa; 372 373 dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT; 374 if (dma_ofs * PAGE_SIZE >= arena->size) { 375 printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %llx " 376 " base %llx size %x\n", 377 dma_addr, arena->dma_base, arena->size); 378 return; 379 BUG(); 380 } 381 382 npages = iommu_num_pages(dma_addr, size, PAGE_SIZE); 383 384 spin_lock_irqsave(&arena->lock, flags); 385 386 iommu_arena_free(arena, dma_ofs, npages); 387 388 /* If we're freeing ptes above the `next_entry' pointer (they 389 may have snuck back into the TLB since the last wrap flush), 390 we need to flush the TLB before reallocating the latter. */ 391 if (dma_ofs >= arena->next_entry) 392 alpha_mv.mv_pci_tbi(hose, dma_addr, dma_addr + size - 1); 393 394 spin_unlock_irqrestore(&arena->lock, flags); 395 396 DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %ps\n", 397 dma_addr, size, npages, __builtin_return_address(0)); 398 } 399 400 /* Allocate and map kernel buffer using consistent mode DMA for PCI 401 device. Returns non-NULL cpu-view pointer to the buffer if 402 successful and sets *DMA_ADDRP to the pci side dma address as well, 403 else DMA_ADDRP is undefined. */ 404 405 static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, 406 dma_addr_t *dma_addrp, gfp_t gfp, 407 unsigned long attrs) 408 { 409 struct pci_dev *pdev = alpha_gendev_to_pci(dev); 410 void *cpu_addr; 411 long order = get_order(size); 412 413 gfp &= ~GFP_DMA; 414 415 try_again: 416 cpu_addr = (void *)__get_free_pages(gfp | __GFP_ZERO, order); 417 if (! cpu_addr) { 418 printk(KERN_INFO "pci_alloc_consistent: " 419 "get_free_pages failed from %ps\n", 420 __builtin_return_address(0)); 421 /* ??? Really atomic allocation? Otherwise we could play 422 with vmalloc and sg if we can't find contiguous memory. */ 423 return NULL; 424 } 425 memset(cpu_addr, 0, size); 426 427 *dma_addrp = pci_map_single_1(pdev, virt_to_phys(cpu_addr), size, 0); 428 if (*dma_addrp == DMA_MAPPING_ERROR) { 429 free_pages((unsigned long)cpu_addr, order); 430 if (alpha_mv.mv_pci_tbi || (gfp & GFP_DMA)) 431 return NULL; 432 /* The address doesn't fit required mask and we 433 do not have iommu. Try again with GFP_DMA. */ 434 gfp |= GFP_DMA; 435 goto try_again; 436 } 437 438 DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %ps\n", 439 size, cpu_addr, *dma_addrp, __builtin_return_address(0)); 440 441 return cpu_addr; 442 } 443 444 /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must 445 be values that were returned from pci_alloc_consistent. SIZE must 446 be the same as what as passed into pci_alloc_consistent. 447 References to the memory and mappings associated with CPU_ADDR or 448 DMA_ADDR past this call are illegal. */ 449 450 static void alpha_pci_free_coherent(struct device *dev, size_t size, 451 void *cpu_addr, dma_addr_t dma_addr, 452 unsigned long attrs) 453 { 454 struct pci_dev *pdev = alpha_gendev_to_pci(dev); 455 dma_unmap_single(&pdev->dev, dma_addr, size, DMA_BIDIRECTIONAL); 456 free_pages((unsigned long)cpu_addr, get_order(size)); 457 458 DBGA2("pci_free_consistent: [%llx,%zx] from %ps\n", 459 dma_addr, size, __builtin_return_address(0)); 460 } 461 462 /* Classify the elements of the scatterlist. Write dma_address 463 of each element with: 464 0 : Followers all physically adjacent. 465 1 : Followers all virtually adjacent. 466 -1 : Not leader, physically adjacent to previous. 467 -2 : Not leader, virtually adjacent to previous. 468 Write dma_length of each leader with the combined lengths of 469 the mergable followers. */ 470 471 #define SG_ENT_VIRT_ADDRESS(SG) (sg_virt((SG))) 472 #define SG_ENT_PHYS_ADDRESS(SG) __pa(SG_ENT_VIRT_ADDRESS(SG)) 473 474 static void 475 sg_classify(struct device *dev, struct scatterlist *sg, struct scatterlist *end, 476 int virt_ok) 477 { 478 unsigned long next_paddr; 479 struct scatterlist *leader; 480 long leader_flag, leader_length; 481 unsigned int max_seg_size; 482 483 leader = sg; 484 leader_flag = 0; 485 leader_length = leader->length; 486 next_paddr = SG_ENT_PHYS_ADDRESS(leader) + leader_length; 487 488 /* we will not marge sg without device. */ 489 max_seg_size = dev ? dma_get_max_seg_size(dev) : 0; 490 for (++sg; sg < end; ++sg) { 491 unsigned long addr, len; 492 addr = SG_ENT_PHYS_ADDRESS(sg); 493 len = sg->length; 494 495 if (leader_length + len > max_seg_size) 496 goto new_segment; 497 498 if (next_paddr == addr) { 499 sg->dma_address = -1; 500 leader_length += len; 501 } else if (((next_paddr | addr) & ~PAGE_MASK) == 0 && virt_ok) { 502 sg->dma_address = -2; 503 leader_flag = 1; 504 leader_length += len; 505 } else { 506 new_segment: 507 leader->dma_address = leader_flag; 508 leader->dma_length = leader_length; 509 leader = sg; 510 leader_flag = 0; 511 leader_length = len; 512 } 513 514 next_paddr = addr + len; 515 } 516 517 leader->dma_address = leader_flag; 518 leader->dma_length = leader_length; 519 } 520 521 /* Given a scatterlist leader, choose an allocation method and fill 522 in the blanks. */ 523 524 static int 525 sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, 526 struct scatterlist *out, struct pci_iommu_arena *arena, 527 dma_addr_t max_dma, int dac_allowed) 528 { 529 unsigned long paddr = SG_ENT_PHYS_ADDRESS(leader); 530 long size = leader->dma_length; 531 struct scatterlist *sg; 532 unsigned long *ptes; 533 long npages, dma_ofs, i; 534 535 #if !DEBUG_NODIRECT 536 /* If everything is physically contiguous, and the addresses 537 fall into the direct-map window, use it. */ 538 if (leader->dma_address == 0 539 && paddr + size + __direct_map_base - 1 <= max_dma 540 && paddr + size <= __direct_map_size) { 541 out->dma_address = paddr + __direct_map_base; 542 out->dma_length = size; 543 544 DBGA(" sg_fill: [%p,%lx] -> direct %llx\n", 545 __va(paddr), size, out->dma_address); 546 547 return 0; 548 } 549 #endif 550 551 /* If physically contiguous and DAC is available, use it. */ 552 if (leader->dma_address == 0 && dac_allowed) { 553 out->dma_address = paddr + alpha_mv.pci_dac_offset; 554 out->dma_length = size; 555 556 DBGA(" sg_fill: [%p,%lx] -> DAC %llx\n", 557 __va(paddr), size, out->dma_address); 558 559 return 0; 560 } 561 562 /* Otherwise, we'll use the iommu to make the pages virtually 563 contiguous. */ 564 565 paddr &= ~PAGE_MASK; 566 npages = iommu_num_pages(paddr, size, PAGE_SIZE); 567 dma_ofs = iommu_arena_alloc(dev, arena, npages, 0); 568 if (dma_ofs < 0) { 569 /* If we attempted a direct map above but failed, die. */ 570 if (leader->dma_address == 0) 571 return -1; 572 573 /* Otherwise, break up the remaining virtually contiguous 574 hunks into individual direct maps and retry. */ 575 sg_classify(dev, leader, end, 0); 576 return sg_fill(dev, leader, end, out, arena, max_dma, dac_allowed); 577 } 578 579 out->dma_address = arena->dma_base + dma_ofs*PAGE_SIZE + paddr; 580 out->dma_length = size; 581 582 DBGA(" sg_fill: [%p,%lx] -> sg %llx np %ld\n", 583 __va(paddr), size, out->dma_address, npages); 584 585 /* All virtually contiguous. We need to find the length of each 586 physically contiguous subsegment to fill in the ptes. */ 587 ptes = &arena->ptes[dma_ofs]; 588 sg = leader; 589 do { 590 #if DEBUG_ALLOC > 0 591 struct scatterlist *last_sg = sg; 592 #endif 593 594 size = sg->length; 595 paddr = SG_ENT_PHYS_ADDRESS(sg); 596 597 while (sg+1 < end && (int) sg[1].dma_address == -1) { 598 size += sg[1].length; 599 sg = sg_next(sg); 600 } 601 602 npages = iommu_num_pages(paddr, size, PAGE_SIZE); 603 604 paddr &= PAGE_MASK; 605 for (i = 0; i < npages; ++i, paddr += PAGE_SIZE) 606 *ptes++ = mk_iommu_pte(paddr); 607 608 #if DEBUG_ALLOC > 0 609 DBGA(" (%ld) [%p,%x] np %ld\n", 610 last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg), 611 last_sg->length, npages); 612 while (++last_sg <= sg) { 613 DBGA(" (%ld) [%p,%x] cont\n", 614 last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg), 615 last_sg->length); 616 } 617 #endif 618 } while (++sg < end && (int) sg->dma_address < 0); 619 620 return 1; 621 } 622 623 static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg, 624 int nents, enum dma_data_direction dir, 625 unsigned long attrs) 626 { 627 struct pci_dev *pdev = alpha_gendev_to_pci(dev); 628 struct scatterlist *start, *end, *out; 629 struct pci_controller *hose; 630 struct pci_iommu_arena *arena; 631 dma_addr_t max_dma; 632 int dac_allowed; 633 634 BUG_ON(dir == DMA_NONE); 635 636 dac_allowed = dev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; 637 638 /* Fast path single entry scatterlists. */ 639 if (nents == 1) { 640 sg->dma_length = sg->length; 641 sg->dma_address = pci_map_single_1(pdev, sg_phys(sg), 642 sg->length, dac_allowed); 643 if (sg->dma_address == DMA_MAPPING_ERROR) 644 return -EIO; 645 return 1; 646 } 647 648 start = sg; 649 end = sg + nents; 650 651 /* First, prepare information about the entries. */ 652 sg_classify(dev, sg, end, alpha_mv.mv_pci_tbi != 0); 653 654 /* Second, figure out where we're going to map things. */ 655 if (alpha_mv.mv_pci_tbi) { 656 hose = pdev ? pdev->sysdata : pci_isa_hose; 657 max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK; 658 arena = hose->sg_pci; 659 if (!arena || arena->dma_base + arena->size - 1 > max_dma) 660 arena = hose->sg_isa; 661 } else { 662 max_dma = -1; 663 arena = NULL; 664 hose = NULL; 665 } 666 667 /* Third, iterate over the scatterlist leaders and allocate 668 dma space as needed. */ 669 for (out = sg; sg < end; ++sg) { 670 if ((int) sg->dma_address < 0) 671 continue; 672 if (sg_fill(dev, sg, end, out, arena, max_dma, dac_allowed) < 0) 673 goto error; 674 out++; 675 } 676 677 /* Mark the end of the list for pci_unmap_sg. */ 678 if (out < end) 679 out->dma_length = 0; 680 681 if (out - start == 0) { 682 printk(KERN_WARNING "pci_map_sg failed: no entries?\n"); 683 return -ENOMEM; 684 } 685 DBGA("pci_map_sg: %ld entries\n", out - start); 686 687 return out - start; 688 689 error: 690 printk(KERN_WARNING "pci_map_sg failed: " 691 "could not allocate dma page tables\n"); 692 693 /* Some allocation failed while mapping the scatterlist 694 entries. Unmap them now. */ 695 if (out > start) 696 dma_unmap_sg(&pdev->dev, start, out - start, dir); 697 return -ENOMEM; 698 } 699 700 /* Unmap a set of streaming mode DMA translations. Again, cpu read 701 rules concerning calls here are the same as for pci_unmap_single() 702 above. */ 703 704 static void alpha_pci_unmap_sg(struct device *dev, struct scatterlist *sg, 705 int nents, enum dma_data_direction dir, 706 unsigned long attrs) 707 { 708 struct pci_dev *pdev = alpha_gendev_to_pci(dev); 709 unsigned long flags; 710 struct pci_controller *hose; 711 struct pci_iommu_arena *arena; 712 struct scatterlist *end; 713 dma_addr_t max_dma; 714 dma_addr_t fbeg, fend; 715 716 BUG_ON(dir == DMA_NONE); 717 718 if (! alpha_mv.mv_pci_tbi) 719 return; 720 721 hose = pdev ? pdev->sysdata : pci_isa_hose; 722 max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK; 723 arena = hose->sg_pci; 724 if (!arena || arena->dma_base + arena->size - 1 > max_dma) 725 arena = hose->sg_isa; 726 727 fbeg = -1, fend = 0; 728 729 spin_lock_irqsave(&arena->lock, flags); 730 731 for (end = sg + nents; sg < end; ++sg) { 732 dma_addr_t addr; 733 size_t size; 734 long npages, ofs; 735 dma_addr_t tend; 736 737 addr = sg->dma_address; 738 size = sg->dma_length; 739 if (!size) 740 break; 741 742 if (addr > 0xffffffff) { 743 /* It's a DAC address -- nothing to do. */ 744 DBGA(" (%ld) DAC [%llx,%zx]\n", 745 sg - end + nents, addr, size); 746 continue; 747 } 748 749 if (addr >= __direct_map_base 750 && addr < __direct_map_base + __direct_map_size) { 751 /* Nothing to do. */ 752 DBGA(" (%ld) direct [%llx,%zx]\n", 753 sg - end + nents, addr, size); 754 continue; 755 } 756 757 DBGA(" (%ld) sg [%llx,%zx]\n", 758 sg - end + nents, addr, size); 759 760 npages = iommu_num_pages(addr, size, PAGE_SIZE); 761 ofs = (addr - arena->dma_base) >> PAGE_SHIFT; 762 iommu_arena_free(arena, ofs, npages); 763 764 tend = addr + size - 1; 765 if (fbeg > addr) fbeg = addr; 766 if (fend < tend) fend = tend; 767 } 768 769 /* If we're freeing ptes above the `next_entry' pointer (they 770 may have snuck back into the TLB since the last wrap flush), 771 we need to flush the TLB before reallocating the latter. */ 772 if ((fend - arena->dma_base) >> PAGE_SHIFT >= arena->next_entry) 773 alpha_mv.mv_pci_tbi(hose, fbeg, fend); 774 775 spin_unlock_irqrestore(&arena->lock, flags); 776 777 DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg)); 778 } 779 780 /* Return whether the given PCI device DMA address mask can be 781 supported properly. */ 782 783 static int alpha_pci_supported(struct device *dev, u64 mask) 784 { 785 struct pci_dev *pdev = alpha_gendev_to_pci(dev); 786 struct pci_controller *hose; 787 struct pci_iommu_arena *arena; 788 789 /* If there exists a direct map, and the mask fits either 790 the entire direct mapped space or the total system memory as 791 shifted by the map base */ 792 if (__direct_map_size != 0 793 && (__direct_map_base + __direct_map_size - 1 <= mask || 794 __direct_map_base + (max_low_pfn << PAGE_SHIFT) - 1 <= mask)) 795 return 1; 796 797 /* Check that we have a scatter-gather arena that fits. */ 798 hose = pdev ? pdev->sysdata : pci_isa_hose; 799 arena = hose->sg_isa; 800 if (arena && arena->dma_base + arena->size - 1 <= mask) 801 return 1; 802 arena = hose->sg_pci; 803 if (arena && arena->dma_base + arena->size - 1 <= mask) 804 return 1; 805 806 /* As last resort try ZONE_DMA. */ 807 if (!__direct_map_base && MAX_DMA_ADDRESS - IDENT_ADDR - 1 <= mask) 808 return 1; 809 810 return 0; 811 } 812 813 814 /* 815 * AGP GART extensions to the IOMMU 816 */ 817 int 818 iommu_reserve(struct pci_iommu_arena *arena, long pg_count, long align_mask) 819 { 820 unsigned long flags; 821 unsigned long *ptes; 822 long i, p; 823 824 if (!arena) return -EINVAL; 825 826 spin_lock_irqsave(&arena->lock, flags); 827 828 /* Search for N empty ptes. */ 829 ptes = arena->ptes; 830 p = iommu_arena_find_pages(NULL, arena, pg_count, align_mask); 831 if (p < 0) { 832 spin_unlock_irqrestore(&arena->lock, flags); 833 return -1; 834 } 835 836 /* Success. Mark them all reserved (ie not zero and invalid) 837 for the iommu tlb that could load them from under us. 838 They will be filled in with valid bits by _bind() */ 839 for (i = 0; i < pg_count; ++i) 840 ptes[p+i] = IOMMU_RESERVED_PTE; 841 842 arena->next_entry = p + pg_count; 843 spin_unlock_irqrestore(&arena->lock, flags); 844 845 return p; 846 } 847 848 int 849 iommu_release(struct pci_iommu_arena *arena, long pg_start, long pg_count) 850 { 851 unsigned long *ptes; 852 long i; 853 854 if (!arena) return -EINVAL; 855 856 ptes = arena->ptes; 857 858 /* Make sure they're all reserved first... */ 859 for(i = pg_start; i < pg_start + pg_count; i++) 860 if (ptes[i] != IOMMU_RESERVED_PTE) 861 return -EBUSY; 862 863 iommu_arena_free(arena, pg_start, pg_count); 864 return 0; 865 } 866 867 int 868 iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count, 869 struct page **pages) 870 { 871 unsigned long flags; 872 unsigned long *ptes; 873 long i, j; 874 875 if (!arena) return -EINVAL; 876 877 spin_lock_irqsave(&arena->lock, flags); 878 879 ptes = arena->ptes; 880 881 for(j = pg_start; j < pg_start + pg_count; j++) { 882 if (ptes[j] != IOMMU_RESERVED_PTE) { 883 spin_unlock_irqrestore(&arena->lock, flags); 884 return -EBUSY; 885 } 886 } 887 888 for(i = 0, j = pg_start; i < pg_count; i++, j++) 889 ptes[j] = mk_iommu_pte(page_to_phys(pages[i])); 890 891 spin_unlock_irqrestore(&arena->lock, flags); 892 893 return 0; 894 } 895 896 int 897 iommu_unbind(struct pci_iommu_arena *arena, long pg_start, long pg_count) 898 { 899 unsigned long *p; 900 long i; 901 902 if (!arena) return -EINVAL; 903 904 p = arena->ptes + pg_start; 905 for(i = 0; i < pg_count; i++) 906 p[i] = IOMMU_RESERVED_PTE; 907 908 return 0; 909 } 910 911 const struct dma_map_ops alpha_pci_ops = { 912 .alloc = alpha_pci_alloc_coherent, 913 .free = alpha_pci_free_coherent, 914 .map_phys = alpha_pci_map_phys, 915 .unmap_phys = alpha_pci_unmap_phys, 916 .map_sg = alpha_pci_map_sg, 917 .unmap_sg = alpha_pci_unmap_sg, 918 .dma_supported = alpha_pci_supported, 919 .mmap = dma_common_mmap, 920 .get_sgtable = dma_common_get_sgtable, 921 .alloc_pages_op = dma_common_alloc_pages, 922 .free_pages = dma_common_free_pages, 923 }; 924 EXPORT_SYMBOL(alpha_pci_ops); 925