xref: /openbmc/linux/drivers/iommu/iommu.c (revision bc5aa3a0)
1 /*
2  * Copyright (C) 2007-2008 Advanced Micro Devices, Inc.
3  * Author: Joerg Roedel <jroedel@suse.de>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published
7  * by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17  */
18 
19 #define pr_fmt(fmt)    "iommu: " fmt
20 
21 #include <linux/device.h>
22 #include <linux/kernel.h>
23 #include <linux/bug.h>
24 #include <linux/types.h>
25 #include <linux/module.h>
26 #include <linux/slab.h>
27 #include <linux/errno.h>
28 #include <linux/iommu.h>
29 #include <linux/idr.h>
30 #include <linux/notifier.h>
31 #include <linux/err.h>
32 #include <linux/pci.h>
33 #include <linux/bitops.h>
34 #include <trace/events/iommu.h>
35 
36 static struct kset *iommu_group_kset;
37 static DEFINE_IDA(iommu_group_ida);
38 
39 struct iommu_callback_data {
40 	const struct iommu_ops *ops;
41 };
42 
43 struct iommu_group {
44 	struct kobject kobj;
45 	struct kobject *devices_kobj;
46 	struct list_head devices;
47 	struct mutex mutex;
48 	struct blocking_notifier_head notifier;
49 	void *iommu_data;
50 	void (*iommu_data_release)(void *iommu_data);
51 	char *name;
52 	int id;
53 	struct iommu_domain *default_domain;
54 	struct iommu_domain *domain;
55 };
56 
57 struct iommu_device {
58 	struct list_head list;
59 	struct device *dev;
60 	char *name;
61 };
62 
63 struct iommu_group_attribute {
64 	struct attribute attr;
65 	ssize_t (*show)(struct iommu_group *group, char *buf);
66 	ssize_t (*store)(struct iommu_group *group,
67 			 const char *buf, size_t count);
68 };
69 
70 #define IOMMU_GROUP_ATTR(_name, _mode, _show, _store)		\
71 struct iommu_group_attribute iommu_group_attr_##_name =		\
72 	__ATTR(_name, _mode, _show, _store)
73 
74 #define to_iommu_group_attr(_attr)	\
75 	container_of(_attr, struct iommu_group_attribute, attr)
76 #define to_iommu_group(_kobj)		\
77 	container_of(_kobj, struct iommu_group, kobj)
78 
79 static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
80 						 unsigned type);
81 static int __iommu_attach_device(struct iommu_domain *domain,
82 				 struct device *dev);
83 static int __iommu_attach_group(struct iommu_domain *domain,
84 				struct iommu_group *group);
85 static void __iommu_detach_group(struct iommu_domain *domain,
86 				 struct iommu_group *group);
87 
88 static ssize_t iommu_group_attr_show(struct kobject *kobj,
89 				     struct attribute *__attr, char *buf)
90 {
91 	struct iommu_group_attribute *attr = to_iommu_group_attr(__attr);
92 	struct iommu_group *group = to_iommu_group(kobj);
93 	ssize_t ret = -EIO;
94 
95 	if (attr->show)
96 		ret = attr->show(group, buf);
97 	return ret;
98 }
99 
100 static ssize_t iommu_group_attr_store(struct kobject *kobj,
101 				      struct attribute *__attr,
102 				      const char *buf, size_t count)
103 {
104 	struct iommu_group_attribute *attr = to_iommu_group_attr(__attr);
105 	struct iommu_group *group = to_iommu_group(kobj);
106 	ssize_t ret = -EIO;
107 
108 	if (attr->store)
109 		ret = attr->store(group, buf, count);
110 	return ret;
111 }
112 
113 static const struct sysfs_ops iommu_group_sysfs_ops = {
114 	.show = iommu_group_attr_show,
115 	.store = iommu_group_attr_store,
116 };
117 
118 static int iommu_group_create_file(struct iommu_group *group,
119 				   struct iommu_group_attribute *attr)
120 {
121 	return sysfs_create_file(&group->kobj, &attr->attr);
122 }
123 
124 static void iommu_group_remove_file(struct iommu_group *group,
125 				    struct iommu_group_attribute *attr)
126 {
127 	sysfs_remove_file(&group->kobj, &attr->attr);
128 }
129 
130 static ssize_t iommu_group_show_name(struct iommu_group *group, char *buf)
131 {
132 	return sprintf(buf, "%s\n", group->name);
133 }
134 
135 static IOMMU_GROUP_ATTR(name, S_IRUGO, iommu_group_show_name, NULL);
136 
137 static void iommu_group_release(struct kobject *kobj)
138 {
139 	struct iommu_group *group = to_iommu_group(kobj);
140 
141 	pr_debug("Releasing group %d\n", group->id);
142 
143 	if (group->iommu_data_release)
144 		group->iommu_data_release(group->iommu_data);
145 
146 	ida_simple_remove(&iommu_group_ida, group->id);
147 
148 	if (group->default_domain)
149 		iommu_domain_free(group->default_domain);
150 
151 	kfree(group->name);
152 	kfree(group);
153 }
154 
155 static struct kobj_type iommu_group_ktype = {
156 	.sysfs_ops = &iommu_group_sysfs_ops,
157 	.release = iommu_group_release,
158 };
159 
160 /**
161  * iommu_group_alloc - Allocate a new group
162  * @name: Optional name to associate with group, visible in sysfs
163  *
164  * This function is called by an iommu driver to allocate a new iommu
165  * group.  The iommu group represents the minimum granularity of the iommu.
166  * Upon successful return, the caller holds a reference to the supplied
167  * group in order to hold the group until devices are added.  Use
168  * iommu_group_put() to release this extra reference count, allowing the
169  * group to be automatically reclaimed once it has no devices or external
170  * references.
171  */
172 struct iommu_group *iommu_group_alloc(void)
173 {
174 	struct iommu_group *group;
175 	int ret;
176 
177 	group = kzalloc(sizeof(*group), GFP_KERNEL);
178 	if (!group)
179 		return ERR_PTR(-ENOMEM);
180 
181 	group->kobj.kset = iommu_group_kset;
182 	mutex_init(&group->mutex);
183 	INIT_LIST_HEAD(&group->devices);
184 	BLOCKING_INIT_NOTIFIER_HEAD(&group->notifier);
185 
186 	ret = ida_simple_get(&iommu_group_ida, 0, 0, GFP_KERNEL);
187 	if (ret < 0) {
188 		kfree(group);
189 		return ERR_PTR(ret);
190 	}
191 	group->id = ret;
192 
193 	ret = kobject_init_and_add(&group->kobj, &iommu_group_ktype,
194 				   NULL, "%d", group->id);
195 	if (ret) {
196 		ida_simple_remove(&iommu_group_ida, group->id);
197 		kfree(group);
198 		return ERR_PTR(ret);
199 	}
200 
201 	group->devices_kobj = kobject_create_and_add("devices", &group->kobj);
202 	if (!group->devices_kobj) {
203 		kobject_put(&group->kobj); /* triggers .release & free */
204 		return ERR_PTR(-ENOMEM);
205 	}
206 
207 	/*
208 	 * The devices_kobj holds a reference on the group kobject, so
209 	 * as long as that exists so will the group.  We can therefore
210 	 * use the devices_kobj for reference counting.
211 	 */
212 	kobject_put(&group->kobj);
213 
214 	pr_debug("Allocated group %d\n", group->id);
215 
216 	return group;
217 }
218 EXPORT_SYMBOL_GPL(iommu_group_alloc);
219 
220 struct iommu_group *iommu_group_get_by_id(int id)
221 {
222 	struct kobject *group_kobj;
223 	struct iommu_group *group;
224 	const char *name;
225 
226 	if (!iommu_group_kset)
227 		return NULL;
228 
229 	name = kasprintf(GFP_KERNEL, "%d", id);
230 	if (!name)
231 		return NULL;
232 
233 	group_kobj = kset_find_obj(iommu_group_kset, name);
234 	kfree(name);
235 
236 	if (!group_kobj)
237 		return NULL;
238 
239 	group = container_of(group_kobj, struct iommu_group, kobj);
240 	BUG_ON(group->id != id);
241 
242 	kobject_get(group->devices_kobj);
243 	kobject_put(&group->kobj);
244 
245 	return group;
246 }
247 EXPORT_SYMBOL_GPL(iommu_group_get_by_id);
248 
249 /**
250  * iommu_group_get_iommudata - retrieve iommu_data registered for a group
251  * @group: the group
252  *
253  * iommu drivers can store data in the group for use when doing iommu
254  * operations.  This function provides a way to retrieve it.  Caller
255  * should hold a group reference.
256  */
257 void *iommu_group_get_iommudata(struct iommu_group *group)
258 {
259 	return group->iommu_data;
260 }
261 EXPORT_SYMBOL_GPL(iommu_group_get_iommudata);
262 
263 /**
264  * iommu_group_set_iommudata - set iommu_data for a group
265  * @group: the group
266  * @iommu_data: new data
267  * @release: release function for iommu_data
268  *
269  * iommu drivers can store data in the group for use when doing iommu
270  * operations.  This function provides a way to set the data after
271  * the group has been allocated.  Caller should hold a group reference.
272  */
273 void iommu_group_set_iommudata(struct iommu_group *group, void *iommu_data,
274 			       void (*release)(void *iommu_data))
275 {
276 	group->iommu_data = iommu_data;
277 	group->iommu_data_release = release;
278 }
279 EXPORT_SYMBOL_GPL(iommu_group_set_iommudata);
280 
281 /**
282  * iommu_group_set_name - set name for a group
283  * @group: the group
284  * @name: name
285  *
286  * Allow iommu driver to set a name for a group.  When set it will
287  * appear in a name attribute file under the group in sysfs.
288  */
289 int iommu_group_set_name(struct iommu_group *group, const char *name)
290 {
291 	int ret;
292 
293 	if (group->name) {
294 		iommu_group_remove_file(group, &iommu_group_attr_name);
295 		kfree(group->name);
296 		group->name = NULL;
297 		if (!name)
298 			return 0;
299 	}
300 
301 	group->name = kstrdup(name, GFP_KERNEL);
302 	if (!group->name)
303 		return -ENOMEM;
304 
305 	ret = iommu_group_create_file(group, &iommu_group_attr_name);
306 	if (ret) {
307 		kfree(group->name);
308 		group->name = NULL;
309 		return ret;
310 	}
311 
312 	return 0;
313 }
314 EXPORT_SYMBOL_GPL(iommu_group_set_name);
315 
316 static int iommu_group_create_direct_mappings(struct iommu_group *group,
317 					      struct device *dev)
318 {
319 	struct iommu_domain *domain = group->default_domain;
320 	struct iommu_dm_region *entry;
321 	struct list_head mappings;
322 	unsigned long pg_size;
323 	int ret = 0;
324 
325 	if (!domain || domain->type != IOMMU_DOMAIN_DMA)
326 		return 0;
327 
328 	BUG_ON(!domain->pgsize_bitmap);
329 
330 	pg_size = 1UL << __ffs(domain->pgsize_bitmap);
331 	INIT_LIST_HEAD(&mappings);
332 
333 	iommu_get_dm_regions(dev, &mappings);
334 
335 	/* We need to consider overlapping regions for different devices */
336 	list_for_each_entry(entry, &mappings, list) {
337 		dma_addr_t start, end, addr;
338 
339 		if (domain->ops->apply_dm_region)
340 			domain->ops->apply_dm_region(dev, domain, entry);
341 
342 		start = ALIGN(entry->start, pg_size);
343 		end   = ALIGN(entry->start + entry->length, pg_size);
344 
345 		for (addr = start; addr < end; addr += pg_size) {
346 			phys_addr_t phys_addr;
347 
348 			phys_addr = iommu_iova_to_phys(domain, addr);
349 			if (phys_addr)
350 				continue;
351 
352 			ret = iommu_map(domain, addr, addr, pg_size, entry->prot);
353 			if (ret)
354 				goto out;
355 		}
356 
357 	}
358 
359 out:
360 	iommu_put_dm_regions(dev, &mappings);
361 
362 	return ret;
363 }
364 
365 /**
366  * iommu_group_add_device - add a device to an iommu group
367  * @group: the group into which to add the device (reference should be held)
368  * @dev: the device
369  *
370  * This function is called by an iommu driver to add a device into a
371  * group.  Adding a device increments the group reference count.
372  */
373 int iommu_group_add_device(struct iommu_group *group, struct device *dev)
374 {
375 	int ret, i = 0;
376 	struct iommu_device *device;
377 
378 	device = kzalloc(sizeof(*device), GFP_KERNEL);
379 	if (!device)
380 		return -ENOMEM;
381 
382 	device->dev = dev;
383 
384 	ret = sysfs_create_link(&dev->kobj, &group->kobj, "iommu_group");
385 	if (ret) {
386 		kfree(device);
387 		return ret;
388 	}
389 
390 	device->name = kasprintf(GFP_KERNEL, "%s", kobject_name(&dev->kobj));
391 rename:
392 	if (!device->name) {
393 		sysfs_remove_link(&dev->kobj, "iommu_group");
394 		kfree(device);
395 		return -ENOMEM;
396 	}
397 
398 	ret = sysfs_create_link_nowarn(group->devices_kobj,
399 				       &dev->kobj, device->name);
400 	if (ret) {
401 		kfree(device->name);
402 		if (ret == -EEXIST && i >= 0) {
403 			/*
404 			 * Account for the slim chance of collision
405 			 * and append an instance to the name.
406 			 */
407 			device->name = kasprintf(GFP_KERNEL, "%s.%d",
408 						 kobject_name(&dev->kobj), i++);
409 			goto rename;
410 		}
411 
412 		sysfs_remove_link(&dev->kobj, "iommu_group");
413 		kfree(device);
414 		return ret;
415 	}
416 
417 	kobject_get(group->devices_kobj);
418 
419 	dev->iommu_group = group;
420 
421 	iommu_group_create_direct_mappings(group, dev);
422 
423 	mutex_lock(&group->mutex);
424 	list_add_tail(&device->list, &group->devices);
425 	if (group->domain)
426 		__iommu_attach_device(group->domain, dev);
427 	mutex_unlock(&group->mutex);
428 
429 	/* Notify any listeners about change to group. */
430 	blocking_notifier_call_chain(&group->notifier,
431 				     IOMMU_GROUP_NOTIFY_ADD_DEVICE, dev);
432 
433 	trace_add_device_to_group(group->id, dev);
434 
435 	pr_info("Adding device %s to group %d\n", dev_name(dev), group->id);
436 
437 	return 0;
438 }
439 EXPORT_SYMBOL_GPL(iommu_group_add_device);
440 
441 /**
442  * iommu_group_remove_device - remove a device from it's current group
443  * @dev: device to be removed
444  *
445  * This function is called by an iommu driver to remove the device from
446  * it's current group.  This decrements the iommu group reference count.
447  */
448 void iommu_group_remove_device(struct device *dev)
449 {
450 	struct iommu_group *group = dev->iommu_group;
451 	struct iommu_device *tmp_device, *device = NULL;
452 
453 	pr_info("Removing device %s from group %d\n", dev_name(dev), group->id);
454 
455 	/* Pre-notify listeners that a device is being removed. */
456 	blocking_notifier_call_chain(&group->notifier,
457 				     IOMMU_GROUP_NOTIFY_DEL_DEVICE, dev);
458 
459 	mutex_lock(&group->mutex);
460 	list_for_each_entry(tmp_device, &group->devices, list) {
461 		if (tmp_device->dev == dev) {
462 			device = tmp_device;
463 			list_del(&device->list);
464 			break;
465 		}
466 	}
467 	mutex_unlock(&group->mutex);
468 
469 	if (!device)
470 		return;
471 
472 	sysfs_remove_link(group->devices_kobj, device->name);
473 	sysfs_remove_link(&dev->kobj, "iommu_group");
474 
475 	trace_remove_device_from_group(group->id, dev);
476 
477 	kfree(device->name);
478 	kfree(device);
479 	dev->iommu_group = NULL;
480 	kobject_put(group->devices_kobj);
481 }
482 EXPORT_SYMBOL_GPL(iommu_group_remove_device);
483 
484 static int iommu_group_device_count(struct iommu_group *group)
485 {
486 	struct iommu_device *entry;
487 	int ret = 0;
488 
489 	list_for_each_entry(entry, &group->devices, list)
490 		ret++;
491 
492 	return ret;
493 }
494 
495 /**
496  * iommu_group_for_each_dev - iterate over each device in the group
497  * @group: the group
498  * @data: caller opaque data to be passed to callback function
499  * @fn: caller supplied callback function
500  *
501  * This function is called by group users to iterate over group devices.
502  * Callers should hold a reference count to the group during callback.
503  * The group->mutex is held across callbacks, which will block calls to
504  * iommu_group_add/remove_device.
505  */
506 static int __iommu_group_for_each_dev(struct iommu_group *group, void *data,
507 				      int (*fn)(struct device *, void *))
508 {
509 	struct iommu_device *device;
510 	int ret = 0;
511 
512 	list_for_each_entry(device, &group->devices, list) {
513 		ret = fn(device->dev, data);
514 		if (ret)
515 			break;
516 	}
517 	return ret;
518 }
519 
520 
521 int iommu_group_for_each_dev(struct iommu_group *group, void *data,
522 			     int (*fn)(struct device *, void *))
523 {
524 	int ret;
525 
526 	mutex_lock(&group->mutex);
527 	ret = __iommu_group_for_each_dev(group, data, fn);
528 	mutex_unlock(&group->mutex);
529 
530 	return ret;
531 }
532 EXPORT_SYMBOL_GPL(iommu_group_for_each_dev);
533 
534 /**
535  * iommu_group_get - Return the group for a device and increment reference
536  * @dev: get the group that this device belongs to
537  *
538  * This function is called by iommu drivers and users to get the group
539  * for the specified device.  If found, the group is returned and the group
540  * reference in incremented, else NULL.
541  */
542 struct iommu_group *iommu_group_get(struct device *dev)
543 {
544 	struct iommu_group *group = dev->iommu_group;
545 
546 	if (group)
547 		kobject_get(group->devices_kobj);
548 
549 	return group;
550 }
551 EXPORT_SYMBOL_GPL(iommu_group_get);
552 
553 /**
554  * iommu_group_put - Decrement group reference
555  * @group: the group to use
556  *
557  * This function is called by iommu drivers and users to release the
558  * iommu group.  Once the reference count is zero, the group is released.
559  */
560 void iommu_group_put(struct iommu_group *group)
561 {
562 	if (group)
563 		kobject_put(group->devices_kobj);
564 }
565 EXPORT_SYMBOL_GPL(iommu_group_put);
566 
567 /**
568  * iommu_group_register_notifier - Register a notifier for group changes
569  * @group: the group to watch
570  * @nb: notifier block to signal
571  *
572  * This function allows iommu group users to track changes in a group.
573  * See include/linux/iommu.h for actions sent via this notifier.  Caller
574  * should hold a reference to the group throughout notifier registration.
575  */
576 int iommu_group_register_notifier(struct iommu_group *group,
577 				  struct notifier_block *nb)
578 {
579 	return blocking_notifier_chain_register(&group->notifier, nb);
580 }
581 EXPORT_SYMBOL_GPL(iommu_group_register_notifier);
582 
583 /**
584  * iommu_group_unregister_notifier - Unregister a notifier
585  * @group: the group to watch
586  * @nb: notifier block to signal
587  *
588  * Unregister a previously registered group notifier block.
589  */
590 int iommu_group_unregister_notifier(struct iommu_group *group,
591 				    struct notifier_block *nb)
592 {
593 	return blocking_notifier_chain_unregister(&group->notifier, nb);
594 }
595 EXPORT_SYMBOL_GPL(iommu_group_unregister_notifier);
596 
597 /**
598  * iommu_group_id - Return ID for a group
599  * @group: the group to ID
600  *
601  * Return the unique ID for the group matching the sysfs group number.
602  */
603 int iommu_group_id(struct iommu_group *group)
604 {
605 	return group->id;
606 }
607 EXPORT_SYMBOL_GPL(iommu_group_id);
608 
609 static struct iommu_group *get_pci_alias_group(struct pci_dev *pdev,
610 					       unsigned long *devfns);
611 
612 /*
613  * To consider a PCI device isolated, we require ACS to support Source
614  * Validation, Request Redirection, Completer Redirection, and Upstream
615  * Forwarding.  This effectively means that devices cannot spoof their
616  * requester ID, requests and completions cannot be redirected, and all
617  * transactions are forwarded upstream, even as it passes through a
618  * bridge where the target device is downstream.
619  */
620 #define REQ_ACS_FLAGS   (PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF)
621 
622 /*
623  * For multifunction devices which are not isolated from each other, find
624  * all the other non-isolated functions and look for existing groups.  For
625  * each function, we also need to look for aliases to or from other devices
626  * that may already have a group.
627  */
628 static struct iommu_group *get_pci_function_alias_group(struct pci_dev *pdev,
629 							unsigned long *devfns)
630 {
631 	struct pci_dev *tmp = NULL;
632 	struct iommu_group *group;
633 
634 	if (!pdev->multifunction || pci_acs_enabled(pdev, REQ_ACS_FLAGS))
635 		return NULL;
636 
637 	for_each_pci_dev(tmp) {
638 		if (tmp == pdev || tmp->bus != pdev->bus ||
639 		    PCI_SLOT(tmp->devfn) != PCI_SLOT(pdev->devfn) ||
640 		    pci_acs_enabled(tmp, REQ_ACS_FLAGS))
641 			continue;
642 
643 		group = get_pci_alias_group(tmp, devfns);
644 		if (group) {
645 			pci_dev_put(tmp);
646 			return group;
647 		}
648 	}
649 
650 	return NULL;
651 }
652 
653 /*
654  * Look for aliases to or from the given device for existing groups. DMA
655  * aliases are only supported on the same bus, therefore the search
656  * space is quite small (especially since we're really only looking at pcie
657  * device, and therefore only expect multiple slots on the root complex or
658  * downstream switch ports).  It's conceivable though that a pair of
659  * multifunction devices could have aliases between them that would cause a
660  * loop.  To prevent this, we use a bitmap to track where we've been.
661  */
662 static struct iommu_group *get_pci_alias_group(struct pci_dev *pdev,
663 					       unsigned long *devfns)
664 {
665 	struct pci_dev *tmp = NULL;
666 	struct iommu_group *group;
667 
668 	if (test_and_set_bit(pdev->devfn & 0xff, devfns))
669 		return NULL;
670 
671 	group = iommu_group_get(&pdev->dev);
672 	if (group)
673 		return group;
674 
675 	for_each_pci_dev(tmp) {
676 		if (tmp == pdev || tmp->bus != pdev->bus)
677 			continue;
678 
679 		/* We alias them or they alias us */
680 		if (pci_devs_are_dma_aliases(pdev, tmp)) {
681 			group = get_pci_alias_group(tmp, devfns);
682 			if (group) {
683 				pci_dev_put(tmp);
684 				return group;
685 			}
686 
687 			group = get_pci_function_alias_group(tmp, devfns);
688 			if (group) {
689 				pci_dev_put(tmp);
690 				return group;
691 			}
692 		}
693 	}
694 
695 	return NULL;
696 }
697 
698 struct group_for_pci_data {
699 	struct pci_dev *pdev;
700 	struct iommu_group *group;
701 };
702 
703 /*
704  * DMA alias iterator callback, return the last seen device.  Stop and return
705  * the IOMMU group if we find one along the way.
706  */
707 static int get_pci_alias_or_group(struct pci_dev *pdev, u16 alias, void *opaque)
708 {
709 	struct group_for_pci_data *data = opaque;
710 
711 	data->pdev = pdev;
712 	data->group = iommu_group_get(&pdev->dev);
713 
714 	return data->group != NULL;
715 }
716 
717 /*
718  * Generic device_group call-back function. It just allocates one
719  * iommu-group per device.
720  */
721 struct iommu_group *generic_device_group(struct device *dev)
722 {
723 	struct iommu_group *group;
724 
725 	group = iommu_group_alloc();
726 	if (IS_ERR(group))
727 		return NULL;
728 
729 	return group;
730 }
731 
732 /*
733  * Use standard PCI bus topology, isolation features, and DMA alias quirks
734  * to find or create an IOMMU group for a device.
735  */
736 struct iommu_group *pci_device_group(struct device *dev)
737 {
738 	struct pci_dev *pdev = to_pci_dev(dev);
739 	struct group_for_pci_data data;
740 	struct pci_bus *bus;
741 	struct iommu_group *group = NULL;
742 	u64 devfns[4] = { 0 };
743 
744 	if (WARN_ON(!dev_is_pci(dev)))
745 		return ERR_PTR(-EINVAL);
746 
747 	/*
748 	 * Find the upstream DMA alias for the device.  A device must not
749 	 * be aliased due to topology in order to have its own IOMMU group.
750 	 * If we find an alias along the way that already belongs to a
751 	 * group, use it.
752 	 */
753 	if (pci_for_each_dma_alias(pdev, get_pci_alias_or_group, &data))
754 		return data.group;
755 
756 	pdev = data.pdev;
757 
758 	/*
759 	 * Continue upstream from the point of minimum IOMMU granularity
760 	 * due to aliases to the point where devices are protected from
761 	 * peer-to-peer DMA by PCI ACS.  Again, if we find an existing
762 	 * group, use it.
763 	 */
764 	for (bus = pdev->bus; !pci_is_root_bus(bus); bus = bus->parent) {
765 		if (!bus->self)
766 			continue;
767 
768 		if (pci_acs_path_enabled(bus->self, NULL, REQ_ACS_FLAGS))
769 			break;
770 
771 		pdev = bus->self;
772 
773 		group = iommu_group_get(&pdev->dev);
774 		if (group)
775 			return group;
776 	}
777 
778 	/*
779 	 * Look for existing groups on device aliases.  If we alias another
780 	 * device or another device aliases us, use the same group.
781 	 */
782 	group = get_pci_alias_group(pdev, (unsigned long *)devfns);
783 	if (group)
784 		return group;
785 
786 	/*
787 	 * Look for existing groups on non-isolated functions on the same
788 	 * slot and aliases of those funcions, if any.  No need to clear
789 	 * the search bitmap, the tested devfns are still valid.
790 	 */
791 	group = get_pci_function_alias_group(pdev, (unsigned long *)devfns);
792 	if (group)
793 		return group;
794 
795 	/* No shared group found, allocate new */
796 	group = iommu_group_alloc();
797 	if (IS_ERR(group))
798 		return NULL;
799 
800 	return group;
801 }
802 
803 /**
804  * iommu_group_get_for_dev - Find or create the IOMMU group for a device
805  * @dev: target device
806  *
807  * This function is intended to be called by IOMMU drivers and extended to
808  * support common, bus-defined algorithms when determining or creating the
809  * IOMMU group for a device.  On success, the caller will hold a reference
810  * to the returned IOMMU group, which will already include the provided
811  * device.  The reference should be released with iommu_group_put().
812  */
813 struct iommu_group *iommu_group_get_for_dev(struct device *dev)
814 {
815 	const struct iommu_ops *ops = dev->bus->iommu_ops;
816 	struct iommu_group *group;
817 	int ret;
818 
819 	group = iommu_group_get(dev);
820 	if (group)
821 		return group;
822 
823 	group = ERR_PTR(-EINVAL);
824 
825 	if (ops && ops->device_group)
826 		group = ops->device_group(dev);
827 
828 	if (IS_ERR(group))
829 		return group;
830 
831 	/*
832 	 * Try to allocate a default domain - needs support from the
833 	 * IOMMU driver.
834 	 */
835 	if (!group->default_domain) {
836 		group->default_domain = __iommu_domain_alloc(dev->bus,
837 							     IOMMU_DOMAIN_DMA);
838 		if (!group->domain)
839 			group->domain = group->default_domain;
840 	}
841 
842 	ret = iommu_group_add_device(group, dev);
843 	if (ret) {
844 		iommu_group_put(group);
845 		return ERR_PTR(ret);
846 	}
847 
848 	return group;
849 }
850 
851 struct iommu_domain *iommu_group_default_domain(struct iommu_group *group)
852 {
853 	return group->default_domain;
854 }
855 
856 static int add_iommu_group(struct device *dev, void *data)
857 {
858 	struct iommu_callback_data *cb = data;
859 	const struct iommu_ops *ops = cb->ops;
860 	int ret;
861 
862 	if (!ops->add_device)
863 		return 0;
864 
865 	WARN_ON(dev->iommu_group);
866 
867 	ret = ops->add_device(dev);
868 
869 	/*
870 	 * We ignore -ENODEV errors for now, as they just mean that the
871 	 * device is not translated by an IOMMU. We still care about
872 	 * other errors and fail to initialize when they happen.
873 	 */
874 	if (ret == -ENODEV)
875 		ret = 0;
876 
877 	return ret;
878 }
879 
880 static int remove_iommu_group(struct device *dev, void *data)
881 {
882 	struct iommu_callback_data *cb = data;
883 	const struct iommu_ops *ops = cb->ops;
884 
885 	if (ops->remove_device && dev->iommu_group)
886 		ops->remove_device(dev);
887 
888 	return 0;
889 }
890 
891 static int iommu_bus_notifier(struct notifier_block *nb,
892 			      unsigned long action, void *data)
893 {
894 	struct device *dev = data;
895 	const struct iommu_ops *ops = dev->bus->iommu_ops;
896 	struct iommu_group *group;
897 	unsigned long group_action = 0;
898 
899 	/*
900 	 * ADD/DEL call into iommu driver ops if provided, which may
901 	 * result in ADD/DEL notifiers to group->notifier
902 	 */
903 	if (action == BUS_NOTIFY_ADD_DEVICE) {
904 		if (ops->add_device)
905 			return ops->add_device(dev);
906 	} else if (action == BUS_NOTIFY_REMOVED_DEVICE) {
907 		if (ops->remove_device && dev->iommu_group) {
908 			ops->remove_device(dev);
909 			return 0;
910 		}
911 	}
912 
913 	/*
914 	 * Remaining BUS_NOTIFYs get filtered and republished to the
915 	 * group, if anyone is listening
916 	 */
917 	group = iommu_group_get(dev);
918 	if (!group)
919 		return 0;
920 
921 	switch (action) {
922 	case BUS_NOTIFY_BIND_DRIVER:
923 		group_action = IOMMU_GROUP_NOTIFY_BIND_DRIVER;
924 		break;
925 	case BUS_NOTIFY_BOUND_DRIVER:
926 		group_action = IOMMU_GROUP_NOTIFY_BOUND_DRIVER;
927 		break;
928 	case BUS_NOTIFY_UNBIND_DRIVER:
929 		group_action = IOMMU_GROUP_NOTIFY_UNBIND_DRIVER;
930 		break;
931 	case BUS_NOTIFY_UNBOUND_DRIVER:
932 		group_action = IOMMU_GROUP_NOTIFY_UNBOUND_DRIVER;
933 		break;
934 	}
935 
936 	if (group_action)
937 		blocking_notifier_call_chain(&group->notifier,
938 					     group_action, dev);
939 
940 	iommu_group_put(group);
941 	return 0;
942 }
943 
944 static int iommu_bus_init(struct bus_type *bus, const struct iommu_ops *ops)
945 {
946 	int err;
947 	struct notifier_block *nb;
948 	struct iommu_callback_data cb = {
949 		.ops = ops,
950 	};
951 
952 	nb = kzalloc(sizeof(struct notifier_block), GFP_KERNEL);
953 	if (!nb)
954 		return -ENOMEM;
955 
956 	nb->notifier_call = iommu_bus_notifier;
957 
958 	err = bus_register_notifier(bus, nb);
959 	if (err)
960 		goto out_free;
961 
962 	err = bus_for_each_dev(bus, NULL, &cb, add_iommu_group);
963 	if (err)
964 		goto out_err;
965 
966 
967 	return 0;
968 
969 out_err:
970 	/* Clean up */
971 	bus_for_each_dev(bus, NULL, &cb, remove_iommu_group);
972 	bus_unregister_notifier(bus, nb);
973 
974 out_free:
975 	kfree(nb);
976 
977 	return err;
978 }
979 
980 /**
981  * bus_set_iommu - set iommu-callbacks for the bus
982  * @bus: bus.
983  * @ops: the callbacks provided by the iommu-driver
984  *
985  * This function is called by an iommu driver to set the iommu methods
986  * used for a particular bus. Drivers for devices on that bus can use
987  * the iommu-api after these ops are registered.
988  * This special function is needed because IOMMUs are usually devices on
989  * the bus itself, so the iommu drivers are not initialized when the bus
990  * is set up. With this function the iommu-driver can set the iommu-ops
991  * afterwards.
992  */
993 int bus_set_iommu(struct bus_type *bus, const struct iommu_ops *ops)
994 {
995 	int err;
996 
997 	if (bus->iommu_ops != NULL)
998 		return -EBUSY;
999 
1000 	bus->iommu_ops = ops;
1001 
1002 	/* Do IOMMU specific setup for this bus-type */
1003 	err = iommu_bus_init(bus, ops);
1004 	if (err)
1005 		bus->iommu_ops = NULL;
1006 
1007 	return err;
1008 }
1009 EXPORT_SYMBOL_GPL(bus_set_iommu);
1010 
1011 bool iommu_present(struct bus_type *bus)
1012 {
1013 	return bus->iommu_ops != NULL;
1014 }
1015 EXPORT_SYMBOL_GPL(iommu_present);
1016 
1017 bool iommu_capable(struct bus_type *bus, enum iommu_cap cap)
1018 {
1019 	if (!bus->iommu_ops || !bus->iommu_ops->capable)
1020 		return false;
1021 
1022 	return bus->iommu_ops->capable(cap);
1023 }
1024 EXPORT_SYMBOL_GPL(iommu_capable);
1025 
1026 /**
1027  * iommu_set_fault_handler() - set a fault handler for an iommu domain
1028  * @domain: iommu domain
1029  * @handler: fault handler
1030  * @token: user data, will be passed back to the fault handler
1031  *
1032  * This function should be used by IOMMU users which want to be notified
1033  * whenever an IOMMU fault happens.
1034  *
1035  * The fault handler itself should return 0 on success, and an appropriate
1036  * error code otherwise.
1037  */
1038 void iommu_set_fault_handler(struct iommu_domain *domain,
1039 					iommu_fault_handler_t handler,
1040 					void *token)
1041 {
1042 	BUG_ON(!domain);
1043 
1044 	domain->handler = handler;
1045 	domain->handler_token = token;
1046 }
1047 EXPORT_SYMBOL_GPL(iommu_set_fault_handler);
1048 
1049 static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
1050 						 unsigned type)
1051 {
1052 	struct iommu_domain *domain;
1053 
1054 	if (bus == NULL || bus->iommu_ops == NULL)
1055 		return NULL;
1056 
1057 	domain = bus->iommu_ops->domain_alloc(type);
1058 	if (!domain)
1059 		return NULL;
1060 
1061 	domain->ops  = bus->iommu_ops;
1062 	domain->type = type;
1063 	/* Assume all sizes by default; the driver may override this later */
1064 	domain->pgsize_bitmap  = bus->iommu_ops->pgsize_bitmap;
1065 
1066 	return domain;
1067 }
1068 
1069 struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
1070 {
1071 	return __iommu_domain_alloc(bus, IOMMU_DOMAIN_UNMANAGED);
1072 }
1073 EXPORT_SYMBOL_GPL(iommu_domain_alloc);
1074 
1075 void iommu_domain_free(struct iommu_domain *domain)
1076 {
1077 	domain->ops->domain_free(domain);
1078 }
1079 EXPORT_SYMBOL_GPL(iommu_domain_free);
1080 
1081 static int __iommu_attach_device(struct iommu_domain *domain,
1082 				 struct device *dev)
1083 {
1084 	int ret;
1085 	if (unlikely(domain->ops->attach_dev == NULL))
1086 		return -ENODEV;
1087 
1088 	ret = domain->ops->attach_dev(domain, dev);
1089 	if (!ret)
1090 		trace_attach_device_to_domain(dev);
1091 	return ret;
1092 }
1093 
1094 int iommu_attach_device(struct iommu_domain *domain, struct device *dev)
1095 {
1096 	struct iommu_group *group;
1097 	int ret;
1098 
1099 	group = iommu_group_get(dev);
1100 	/* FIXME: Remove this when groups a mandatory for iommu drivers */
1101 	if (group == NULL)
1102 		return __iommu_attach_device(domain, dev);
1103 
1104 	/*
1105 	 * We have a group - lock it to make sure the device-count doesn't
1106 	 * change while we are attaching
1107 	 */
1108 	mutex_lock(&group->mutex);
1109 	ret = -EINVAL;
1110 	if (iommu_group_device_count(group) != 1)
1111 		goto out_unlock;
1112 
1113 	ret = __iommu_attach_group(domain, group);
1114 
1115 out_unlock:
1116 	mutex_unlock(&group->mutex);
1117 	iommu_group_put(group);
1118 
1119 	return ret;
1120 }
1121 EXPORT_SYMBOL_GPL(iommu_attach_device);
1122 
1123 static void __iommu_detach_device(struct iommu_domain *domain,
1124 				  struct device *dev)
1125 {
1126 	if (unlikely(domain->ops->detach_dev == NULL))
1127 		return;
1128 
1129 	domain->ops->detach_dev(domain, dev);
1130 	trace_detach_device_from_domain(dev);
1131 }
1132 
1133 void iommu_detach_device(struct iommu_domain *domain, struct device *dev)
1134 {
1135 	struct iommu_group *group;
1136 
1137 	group = iommu_group_get(dev);
1138 	/* FIXME: Remove this when groups a mandatory for iommu drivers */
1139 	if (group == NULL)
1140 		return __iommu_detach_device(domain, dev);
1141 
1142 	mutex_lock(&group->mutex);
1143 	if (iommu_group_device_count(group) != 1) {
1144 		WARN_ON(1);
1145 		goto out_unlock;
1146 	}
1147 
1148 	__iommu_detach_group(domain, group);
1149 
1150 out_unlock:
1151 	mutex_unlock(&group->mutex);
1152 	iommu_group_put(group);
1153 }
1154 EXPORT_SYMBOL_GPL(iommu_detach_device);
1155 
1156 struct iommu_domain *iommu_get_domain_for_dev(struct device *dev)
1157 {
1158 	struct iommu_domain *domain;
1159 	struct iommu_group *group;
1160 
1161 	group = iommu_group_get(dev);
1162 	/* FIXME: Remove this when groups a mandatory for iommu drivers */
1163 	if (group == NULL)
1164 		return NULL;
1165 
1166 	domain = group->domain;
1167 
1168 	iommu_group_put(group);
1169 
1170 	return domain;
1171 }
1172 EXPORT_SYMBOL_GPL(iommu_get_domain_for_dev);
1173 
1174 /*
1175  * IOMMU groups are really the natrual working unit of the IOMMU, but
1176  * the IOMMU API works on domains and devices.  Bridge that gap by
1177  * iterating over the devices in a group.  Ideally we'd have a single
1178  * device which represents the requestor ID of the group, but we also
1179  * allow IOMMU drivers to create policy defined minimum sets, where
1180  * the physical hardware may be able to distiguish members, but we
1181  * wish to group them at a higher level (ex. untrusted multi-function
1182  * PCI devices).  Thus we attach each device.
1183  */
1184 static int iommu_group_do_attach_device(struct device *dev, void *data)
1185 {
1186 	struct iommu_domain *domain = data;
1187 
1188 	return __iommu_attach_device(domain, dev);
1189 }
1190 
1191 static int __iommu_attach_group(struct iommu_domain *domain,
1192 				struct iommu_group *group)
1193 {
1194 	int ret;
1195 
1196 	if (group->default_domain && group->domain != group->default_domain)
1197 		return -EBUSY;
1198 
1199 	ret = __iommu_group_for_each_dev(group, domain,
1200 					 iommu_group_do_attach_device);
1201 	if (ret == 0)
1202 		group->domain = domain;
1203 
1204 	return ret;
1205 }
1206 
1207 int iommu_attach_group(struct iommu_domain *domain, struct iommu_group *group)
1208 {
1209 	int ret;
1210 
1211 	mutex_lock(&group->mutex);
1212 	ret = __iommu_attach_group(domain, group);
1213 	mutex_unlock(&group->mutex);
1214 
1215 	return ret;
1216 }
1217 EXPORT_SYMBOL_GPL(iommu_attach_group);
1218 
1219 static int iommu_group_do_detach_device(struct device *dev, void *data)
1220 {
1221 	struct iommu_domain *domain = data;
1222 
1223 	__iommu_detach_device(domain, dev);
1224 
1225 	return 0;
1226 }
1227 
1228 static void __iommu_detach_group(struct iommu_domain *domain,
1229 				 struct iommu_group *group)
1230 {
1231 	int ret;
1232 
1233 	if (!group->default_domain) {
1234 		__iommu_group_for_each_dev(group, domain,
1235 					   iommu_group_do_detach_device);
1236 		group->domain = NULL;
1237 		return;
1238 	}
1239 
1240 	if (group->domain == group->default_domain)
1241 		return;
1242 
1243 	/* Detach by re-attaching to the default domain */
1244 	ret = __iommu_group_for_each_dev(group, group->default_domain,
1245 					 iommu_group_do_attach_device);
1246 	if (ret != 0)
1247 		WARN_ON(1);
1248 	else
1249 		group->domain = group->default_domain;
1250 }
1251 
1252 void iommu_detach_group(struct iommu_domain *domain, struct iommu_group *group)
1253 {
1254 	mutex_lock(&group->mutex);
1255 	__iommu_detach_group(domain, group);
1256 	mutex_unlock(&group->mutex);
1257 }
1258 EXPORT_SYMBOL_GPL(iommu_detach_group);
1259 
1260 phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
1261 {
1262 	if (unlikely(domain->ops->iova_to_phys == NULL))
1263 		return 0;
1264 
1265 	return domain->ops->iova_to_phys(domain, iova);
1266 }
1267 EXPORT_SYMBOL_GPL(iommu_iova_to_phys);
1268 
1269 static size_t iommu_pgsize(struct iommu_domain *domain,
1270 			   unsigned long addr_merge, size_t size)
1271 {
1272 	unsigned int pgsize_idx;
1273 	size_t pgsize;
1274 
1275 	/* Max page size that still fits into 'size' */
1276 	pgsize_idx = __fls(size);
1277 
1278 	/* need to consider alignment requirements ? */
1279 	if (likely(addr_merge)) {
1280 		/* Max page size allowed by address */
1281 		unsigned int align_pgsize_idx = __ffs(addr_merge);
1282 		pgsize_idx = min(pgsize_idx, align_pgsize_idx);
1283 	}
1284 
1285 	/* build a mask of acceptable page sizes */
1286 	pgsize = (1UL << (pgsize_idx + 1)) - 1;
1287 
1288 	/* throw away page sizes not supported by the hardware */
1289 	pgsize &= domain->pgsize_bitmap;
1290 
1291 	/* make sure we're still sane */
1292 	BUG_ON(!pgsize);
1293 
1294 	/* pick the biggest page */
1295 	pgsize_idx = __fls(pgsize);
1296 	pgsize = 1UL << pgsize_idx;
1297 
1298 	return pgsize;
1299 }
1300 
1301 int iommu_map(struct iommu_domain *domain, unsigned long iova,
1302 	      phys_addr_t paddr, size_t size, int prot)
1303 {
1304 	unsigned long orig_iova = iova;
1305 	unsigned int min_pagesz;
1306 	size_t orig_size = size;
1307 	phys_addr_t orig_paddr = paddr;
1308 	int ret = 0;
1309 
1310 	if (unlikely(domain->ops->map == NULL ||
1311 		     domain->pgsize_bitmap == 0UL))
1312 		return -ENODEV;
1313 
1314 	if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING)))
1315 		return -EINVAL;
1316 
1317 	/* find out the minimum page size supported */
1318 	min_pagesz = 1 << __ffs(domain->pgsize_bitmap);
1319 
1320 	/*
1321 	 * both the virtual address and the physical one, as well as
1322 	 * the size of the mapping, must be aligned (at least) to the
1323 	 * size of the smallest page supported by the hardware
1324 	 */
1325 	if (!IS_ALIGNED(iova | paddr | size, min_pagesz)) {
1326 		pr_err("unaligned: iova 0x%lx pa %pa size 0x%zx min_pagesz 0x%x\n",
1327 		       iova, &paddr, size, min_pagesz);
1328 		return -EINVAL;
1329 	}
1330 
1331 	pr_debug("map: iova 0x%lx pa %pa size 0x%zx\n", iova, &paddr, size);
1332 
1333 	while (size) {
1334 		size_t pgsize = iommu_pgsize(domain, iova | paddr, size);
1335 
1336 		pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n",
1337 			 iova, &paddr, pgsize);
1338 
1339 		ret = domain->ops->map(domain, iova, paddr, pgsize, prot);
1340 		if (ret)
1341 			break;
1342 
1343 		iova += pgsize;
1344 		paddr += pgsize;
1345 		size -= pgsize;
1346 	}
1347 
1348 	/* unroll mapping in case something went wrong */
1349 	if (ret)
1350 		iommu_unmap(domain, orig_iova, orig_size - size);
1351 	else
1352 		trace_map(orig_iova, orig_paddr, orig_size);
1353 
1354 	return ret;
1355 }
1356 EXPORT_SYMBOL_GPL(iommu_map);
1357 
1358 size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova, size_t size)
1359 {
1360 	size_t unmapped_page, unmapped = 0;
1361 	unsigned int min_pagesz;
1362 	unsigned long orig_iova = iova;
1363 
1364 	if (unlikely(domain->ops->unmap == NULL ||
1365 		     domain->pgsize_bitmap == 0UL))
1366 		return -ENODEV;
1367 
1368 	if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING)))
1369 		return -EINVAL;
1370 
1371 	/* find out the minimum page size supported */
1372 	min_pagesz = 1 << __ffs(domain->pgsize_bitmap);
1373 
1374 	/*
1375 	 * The virtual address, as well as the size of the mapping, must be
1376 	 * aligned (at least) to the size of the smallest page supported
1377 	 * by the hardware
1378 	 */
1379 	if (!IS_ALIGNED(iova | size, min_pagesz)) {
1380 		pr_err("unaligned: iova 0x%lx size 0x%zx min_pagesz 0x%x\n",
1381 		       iova, size, min_pagesz);
1382 		return -EINVAL;
1383 	}
1384 
1385 	pr_debug("unmap this: iova 0x%lx size 0x%zx\n", iova, size);
1386 
1387 	/*
1388 	 * Keep iterating until we either unmap 'size' bytes (or more)
1389 	 * or we hit an area that isn't mapped.
1390 	 */
1391 	while (unmapped < size) {
1392 		size_t pgsize = iommu_pgsize(domain, iova, size - unmapped);
1393 
1394 		unmapped_page = domain->ops->unmap(domain, iova, pgsize);
1395 		if (!unmapped_page)
1396 			break;
1397 
1398 		pr_debug("unmapped: iova 0x%lx size 0x%zx\n",
1399 			 iova, unmapped_page);
1400 
1401 		iova += unmapped_page;
1402 		unmapped += unmapped_page;
1403 	}
1404 
1405 	trace_unmap(orig_iova, size, unmapped);
1406 	return unmapped;
1407 }
1408 EXPORT_SYMBOL_GPL(iommu_unmap);
1409 
1410 size_t default_iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
1411 			 struct scatterlist *sg, unsigned int nents, int prot)
1412 {
1413 	struct scatterlist *s;
1414 	size_t mapped = 0;
1415 	unsigned int i, min_pagesz;
1416 	int ret;
1417 
1418 	if (unlikely(domain->pgsize_bitmap == 0UL))
1419 		return 0;
1420 
1421 	min_pagesz = 1 << __ffs(domain->pgsize_bitmap);
1422 
1423 	for_each_sg(sg, s, nents, i) {
1424 		phys_addr_t phys = page_to_phys(sg_page(s)) + s->offset;
1425 
1426 		/*
1427 		 * We are mapping on IOMMU page boundaries, so offset within
1428 		 * the page must be 0. However, the IOMMU may support pages
1429 		 * smaller than PAGE_SIZE, so s->offset may still represent
1430 		 * an offset of that boundary within the CPU page.
1431 		 */
1432 		if (!IS_ALIGNED(s->offset, min_pagesz))
1433 			goto out_err;
1434 
1435 		ret = iommu_map(domain, iova + mapped, phys, s->length, prot);
1436 		if (ret)
1437 			goto out_err;
1438 
1439 		mapped += s->length;
1440 	}
1441 
1442 	return mapped;
1443 
1444 out_err:
1445 	/* undo mappings already done */
1446 	iommu_unmap(domain, iova, mapped);
1447 
1448 	return 0;
1449 
1450 }
1451 EXPORT_SYMBOL_GPL(default_iommu_map_sg);
1452 
1453 int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr,
1454 			       phys_addr_t paddr, u64 size, int prot)
1455 {
1456 	if (unlikely(domain->ops->domain_window_enable == NULL))
1457 		return -ENODEV;
1458 
1459 	return domain->ops->domain_window_enable(domain, wnd_nr, paddr, size,
1460 						 prot);
1461 }
1462 EXPORT_SYMBOL_GPL(iommu_domain_window_enable);
1463 
1464 void iommu_domain_window_disable(struct iommu_domain *domain, u32 wnd_nr)
1465 {
1466 	if (unlikely(domain->ops->domain_window_disable == NULL))
1467 		return;
1468 
1469 	return domain->ops->domain_window_disable(domain, wnd_nr);
1470 }
1471 EXPORT_SYMBOL_GPL(iommu_domain_window_disable);
1472 
1473 static int __init iommu_init(void)
1474 {
1475 	iommu_group_kset = kset_create_and_add("iommu_groups",
1476 					       NULL, kernel_kobj);
1477 	BUG_ON(!iommu_group_kset);
1478 
1479 	return 0;
1480 }
1481 core_initcall(iommu_init);
1482 
1483 int iommu_domain_get_attr(struct iommu_domain *domain,
1484 			  enum iommu_attr attr, void *data)
1485 {
1486 	struct iommu_domain_geometry *geometry;
1487 	bool *paging;
1488 	int ret = 0;
1489 	u32 *count;
1490 
1491 	switch (attr) {
1492 	case DOMAIN_ATTR_GEOMETRY:
1493 		geometry  = data;
1494 		*geometry = domain->geometry;
1495 
1496 		break;
1497 	case DOMAIN_ATTR_PAGING:
1498 		paging  = data;
1499 		*paging = (domain->pgsize_bitmap != 0UL);
1500 		break;
1501 	case DOMAIN_ATTR_WINDOWS:
1502 		count = data;
1503 
1504 		if (domain->ops->domain_get_windows != NULL)
1505 			*count = domain->ops->domain_get_windows(domain);
1506 		else
1507 			ret = -ENODEV;
1508 
1509 		break;
1510 	default:
1511 		if (!domain->ops->domain_get_attr)
1512 			return -EINVAL;
1513 
1514 		ret = domain->ops->domain_get_attr(domain, attr, data);
1515 	}
1516 
1517 	return ret;
1518 }
1519 EXPORT_SYMBOL_GPL(iommu_domain_get_attr);
1520 
1521 int iommu_domain_set_attr(struct iommu_domain *domain,
1522 			  enum iommu_attr attr, void *data)
1523 {
1524 	int ret = 0;
1525 	u32 *count;
1526 
1527 	switch (attr) {
1528 	case DOMAIN_ATTR_WINDOWS:
1529 		count = data;
1530 
1531 		if (domain->ops->domain_set_windows != NULL)
1532 			ret = domain->ops->domain_set_windows(domain, *count);
1533 		else
1534 			ret = -ENODEV;
1535 
1536 		break;
1537 	default:
1538 		if (domain->ops->domain_set_attr == NULL)
1539 			return -EINVAL;
1540 
1541 		ret = domain->ops->domain_set_attr(domain, attr, data);
1542 	}
1543 
1544 	return ret;
1545 }
1546 EXPORT_SYMBOL_GPL(iommu_domain_set_attr);
1547 
1548 void iommu_get_dm_regions(struct device *dev, struct list_head *list)
1549 {
1550 	const struct iommu_ops *ops = dev->bus->iommu_ops;
1551 
1552 	if (ops && ops->get_dm_regions)
1553 		ops->get_dm_regions(dev, list);
1554 }
1555 
1556 void iommu_put_dm_regions(struct device *dev, struct list_head *list)
1557 {
1558 	const struct iommu_ops *ops = dev->bus->iommu_ops;
1559 
1560 	if (ops && ops->put_dm_regions)
1561 		ops->put_dm_regions(dev, list);
1562 }
1563 
1564 /* Request that a device is direct mapped by the IOMMU */
1565 int iommu_request_dm_for_dev(struct device *dev)
1566 {
1567 	struct iommu_domain *dm_domain;
1568 	struct iommu_group *group;
1569 	int ret;
1570 
1571 	/* Device must already be in a group before calling this function */
1572 	group = iommu_group_get_for_dev(dev);
1573 	if (IS_ERR(group))
1574 		return PTR_ERR(group);
1575 
1576 	mutex_lock(&group->mutex);
1577 
1578 	/* Check if the default domain is already direct mapped */
1579 	ret = 0;
1580 	if (group->default_domain &&
1581 	    group->default_domain->type == IOMMU_DOMAIN_IDENTITY)
1582 		goto out;
1583 
1584 	/* Don't change mappings of existing devices */
1585 	ret = -EBUSY;
1586 	if (iommu_group_device_count(group) != 1)
1587 		goto out;
1588 
1589 	/* Allocate a direct mapped domain */
1590 	ret = -ENOMEM;
1591 	dm_domain = __iommu_domain_alloc(dev->bus, IOMMU_DOMAIN_IDENTITY);
1592 	if (!dm_domain)
1593 		goto out;
1594 
1595 	/* Attach the device to the domain */
1596 	ret = __iommu_attach_group(dm_domain, group);
1597 	if (ret) {
1598 		iommu_domain_free(dm_domain);
1599 		goto out;
1600 	}
1601 
1602 	/* Make the direct mapped domain the default for this group */
1603 	if (group->default_domain)
1604 		iommu_domain_free(group->default_domain);
1605 	group->default_domain = dm_domain;
1606 
1607 	pr_info("Using direct mapping for device %s\n", dev_name(dev));
1608 
1609 	ret = 0;
1610 out:
1611 	mutex_unlock(&group->mutex);
1612 	iommu_group_put(group);
1613 
1614 	return ret;
1615 }
1616