Lines Matching refs:iommu

3  * omap iommu: tlb and pagetable primitives
18 #include <linux/iommu.h>
19 #include <linux/omap-iommu.h>
30 #include <linux/platform_data/iommu-omap.h>
33 #include "omap-iommu.h"
57 * @dom: generic iommu domain handle
325 * load_iotlb_entry - Set an iommu tlb entry
326 * @obj: target iommu
327 * @e: an iommu tlb entry info
401 * flush_iotlb_page - Clear an iommu tlb entry
402 * @obj: target iommu
403 * @da: iommu device virtual address
405 * Clear an iommu tlb entry which includes 'da' address.
439 * flush_iotlb_all - Clear all iommu tlb entries
440 * @obj: target iommu
661 * omap_iopgtable_store_entry - Make an iommu pte entry
662 * @obj: target iommu
663 * @e: an iommu tlb entry info
678 * iopgtable_lookup_entry - Lookup an iommu pte entry
679 * @obj: target iommu
680 * @da: iommu device virtual address
681 * @ppgd: iommu pgd entry pointer to be returned
682 * @ppte: iommu pte entry pointer to be returned
753 * iopgtable_clear_entry - Remove an iommu pte entry
754 * @obj: target iommu
755 * @da: iommu device virtual address
842 * omap_iommu_attach() - attach iommu device to an iommu domain
843 * @obj: target omap iommu device
879 * omap_iommu_detach - release iommu device
880 * @obj: target iommu
941 * omap_iommu_domain_deactivate - deactivate attached iommu devices
942 * @domain: iommu domain attached to the target iommu device
952 struct omap_iommu_device *iommu;
959 iommu = omap_domain->iommus;
960 iommu += (omap_domain->num_iommus - 1);
961 for (i = 0; i < omap_domain->num_iommus; i++, iommu--) {
962 oiommu = iommu->iommu_dev;
971 * omap_iommu_domain_activate - activate attached iommu devices
972 * @domain: iommu domain attached to the target iommu device
981 struct omap_iommu_device *iommu;
988 iommu = omap_domain->iommus;
989 for (i = 0; i < omap_domain->num_iommus; i++, iommu++) {
990 oiommu = iommu->iommu_dev;
999 * omap_iommu_runtime_suspend - disable an iommu device
1000 * @dev: iommu device
1041 * omap_iommu_runtime_resume - enable an iommu device
1042 * @dev: iommu device
1089 * @dev: iommu device
1108 if (!of_device_is_compatible(np, "ti,dra7-dsp-iommu"))
1128 if (!of_device_is_compatible(np, "ti,dra7-dsp-iommu"))
1194 if (of_property_read_bool(of, "ti,iommu-bus-err-back"))
1228 err = iommu_device_sysfs_add(&obj->iommu, obj->dev, NULL,
1233 err = iommu_device_register(&obj->iommu, &omap_iommu_ops, &pdev->dev);
1251 iommu_device_sysfs_remove(&obj->iommu);
1260 iommu_device_sysfs_remove(&obj->iommu);
1261 iommu_device_unregister(&obj->iommu);
1280 { .compatible = "ti,omap2-iommu" },
1281 { .compatible = "ti,omap4-iommu" },
1282 { .compatible = "ti,dra7-iommu" },
1283 { .compatible = "ti,dra7-dsp-iommu" },
1291 .name = "omap-iommu",
1318 struct omap_iommu_device *iommu;
1335 iommu = omap_domain->iommus;
1336 for (i = 0; i < omap_domain->num_iommus; i++, iommu++) {
1337 oiommu = iommu->iommu_dev;
1348 iommu--;
1349 oiommu = iommu->iommu_dev;
1364 struct omap_iommu_device *iommu;
1372 iommu = omap_domain->iommus;
1373 for (i = 0; i < omap_domain->num_iommus; i++, iommu++) {
1374 oiommu = iommu->iommu_dev;
1406 struct omap_iommu_device *iommu;
1413 odomain->iommus = kcalloc(odomain->num_iommus, sizeof(*iommu),
1418 iommu = odomain->iommus;
1419 for (i = 0; i < odomain->num_iommus; i++, iommu++) {
1420 iommu->pgtable = kzalloc(IOPGD_TABLE_SIZE, GFP_ATOMIC);
1421 if (!iommu->pgtable)
1428 if (WARN_ON(!IS_ALIGNED((long)iommu->pgtable,
1439 struct omap_iommu_device *iommu = odomain->iommus;
1441 for (i = 0; iommu && i < odomain->num_iommus; i++, iommu++)
1442 kfree(iommu->pgtable);
1454 struct omap_iommu_device *iommu;
1460 dev_err(dev, "device doesn't have an associated iommu\n");
1468 dev_err(dev, "iommu domain is already attached\n");
1475 dev_err(dev, "failed to allocate required iommu data %d\n",
1480 iommu = omap_domain->iommus;
1481 for (i = 0; i < omap_domain->num_iommus; i++, iommu++, arch_data++) {
1482 /* configure and enable the omap iommu */
1484 ret = omap_iommu_attach(oiommu, iommu->pgtable);
1486 dev_err(dev, "can't get omap iommu: %d\n", ret);
1491 iommu->iommu_dev = oiommu;
1500 iommu--;
1502 oiommu = iommu->iommu_dev;
1504 iommu->iommu_dev = NULL;
1518 struct omap_iommu_device *iommu = omap_domain->iommus;
1537 iommu += (omap_domain->num_iommus - 1);
1539 for (i = 0; i < omap_domain->num_iommus; i++, iommu--, arch_data--) {
1540 oiommu = iommu->iommu_dev;
1544 iommu->iommu_dev = NULL;
1600 * An iommu device is still attached
1613 struct omap_iommu_device *iommu = omap_domain->iommus;
1614 struct omap_iommu *oiommu = iommu->iommu_dev;
1621 * so perform the lookup using just the first iommu
1655 * Allocate the per-device iommu structure for DT-based devices.
1665 * since #iommu-cells = 0 for OMAP
1712 return &oiommu->iommu;