| /linux/drivers/iommu/ |
| H A D | sun50i-iommu.c | 101 struct iommu_device iommu; member 125 struct sun50i_iommu *iommu; member 138 static u32 iommu_read(struct sun50i_iommu *iommu, u32 offset) in iommu_read() argument 140 return readl(iommu->base + offset); in iommu_read() 143 static void iommu_write(struct sun50i_iommu *iommu, u32 offset, u32 value) in iommu_write() argument 145 writel(value, iommu->base + offset); in iommu_write() 294 struct sun50i_iommu *iommu = sun50i_domain->iommu; in sun50i_table_flush() local 298 dma_sync_single_for_device(iommu->dev, dma, size, DMA_TO_DEVICE); in sun50i_table_flush() 301 static void sun50i_iommu_zap_iova(struct sun50i_iommu *iommu, in sun50i_iommu_zap_iova() argument 307 iommu_write(iommu, IOMMU_TLB_IVLD_ADDR_REG, iova); in sun50i_iommu_zap_iova() [all …]
|
| H A D | iommu-sysfs.c | 54 int iommu_device_sysfs_add(struct iommu_device *iommu, in iommu_device_sysfs_add() argument 62 iommu->dev = kzalloc_obj(*iommu->dev); in iommu_device_sysfs_add() 63 if (!iommu->dev) in iommu_device_sysfs_add() 66 device_initialize(iommu->dev); in iommu_device_sysfs_add() 68 iommu->dev->class = &iommu_class; in iommu_device_sysfs_add() 69 iommu->dev->parent = parent; in iommu_device_sysfs_add() 70 iommu->dev->groups = groups; in iommu_device_sysfs_add() 73 ret = kobject_set_name_vargs(&iommu->dev->kobj, fmt, vargs); in iommu_device_sysfs_add() 78 ret = device_add(iommu->dev); in iommu_device_sysfs_add() 82 dev_set_drvdata(iommu->dev, iommu); in iommu_device_sysfs_add() [all …]
|
| /linux/arch/sparc/kernel/ |
| H A D | iommu.c | 52 struct iommu *iommu = container_of(iommu_map_table, struct iommu, tbl); in iommu_flushall() local 53 if (iommu->iommu_flushinv) { in iommu_flushall() 54 iommu_write(iommu->iommu_flushinv, ~(u64)0); in iommu_flushall() 59 tag = iommu->iommu_tags; in iommu_flushall() 66 (void) iommu_read(iommu->write_complete_reg); in iommu_flushall() 80 #define IOPTE_IS_DUMMY(iommu, iopte) \ argument 81 ((iopte_val(*iopte) & IOPTE_PAGE) == (iommu)->dummy_page_pa) 83 static inline void iopte_make_dummy(struct iommu *iommu, iopte_t *iopte) in iopte_make_dummy() argument 88 val |= iommu->dummy_page_pa; in iopte_make_dummy() 93 int iommu_table_init(struct iommu *iommu, int tsbsize, in iommu_table_init() argument [all …]
|
| H A D | iommu-common.c | 19 static inline bool need_flush(struct iommu_map_table *iommu) in need_flush() argument 21 return ((iommu->flags & IOMMU_NEED_FLUSH) != 0); in need_flush() 24 static inline void set_flush(struct iommu_map_table *iommu) in set_flush() argument 26 iommu->flags |= IOMMU_NEED_FLUSH; in set_flush() 29 static inline void clear_flush(struct iommu_map_table *iommu) in clear_flush() argument 31 iommu->flags &= ~IOMMU_NEED_FLUSH; in clear_flush() 52 void iommu_tbl_pool_init(struct iommu_map_table *iommu, in iommu_tbl_pool_init() argument 60 struct iommu_pool *p = &(iommu->large_pool); in iommu_tbl_pool_init() 64 iommu->nr_pools = IOMMU_NR_POOLS; in iommu_tbl_pool_init() 66 iommu->nr_pools = npools; in iommu_tbl_pool_init() [all …]
|
| H A D | sbus.c | 63 struct iommu *iommu = dev->archdata.iommu; in sbus_set_sbus64() local 78 cfg_reg = iommu->write_complete_reg; in sbus_set_sbus64() 213 struct iommu *iommu = op->dev.archdata.iommu; in sbus_build_irq() local 214 unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; in sbus_build_irq() 275 struct iommu *iommu = op->dev.archdata.iommu; in sysio_ue_handler() local 276 unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; in sysio_ue_handler() 349 struct iommu *iommu = op->dev.archdata.iommu; in sysio_ce_handler() local 350 unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; in sysio_ce_handler() 428 struct iommu *iommu = op->dev.archdata.iommu; in sysio_sbus_error_handler() local 433 reg_base = iommu->write_complete_reg - 0x2000UL; in sysio_sbus_error_handler() [all …]
|
| H A D | pci_sun4v.c | 78 static inline bool iommu_use_atu(struct iommu *iommu, u64 mask) in iommu_use_atu() argument 80 return iommu->atu && mask > DMA_BIT_MASK(32); in iommu_use_atu() 102 if (!iommu_use_atu(pbm->iommu, mask)) { in iommu_batch_flush() 119 iotsb_num = pbm->iommu->atu->iotsb->iotsb_num; in iommu_batch_flush() 188 struct iommu *iommu; in dma_4v_alloc_coherent() local 213 iommu = dev->archdata.iommu; in dma_4v_alloc_coherent() 215 if (!iommu_use_atu(iommu, mask)) in dma_4v_alloc_coherent() 216 tbl = &iommu->tbl; in dma_4v_alloc_coherent() 218 tbl = &iommu->atu->tbl; in dma_4v_alloc_coherent() 327 struct iommu *iommu; in dma_4v_free_coherent() local [all …]
|
| H A D | psycho_common.c | 209 struct iommu *iommu = pbm->iommu; in psycho_check_iommu_error() local 212 spin_lock_irqsave(&iommu->lock, flags); in psycho_check_iommu_error() 213 control = upa_readq(iommu->iommu_control); in psycho_check_iommu_error() 218 upa_writeq(control, iommu->iommu_control); in psycho_check_iommu_error() 248 spin_unlock_irqrestore(&iommu->lock, flags); in psycho_check_iommu_error() 405 struct iommu *iommu = pbm->iommu; in psycho_iommu_init() local 409 iommu->iommu_control = pbm->controller_regs + PSYCHO_IOMMU_CONTROL; in psycho_iommu_init() 410 iommu->iommu_tsbbase = pbm->controller_regs + PSYCHO_IOMMU_TSBBASE; in psycho_iommu_init() 411 iommu->iommu_flush = pbm->controller_regs + PSYCHO_IOMMU_FLUSH; in psycho_iommu_init() 412 iommu->iommu_tags = pbm->controller_regs + PSYCHO_IOMMU_TAG; in psycho_iommu_init() [all …]
|
| H A D | pci_fire.c | 33 struct iommu *iommu = pbm->iommu; in pci_fire_pbm_iommu_init() local 45 iommu->iommu_control = pbm->pbm_regs + FIRE_IOMMU_CONTROL; in pci_fire_pbm_iommu_init() 46 iommu->iommu_tsbbase = pbm->pbm_regs + FIRE_IOMMU_TSBBASE; in pci_fire_pbm_iommu_init() 47 iommu->iommu_flush = pbm->pbm_regs + FIRE_IOMMU_FLUSH; in pci_fire_pbm_iommu_init() 48 iommu->iommu_flushinv = pbm->pbm_regs + FIRE_IOMMU_FLUSHINV; in pci_fire_pbm_iommu_init() 53 iommu->write_complete_reg = pbm->controller_regs + 0x410000UL; in pci_fire_pbm_iommu_init() 58 upa_writeq(~(u64)0, iommu->iommu_flushinv); in pci_fire_pbm_iommu_init() 60 err = iommu_table_init(iommu, tsbsize * 8 * 1024, vdma[0], dma_mask, in pci_fire_pbm_iommu_init() 65 upa_writeq(__pa(iommu->page_table) | 0x7UL, iommu->iommu_tsbbase); in pci_fire_pbm_iommu_init() 67 control = upa_readq(iommu->iommu_control); in pci_fire_pbm_iommu_init() [all …]
|
| /linux/drivers/iommu/amd/ |
| H A D | init.c | 238 bool translation_pre_enabled(struct amd_iommu *iommu) in translation_pre_enabled() argument 240 return (iommu->flags & AMD_IOMMU_FLAG_TRANS_PRE_ENABLED); in translation_pre_enabled() 243 static void clear_translation_pre_enabled(struct amd_iommu *iommu) in clear_translation_pre_enabled() argument 245 iommu->flags &= ~AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; in clear_translation_pre_enabled() 248 static void init_translation_status(struct amd_iommu *iommu) in init_translation_status() argument 252 ctrl = readq(iommu->mmio_base + MMIO_CONTROL_OFFSET); in init_translation_status() 254 iommu->flags |= AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; in init_translation_status() 273 struct amd_iommu *iommu; in get_global_efr() local 275 for_each_iommu(iommu) { in get_global_efr() 276 u64 tmp = iommu->features; in get_global_efr() [all …]
|
| H A D | iommu.c | 75 static void set_dte_entry(struct amd_iommu *iommu, 84 static void iommu_flush_dte_sync(struct amd_iommu *iommu, u16 devid); 86 static struct iommu_dev_data *find_dev_data(struct amd_iommu *iommu, u16 devid); 91 static void clone_aliases(struct amd_iommu *iommu, struct device *dev); 93 static int iommu_completion_wait(struct amd_iommu *iommu); 149 static void update_dte256(struct amd_iommu *iommu, struct iommu_dev_data *dev_data, in update_dte256() argument 153 struct dev_table_entry *dev_table = get_dev_table(iommu); in update_dte256() 162 iommu_flush_dte_sync(iommu, dev_data->devid); in update_dte256() 167 iommu_flush_dte_sync(iommu, dev_data->devid); in update_dte256() 175 iommu_flush_dte_sync(iommu, dev_data->devid); in update_dte256() [all …]
|
| /linux/tools/testing/selftests/vfio/lib/ |
| H A D | iommu.c | 69 int __iommu_hva2iova(struct iommu *iommu, void *vaddr, iova_t *iova) in __iommu_hva2iova() argument 73 list_for_each_entry(region, &iommu->dma_regions, link) { in __iommu_hva2iova() 89 iova_t iommu_hva2iova(struct iommu *iommu, void *vaddr) in iommu_hva2iova() argument 94 ret = __iommu_hva2iova(iommu, vaddr, &iova); in iommu_hva2iova() 100 static int vfio_iommu_map(struct iommu *iommu, struct dma_region *region) in vfio_iommu_map() argument 110 if (ioctl(iommu->container_fd, VFIO_IOMMU_MAP_DMA, &args)) in vfio_iommu_map() 116 static int iommufd_map(struct iommu *iommu, struct dma_region *region) in iommufd_map() argument 126 .ioas_id = iommu->ioas_id, in iommufd_map() 129 if (ioctl(iommu->iommufd, IOMMU_IOAS_MAP, &args)) in iommufd_map() 135 int __iommu_map(struct iommu *iommu, struct dma_region *region) in __iommu_map() argument [all …]
|
| /linux/tools/testing/selftests/vfio/lib/include/libvfio/ |
| H A D | iommu.h | 27 struct iommu { struct 35 struct iommu *iommu_init(const char *iommu_mode); argument 36 void iommu_cleanup(struct iommu *iommu); 38 int __iommu_map(struct iommu *iommu, struct dma_region *region); 40 static inline void iommu_map(struct iommu *iommu, struct dma_region *region) in iommu_map() argument 42 VFIO_ASSERT_EQ(__iommu_map(iommu, region), 0); in iommu_map() 45 int __iommu_unmap(struct iommu *iomm 28 modeiommu global() argument 30 iommufdiommu global() argument 47 iommu_unmap(struct iommu * iommu,struct dma_region * region) iommu_unmap() argument 54 iommu_unmap_all(struct iommu * iommu) iommu_unmap_all() argument [all...] |
| /linux/arch/sparc/mm/ |
| H A D | iommu.c | 60 struct iommu_struct *iommu; in sbus_iommu_init() local 67 iommu = kmalloc_obj(struct iommu_struct); in sbus_iommu_init() 68 if (!iommu) { in sbus_iommu_init() 73 iommu->regs = of_ioremap(&op->resource[0], 0, PAGE_SIZE * 3, in sbus_iommu_init() 75 if (!iommu->regs) { in sbus_iommu_init() 80 control = sbus_readl(&iommu->regs->control); in sbus_iommu_init() 85 sbus_writel(control, &iommu->regs->control); in sbus_iommu_init() 87 iommu_invalidate(iommu->regs); in sbus_iommu_init() 88 iommu->start = IOMMU_START; in sbus_iommu_init() 89 iommu->end = 0xffffffff; in sbus_iommu_init() [all …]
|
| /linux/Documentation/ABI/testing/ |
| H A D | debugfs-amd-iommu | 1 What: /sys/kernel/debug/iommu/amd/iommu<x>/mmio 6 MMIO register offset for iommu<x>, and the file outputs the corresponding 7 MMIO register value of iommu<x> 11 $ echo "0x18" > /sys/kernel/debug/iommu/amd/iommu00/mmio 12 $ cat /sys/kernel/debug/iommu/amd/iommu00/mmio 18 What: /sys/kernel/debug/iommu/amd/iommu<x>/capability 23 capability register offset for iommu<x>, and the file outputs the 24 corresponding capability register value of iommu<x>. 28 $ echo "0x10" > /sys/kernel/debug/iommu/amd/iommu00/capability 29 $ cat /sys/kernel/debug/iommu/amd/iommu00/capability [all …]
|
| H A D | sysfs-class-iommu-intel-iommu | 1 What: /sys/class/iommu/<iommu>/intel-iommu/address 8 intel-iommu with a DMAR DRHD table entry. 10 What: /sys/class/iommu/<iommu>/intel-iommu/cap 18 What: /sys/class/iommu/<iommu>/intel-iommu/ecap 26 What: /sys/class/iommu/<iommu>/intel-iommu/version
|
| H A D | sysfs-class-iommu-amd-iommu | 1 What: /sys/class/iommu/<iommu>/amd-iommu/cap 9 What: /sys/class/iommu/<iommu>/amd-iommu/features
|
| H A D | debugfs-intel-iommu | 1 What: /sys/kernel/debug/iommu/intel/iommu_regset 11 $ sudo cat /sys/kernel/debug/iommu/intel/iommu_regset 46 What: /sys/kernel/debug/iommu/intel/ir_translation_struct 57 $ sudo cat /sys/kernel/debug/iommu/intel/ir_translation_struct 79 What: /sys/kernel/debug/iommu/intel/dmar_translation_struct 93 $ sudo cat /sys/kernel/debug/iommu/intel/dmar_translation_struct 117 What: /sys/kernel/debug/iommu/intel/invalidation_queue 128 $ sudo cat /sys/kernel/debug/iommu/intel/invalidation_queue 153 What: /sys/kernel/debug/iommu/intel/dmar_perf_latency 161 /sys/kernel/debug/iommu/intel/dmar_perf_latency [all …]
|
| /linux/drivers/iommu/intel/ |
| H A D | perf.c | 18 bool dmar_latency_enabled(struct intel_iommu *iommu, enum latency_type type) in dmar_latency_enabled() argument 20 struct latency_statistic *lstat = iommu->perf_statistic; in dmar_latency_enabled() 25 int dmar_latency_enable(struct intel_iommu *iommu, enum latency_type type) in dmar_latency_enable() argument 31 if (dmar_latency_enabled(iommu, type)) in dmar_latency_enable() 35 if (!iommu->perf_statistic) { in dmar_latency_enable() 36 iommu->perf_statistic = kzalloc_objs(*lstat, DMAR_LATENCY_NUM, in dmar_latency_enable() 38 if (!iommu->perf_statistic) { in dmar_latency_enable() 44 lstat = iommu->perf_statistic; in dmar_latency_enable() 57 void dmar_latency_disable(struct intel_iommu *iommu, enum latency_type type) in dmar_latency_disable() argument 59 struct latency_statistic *lstat = iommu->perf_statistic; in dmar_latency_disable() [all …]
|
| H A D | svm.c | 28 void intel_svm_check(struct intel_iommu *iommu) in intel_svm_check() argument 30 if (!pasid_supported(iommu) || !ecap_smpwc(iommu->ecap)) in intel_svm_check() 34 !cap_fl1gp_support(iommu->cap)) { in intel_svm_check() 36 iommu->name); in intel_svm_check() 41 !cap_fl5lp_support(iommu->cap)) { in intel_svm_check() 43 iommu->name); in intel_svm_check() 47 iommu->flags |= VTD_FLAG_SVM_CAPABLE; in intel_svm_check() 92 intel_pasid_tear_down_entry(info->iommu, dev_pasid->dev, in intel_mm_release() 116 struct intel_iommu *iommu; in intel_iommu_sva_supported() local 121 iommu = info->iommu; in intel_iommu_sva_supported() [all …]
|
| H A D | perfmon.h | 39 int alloc_iommu_pmu(struct intel_iommu *iommu); 40 void free_iommu_pmu(struct intel_iommu *iommu); 41 void iommu_pmu_register(struct intel_iommu *iommu); 42 void iommu_pmu_unregister(struct intel_iommu *iommu); 45 alloc_iommu_pmu(struct intel_iommu *iommu) in alloc_iommu_pmu() argument 51 free_iommu_pmu(struct intel_iommu *iommu) in free_iommu_pmu() argument 56 iommu_pmu_register(struct intel_iommu *iommu) in iommu_pmu_register() argument 61 iommu_pmu_unregister(struct intel_iommu *iommu) in iommu_pmu_unregister() argument
|
| H A D | nested.c | 26 struct intel_iommu *iommu = info->iommu; in intel_nested_attach_dev() local 43 ret = domain_attach_iommu(dmar_domain, iommu); in intel_nested_attach_dev() 57 ret = intel_pasid_setup_nested(iommu, dev, in intel_nested_attach_dev() 74 domain_detach_iommu(dmar_domain, iommu); in intel_nested_attach_dev() 134 static int domain_setup_nested(struct intel_iommu *iommu, in domain_setup_nested() argument 140 intel_pasid_tear_down_entry(iommu, dev, pasid, false); in domain_setup_nested() 142 return intel_pasid_setup_nested(iommu, dev, pasid, domain); in domain_setup_nested() 151 struct intel_iommu *iommu = info->iommu; in intel_nested_set_dev_pasid() local 155 if (!pasid_supported(iommu) || dev_is_real_dma_subdevice(dev)) in intel_nested_set_dev_pasid() 158 if (context_copied(iommu, info->bus, info->devfn)) in intel_nested_set_dev_pasid() [all …]
|
| /linux/tools/testing/selftests/vfio/ |
| H A D | vfio_pci_driver_test.c | 28 static void region_setup(struct iommu *iommu, in region_setup() argument 43 iommu_map(iommu, region); in region_setup() 46 static void region_teardown(struct iommu *iommu, struct dma_region *region) in region_teardown() argument 48 iommu_unmap(iommu, region); in region_teardown() 53 struct iommu *iommu; in FIXTURE() local 83 self->iommu = iommu_init(variant->iommu_mode); in FIXTURE_SETUP() 84 self->device = vfio_pci_device_init(device_bdf, self->iommu); in FIXTURE_SETUP() 85 self->iova_allocator = iova_allocator_init(self->iommu); in FIXTURE_SETUP() 89 region_setup(self->iommu, self->iova_allocator, &self->memcpy_region, SZ_1G); in FIXTURE_SETUP() 90 region_setup(self->iommu, self->iova_allocator, &driver->region, SZ_2M); in FIXTURE_SETUP() [all …]
|
| H A D | vfio_dma_mapping_test.c | 48 "/sys/kernel/debug/iommu/intel/%s/domain_translation_struct", in intel_iommu_mapping_get() 89 if (!access("/sys/kernel/debug/iommu/intel", F_OK)) in iommu_mapping_get() 96 struct iommu *iommu; in FIXTURE() local 122 self->iommu = iommu_init(variant->iommu_mode); in FIXTURE_SETUP() 123 self->device = vfio_pci_device_init(device_bdf, self->iommu); in FIXTURE_SETUP() 124 self->iova_allocator = iova_allocator_init(self->iommu); in FIXTURE_SETUP() 131 iommu_cleanup(self->iommu); in FIXTURE_TEARDOWN() 155 iommu_map(self->iommu, ®ion); in TEST_F() 164 if (self->iommu in TEST_F() 204 struct iommu *iommu; FIXTURE() local [all...] |
| H A D | vfio_pci_device_test.c | 26 struct iommu *iommu; in FIXTURE() local 32 self->iommu = iommu_init(default_iommu_mode); in FIXTURE_SETUP() 33 self->device = vfio_pci_device_init(device_bdf, self->iommu); in FIXTURE_SETUP() 39 iommu_cleanup(self->iommu); in FIXTURE_TEARDOWN() 106 struct iommu *iommu; in FIXTURE() 124 self->iommu = iommu_init(default_iommu_mode); in FIXTURE_SETUP() 125 self->device = vfio_pci_device_init(device_bdf, self->iommu); in FIXTURE_SETUP() 131 iommu_cleanup(self->iommu); in FIXTURE_TEARDOWN() 105 struct iommu *iommu; FIXTURE() local [all...] |
| /linux/drivers/iommu/generic_pt/ |
| H A D | kunit_iommu.h | 65 struct pt_iommu *iommu; member 77 PT_IOMMU_CHECK_DOMAIN(struct kunit_iommu_priv, fmt_table.iommu, domain); 99 iommu_table, struct kunit_iommu_priv, fmt_table.iommu); in pt_kunit_get_top_lock() 140 priv->fmt_table.iommu.nid = NUMA_NO_NODE; in pt_kunit_priv_init() 141 priv->fmt_table.iommu.driver_ops = &pt_kunit_driver_ops; in pt_kunit_priv_init() 142 priv->fmt_table.iommu.iommu_device = priv->dummy_dev; in pt_kunit_priv_init() 153 priv->iommu = &priv->fmt_table.iommu; in pt_kunit_priv_init() 154 priv->common = common_from_iommu(&priv->fmt_table.iommu); in pt_kunit_priv_init() 155 priv->iommu->ops->get_info(priv->iommu, &priv->info); in pt_kunit_priv_init()
|