Lines Matching defs:iommu
3 * omap iommu: tlb and pagetable primitives
18 #include <linux/iommu.h>
19 #include <linux/omap-iommu.h>
31 #include <linux/platform_data/iommu-omap.h>
34 #include "omap-iommu.h"
58 * @dom: generic iommu domain handle
326 * load_iotlb_entry - Set an iommu tlb entry
327 * @obj: target iommu
328 * @e: an iommu tlb entry info
402 * flush_iotlb_page - Clear an iommu tlb entry
403 * @obj: target iommu
404 * @da: iommu device virtual address
406 * Clear an iommu tlb entry which includes 'da' address.
440 * flush_iotlb_all - Clear all iommu tlb entries
441 * @obj: target iommu
662 * omap_iopgtable_store_entry - Make an iommu pte entry
663 * @obj: target iommu
664 * @e: an iommu tlb entry info
679 * iopgtable_lookup_entry - Lookup an iommu pte entry
680 * @obj: target iommu
681 * @da: iommu device virtual address
682 * @ppgd: iommu pgd entry pointer to be returned
683 * @ppte: iommu pte entry pointer to be returned
754 * iopgtable_clear_entry - Remove an iommu pte entry
755 * @obj: target iommu
756 * @da: iommu device virtual address
843 * omap_iommu_attach() - attach iommu device to an iommu domain
844 * @obj: target omap iommu device
880 * omap_iommu_detach - release iommu device
881 * @obj: target iommu
942 * omap_iommu_domain_deactivate - deactivate attached iommu devices
943 * @domain: iommu domain attached to the target iommu device
953 struct omap_iommu_device *iommu;
960 iommu = omap_domain->iommus;
961 iommu += (omap_domain->num_iommus - 1);
962 for (i = 0; i < omap_domain->num_iommus; i++, iommu--) {
963 oiommu = iommu->iommu_dev;
972 * omap_iommu_domain_activate - activate attached iommu devices
973 * @domain: iommu domain attached to the target iommu device
982 struct omap_iommu_device *iommu;
989 iommu = omap_domain->iommus;
990 for (i = 0; i < omap_domain->num_iommus; i++, iommu++) {
991 oiommu = iommu->iommu_dev;
1000 * omap_iommu_runtime_suspend - disable an iommu device
1001 * @dev: iommu device
1042 * omap_iommu_runtime_resume - enable an iommu device
1043 * @dev: iommu device
1090 * @dev: iommu device
1109 if (!of_device_is_compatible(np, "ti,dra7-dsp-iommu"))
1129 if (!of_device_is_compatible(np, "ti,dra7-dsp-iommu"))
1195 if (of_find_property(of, "ti,iommu-bus-err-back", NULL))
1233 err = iommu_device_sysfs_add(&obj->iommu, obj->dev, NULL,
1238 iommu_device_set_ops(&obj->iommu, &omap_iommu_ops);
1239 iommu_device_set_fwnode(&obj->iommu, &of->fwnode);
1241 err = iommu_device_register(&obj->iommu);
1258 iommu_device_sysfs_remove(&obj->iommu);
1272 iommu_device_sysfs_remove(&obj->iommu);
1273 iommu_device_unregister(&obj->iommu);
1293 { .compatible = "ti,omap2-iommu" },
1294 { .compatible = "ti,omap4-iommu" },
1295 { .compatible = "ti,dra7-iommu" },
1296 { .compatible = "ti,dra7-dsp-iommu" },
1304 .name = "omap-iommu",
1330 struct omap_iommu_device *iommu;
1347 iommu = omap_domain->iommus;
1348 for (i = 0; i < omap_domain->num_iommus; i++, iommu++) {
1349 oiommu = iommu->iommu_dev;
1360 iommu--;
1361 oiommu = iommu->iommu_dev;
1374 struct omap_iommu_device *iommu;
1382 iommu = omap_domain->iommus;
1383 for (i = 0; i < omap_domain->num_iommus; i++, iommu++) {
1384 oiommu = iommu->iommu_dev;
1416 struct omap_iommu_device *iommu;
1423 odomain->iommus = kcalloc(odomain->num_iommus, sizeof(*iommu),
1428 iommu = odomain->iommus;
1429 for (i = 0; i < odomain->num_iommus; i++, iommu++) {
1430 iommu->pgtable = kzalloc(IOPGD_TABLE_SIZE, GFP_ATOMIC);
1431 if (!iommu->pgtable)
1438 if (WARN_ON(!IS_ALIGNED((long)iommu->pgtable,
1449 struct omap_iommu_device *iommu = odomain->iommus;
1451 for (i = 0; iommu && i < odomain->num_iommus; i++, iommu++)
1452 kfree(iommu->pgtable);
1464 struct omap_iommu_device *iommu;
1470 dev_err(dev, "device doesn't have an associated iommu\n");
1478 dev_err(dev, "iommu domain is already attached\n");
1485 dev_err(dev, "failed to allocate required iommu data %d\n",
1490 iommu = omap_domain->iommus;
1491 for (i = 0; i < omap_domain->num_iommus; i++, iommu++, arch_data++) {
1492 /* configure and enable the omap iommu */
1494 ret = omap_iommu_attach(oiommu, iommu->pgtable);
1496 dev_err(dev, "can't get omap iommu: %d\n", ret);
1501 iommu->iommu_dev = oiommu;
1510 iommu--;
1512 oiommu = iommu->iommu_dev;
1514 iommu->iommu_dev = NULL;
1528 struct omap_iommu_device *iommu = omap_domain->iommus;
1547 iommu += (omap_domain->num_iommus - 1);
1549 for (i = 0; i < omap_domain->num_iommus; i++, iommu--, arch_data--) {
1550 oiommu = iommu->iommu_dev;
1554 iommu->iommu_dev = NULL;
1598 * An iommu device is still attached
1611 struct omap_iommu_device *iommu = omap_domain->iommus;
1612 struct omap_iommu *oiommu = iommu->iommu_dev;
1619 * so perform the lookup using just the first iommu
1653 * Allocate the per-device iommu structure for DT-based devices.
1663 * since #iommu-cells = 0 for OMAP
1710 return &oiommu->iommu;