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
mk_iommu_pte(unsigned long paddr)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
size_for_memory(unsigned long max)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
iommu_arena_new_node(int nid,struct pci_controller * hose,dma_addr_t base,unsigned long window_size,unsigned long align)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
iommu_arena_new(struct pci_controller * hose,dma_addr_t base,unsigned long window_size,unsigned long align)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
iommu_arena_find_pages(struct device * dev,struct pci_iommu_arena * arena,long n,long mask)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
iommu_arena_alloc(struct device * dev,struct pci_iommu_arena * arena,long n,unsigned int align)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
iommu_arena_free(struct pci_iommu_arena * arena,long ofs,long n)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 */
pci_dac_dma_supported(struct pci_dev * dev,u64 mask)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
pci_map_single_1(struct pci_dev * pdev,void * cpu_addr,size_t size,int dac_allowed)227 pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, 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 struct pci_iommu_arena *arena;
233 long npages, dma_ofs, i;
234 unsigned long paddr;
235 dma_addr_t ret;
236 unsigned int align = 0;
237 struct device *dev = pdev ? &pdev->dev : NULL;
238
239 paddr = __pa(cpu_addr);
240
241 #if !DEBUG_NODIRECT
242 /* First check to see if we can use the direct map window. */
243 if (paddr + size + __direct_map_base - 1 <= max_dma
244 && paddr + size <= __direct_map_size) {
245 ret = paddr + __direct_map_base;
246
247 DBGA2("pci_map_single: [%p,%zx] -> direct %llx from %ps\n",
248 cpu_addr, size, ret, __builtin_return_address(0));
249
250 return ret;
251 }
252 #endif
253
254 /* Next, use DAC if selected earlier. */
255 if (dac_allowed) {
256 ret = paddr + alpha_mv.pci_dac_offset;
257
258 DBGA2("pci_map_single: [%p,%zx] -> DAC %llx from %ps\n",
259 cpu_addr, size, ret, __builtin_return_address(0));
260
261 return ret;
262 }
263
264 /* If the machine doesn't define a pci_tbi routine, we have to
265 assume it doesn't support sg mapping, and, since we tried to
266 use direct_map above, it now must be considered an error. */
267 if (! alpha_mv.mv_pci_tbi) {
268 printk_once(KERN_WARNING "pci_map_single: no HW sg\n");
269 return DMA_MAPPING_ERROR;
270 }
271
272 arena = hose->sg_pci;
273 if (!arena || arena->dma_base + arena->size - 1 > max_dma)
274 arena = hose->sg_isa;
275
276 npages = iommu_num_pages(paddr, size, PAGE_SIZE);
277
278 /* Force allocation to 64KB boundary for ISA bridges. */
279 if (pdev && pdev == isa_bridge)
280 align = 8;
281 dma_ofs = iommu_arena_alloc(dev, arena, npages, align);
282 if (dma_ofs < 0) {
283 printk(KERN_WARNING "pci_map_single failed: "
284 "could not allocate dma page tables\n");
285 return DMA_MAPPING_ERROR;
286 }
287
288 paddr &= PAGE_MASK;
289 for (i = 0; i < npages; ++i, paddr += PAGE_SIZE)
290 arena->ptes[i + dma_ofs] = mk_iommu_pte(paddr);
291
292 ret = arena->dma_base + dma_ofs * PAGE_SIZE;
293 ret += (unsigned long)cpu_addr & ~PAGE_MASK;
294
295 DBGA2("pci_map_single: [%p,%zx] np %ld -> sg %llx from %ps\n",
296 cpu_addr, size, npages, ret, __builtin_return_address(0));
297
298 return ret;
299 }
300
301 /* Helper for generic DMA-mapping functions. */
alpha_gendev_to_pci(struct device * dev)302 static struct pci_dev *alpha_gendev_to_pci(struct device *dev)
303 {
304 if (dev && dev_is_pci(dev))
305 return to_pci_dev(dev);
306
307 /* Assume that non-PCI devices asking for DMA are either ISA or EISA,
308 BUG() otherwise. */
309 BUG_ON(!isa_bridge);
310
311 /* Assume non-busmaster ISA DMA when dma_mask is not set (the ISA
312 bridge is bus master then). */
313 if (!dev || !dev->dma_mask || !*dev->dma_mask)
314 return isa_bridge;
315
316 /* For EISA bus masters, return isa_bridge (it might have smaller
317 dma_mask due to wiring limitations). */
318 if (*dev->dma_mask >= isa_bridge->dma_mask)
319 return isa_bridge;
320
321 /* This assumes ISA bus master with dma_mask 0xffffff. */
322 return NULL;
323 }
324
alpha_pci_map_page(struct device * dev,struct page * page,unsigned long offset,size_t size,enum dma_data_direction dir,unsigned long attrs)325 static dma_addr_t alpha_pci_map_page(struct device *dev, struct page *page,
326 unsigned long offset, size_t size,
327 enum dma_data_direction dir,
328 unsigned long attrs)
329 {
330 struct pci_dev *pdev = alpha_gendev_to_pci(dev);
331 int dac_allowed;
332
333 BUG_ON(dir == DMA_NONE);
334
335 dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0;
336 return pci_map_single_1(pdev, (char *)page_address(page) + offset,
337 size, dac_allowed);
338 }
339
340 /* Unmap a single streaming mode DMA translation. The DMA_ADDR and
341 SIZE must match what was provided for in a previous pci_map_single
342 call. All other usages are undefined. After this call, reads by
343 the cpu to the buffer are guaranteed to see whatever the device
344 wrote there. */
345
alpha_pci_unmap_page(struct device * dev,dma_addr_t dma_addr,size_t size,enum dma_data_direction dir,unsigned long attrs)346 static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr,
347 size_t size, enum dma_data_direction dir,
348 unsigned long attrs)
349 {
350 unsigned long flags;
351 struct pci_dev *pdev = alpha_gendev_to_pci(dev);
352 struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose;
353 struct pci_iommu_arena *arena;
354 long dma_ofs, npages;
355
356 BUG_ON(dir == DMA_NONE);
357
358 if (dma_addr >= __direct_map_base
359 && dma_addr < __direct_map_base + __direct_map_size) {
360 /* Nothing to do. */
361
362 DBGA2("pci_unmap_single: direct [%llx,%zx] from %ps\n",
363 dma_addr, size, __builtin_return_address(0));
364
365 return;
366 }
367
368 if (dma_addr > 0xffffffff) {
369 DBGA2("pci64_unmap_single: DAC [%llx,%zx] from %ps\n",
370 dma_addr, size, __builtin_return_address(0));
371 return;
372 }
373
374 arena = hose->sg_pci;
375 if (!arena || dma_addr < arena->dma_base)
376 arena = hose->sg_isa;
377
378 dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT;
379 if (dma_ofs * PAGE_SIZE >= arena->size) {
380 printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %llx "
381 " base %llx size %x\n",
382 dma_addr, arena->dma_base, arena->size);
383 return;
384 BUG();
385 }
386
387 npages = iommu_num_pages(dma_addr, size, PAGE_SIZE);
388
389 spin_lock_irqsave(&arena->lock, flags);
390
391 iommu_arena_free(arena, dma_ofs, npages);
392
393 /* If we're freeing ptes above the `next_entry' pointer (they
394 may have snuck back into the TLB since the last wrap flush),
395 we need to flush the TLB before reallocating the latter. */
396 if (dma_ofs >= arena->next_entry)
397 alpha_mv.mv_pci_tbi(hose, dma_addr, dma_addr + size - 1);
398
399 spin_unlock_irqrestore(&arena->lock, flags);
400
401 DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %ps\n",
402 dma_addr, size, npages, __builtin_return_address(0));
403 }
404
405 /* Allocate and map kernel buffer using consistent mode DMA for PCI
406 device. Returns non-NULL cpu-view pointer to the buffer if
407 successful and sets *DMA_ADDRP to the pci side dma address as well,
408 else DMA_ADDRP is undefined. */
409
alpha_pci_alloc_coherent(struct device * dev,size_t size,dma_addr_t * dma_addrp,gfp_t gfp,unsigned long attrs)410 static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
411 dma_addr_t *dma_addrp, gfp_t gfp,
412 unsigned long attrs)
413 {
414 struct pci_dev *pdev = alpha_gendev_to_pci(dev);
415 void *cpu_addr;
416 long order = get_order(size);
417
418 gfp &= ~GFP_DMA;
419
420 try_again:
421 cpu_addr = (void *)__get_free_pages(gfp | __GFP_ZERO, order);
422 if (! cpu_addr) {
423 printk(KERN_INFO "pci_alloc_consistent: "
424 "get_free_pages failed from %ps\n",
425 __builtin_return_address(0));
426 /* ??? Really atomic allocation? Otherwise we could play
427 with vmalloc and sg if we can't find contiguous memory. */
428 return NULL;
429 }
430 memset(cpu_addr, 0, size);
431
432 *dma_addrp = pci_map_single_1(pdev, cpu_addr, size, 0);
433 if (*dma_addrp == DMA_MAPPING_ERROR) {
434 free_pages((unsigned long)cpu_addr, order);
435 if (alpha_mv.mv_pci_tbi || (gfp & GFP_DMA))
436 return NULL;
437 /* The address doesn't fit required mask and we
438 do not have iommu. Try again with GFP_DMA. */
439 gfp |= GFP_DMA;
440 goto try_again;
441 }
442
443 DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %ps\n",
444 size, cpu_addr, *dma_addrp, __builtin_return_address(0));
445
446 return cpu_addr;
447 }
448
449 /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must
450 be values that were returned from pci_alloc_consistent. SIZE must
451 be the same as what as passed into pci_alloc_consistent.
452 References to the memory and mappings associated with CPU_ADDR or
453 DMA_ADDR past this call are illegal. */
454
alpha_pci_free_coherent(struct device * dev,size_t size,void * cpu_addr,dma_addr_t dma_addr,unsigned long attrs)455 static void alpha_pci_free_coherent(struct device *dev, size_t size,
456 void *cpu_addr, dma_addr_t dma_addr,
457 unsigned long attrs)
458 {
459 struct pci_dev *pdev = alpha_gendev_to_pci(dev);
460 dma_unmap_single(&pdev->dev, dma_addr, size, DMA_BIDIRECTIONAL);
461 free_pages((unsigned long)cpu_addr, get_order(size));
462
463 DBGA2("pci_free_consistent: [%llx,%zx] from %ps\n",
464 dma_addr, size, __builtin_return_address(0));
465 }
466
467 /* Classify the elements of the scatterlist. Write dma_address
468 of each element with:
469 0 : Followers all physically adjacent.
470 1 : Followers all virtually adjacent.
471 -1 : Not leader, physically adjacent to previous.
472 -2 : Not leader, virtually adjacent to previous.
473 Write dma_length of each leader with the combined lengths of
474 the mergable followers. */
475
476 #define SG_ENT_VIRT_ADDRESS(SG) (sg_virt((SG)))
477 #define SG_ENT_PHYS_ADDRESS(SG) __pa(SG_ENT_VIRT_ADDRESS(SG))
478
479 static void
sg_classify(struct device * dev,struct scatterlist * sg,struct scatterlist * end,int virt_ok)480 sg_classify(struct device *dev, struct scatterlist *sg, struct scatterlist *end,
481 int virt_ok)
482 {
483 unsigned long next_paddr;
484 struct scatterlist *leader;
485 long leader_flag, leader_length;
486 unsigned int max_seg_size;
487
488 leader = sg;
489 leader_flag = 0;
490 leader_length = leader->length;
491 next_paddr = SG_ENT_PHYS_ADDRESS(leader) + leader_length;
492
493 /* we will not marge sg without device. */
494 max_seg_size = dev ? dma_get_max_seg_size(dev) : 0;
495 for (++sg; sg < end; ++sg) {
496 unsigned long addr, len;
497 addr = SG_ENT_PHYS_ADDRESS(sg);
498 len = sg->length;
499
500 if (leader_length + len > max_seg_size)
501 goto new_segment;
502
503 if (next_paddr == addr) {
504 sg->dma_address = -1;
505 leader_length += len;
506 } else if (((next_paddr | addr) & ~PAGE_MASK) == 0 && virt_ok) {
507 sg->dma_address = -2;
508 leader_flag = 1;
509 leader_length += len;
510 } else {
511 new_segment:
512 leader->dma_address = leader_flag;
513 leader->dma_length = leader_length;
514 leader = sg;
515 leader_flag = 0;
516 leader_length = len;
517 }
518
519 next_paddr = addr + len;
520 }
521
522 leader->dma_address = leader_flag;
523 leader->dma_length = leader_length;
524 }
525
526 /* Given a scatterlist leader, choose an allocation method and fill
527 in the blanks. */
528
529 static int
sg_fill(struct device * dev,struct scatterlist * leader,struct scatterlist * end,struct scatterlist * out,struct pci_iommu_arena * arena,dma_addr_t max_dma,int dac_allowed)530 sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end,
531 struct scatterlist *out, struct pci_iommu_arena *arena,
532 dma_addr_t max_dma, int dac_allowed)
533 {
534 unsigned long paddr = SG_ENT_PHYS_ADDRESS(leader);
535 long size = leader->dma_length;
536 struct scatterlist *sg;
537 unsigned long *ptes;
538 long npages, dma_ofs, i;
539
540 #if !DEBUG_NODIRECT
541 /* If everything is physically contiguous, and the addresses
542 fall into the direct-map window, use it. */
543 if (leader->dma_address == 0
544 && paddr + size + __direct_map_base - 1 <= max_dma
545 && paddr + size <= __direct_map_size) {
546 out->dma_address = paddr + __direct_map_base;
547 out->dma_length = size;
548
549 DBGA(" sg_fill: [%p,%lx] -> direct %llx\n",
550 __va(paddr), size, out->dma_address);
551
552 return 0;
553 }
554 #endif
555
556 /* If physically contiguous and DAC is available, use it. */
557 if (leader->dma_address == 0 && dac_allowed) {
558 out->dma_address = paddr + alpha_mv.pci_dac_offset;
559 out->dma_length = size;
560
561 DBGA(" sg_fill: [%p,%lx] -> DAC %llx\n",
562 __va(paddr), size, out->dma_address);
563
564 return 0;
565 }
566
567 /* Otherwise, we'll use the iommu to make the pages virtually
568 contiguous. */
569
570 paddr &= ~PAGE_MASK;
571 npages = iommu_num_pages(paddr, size, PAGE_SIZE);
572 dma_ofs = iommu_arena_alloc(dev, arena, npages, 0);
573 if (dma_ofs < 0) {
574 /* If we attempted a direct map above but failed, die. */
575 if (leader->dma_address == 0)
576 return -1;
577
578 /* Otherwise, break up the remaining virtually contiguous
579 hunks into individual direct maps and retry. */
580 sg_classify(dev, leader, end, 0);
581 return sg_fill(dev, leader, end, out, arena, max_dma, dac_allowed);
582 }
583
584 out->dma_address = arena->dma_base + dma_ofs*PAGE_SIZE + paddr;
585 out->dma_length = size;
586
587 DBGA(" sg_fill: [%p,%lx] -> sg %llx np %ld\n",
588 __va(paddr), size, out->dma_address, npages);
589
590 /* All virtually contiguous. We need to find the length of each
591 physically contiguous subsegment to fill in the ptes. */
592 ptes = &arena->ptes[dma_ofs];
593 sg = leader;
594 do {
595 #if DEBUG_ALLOC > 0
596 struct scatterlist *last_sg = sg;
597 #endif
598
599 size = sg->length;
600 paddr = SG_ENT_PHYS_ADDRESS(sg);
601
602 while (sg+1 < end && (int) sg[1].dma_address == -1) {
603 size += sg[1].length;
604 sg = sg_next(sg);
605 }
606
607 npages = iommu_num_pages(paddr, size, PAGE_SIZE);
608
609 paddr &= PAGE_MASK;
610 for (i = 0; i < npages; ++i, paddr += PAGE_SIZE)
611 *ptes++ = mk_iommu_pte(paddr);
612
613 #if DEBUG_ALLOC > 0
614 DBGA(" (%ld) [%p,%x] np %ld\n",
615 last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg),
616 last_sg->length, npages);
617 while (++last_sg <= sg) {
618 DBGA(" (%ld) [%p,%x] cont\n",
619 last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg),
620 last_sg->length);
621 }
622 #endif
623 } while (++sg < end && (int) sg->dma_address < 0);
624
625 return 1;
626 }
627
alpha_pci_map_sg(struct device * dev,struct scatterlist * sg,int nents,enum dma_data_direction dir,unsigned long attrs)628 static int alpha_pci_map_sg(struct device *dev, struct scatterlist *sg,
629 int nents, enum dma_data_direction dir,
630 unsigned long attrs)
631 {
632 struct pci_dev *pdev = alpha_gendev_to_pci(dev);
633 struct scatterlist *start, *end, *out;
634 struct pci_controller *hose;
635 struct pci_iommu_arena *arena;
636 dma_addr_t max_dma;
637 int dac_allowed;
638
639 BUG_ON(dir == DMA_NONE);
640
641 dac_allowed = dev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0;
642
643 /* Fast path single entry scatterlists. */
644 if (nents == 1) {
645 sg->dma_length = sg->length;
646 sg->dma_address
647 = pci_map_single_1(pdev, SG_ENT_VIRT_ADDRESS(sg),
648 sg->length, dac_allowed);
649 if (sg->dma_address == DMA_MAPPING_ERROR)
650 return -EIO;
651 return 1;
652 }
653
654 start = sg;
655 end = sg + nents;
656
657 /* First, prepare information about the entries. */
658 sg_classify(dev, sg, end, alpha_mv.mv_pci_tbi != 0);
659
660 /* Second, figure out where we're going to map things. */
661 if (alpha_mv.mv_pci_tbi) {
662 hose = pdev ? pdev->sysdata : pci_isa_hose;
663 max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK;
664 arena = hose->sg_pci;
665 if (!arena || arena->dma_base + arena->size - 1 > max_dma)
666 arena = hose->sg_isa;
667 } else {
668 max_dma = -1;
669 arena = NULL;
670 hose = NULL;
671 }
672
673 /* Third, iterate over the scatterlist leaders and allocate
674 dma space as needed. */
675 for (out = sg; sg < end; ++sg) {
676 if ((int) sg->dma_address < 0)
677 continue;
678 if (sg_fill(dev, sg, end, out, arena, max_dma, dac_allowed) < 0)
679 goto error;
680 out++;
681 }
682
683 /* Mark the end of the list for pci_unmap_sg. */
684 if (out < end)
685 out->dma_length = 0;
686
687 if (out - start == 0) {
688 printk(KERN_WARNING "pci_map_sg failed: no entries?\n");
689 return -ENOMEM;
690 }
691 DBGA("pci_map_sg: %ld entries\n", out - start);
692
693 return out - start;
694
695 error:
696 printk(KERN_WARNING "pci_map_sg failed: "
697 "could not allocate dma page tables\n");
698
699 /* Some allocation failed while mapping the scatterlist
700 entries. Unmap them now. */
701 if (out > start)
702 dma_unmap_sg(&pdev->dev, start, out - start, dir);
703 return -ENOMEM;
704 }
705
706 /* Unmap a set of streaming mode DMA translations. Again, cpu read
707 rules concerning calls here are the same as for pci_unmap_single()
708 above. */
709
alpha_pci_unmap_sg(struct device * dev,struct scatterlist * sg,int nents,enum dma_data_direction dir,unsigned long attrs)710 static void alpha_pci_unmap_sg(struct device *dev, struct scatterlist *sg,
711 int nents, enum dma_data_direction dir,
712 unsigned long attrs)
713 {
714 struct pci_dev *pdev = alpha_gendev_to_pci(dev);
715 unsigned long flags;
716 struct pci_controller *hose;
717 struct pci_iommu_arena *arena;
718 struct scatterlist *end;
719 dma_addr_t max_dma;
720 dma_addr_t fbeg, fend;
721
722 BUG_ON(dir == DMA_NONE);
723
724 if (! alpha_mv.mv_pci_tbi)
725 return;
726
727 hose = pdev ? pdev->sysdata : pci_isa_hose;
728 max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK;
729 arena = hose->sg_pci;
730 if (!arena || arena->dma_base + arena->size - 1 > max_dma)
731 arena = hose->sg_isa;
732
733 fbeg = -1, fend = 0;
734
735 spin_lock_irqsave(&arena->lock, flags);
736
737 for (end = sg + nents; sg < end; ++sg) {
738 dma_addr_t addr;
739 size_t size;
740 long npages, ofs;
741 dma_addr_t tend;
742
743 addr = sg->dma_address;
744 size = sg->dma_length;
745 if (!size)
746 break;
747
748 if (addr > 0xffffffff) {
749 /* It's a DAC address -- nothing to do. */
750 DBGA(" (%ld) DAC [%llx,%zx]\n",
751 sg - end + nents, addr, size);
752 continue;
753 }
754
755 if (addr >= __direct_map_base
756 && addr < __direct_map_base + __direct_map_size) {
757 /* Nothing to do. */
758 DBGA(" (%ld) direct [%llx,%zx]\n",
759 sg - end + nents, addr, size);
760 continue;
761 }
762
763 DBGA(" (%ld) sg [%llx,%zx]\n",
764 sg - end + nents, addr, size);
765
766 npages = iommu_num_pages(addr, size, PAGE_SIZE);
767 ofs = (addr - arena->dma_base) >> PAGE_SHIFT;
768 iommu_arena_free(arena, ofs, npages);
769
770 tend = addr + size - 1;
771 if (fbeg > addr) fbeg = addr;
772 if (fend < tend) fend = tend;
773 }
774
775 /* If we're freeing ptes above the `next_entry' pointer (they
776 may have snuck back into the TLB since the last wrap flush),
777 we need to flush the TLB before reallocating the latter. */
778 if ((fend - arena->dma_base) >> PAGE_SHIFT >= arena->next_entry)
779 alpha_mv.mv_pci_tbi(hose, fbeg, fend);
780
781 spin_unlock_irqrestore(&arena->lock, flags);
782
783 DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg));
784 }
785
786 /* Return whether the given PCI device DMA address mask can be
787 supported properly. */
788
alpha_pci_supported(struct device * dev,u64 mask)789 static int alpha_pci_supported(struct device *dev, u64 mask)
790 {
791 struct pci_dev *pdev = alpha_gendev_to_pci(dev);
792 struct pci_controller *hose;
793 struct pci_iommu_arena *arena;
794
795 /* If there exists a direct map, and the mask fits either
796 the entire direct mapped space or the total system memory as
797 shifted by the map base */
798 if (__direct_map_size != 0
799 && (__direct_map_base + __direct_map_size - 1 <= mask ||
800 __direct_map_base + (max_low_pfn << PAGE_SHIFT) - 1 <= mask))
801 return 1;
802
803 /* Check that we have a scatter-gather arena that fits. */
804 hose = pdev ? pdev->sysdata : pci_isa_hose;
805 arena = hose->sg_isa;
806 if (arena && arena->dma_base + arena->size - 1 <= mask)
807 return 1;
808 arena = hose->sg_pci;
809 if (arena && arena->dma_base + arena->size - 1 <= mask)
810 return 1;
811
812 /* As last resort try ZONE_DMA. */
813 if (!__direct_map_base && MAX_DMA_ADDRESS - IDENT_ADDR - 1 <= mask)
814 return 1;
815
816 return 0;
817 }
818
819
820 /*
821 * AGP GART extensions to the IOMMU
822 */
823 int
iommu_reserve(struct pci_iommu_arena * arena,long pg_count,long align_mask)824 iommu_reserve(struct pci_iommu_arena *arena, long pg_count, long align_mask)
825 {
826 unsigned long flags;
827 unsigned long *ptes;
828 long i, p;
829
830 if (!arena) return -EINVAL;
831
832 spin_lock_irqsave(&arena->lock, flags);
833
834 /* Search for N empty ptes. */
835 ptes = arena->ptes;
836 p = iommu_arena_find_pages(NULL, arena, pg_count, align_mask);
837 if (p < 0) {
838 spin_unlock_irqrestore(&arena->lock, flags);
839 return -1;
840 }
841
842 /* Success. Mark them all reserved (ie not zero and invalid)
843 for the iommu tlb that could load them from under us.
844 They will be filled in with valid bits by _bind() */
845 for (i = 0; i < pg_count; ++i)
846 ptes[p+i] = IOMMU_RESERVED_PTE;
847
848 arena->next_entry = p + pg_count;
849 spin_unlock_irqrestore(&arena->lock, flags);
850
851 return p;
852 }
853
854 int
iommu_release(struct pci_iommu_arena * arena,long pg_start,long pg_count)855 iommu_release(struct pci_iommu_arena *arena, long pg_start, long pg_count)
856 {
857 unsigned long *ptes;
858 long i;
859
860 if (!arena) return -EINVAL;
861
862 ptes = arena->ptes;
863
864 /* Make sure they're all reserved first... */
865 for(i = pg_start; i < pg_start + pg_count; i++)
866 if (ptes[i] != IOMMU_RESERVED_PTE)
867 return -EBUSY;
868
869 iommu_arena_free(arena, pg_start, pg_count);
870 return 0;
871 }
872
873 int
iommu_bind(struct pci_iommu_arena * arena,long pg_start,long pg_count,struct page ** pages)874 iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count,
875 struct page **pages)
876 {
877 unsigned long flags;
878 unsigned long *ptes;
879 long i, j;
880
881 if (!arena) return -EINVAL;
882
883 spin_lock_irqsave(&arena->lock, flags);
884
885 ptes = arena->ptes;
886
887 for(j = pg_start; j < pg_start + pg_count; j++) {
888 if (ptes[j] != IOMMU_RESERVED_PTE) {
889 spin_unlock_irqrestore(&arena->lock, flags);
890 return -EBUSY;
891 }
892 }
893
894 for(i = 0, j = pg_start; i < pg_count; i++, j++)
895 ptes[j] = mk_iommu_pte(page_to_phys(pages[i]));
896
897 spin_unlock_irqrestore(&arena->lock, flags);
898
899 return 0;
900 }
901
902 int
iommu_unbind(struct pci_iommu_arena * arena,long pg_start,long pg_count)903 iommu_unbind(struct pci_iommu_arena *arena, long pg_start, long pg_count)
904 {
905 unsigned long *p;
906 long i;
907
908 if (!arena) return -EINVAL;
909
910 p = arena->ptes + pg_start;
911 for(i = 0; i < pg_count; i++)
912 p[i] = IOMMU_RESERVED_PTE;
913
914 return 0;
915 }
916
917 const struct dma_map_ops alpha_pci_ops = {
918 .alloc = alpha_pci_alloc_coherent,
919 .free = alpha_pci_free_coherent,
920 .map_page = alpha_pci_map_page,
921 .unmap_page = alpha_pci_unmap_page,
922 .map_sg = alpha_pci_map_sg,
923 .unmap_sg = alpha_pci_unmap_sg,
924 .dma_supported = alpha_pci_supported,
925 .mmap = dma_common_mmap,
926 .get_sgtable = dma_common_get_sgtable,
927 .alloc_pages_op = dma_common_alloc_pages,
928 .free_pages = dma_common_free_pages,
929 };
930 EXPORT_SYMBOL(alpha_pci_ops);
931