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