iommu 94 arch/arc/mm/dma.c const struct iommu_ops *iommu, bool coherent) iommu 13 arch/arm/include/asm/device.h void *iommu; /* private IOMMU data */ iommu 192 arch/arm/mm/dma-mapping-nommu.c const struct iommu_ops *iommu, bool coherent) iommu 2243 arch/arm/mm/dma-mapping.c const struct iommu_ops *iommu) iommu 2247 arch/arm/mm/dma-mapping.c if (!iommu) iommu 2281 arch/arm/mm/dma-mapping.c const struct iommu_ops *iommu) iommu 2293 arch/arm/mm/dma-mapping.c const struct iommu_ops *iommu, bool coherent) iommu 2310 arch/arm/mm/dma-mapping.c if (arm_setup_iommu_dma_ops(dev, dma_base, size, iommu)) iommu 10 arch/arm64/include/asm/device.h void *iommu; /* private IOMMU data */ iommu 41 arch/arm64/mm/dma-mapping.c const struct iommu_ops *iommu, bool coherent) iommu 52 arch/arm64/mm/dma-mapping.c if (iommu) iommu 254 arch/ia64/hp/common/sba_iommu.c ? ((struct ioc *) PCI_CONTROLLER(to_pci_dev(dev))->iommu) : NULL) iommu 1736 arch/ia64/hp/common/sba_iommu.c controller->iommu = ioc; iommu 1940 arch/ia64/hp/common/sba_iommu.c if (PCI_CONTROLLER(bus)->iommu) iommu 1955 arch/ia64/hp/common/sba_iommu.c PCI_CONTROLLER(bus)->iommu = ioc; iommu 10 arch/ia64/include/asm/device.h void *iommu; /* hook for IOMMU specific extension */ iommu 48 arch/ia64/include/asm/pci.h void *iommu; iommu 146 arch/mips/mm/dma-noncoherent.c const struct iommu_ops *iommu, bool coherent) iommu 59 arch/parisc/include/asm/pci.h struct ioc *iommu; /* IOMMU this device is under */ iommu 102 arch/powerpc/platforms/cell/iommu.c struct cbe_iommu *iommu; iommu 129 arch/powerpc/platforms/cell/iommu.c static void invalidate_tce_cache(struct cbe_iommu *iommu, unsigned long *pte, iommu 136 arch/powerpc/platforms/cell/iommu.c reg = iommu->xlate_regs + IOC_IOPT_CacheInvd; iommu 193 arch/powerpc/platforms/cell/iommu.c invalidate_tce_cache(window->iommu, io_pte, npages); iommu 216 arch/powerpc/platforms/cell/iommu.c __pa(window->iommu->pad_page) | iommu 227 arch/powerpc/platforms/cell/iommu.c invalidate_tce_cache(window->iommu, io_pte, npages); iommu 233 arch/powerpc/platforms/cell/iommu.c struct cbe_iommu *iommu = data; iommu 235 arch/powerpc/platforms/cell/iommu.c stat = in_be64(iommu->xlate_regs + IOC_IO_ExcpStat); iommu 251 arch/powerpc/platforms/cell/iommu.c out_be64(iommu->xlate_regs + IOC_IO_ExcpStat, stat); iommu 296 arch/powerpc/platforms/cell/iommu.c static void cell_iommu_setup_stab(struct cbe_iommu *iommu, iommu 306 arch/powerpc/platforms/cell/iommu.c __func__, iommu->nid, segments); iommu 310 arch/powerpc/platforms/cell/iommu.c page = alloc_pages_node(iommu->nid, GFP_KERNEL, get_order(stab_size)); iommu 312 arch/powerpc/platforms/cell/iommu.c iommu->stab = page_address(page); iommu 313 arch/powerpc/platforms/cell/iommu.c memset(iommu->stab, 0, stab_size); iommu 316 arch/powerpc/platforms/cell/iommu.c static unsigned long *cell_iommu_alloc_ptab(struct cbe_iommu *iommu, iommu 334 arch/powerpc/platforms/cell/iommu.c iommu->nid, ptab_size, get_order(ptab_size)); iommu 335 arch/powerpc/platforms/cell/iommu.c page = alloc_pages_node(iommu->nid, GFP_KERNEL, get_order(ptab_size)); iommu 345 arch/powerpc/platforms/cell/iommu.c __func__, iommu->nid, iommu->stab, ptab, iommu 368 arch/powerpc/platforms/cell/iommu.c iommu->stab[i] = reg | (__pa(ptab) + (n_pte_pages << 12) * iommu 370 arch/powerpc/platforms/cell/iommu.c pr_debug("\t[%d] 0x%016lx\n", i, iommu->stab[i]); iommu 376 arch/powerpc/platforms/cell/iommu.c static void cell_iommu_enable_hardware(struct cbe_iommu *iommu) iommu 382 arch/powerpc/platforms/cell/iommu.c if (cell_iommu_find_ioc(iommu->nid, &xlate_base)) iommu 384 arch/powerpc/platforms/cell/iommu.c __func__, iommu->nid); iommu 386 arch/powerpc/platforms/cell/iommu.c iommu->xlate_regs = ioremap(xlate_base, IOC_Reg_Size); iommu 387 arch/powerpc/platforms/cell/iommu.c iommu->cmd_regs = iommu->xlate_regs + IOC_IOCmd_Offset; iommu 393 arch/powerpc/platforms/cell/iommu.c reg = in_be64(iommu->xlate_regs + IOC_IO_ExcpStat); iommu 394 arch/powerpc/platforms/cell/iommu.c out_be64(iommu->xlate_regs + IOC_IO_ExcpStat, iommu 396 arch/powerpc/platforms/cell/iommu.c out_be64(iommu->xlate_regs + IOC_IO_ExcpMask, iommu 400 arch/powerpc/platforms/cell/iommu.c IIC_IRQ_IOEX_ATI | (iommu->nid << IIC_IRQ_NODE_SHIFT)); iommu 403 arch/powerpc/platforms/cell/iommu.c ret = request_irq(virq, ioc_interrupt, 0, iommu->name, iommu); iommu 407 arch/powerpc/platforms/cell/iommu.c reg = IOC_IOST_Origin_E | __pa(iommu->stab) | IOC_IOST_Origin_HW; iommu 408 arch/powerpc/platforms/cell/iommu.c out_be64(iommu->xlate_regs + IOC_IOST_Origin, reg); iommu 409 arch/powerpc/platforms/cell/iommu.c in_be64(iommu->xlate_regs + IOC_IOST_Origin); iommu 412 arch/powerpc/platforms/cell/iommu.c reg = in_be64(iommu->cmd_regs + IOC_IOCmd_Cfg) | IOC_IOCmd_Cfg_TE; iommu 413 arch/powerpc/platforms/cell/iommu.c out_be64(iommu->cmd_regs + IOC_IOCmd_Cfg, reg); iommu 416 arch/powerpc/platforms/cell/iommu.c static void cell_iommu_setup_hardware(struct cbe_iommu *iommu, iommu 419 arch/powerpc/platforms/cell/iommu.c cell_iommu_setup_stab(iommu, base, size, 0, 0); iommu 420 arch/powerpc/platforms/cell/iommu.c iommu->ptab = cell_iommu_alloc_ptab(iommu, base, size, 0, 0, iommu 422 arch/powerpc/platforms/cell/iommu.c cell_iommu_enable_hardware(iommu); iommu 426 arch/powerpc/platforms/cell/iommu.c static struct iommu_window *find_window(struct cbe_iommu *iommu, iommu 433 arch/powerpc/platforms/cell/iommu.c list_for_each_entry(window, &(iommu->windows), list) { iommu 462 arch/powerpc/platforms/cell/iommu.c cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np, iommu 472 arch/powerpc/platforms/cell/iommu.c window = kzalloc_node(sizeof(*window), GFP_KERNEL, iommu->nid); iommu 478 arch/powerpc/platforms/cell/iommu.c window->iommu = iommu; iommu 481 arch/powerpc/platforms/cell/iommu.c window->table.it_base = (unsigned long)iommu->ptab; iommu 482 arch/powerpc/platforms/cell/iommu.c window->table.it_index = iommu->nid; iommu 489 arch/powerpc/platforms/cell/iommu.c iommu_init_table(&window->table, iommu->nid, 0, 0); iommu 497 arch/powerpc/platforms/cell/iommu.c list_add(&window->list, &iommu->windows); iommu 509 arch/powerpc/platforms/cell/iommu.c page = alloc_pages_node(iommu->nid, GFP_KERNEL, 0); iommu 511 arch/powerpc/platforms/cell/iommu.c iommu->pad_page = page_address(page); iommu 512 arch/powerpc/platforms/cell/iommu.c clear_page(iommu->pad_page); iommu 516 arch/powerpc/platforms/cell/iommu.c (unsigned long)iommu->pad_page, DMA_TO_DEVICE, 0); iommu 542 arch/powerpc/platforms/cell/iommu.c struct cbe_iommu *iommu; iommu 548 arch/powerpc/platforms/cell/iommu.c iommu = cell_iommu_for_node(dev_to_node(dev)); iommu 549 arch/powerpc/platforms/cell/iommu.c if (iommu == NULL || list_empty(&iommu->windows)) { iommu 554 arch/powerpc/platforms/cell/iommu.c window = list_entry(iommu->windows.next, struct iommu_window, list); iommu 619 arch/powerpc/platforms/cell/iommu.c struct cbe_iommu *iommu; iommu 648 arch/powerpc/platforms/cell/iommu.c iommu = &iommus[i]; iommu 649 arch/powerpc/platforms/cell/iommu.c iommu->stab = NULL; iommu 650 arch/powerpc/platforms/cell/iommu.c iommu->nid = nid; iommu 651 arch/powerpc/platforms/cell/iommu.c snprintf(iommu->name, sizeof(iommu->name), "iommu%d", i); iommu 652 arch/powerpc/platforms/cell/iommu.c INIT_LIST_HEAD(&iommu->windows); iommu 654 arch/powerpc/platforms/cell/iommu.c return iommu; iommu 660 arch/powerpc/platforms/cell/iommu.c struct cbe_iommu *iommu; iommu 663 arch/powerpc/platforms/cell/iommu.c iommu = cell_iommu_alloc(np); iommu 664 arch/powerpc/platforms/cell/iommu.c if (!iommu) iommu 674 arch/powerpc/platforms/cell/iommu.c cell_iommu_setup_hardware(iommu, base, size); iommu 677 arch/powerpc/platforms/cell/iommu.c cell_iommu_setup_window(iommu, np, base, size, iommu 875 arch/powerpc/platforms/cell/iommu.c static void cell_iommu_setup_fixed_ptab(struct cbe_iommu *iommu, iommu 881 arch/powerpc/platforms/cell/iommu.c ptab = cell_iommu_alloc_ptab(iommu, fbase, fsize, dbase, dsize, 24); iommu 914 arch/powerpc/platforms/cell/iommu.c struct cbe_iommu *iommu; iommu 988 arch/powerpc/platforms/cell/iommu.c iommu = cell_iommu_alloc(np); iommu 989 arch/powerpc/platforms/cell/iommu.c BUG_ON(!iommu); iommu 999 arch/powerpc/platforms/cell/iommu.c "fixed window 0x%lx-0x%lx\n", iommu->nid, dbase, iommu 1002 arch/powerpc/platforms/cell/iommu.c cell_iommu_setup_stab(iommu, dbase, dsize, fbase, fsize); iommu 1003 arch/powerpc/platforms/cell/iommu.c iommu->ptab = cell_iommu_alloc_ptab(iommu, dbase, dsize, 0, 0, iommu 1005 arch/powerpc/platforms/cell/iommu.c cell_iommu_setup_fixed_ptab(iommu, np, dbase, dsize, iommu 1007 arch/powerpc/platforms/cell/iommu.c cell_iommu_enable_hardware(iommu); iommu 1008 arch/powerpc/platforms/cell/iommu.c cell_iommu_setup_window(iommu, np, dbase, dsize, 0); iommu 14 arch/sparc/include/asm/device.h void *iommu; iommu 35 arch/sparc/include/asm/iommu-common.h extern void iommu_tbl_pool_init(struct iommu_map_table *iommu, iommu 43 arch/sparc/include/asm/iommu-common.h struct iommu_map_table *iommu, iommu 49 arch/sparc/include/asm/iommu-common.h extern void iommu_tbl_range_free(struct iommu_map_table *iommu, iommu 89 arch/sparc/include/asm/iommu_64.h int iommu_table_init(struct iommu *iommu, int tsbsize, iommu 19 arch/sparc/kernel/iommu-common.c static inline bool need_flush(struct iommu_map_table *iommu) iommu 21 arch/sparc/kernel/iommu-common.c return ((iommu->flags & IOMMU_NEED_FLUSH) != 0); iommu 24 arch/sparc/kernel/iommu-common.c static inline void set_flush(struct iommu_map_table *iommu) iommu 26 arch/sparc/kernel/iommu-common.c iommu->flags |= IOMMU_NEED_FLUSH; iommu 29 arch/sparc/kernel/iommu-common.c static inline void clear_flush(struct iommu_map_table *iommu) iommu 31 arch/sparc/kernel/iommu-common.c iommu->flags &= ~IOMMU_NEED_FLUSH; iommu 52 arch/sparc/kernel/iommu-common.c void iommu_tbl_pool_init(struct iommu_map_table *iommu, iommu 60 arch/sparc/kernel/iommu-common.c struct iommu_pool *p = &(iommu->large_pool); iommu 64 arch/sparc/kernel/iommu-common.c iommu->nr_pools = IOMMU_NR_POOLS; iommu 66 arch/sparc/kernel/iommu-common.c iommu->nr_pools = npools; iommu 69 arch/sparc/kernel/iommu-common.c iommu->table_shift = table_shift; iommu 70 arch/sparc/kernel/iommu-common.c iommu->lazy_flush = lazy_flush; iommu 73 arch/sparc/kernel/iommu-common.c iommu->flags |= IOMMU_NO_SPAN_BOUND; iommu 75 arch/sparc/kernel/iommu-common.c iommu->flags |= IOMMU_HAS_LARGE_POOL; iommu 78 arch/sparc/kernel/iommu-common.c iommu->poolsize = num_entries/iommu->nr_pools; iommu 80 arch/sparc/kernel/iommu-common.c iommu->poolsize = (num_entries * 3 / 4)/iommu->nr_pools; iommu 81 arch/sparc/kernel/iommu-common.c for (i = 0; i < iommu->nr_pools; i++) { iommu 82 arch/sparc/kernel/iommu-common.c spin_lock_init(&(iommu->pools[i].lock)); iommu 83 arch/sparc/kernel/iommu-common.c iommu->pools[i].start = start; iommu 84 arch/sparc/kernel/iommu-common.c iommu->pools[i].hint = start; iommu 85 arch/sparc/kernel/iommu-common.c start += iommu->poolsize; /* start for next pool */ iommu 86 arch/sparc/kernel/iommu-common.c iommu->pools[i].end = start - 1; iommu 98 arch/sparc/kernel/iommu-common.c struct iommu_map_table *iommu, iommu 109 arch/sparc/kernel/iommu-common.c unsigned int npools = iommu->nr_pools; iommu 111 arch/sparc/kernel/iommu-common.c bool large_pool = ((iommu->flags & IOMMU_HAS_LARGE_POOL) != 0); iommu 126 arch/sparc/kernel/iommu-common.c pool = &(iommu->large_pool); iommu 131 arch/sparc/kernel/iommu-common.c pool = &(iommu->pools[pool_nr]); iommu 152 arch/sparc/kernel/iommu-common.c shift = iommu->table_map_base >> iommu->table_shift; iommu 161 arch/sparc/kernel/iommu-common.c pool = &(iommu->pools[0]); iommu 171 arch/sparc/kernel/iommu-common.c 1 << iommu->table_shift); iommu 173 arch/sparc/kernel/iommu-common.c boundary_size = ALIGN(1ULL << 32, 1 << iommu->table_shift); iommu 175 arch/sparc/kernel/iommu-common.c boundary_size = boundary_size >> iommu->table_shift; iommu 181 arch/sparc/kernel/iommu-common.c if ((iommu->flags & IOMMU_NO_SPAN_BOUND) != 0) { iommu 183 arch/sparc/kernel/iommu-common.c boundary_size = iommu->poolsize * iommu->nr_pools; iommu 185 arch/sparc/kernel/iommu-common.c n = iommu_area_alloc(iommu->map, limit, start, npages, shift, iommu 191 arch/sparc/kernel/iommu-common.c set_flush(iommu); iommu 194 arch/sparc/kernel/iommu-common.c } else if (!largealloc && pass <= iommu->nr_pools) { iommu 196 arch/sparc/kernel/iommu-common.c pool_nr = (pool_nr + 1) & (iommu->nr_pools - 1); iommu 197 arch/sparc/kernel/iommu-common.c pool = &(iommu->pools[pool_nr]); iommu 200 arch/sparc/kernel/iommu-common.c set_flush(iommu); iommu 209 arch/sparc/kernel/iommu-common.c if (iommu->lazy_flush && iommu 210 arch/sparc/kernel/iommu-common.c (n < pool->hint || need_flush(iommu))) { iommu 211 arch/sparc/kernel/iommu-common.c clear_flush(iommu); iommu 212 arch/sparc/kernel/iommu-common.c iommu->lazy_flush(iommu); iommu 250 arch/sparc/kernel/iommu-common.c void iommu_tbl_range_free(struct iommu_map_table *iommu, u64 dma_addr, iommu 255 arch/sparc/kernel/iommu-common.c unsigned long shift = iommu->table_shift; iommu 258 arch/sparc/kernel/iommu-common.c entry = (dma_addr - iommu->table_map_base) >> shift; iommu 259 arch/sparc/kernel/iommu-common.c pool = get_pool(iommu, entry); iommu 262 arch/sparc/kernel/iommu-common.c bitmap_clear(iommu->map, entry, npages); iommu 52 arch/sparc/kernel/iommu.c struct iommu *iommu = container_of(iommu_map_table, struct iommu, tbl); iommu 53 arch/sparc/kernel/iommu.c if (iommu->iommu_flushinv) { iommu 54 arch/sparc/kernel/iommu.c iommu_write(iommu->iommu_flushinv, ~(u64)0); iommu 59 arch/sparc/kernel/iommu.c tag = iommu->iommu_tags; iommu 66 arch/sparc/kernel/iommu.c (void) iommu_read(iommu->write_complete_reg); iommu 80 arch/sparc/kernel/iommu.c #define IOPTE_IS_DUMMY(iommu, iopte) \ iommu 81 arch/sparc/kernel/iommu.c ((iopte_val(*iopte) & IOPTE_PAGE) == (iommu)->dummy_page_pa) iommu 83 arch/sparc/kernel/iommu.c static inline void iopte_make_dummy(struct iommu *iommu, iopte_t *iopte) iommu 88 arch/sparc/kernel/iommu.c val |= iommu->dummy_page_pa; iommu 93 arch/sparc/kernel/iommu.c int iommu_table_init(struct iommu *iommu, int tsbsize, iommu 103 arch/sparc/kernel/iommu.c spin_lock_init(&iommu->lock); iommu 104 arch/sparc/kernel/iommu.c iommu->ctx_lowest_free = 1; iommu 105 arch/sparc/kernel/iommu.c iommu->tbl.table_map_base = dma_offset; iommu 106 arch/sparc/kernel/iommu.c iommu->dma_addr_mask = dma_addr_mask; iommu 111 arch/sparc/kernel/iommu.c iommu->tbl.map = kzalloc_node(sz, GFP_KERNEL, numa_node); iommu 112 arch/sparc/kernel/iommu.c if (!iommu->tbl.map) iommu 115 arch/sparc/kernel/iommu.c iommu_tbl_pool_init(&iommu->tbl, num_tsb_entries, IO_PAGE_SHIFT, iommu 127 arch/sparc/kernel/iommu.c iommu->dummy_page = (unsigned long) page_address(page); iommu 128 arch/sparc/kernel/iommu.c memset((void *)iommu->dummy_page, 0, PAGE_SIZE); iommu 129 arch/sparc/kernel/iommu.c iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page); iommu 138 arch/sparc/kernel/iommu.c iommu->page_table = (iopte_t *)page_address(page); iommu 141 arch/sparc/kernel/iommu.c iopte_make_dummy(iommu, &iommu->page_table[i]); iommu 146 arch/sparc/kernel/iommu.c free_page(iommu->dummy_page); iommu 147 arch/sparc/kernel/iommu.c iommu->dummy_page = 0UL; iommu 150 arch/sparc/kernel/iommu.c kfree(iommu->tbl.map); iommu 151 arch/sparc/kernel/iommu.c iommu->tbl.map = NULL; iommu 157 arch/sparc/kernel/iommu.c struct iommu *iommu, iommu 162 arch/sparc/kernel/iommu.c entry = iommu_tbl_range_alloc(dev, &iommu->tbl, npages, NULL, iommu 167 arch/sparc/kernel/iommu.c return iommu->page_table + entry; iommu 170 arch/sparc/kernel/iommu.c static int iommu_alloc_ctx(struct iommu *iommu) iommu 172 arch/sparc/kernel/iommu.c int lowest = iommu->ctx_lowest_free; iommu 173 arch/sparc/kernel/iommu.c int n = find_next_zero_bit(iommu->ctx_bitmap, IOMMU_NUM_CTXS, lowest); iommu 176 arch/sparc/kernel/iommu.c n = find_next_zero_bit(iommu->ctx_bitmap, lowest, 1); iommu 183 arch/sparc/kernel/iommu.c __set_bit(n, iommu->ctx_bitmap); iommu 188 arch/sparc/kernel/iommu.c static inline void iommu_free_ctx(struct iommu *iommu, int ctx) iommu 191 arch/sparc/kernel/iommu.c __clear_bit(ctx, iommu->ctx_bitmap); iommu 192 arch/sparc/kernel/iommu.c if (ctx < iommu->ctx_lowest_free) iommu 193 arch/sparc/kernel/iommu.c iommu->ctx_lowest_free = ctx; iommu 202 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 221 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 223 arch/sparc/kernel/iommu.c iopte = alloc_npages(dev, iommu, size >> IO_PAGE_SHIFT); iommu 230 arch/sparc/kernel/iommu.c *dma_addrp = (iommu->tbl.table_map_base + iommu 231 arch/sparc/kernel/iommu.c ((iopte - iommu->page_table) << IO_PAGE_SHIFT)); iommu 250 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 254 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 256 arch/sparc/kernel/iommu.c iommu_tbl_range_free(&iommu->tbl, dvma, npages, IOMMU_ERROR_CODE); iommu 268 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 276 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 286 arch/sparc/kernel/iommu.c base = alloc_npages(dev, iommu, npages); iommu 287 arch/sparc/kernel/iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 289 arch/sparc/kernel/iommu.c if (iommu->iommu_ctxflush) iommu 290 arch/sparc/kernel/iommu.c ctx = iommu_alloc_ctx(iommu); iommu 291 arch/sparc/kernel/iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 296 arch/sparc/kernel/iommu.c bus_addr = (iommu->tbl.table_map_base + iommu 297 arch/sparc/kernel/iommu.c ((base - iommu->page_table) << IO_PAGE_SHIFT)); iommu 313 arch/sparc/kernel/iommu.c iommu_free_ctx(iommu, ctx); iommu 320 arch/sparc/kernel/iommu.c static void strbuf_flush(struct strbuf *strbuf, struct iommu *iommu, iommu 327 arch/sparc/kernel/iommu.c iommu->iommu_ctxflush) { iommu 370 arch/sparc/kernel/iommu.c (void) iommu_read(iommu->write_complete_reg); iommu 390 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 401 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 406 arch/sparc/kernel/iommu.c base = iommu->page_table + iommu 407 arch/sparc/kernel/iommu.c ((bus_addr - iommu->tbl.table_map_base) >> IO_PAGE_SHIFT); iommu 410 arch/sparc/kernel/iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 414 arch/sparc/kernel/iommu.c if (iommu->iommu_ctxflush) iommu 419 arch/sparc/kernel/iommu.c strbuf_flush(strbuf, iommu, bus_addr, ctx, iommu 424 arch/sparc/kernel/iommu.c iopte_make_dummy(iommu, base + i); iommu 426 arch/sparc/kernel/iommu.c iommu_free_ctx(iommu, ctx); iommu 427 arch/sparc/kernel/iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 429 arch/sparc/kernel/iommu.c iommu_tbl_range_free(&iommu->tbl, bus_addr, npages, IOMMU_ERROR_CODE); iommu 443 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 448 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 450 arch/sparc/kernel/iommu.c if (nelems == 0 || !iommu) iommu 453 arch/sparc/kernel/iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 456 arch/sparc/kernel/iommu.c if (iommu->iommu_ctxflush) iommu 457 arch/sparc/kernel/iommu.c ctx = iommu_alloc_ctx(iommu); iommu 477 arch/sparc/kernel/iommu.c base_shift = iommu->tbl.table_map_base >> IO_PAGE_SHIFT; iommu 491 arch/sparc/kernel/iommu.c entry = iommu_tbl_range_alloc(dev, &iommu->tbl, npages, iommu 498 arch/sparc/kernel/iommu.c " npages %lx\n", iommu, paddr, npages); iommu 502 arch/sparc/kernel/iommu.c base = iommu->page_table + entry; iommu 505 arch/sparc/kernel/iommu.c dma_addr = iommu->tbl.table_map_base + iommu 546 arch/sparc/kernel/iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 566 arch/sparc/kernel/iommu.c entry = (vaddr - iommu->tbl.table_map_base) iommu 568 arch/sparc/kernel/iommu.c base = iommu->page_table + entry; iommu 571 arch/sparc/kernel/iommu.c iopte_make_dummy(iommu, base + j); iommu 573 arch/sparc/kernel/iommu.c iommu_tbl_range_free(&iommu->tbl, vaddr, npages, iommu 582 arch/sparc/kernel/iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 590 arch/sparc/kernel/iommu.c static unsigned long fetch_sg_ctx(struct iommu *iommu, struct scatterlist *sg) iommu 594 arch/sparc/kernel/iommu.c if (iommu->iommu_ctxflush) { iommu 597 arch/sparc/kernel/iommu.c struct iommu_map_table *tbl = &iommu->tbl; iommu 600 arch/sparc/kernel/iommu.c base = iommu->page_table + iommu 615 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 619 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 622 arch/sparc/kernel/iommu.c ctx = fetch_sg_ctx(iommu, sglist); iommu 624 arch/sparc/kernel/iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 638 arch/sparc/kernel/iommu.c entry = ((dma_handle - iommu->tbl.table_map_base) iommu 640 arch/sparc/kernel/iommu.c base = iommu->page_table + entry; iommu 644 arch/sparc/kernel/iommu.c strbuf_flush(strbuf, iommu, dma_handle, ctx, iommu 648 arch/sparc/kernel/iommu.c iopte_make_dummy(iommu, base + i); iommu 650 arch/sparc/kernel/iommu.c iommu_tbl_range_free(&iommu->tbl, dma_handle, npages, iommu 655 arch/sparc/kernel/iommu.c iommu_free_ctx(iommu, ctx); iommu 657 arch/sparc/kernel/iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 664 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 668 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 674 arch/sparc/kernel/iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 682 arch/sparc/kernel/iommu.c if (iommu->iommu_ctxflush && iommu 685 arch/sparc/kernel/iommu.c struct iommu_map_table *tbl = &iommu->tbl; iommu 687 arch/sparc/kernel/iommu.c iopte = iommu->page_table + iommu 693 arch/sparc/kernel/iommu.c strbuf_flush(strbuf, iommu, bus_addr, ctx, npages, direction); iommu 695 arch/sparc/kernel/iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 702 arch/sparc/kernel/iommu.c struct iommu *iommu; iommu 708 arch/sparc/kernel/iommu.c iommu = dev->archdata.iommu; iommu 714 arch/sparc/kernel/iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 718 arch/sparc/kernel/iommu.c if (iommu->iommu_ctxflush && iommu 721 arch/sparc/kernel/iommu.c struct iommu_map_table *tbl = &iommu->tbl; iommu 723 arch/sparc/kernel/iommu.c iopte = iommu->page_table + ((sglist[0].dma_address - iommu 739 arch/sparc/kernel/iommu.c strbuf_flush(strbuf, iommu, bus_addr, ctx, npages, direction); iommu 741 arch/sparc/kernel/iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 746 arch/sparc/kernel/iommu.c struct iommu *iommu = dev->archdata.iommu; iommu 751 arch/sparc/kernel/iommu.c if (device_mask < iommu->dma_addr_mask) iommu 146 arch/sparc/kernel/ldc.c struct ldc_iommu iommu; iommu 1022 arch/sparc/kernel/ldc.c static void ldc_demap(struct ldc_iommu *iommu, unsigned long id, u64 cookie, iommu 1029 arch/sparc/kernel/ldc.c base = iommu->page_table + entry; iommu 1044 arch/sparc/kernel/ldc.c struct ldc_iommu *ldc_iommu = &lp->iommu; iommu 1045 arch/sparc/kernel/ldc.c struct iommu_map_table *iommu = &ldc_iommu->iommu_map_table; iommu 1056 arch/sparc/kernel/ldc.c iommu->map = kzalloc(sz, GFP_KERNEL); iommu 1057 arch/sparc/kernel/ldc.c if (!iommu->map) { iommu 1061 arch/sparc/kernel/ldc.c iommu_tbl_pool_init(iommu, num_tsb_entries, PAGE_SHIFT, iommu 1094 arch/sparc/kernel/ldc.c kfree(iommu->map); iommu 1095 arch/sparc/kernel/ldc.c iommu->map = NULL; iommu 1102 arch/sparc/kernel/ldc.c struct ldc_iommu *ldc_iommu = &lp->iommu; iommu 1103 arch/sparc/kernel/ldc.c struct iommu_map_table *iommu = &ldc_iommu->iommu_map_table; iommu 1108 arch/sparc/kernel/ldc.c num_tsb_entries = iommu->poolsize * iommu->nr_pools; iommu 1115 arch/sparc/kernel/ldc.c kfree(iommu->map); iommu 1116 arch/sparc/kernel/ldc.c iommu->map = NULL; iommu 2017 arch/sparc/kernel/ldc.c static struct ldc_mtable_entry *alloc_npages(struct ldc_iommu *iommu, iommu 2022 arch/sparc/kernel/ldc.c entry = iommu_tbl_range_alloc(NULL, &iommu->iommu_map_table, iommu 2027 arch/sparc/kernel/ldc.c return iommu->page_table + entry; iommu 2155 arch/sparc/kernel/ldc.c struct ldc_iommu *iommu; iommu 2170 arch/sparc/kernel/ldc.c iommu = &lp->iommu; iommu 2172 arch/sparc/kernel/ldc.c base = alloc_npages(iommu, npages); iommu 2177 arch/sparc/kernel/ldc.c state.page_table = iommu->page_table; iommu 2181 arch/sparc/kernel/ldc.c state.pte_idx = (base - iommu->page_table); iommu 2201 arch/sparc/kernel/ldc.c struct ldc_iommu *iommu; iommu 2212 arch/sparc/kernel/ldc.c iommu = &lp->iommu; iommu 2214 arch/sparc/kernel/ldc.c base = alloc_npages(iommu, npages); iommu 2219 arch/sparc/kernel/ldc.c state.page_table = iommu->page_table; iommu 2223 arch/sparc/kernel/ldc.c state.pte_idx = (base - iommu->page_table); iommu 2233 arch/sparc/kernel/ldc.c static void free_npages(unsigned long id, struct ldc_iommu *iommu, iommu 2240 arch/sparc/kernel/ldc.c entry = ldc_cookie_to_index(cookie, iommu); iommu 2241 arch/sparc/kernel/ldc.c ldc_demap(iommu, id, cookie, entry, npages); iommu 2242 arch/sparc/kernel/ldc.c iommu_tbl_range_free(&iommu->iommu_map_table, cookie, npages, entry); iommu 2248 arch/sparc/kernel/ldc.c struct ldc_iommu *iommu = &lp->iommu; iommu 2252 arch/sparc/kernel/ldc.c spin_lock_irqsave(&iommu->lock, flags); iommu 2257 arch/sparc/kernel/ldc.c free_npages(lp->id, iommu, addr, size); iommu 2259 arch/sparc/kernel/ldc.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 66 arch/sparc/kernel/of_device_common.c op->dev.archdata.iommu = bus_sd->iommu; iommu 251 arch/sparc/kernel/pci.c static void pci_init_dev_archdata(struct dev_archdata *sd, void *iommu, iommu 256 arch/sparc/kernel/pci.c sd->iommu = iommu; iommu 278 arch/sparc/kernel/pci.c pci_init_dev_archdata(sd, pbm->iommu, &pbm->stc, pbm, op, iommu 281 arch/sparc/kernel/pci.c sd->iommu = pbm->iommu; iommu 964 arch/sparc/kernel/pci.c struct iommu *iommu = dev->archdata.iommu; iommu 981 arch/sparc/kernel/pci.c if (iommu->dma_addr_mask & 0x80000000) iommu 1026 arch/sparc/kernel/pci.c pci_init_dev_archdata(&dev->dev.archdata, psd->iommu, iommu 32 arch/sparc/kernel/pci_fire.c struct iommu *iommu = pbm->iommu; iommu 44 arch/sparc/kernel/pci_fire.c iommu->iommu_control = pbm->pbm_regs + FIRE_IOMMU_CONTROL; iommu 45 arch/sparc/kernel/pci_fire.c iommu->iommu_tsbbase = pbm->pbm_regs + FIRE_IOMMU_TSBBASE; iommu 46 arch/sparc/kernel/pci_fire.c iommu->iommu_flush = pbm->pbm_regs + FIRE_IOMMU_FLUSH; iommu 47 arch/sparc/kernel/pci_fire.c iommu->iommu_flushinv = pbm->pbm_regs + FIRE_IOMMU_FLUSHINV; iommu 52 arch/sparc/kernel/pci_fire.c iommu->write_complete_reg = pbm->controller_regs + 0x410000UL; iommu 57 arch/sparc/kernel/pci_fire.c upa_writeq(~(u64)0, iommu->iommu_flushinv); iommu 59 arch/sparc/kernel/pci_fire.c err = iommu_table_init(iommu, tsbsize * 8 * 1024, vdma[0], dma_mask, iommu 64 arch/sparc/kernel/pci_fire.c upa_writeq(__pa(iommu->page_table) | 0x7UL, iommu->iommu_tsbbase); iommu 66 arch/sparc/kernel/pci_fire.c control = upa_readq(iommu->iommu_control); iommu 71 arch/sparc/kernel/pci_fire.c upa_writeq(control, iommu->iommu_control); iommu 463 arch/sparc/kernel/pci_fire.c struct iommu *iommu; iommu 476 arch/sparc/kernel/pci_fire.c iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL); iommu 477 arch/sparc/kernel/pci_fire.c if (!iommu) { iommu 482 arch/sparc/kernel/pci_fire.c pbm->iommu = iommu; iommu 493 arch/sparc/kernel/pci_fire.c kfree(pbm->iommu); iommu 151 arch/sparc/kernel/pci_impl.h struct iommu *iommu; iommu 513 arch/sparc/kernel/pci_psycho.c struct iommu *iommu; iommu 528 arch/sparc/kernel/pci_psycho.c iommu = pbm->sibling->iommu; iommu 530 arch/sparc/kernel/pci_psycho.c iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL); iommu 531 arch/sparc/kernel/pci_psycho.c if (!iommu) { iommu 537 arch/sparc/kernel/pci_psycho.c pbm->iommu = iommu; iommu 588 arch/sparc/kernel/pci_psycho.c kfree(pbm->iommu); iommu 464 arch/sparc/kernel/pci_sabre.c struct iommu *iommu; iommu 490 arch/sparc/kernel/pci_sabre.c iommu = kzalloc(sizeof(*iommu), GFP_KERNEL); iommu 491 arch/sparc/kernel/pci_sabre.c if (!iommu) { iommu 496 arch/sparc/kernel/pci_sabre.c pbm->iommu = iommu; iommu 579 arch/sparc/kernel/pci_sabre.c kfree(pbm->iommu); iommu 239 arch/sparc/kernel/pci_schizo.c struct iommu *iommu = pbm->iommu; iommu 246 arch/sparc/kernel/pci_schizo.c spin_lock_irqsave(&iommu->lock, flags); iommu 247 arch/sparc/kernel/pci_schizo.c control = upa_readq(iommu->iommu_control); iommu 254 arch/sparc/kernel/pci_schizo.c upa_writeq(control, iommu->iommu_control); iommu 285 arch/sparc/kernel/pci_schizo.c iommu->iommu_control); iommu 301 arch/sparc/kernel/pci_schizo.c upa_writeq(control, iommu->iommu_control); iommu 343 arch/sparc/kernel/pci_schizo.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 1137 arch/sparc/kernel/pci_schizo.c struct iommu *iommu = pbm->iommu; iommu 1170 arch/sparc/kernel/pci_schizo.c iommu->iommu_control = pbm->pbm_regs + SCHIZO_IOMMU_CONTROL; iommu 1171 arch/sparc/kernel/pci_schizo.c iommu->iommu_tsbbase = pbm->pbm_regs + SCHIZO_IOMMU_TSBBASE; iommu 1172 arch/sparc/kernel/pci_schizo.c iommu->iommu_flush = pbm->pbm_regs + SCHIZO_IOMMU_FLUSH; iommu 1173 arch/sparc/kernel/pci_schizo.c iommu->iommu_tags = iommu->iommu_flush + (0xa580UL - 0x0210UL); iommu 1174 arch/sparc/kernel/pci_schizo.c iommu->iommu_ctxflush = pbm->pbm_regs + SCHIZO_IOMMU_CTXFLUSH; iommu 1179 arch/sparc/kernel/pci_schizo.c iommu->write_complete_reg = pbm->controller_regs + 0x10000UL; iommu 1184 arch/sparc/kernel/pci_schizo.c control = upa_readq(iommu->iommu_control); iommu 1186 arch/sparc/kernel/pci_schizo.c upa_writeq(control, iommu->iommu_control); iommu 1198 arch/sparc/kernel/pci_schizo.c err = iommu_table_init(iommu, tsbsize * 8 * 1024, vdma[0], dma_mask, iommu 1205 arch/sparc/kernel/pci_schizo.c upa_writeq(__pa(iommu->page_table), iommu->iommu_tsbbase); iommu 1207 arch/sparc/kernel/pci_schizo.c control = upa_readq(iommu->iommu_control); iommu 1219 arch/sparc/kernel/pci_schizo.c upa_writeq(control, iommu->iommu_control); iommu 1419 arch/sparc/kernel/pci_schizo.c struct iommu *iommu; iommu 1434 arch/sparc/kernel/pci_schizo.c iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL); iommu 1435 arch/sparc/kernel/pci_schizo.c if (!iommu) { iommu 1440 arch/sparc/kernel/pci_schizo.c pbm->iommu = iommu; iommu 1453 arch/sparc/kernel/pci_schizo.c kfree(pbm->iommu); iommu 76 arch/sparc/kernel/pci_sun4v.c static inline bool iommu_use_atu(struct iommu *iommu, u64 mask) iommu 78 arch/sparc/kernel/pci_sun4v.c return iommu->atu && mask > DMA_BIT_MASK(32); iommu 100 arch/sparc/kernel/pci_sun4v.c if (!iommu_use_atu(pbm->iommu, mask)) { iommu 117 arch/sparc/kernel/pci_sun4v.c iotsb_num = pbm->iommu->atu->iotsb->iotsb_num; iommu 186 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu; iommu 211 arch/sparc/kernel/pci_sun4v.c iommu = dev->archdata.iommu; iommu 213 arch/sparc/kernel/pci_sun4v.c if (!iommu_use_atu(iommu, mask)) iommu 214 arch/sparc/kernel/pci_sun4v.c tbl = &iommu->tbl; iommu 216 arch/sparc/kernel/pci_sun4v.c tbl = &iommu->atu->tbl; iommu 325 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu; iommu 333 arch/sparc/kernel/pci_sun4v.c iommu = dev->archdata.iommu; iommu 335 arch/sparc/kernel/pci_sun4v.c atu = iommu->atu; iommu 338 arch/sparc/kernel/pci_sun4v.c if (!iommu_use_atu(iommu, dvma)) { iommu 339 arch/sparc/kernel/pci_sun4v.c tbl = &iommu->tbl; iommu 358 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu; iommu 368 arch/sparc/kernel/pci_sun4v.c iommu = dev->archdata.iommu; iommu 369 arch/sparc/kernel/pci_sun4v.c atu = iommu->atu; iommu 379 arch/sparc/kernel/pci_sun4v.c if (!iommu_use_atu(iommu, mask)) iommu 380 arch/sparc/kernel/pci_sun4v.c tbl = &iommu->tbl; iommu 432 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu; iommu 446 arch/sparc/kernel/pci_sun4v.c iommu = dev->archdata.iommu; iommu 448 arch/sparc/kernel/pci_sun4v.c atu = iommu->atu; iommu 457 arch/sparc/kernel/pci_sun4v.c tbl = &iommu->tbl; iommu 477 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu; iommu 486 arch/sparc/kernel/pci_sun4v.c iommu = dev->archdata.iommu; iommu 487 arch/sparc/kernel/pci_sun4v.c if (nelems == 0 || !iommu) iommu 489 arch/sparc/kernel/pci_sun4v.c atu = iommu->atu; iommu 515 arch/sparc/kernel/pci_sun4v.c if (!iommu_use_atu(iommu, mask)) iommu 516 arch/sparc/kernel/pci_sun4v.c tbl = &iommu->tbl; iommu 631 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu; iommu 639 arch/sparc/kernel/pci_sun4v.c iommu = dev->archdata.iommu; iommu 641 arch/sparc/kernel/pci_sun4v.c atu = iommu->atu; iommu 660 arch/sparc/kernel/pci_sun4v.c tbl = &iommu->tbl; iommu 678 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu = dev->archdata.iommu; iommu 682 arch/sparc/kernel/pci_sun4v.c if (device_mask < iommu->dma_addr_mask) iommu 711 arch/sparc/kernel/pci_sun4v.c struct iommu_map_table *iommu) iommu 718 arch/sparc/kernel/pci_sun4v.c for (pool_nr = 0; pool_nr < iommu->nr_pools; pool_nr++) { iommu 719 arch/sparc/kernel/pci_sun4v.c pool = &(iommu->pools[pool_nr]); iommu 733 arch/sparc/kernel/pci_sun4v.c __set_bit(i, iommu->map); iommu 743 arch/sparc/kernel/pci_sun4v.c struct atu *atu = pbm->iommu->atu; iommu 804 arch/sparc/kernel/pci_sun4v.c struct atu *atu = pbm->iommu->atu; iommu 870 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu = pbm->iommu; iommu 891 arch/sparc/kernel/pci_sun4v.c spin_lock_init(&iommu->lock); iommu 892 arch/sparc/kernel/pci_sun4v.c iommu->ctx_lowest_free = 1; iommu 893 arch/sparc/kernel/pci_sun4v.c iommu->tbl.table_map_base = dma_offset; iommu 894 arch/sparc/kernel/pci_sun4v.c iommu->dma_addr_mask = dma_mask; iommu 899 arch/sparc/kernel/pci_sun4v.c iommu->tbl.map = kzalloc(sz, GFP_KERNEL); iommu 900 arch/sparc/kernel/pci_sun4v.c if (!iommu->tbl.map) { iommu 904 arch/sparc/kernel/pci_sun4v.c iommu_tbl_pool_init(&iommu->tbl, num_tsb_entries, IO_PAGE_SHIFT, iommu 908 arch/sparc/kernel/pci_sun4v.c sz = probe_existing_entries(pbm, &iommu->tbl); iommu 1207 arch/sparc/kernel/pci_sun4v.c if (pbm->iommu->atu) { iommu 1210 arch/sparc/kernel/pci_sun4v.c kfree(pbm->iommu->atu); iommu 1211 arch/sparc/kernel/pci_sun4v.c pbm->iommu->atu = NULL; iommu 1228 arch/sparc/kernel/pci_sun4v.c struct iommu *iommu; iommu 1295 arch/sparc/kernel/pci_sun4v.c iommu = kzalloc(sizeof(struct iommu), GFP_KERNEL); iommu 1296 arch/sparc/kernel/pci_sun4v.c if (!iommu) { iommu 1301 arch/sparc/kernel/pci_sun4v.c pbm->iommu = iommu; iommu 1302 arch/sparc/kernel/pci_sun4v.c iommu->atu = NULL; iommu 1308 arch/sparc/kernel/pci_sun4v.c iommu->atu = atu; iommu 1320 arch/sparc/kernel/pci_sun4v.c kfree(iommu->atu); iommu 1321 arch/sparc/kernel/pci_sun4v.c kfree(pbm->iommu); iommu 208 arch/sparc/kernel/psycho_common.c struct iommu *iommu = pbm->iommu; iommu 211 arch/sparc/kernel/psycho_common.c spin_lock_irqsave(&iommu->lock, flags); iommu 212 arch/sparc/kernel/psycho_common.c control = upa_readq(iommu->iommu_control); iommu 217 arch/sparc/kernel/psycho_common.c upa_writeq(control, iommu->iommu_control); iommu 247 arch/sparc/kernel/psycho_common.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 404 arch/sparc/kernel/psycho_common.c struct iommu *iommu = pbm->iommu; iommu 408 arch/sparc/kernel/psycho_common.c iommu->iommu_control = pbm->controller_regs + PSYCHO_IOMMU_CONTROL; iommu 409 arch/sparc/kernel/psycho_common.c iommu->iommu_tsbbase = pbm->controller_regs + PSYCHO_IOMMU_TSBBASE; iommu 410 arch/sparc/kernel/psycho_common.c iommu->iommu_flush = pbm->controller_regs + PSYCHO_IOMMU_FLUSH; iommu 411 arch/sparc/kernel/psycho_common.c iommu->iommu_tags = pbm->controller_regs + PSYCHO_IOMMU_TAG; iommu 412 arch/sparc/kernel/psycho_common.c iommu->write_complete_reg = (pbm->controller_regs + iommu 415 arch/sparc/kernel/psycho_common.c iommu->iommu_ctxflush = 0; iommu 417 arch/sparc/kernel/psycho_common.c control = upa_readq(iommu->iommu_control); iommu 419 arch/sparc/kernel/psycho_common.c upa_writeq(control, iommu->iommu_control); iommu 424 arch/sparc/kernel/psycho_common.c err = iommu_table_init(iommu, tsbsize * 1024 * 8, iommu 429 arch/sparc/kernel/psycho_common.c upa_writeq(__pa(iommu->page_table), iommu->iommu_tsbbase); iommu 431 arch/sparc/kernel/psycho_common.c control = upa_readq(iommu->iommu_control); iommu 446 arch/sparc/kernel/psycho_common.c upa_writeq(control, iommu->iommu_control); iommu 62 arch/sparc/kernel/sbus.c struct iommu *iommu = dev->archdata.iommu; iommu 77 arch/sparc/kernel/sbus.c cfg_reg = iommu->write_complete_reg; iommu 212 arch/sparc/kernel/sbus.c struct iommu *iommu = op->dev.archdata.iommu; iommu 213 arch/sparc/kernel/sbus.c unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; iommu 274 arch/sparc/kernel/sbus.c struct iommu *iommu = op->dev.archdata.iommu; iommu 275 arch/sparc/kernel/sbus.c unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; iommu 348 arch/sparc/kernel/sbus.c struct iommu *iommu = op->dev.archdata.iommu; iommu 349 arch/sparc/kernel/sbus.c unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; iommu 427 arch/sparc/kernel/sbus.c struct iommu *iommu = op->dev.archdata.iommu; iommu 432 arch/sparc/kernel/sbus.c reg_base = iommu->write_complete_reg - 0x2000UL; iommu 496 arch/sparc/kernel/sbus.c struct iommu *iommu = op->dev.archdata.iommu; iommu 497 arch/sparc/kernel/sbus.c unsigned long reg_base = iommu->write_complete_reg - 0x2000UL; iommu 534 arch/sparc/kernel/sbus.c control = upa_readq(iommu->write_complete_reg); iommu 536 arch/sparc/kernel/sbus.c upa_writeq(control, iommu->write_complete_reg); iommu 544 arch/sparc/kernel/sbus.c struct iommu *iommu; iommu 558 arch/sparc/kernel/sbus.c iommu = kzalloc(sizeof(*iommu), GFP_ATOMIC); iommu 560 arch/sparc/kernel/sbus.c if (!iommu || !strbuf) iommu 563 arch/sparc/kernel/sbus.c op->dev.archdata.iommu = iommu; iommu 568 arch/sparc/kernel/sbus.c iommu->iommu_control = reg_base + IOMMU_CONTROL; iommu 569 arch/sparc/kernel/sbus.c iommu->iommu_tsbbase = reg_base + IOMMU_TSBBASE; iommu 570 arch/sparc/kernel/sbus.c iommu->iommu_flush = reg_base + IOMMU_FLUSH; iommu 571 arch/sparc/kernel/sbus.c iommu->iommu_tags = iommu->iommu_control + iommu 591 arch/sparc/kernel/sbus.c iommu->write_complete_reg = regs + 0x2000UL; iommu 598 arch/sparc/kernel/sbus.c if (iommu_table_init(iommu, IO_TSB_SIZE, MAP_BASE, 0xffffffff, -1)) iommu 601 arch/sparc/kernel/sbus.c control = upa_readq(iommu->iommu_control); iommu 606 arch/sparc/kernel/sbus.c upa_writeq(control, iommu->iommu_control); iommu 614 arch/sparc/kernel/sbus.c dram = iommu->iommu_control + (IOMMU_DRAMDIAG - IOMMU_CONTROL); iommu 615 arch/sparc/kernel/sbus.c tag = iommu->iommu_control + (IOMMU_TAGDIAG - IOMMU_CONTROL); iommu 622 arch/sparc/kernel/sbus.c upa_readq(iommu->write_complete_reg); iommu 625 arch/sparc/kernel/sbus.c upa_writeq(__pa(iommu->page_table), iommu->iommu_tsbbase); iommu 647 arch/sparc/kernel/sbus.c control = upa_readq(iommu->write_complete_reg); iommu 649 arch/sparc/kernel/sbus.c upa_writeq(control, iommu->write_complete_reg); iommu 659 arch/sparc/kernel/sbus.c kfree(iommu); iommu 66 arch/sparc/mm/io-unit.c op->dev.archdata.iommu = iounit; iommu 148 arch/sparc/mm/io-unit.c struct iounit_struct *iounit = dev->archdata.iommu; iommu 164 arch/sparc/mm/io-unit.c struct iounit_struct *iounit = dev->archdata.iommu; iommu 182 arch/sparc/mm/io-unit.c struct iounit_struct *iounit = dev->archdata.iommu; iommu 197 arch/sparc/mm/io-unit.c struct iounit_struct *iounit = dev->archdata.iommu; iommu 217 arch/sparc/mm/io-unit.c struct iounit_struct *iounit = dev->archdata.iommu; iommu 59 arch/sparc/mm/iommu.c struct iommu_struct *iommu; iommu 66 arch/sparc/mm/iommu.c iommu = kmalloc(sizeof(struct iommu_struct), GFP_KERNEL); iommu 67 arch/sparc/mm/iommu.c if (!iommu) { iommu 72 arch/sparc/mm/iommu.c iommu->regs = of_ioremap(&op->resource[0], 0, PAGE_SIZE * 3, iommu 74 arch/sparc/mm/iommu.c if (!iommu->regs) { iommu 79 arch/sparc/mm/iommu.c control = sbus_readl(&iommu->regs->control); iommu 84 arch/sparc/mm/iommu.c sbus_writel(control, &iommu->regs->control); iommu 86 arch/sparc/mm/iommu.c iommu_invalidate(iommu->regs); iommu 87 arch/sparc/mm/iommu.c iommu->start = IOMMU_START; iommu 88 arch/sparc/mm/iommu.c iommu->end = 0xffffffff; iommu 101 arch/sparc/mm/iommu.c iommu->page_table = (iopte_t *)tmp; iommu 104 arch/sparc/mm/iommu.c memset(iommu->page_table, 0, IOMMU_NPTES*sizeof(iopte_t)); iommu 108 arch/sparc/mm/iommu.c base = __pa((unsigned long)iommu->page_table) >> 4; iommu 109 arch/sparc/mm/iommu.c sbus_writel(base, &iommu->regs->base); iommu 110 arch/sparc/mm/iommu.c iommu_invalidate(iommu->regs); iommu 118 arch/sparc/mm/iommu.c bit_map_init(&iommu->usemap, bitmap, IOMMU_NPTES); iommu 123 arch/sparc/mm/iommu.c iommu->usemap.num_colors = vac_cache_size >> PAGE_SHIFT; iommu 125 arch/sparc/mm/iommu.c iommu->usemap.num_colors = 1; iommu 128 arch/sparc/mm/iommu.c impl, vers, iommu->page_table, iommu 131 arch/sparc/mm/iommu.c op->dev.archdata.iommu = iommu; iommu 181 arch/sparc/mm/iommu.c struct iommu_struct *iommu = dev->archdata.iommu; iommu 208 arch/sparc/mm/iommu.c ioptex = bit_map_string_get(&iommu->usemap, npages, pfn); iommu 211 arch/sparc/mm/iommu.c busa0 = iommu->start + (ioptex << PAGE_SHIFT); iommu 212 arch/sparc/mm/iommu.c iopte0 = &iommu->page_table[ioptex]; iommu 218 arch/sparc/mm/iommu.c iommu_invalidate_page(iommu->regs, busa); iommu 277 arch/sparc/mm/iommu.c struct iommu_struct *iommu = dev->archdata.iommu; iommu 281 arch/sparc/mm/iommu.c unsigned int ioptex = (busa - iommu->start) >> PAGE_SHIFT; iommu 284 arch/sparc/mm/iommu.c BUG_ON(busa < iommu->start); iommu 286 arch/sparc/mm/iommu.c iopte_val(iommu->page_table[ioptex + i]) = 0; iommu 287 arch/sparc/mm/iommu.c iommu_invalidate_page(iommu->regs, busa); iommu 290 arch/sparc/mm/iommu.c bit_map_clear(&iommu->usemap, ioptex, npages); iommu 310 arch/sparc/mm/iommu.c struct iommu_struct *iommu = dev->archdata.iommu; iommu 312 arch/sparc/mm/iommu.c iopte_t *iopte = iommu->page_table; iommu 334 arch/sparc/mm/iommu.c ioptex = bit_map_string_get(&iommu->usemap, len >> PAGE_SHIFT, iommu 381 arch/sparc/mm/iommu.c iommu_invalidate(iommu->regs); iommu 383 arch/sparc/mm/iommu.c *dma_handle = iommu->start + (ioptex << PAGE_SHIFT); iommu 394 arch/sparc/mm/iommu.c struct iommu_struct *iommu = dev->archdata.iommu; iommu 395 arch/sparc/mm/iommu.c iopte_t *iopte = iommu->page_table; iommu 397 arch/sparc/mm/iommu.c int ioptex = (busa - iommu->start) >> PAGE_SHIFT; iommu 413 arch/sparc/mm/iommu.c iommu_invalidate(iommu->regs); iommu 414 arch/sparc/mm/iommu.c bit_map_clear(&iommu->usemap, ioptex, len >> PAGE_SHIFT); iommu 39 arch/x86/events/amd/iommu.c struct amd_iommu *iommu; iommu 235 arch/x86/events/amd/iommu.c return (container_of(ev->pmu, struct perf_amd_iommu, pmu))->iommu; iommu 240 arch/x86/events/amd/iommu.c struct amd_iommu *iommu = perf_event_2_iommu(ev); iommu 247 arch/x86/events/amd/iommu.c amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_COUNTER_SRC_REG, ®); iommu 253 arch/x86/events/amd/iommu.c amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_DEVID_MATCH_REG, ®); iommu 259 arch/x86/events/amd/iommu.c amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_PASID_MATCH_REG, ®); iommu 265 arch/x86/events/amd/iommu.c amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_DOMID_MATCH_REG, ®); iommu 270 arch/x86/events/amd/iommu.c struct amd_iommu *iommu = perf_event_2_iommu(event); iommu 274 arch/x86/events/amd/iommu.c amd_iommu_pc_set_reg(iommu, hwc->iommu_bank, hwc->iommu_cntr, iommu 290 arch/x86/events/amd/iommu.c struct amd_iommu *iommu = perf_event_2_iommu(event); iommu 292 arch/x86/events/amd/iommu.c amd_iommu_pc_set_reg(iommu, hwc->iommu_bank, hwc->iommu_cntr, iommu 305 arch/x86/events/amd/iommu.c struct amd_iommu *iommu = perf_event_2_iommu(event); iommu 307 arch/x86/events/amd/iommu.c if (amd_iommu_pc_get_reg(iommu, hwc->iommu_bank, hwc->iommu_cntr, iommu 424 arch/x86/events/amd/iommu.c perf_iommu->iommu = get_amd_iommu(idx); iommu 428 arch/x86/events/amd/iommu.c if (!perf_iommu->iommu || iommu 35 arch/x86/events/amd/iommu.h extern int amd_iommu_pc_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, iommu 38 arch/x86/events/amd/iommu.h extern int amd_iommu_pc_get_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, iommu 7 arch/x86/include/asm/device.h void *iommu; /* hook for IOMMU specific extension */ iommu 24 arch/x86/include/asm/pci.h void *iommu; /* IOMMU private data */ iommu 11 arch/x86/include/asm/pci_64.h return sd->iommu; iommu 17 arch/x86/include/asm/pci_64.h sd->iommu = val; iommu 160 arch/x86/include/asm/x86_init.h struct x86_init_iommu iommu; iommu 422 arch/x86/kernel/aperture_64.c x86_init.iommu.iommu_init = gart_iommu_init; iommu 1450 arch/x86/kernel/pci-calgary_64.c x86_init.iommu.iommu_init = calgary_iommu_init; iommu 132 arch/x86/kernel/pci-dma.c x86_init.iommu.iommu_init(); iommu 80 arch/x86/kernel/x86_init.c .iommu = { iommu 751 drivers/acpi/arm64/iort.c struct acpi_iort_node *iommu; iommu 754 drivers/acpi/arm64/iort.c iommu = iort_get_iort_node(fwspec->iommu_fwnode); iommu 756 drivers/acpi/arm64/iort.c if (iommu && (iommu->type == ACPI_IORT_NODE_SMMU_V3)) { iommu 759 drivers/acpi/arm64/iort.c smmu = (struct acpi_iort_smmu_v3 *)iommu->node_data; iommu 761 drivers/acpi/arm64/iort.c return iommu; iommu 1464 drivers/acpi/scan.c const struct iommu_ops *iommu; iommu 1474 drivers/acpi/scan.c iommu = iort_iommu_configure(dev); iommu 1475 drivers/acpi/scan.c if (IS_ERR(iommu) && PTR_ERR(iommu) == -EPROBE_DEFER) iommu 1479 drivers/acpi/scan.c iommu, attr == DEV_DMA_COHERENT); iommu 250 drivers/gpu/drm/arm/display/komeda/komeda_dev.c mdev->iommu = iommu_get_domain_for_dev(mdev->dev); iommu 251 drivers/gpu/drm/arm/display/komeda/komeda_dev.c if (!mdev->iommu) iommu 254 drivers/gpu/drm/arm/display/komeda/komeda_dev.c if (mdev->iommu && mdev->funcs->connect_iommu) { iommu 257 drivers/gpu/drm/arm/display/komeda/komeda_dev.c mdev->iommu = NULL; iommu 291 drivers/gpu/drm/arm/display/komeda/komeda_dev.c if (mdev->iommu && mdev->funcs->disconnect_iommu) iommu 293 drivers/gpu/drm/arm/display/komeda/komeda_dev.c mdev->iommu = NULL; iommu 190 drivers/gpu/drm/arm/display/komeda/komeda_dev.h struct iommu_domain *iommu; iommu 196 drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c kfb->is_va = mdev->iommu ? true : false; iommu 698 drivers/gpu/drm/i915/i915_gpu_error.c err_printf(m, "IOMMU enabled?: %d\n", error->iommu); iommu 1629 drivers/gpu/drm/i915/i915_gpu_error.c error->iommu = -1; iommu 1631 drivers/gpu/drm/i915/i915_gpu_error.c error->iommu = intel_iommu_gfx_mapped; iommu 46 drivers/gpu/drm/i915/i915_gpu_error.h int iommu; iommu 149 drivers/gpu/drm/i915/selftests/mock_gem_device.c pdev->dev.archdata.iommu = (void *)-1; iommu 517 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c if (config->iommu) { iommu 519 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c config->iommu, "mdp4"); iommu 577 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c config.iommu = iommu_domain_alloc(&platform_bus_type); iommu 578 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c if (config.iommu) { iommu 579 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c config.iommu->geometry.aperture_start = 0x1000; iommu 580 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c config.iommu->geometry.aperture_end = 0xffffffff; iommu 47 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.h struct iommu_domain *iommu; iommu 845 drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c config.iommu = iommu_domain_alloc(&platform_bus_type); iommu 846 drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c if (config.iommu) { iommu 847 drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c config.iommu->geometry.aperture_start = 0x1000; iommu 848 drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.c config.iommu->geometry.aperture_end = 0xffffffff; iommu 102 drivers/gpu/drm/msm/disp/mdp5/mdp5_cfg.h struct iommu_domain *iommu; iommu 726 drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c if (config->platform.iommu) { iommu 732 drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c config->platform.iommu, "mdp5"); iommu 819 drivers/gpu/drm/msm/msm_gpu.c struct iommu_domain *iommu = iommu_domain_alloc(&platform_bus_type); iommu 820 drivers/gpu/drm/msm/msm_gpu.c if (!iommu) iommu 823 drivers/gpu/drm/msm/msm_gpu.c iommu->geometry.aperture_start = va_start; iommu 824 drivers/gpu/drm/msm/msm_gpu.c iommu->geometry.aperture_end = va_end; iommu 828 drivers/gpu/drm/msm/msm_gpu.c aspace = msm_gem_address_space_create(&pdev->dev, iommu, "gpu"); iommu 830 drivers/gpu/drm/msm/msm_gpu.c iommu_domain_free(iommu); iommu 19 drivers/gpu/drm/msm/msm_iommu.c struct msm_iommu *iommu = arg; iommu 20 drivers/gpu/drm/msm/msm_iommu.c if (iommu->base.handler) iommu 21 drivers/gpu/drm/msm/msm_iommu.c return iommu->base.handler(iommu->base.arg, iova, flags); iommu 29 drivers/gpu/drm/msm/msm_iommu.c struct msm_iommu *iommu = to_msm_iommu(mmu); iommu 31 drivers/gpu/drm/msm/msm_iommu.c return iommu_attach_device(iommu->domain, mmu->dev); iommu 37 drivers/gpu/drm/msm/msm_iommu.c struct msm_iommu *iommu = to_msm_iommu(mmu); iommu 39 drivers/gpu/drm/msm/msm_iommu.c iommu_detach_device(iommu->domain, mmu->dev); iommu 45 drivers/gpu/drm/msm/msm_iommu.c struct msm_iommu *iommu = to_msm_iommu(mmu); iommu 48 drivers/gpu/drm/msm/msm_iommu.c ret = iommu_map_sg(iommu->domain, iova, sgt->sgl, sgt->nents, prot); iommu 56 drivers/gpu/drm/msm/msm_iommu.c struct msm_iommu *iommu = to_msm_iommu(mmu); iommu 58 drivers/gpu/drm/msm/msm_iommu.c iommu_unmap(iommu->domain, iova, len); iommu 65 drivers/gpu/drm/msm/msm_iommu.c struct msm_iommu *iommu = to_msm_iommu(mmu); iommu 66 drivers/gpu/drm/msm/msm_iommu.c iommu_domain_free(iommu->domain); iommu 67 drivers/gpu/drm/msm/msm_iommu.c kfree(iommu); iommu 80 drivers/gpu/drm/msm/msm_iommu.c struct msm_iommu *iommu; iommu 82 drivers/gpu/drm/msm/msm_iommu.c iommu = kzalloc(sizeof(*iommu), GFP_KERNEL); iommu 83 drivers/gpu/drm/msm/msm_iommu.c if (!iommu) iommu 86 drivers/gpu/drm/msm/msm_iommu.c iommu->domain = domain; iommu 87 drivers/gpu/drm/msm/msm_iommu.c msm_mmu_init(&iommu->base, dev, &funcs); iommu 88 drivers/gpu/drm/msm/msm_iommu.c iommu_set_fault_handler(domain, msm_fault_handler, iommu); iommu 90 drivers/gpu/drm/msm/msm_iommu.c return &iommu->base; iommu 29 drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h } iommu; iommu 124 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c mutex_init(&tdev->iommu.mutex); iommu 127 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c tdev->iommu.domain = iommu_domain_alloc(&platform_bus_type); iommu 128 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c if (!tdev->iommu.domain) iommu 136 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c pgsize_bitmap = tdev->iommu.domain->ops->pgsize_bitmap; iommu 138 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c tdev->iommu.pgshift = PAGE_SHIFT; iommu 140 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c tdev->iommu.pgshift = fls(pgsize_bitmap & ~PAGE_MASK); iommu 141 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c if (tdev->iommu.pgshift == 0) { iommu 145 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c tdev->iommu.pgshift -= 1; iommu 148 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c ret = iommu_attach_device(tdev->iommu.domain, dev); iommu 152 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c ret = nvkm_mm_init(&tdev->iommu.mm, 0, 0, iommu 154 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c tdev->iommu.pgshift, 1); iommu 162 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c iommu_detach_device(tdev->iommu.domain, dev); iommu 165 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c iommu_domain_free(tdev->iommu.domain); iommu 168 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c tdev->iommu.domain = NULL; iommu 169 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c tdev->iommu.pgshift = 0; iommu 178 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c if (tdev->iommu.domain) { iommu 179 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c nvkm_mm_fini(&tdev->iommu.mm); iommu 180 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c iommu_detach_device(tdev->iommu.domain, tdev->device.dev); iommu 181 drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c iommu_domain_free(tdev->iommu.domain); iommu 588 drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c if (tdev->iommu.domain) { iommu 589 drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c imem->mm_mutex = &tdev->iommu.mutex; iommu 590 drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c imem->mm = &tdev->iommu.mm; iommu 591 drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c imem->domain = tdev->iommu.domain; iommu 592 drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c imem->iommu_pgshift = tdev->iommu.pgshift; iommu 366 drivers/gpu/drm/rockchip/rockchip_drm_drv.c struct device_node *iommu; iommu 377 drivers/gpu/drm/rockchip/rockchip_drm_drv.c iommu = of_parse_phandle(port->parent, "iommus", 0); iommu 378 drivers/gpu/drm/rockchip/rockchip_drm_drv.c if (!iommu || !of_device_is_available(iommu->parent)) { iommu 391 drivers/gpu/drm/rockchip/rockchip_drm_drv.c of_node_put(iommu); iommu 286 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; iommu 295 drivers/iommu/amd_iommu.c if (translation_pre_enabled(iommu)) iommu 304 drivers/iommu/amd_iommu.c return dev->archdata.iommu; iommu 402 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 405 drivers/iommu/amd_iommu.c if (dev->archdata.iommu) iommu 412 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 428 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 430 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 431 drivers/iommu/amd_iommu.c dev_data->iommu_v2 = iommu->is_iommu_v2; iommu 434 drivers/iommu/amd_iommu.c dev->archdata.iommu = dev_data; iommu 436 drivers/iommu/amd_iommu.c iommu_device_link(&iommu->iommu, dev); iommu 458 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 465 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 474 drivers/iommu/amd_iommu.c iommu_device_unlink(&iommu->iommu, dev); iommu 558 drivers/iommu/amd_iommu.c static void iommu_print_event(struct amd_iommu *iommu, void *__evt) iommu 560 drivers/iommu/amd_iommu.c struct device *dev = iommu->iommu.dev; iommu 641 drivers/iommu/amd_iommu.c static void iommu_poll_events(struct amd_iommu *iommu) iommu 645 drivers/iommu/amd_iommu.c head = readl(iommu->mmio_base + MMIO_EVT_HEAD_OFFSET); iommu 646 drivers/iommu/amd_iommu.c tail = readl(iommu->mmio_base + MMIO_EVT_TAIL_OFFSET); iommu 649 drivers/iommu/amd_iommu.c iommu_print_event(iommu, iommu->evt_buf + head); iommu 653 drivers/iommu/amd_iommu.c writel(head, iommu->mmio_base + MMIO_EVT_HEAD_OFFSET); iommu 656 drivers/iommu/amd_iommu.c static void iommu_handle_ppr_entry(struct amd_iommu *iommu, u64 *raw) iommu 674 drivers/iommu/amd_iommu.c static void iommu_poll_ppr_log(struct amd_iommu *iommu) iommu 678 drivers/iommu/amd_iommu.c if (iommu->ppr_log == NULL) iommu 681 drivers/iommu/amd_iommu.c head = readl(iommu->mmio_base + MMIO_PPR_HEAD_OFFSET); iommu 682 drivers/iommu/amd_iommu.c tail = readl(iommu->mmio_base + MMIO_PPR_TAIL_OFFSET); iommu 689 drivers/iommu/amd_iommu.c raw = (u64 *)(iommu->ppr_log + head); iommu 714 drivers/iommu/amd_iommu.c writel(head, iommu->mmio_base + MMIO_PPR_HEAD_OFFSET); iommu 717 drivers/iommu/amd_iommu.c iommu_handle_ppr_entry(iommu, entry); iommu 720 drivers/iommu/amd_iommu.c head = readl(iommu->mmio_base + MMIO_PPR_HEAD_OFFSET); iommu 721 drivers/iommu/amd_iommu.c tail = readl(iommu->mmio_base + MMIO_PPR_TAIL_OFFSET); iommu 736 drivers/iommu/amd_iommu.c static void iommu_poll_ga_log(struct amd_iommu *iommu) iommu 740 drivers/iommu/amd_iommu.c if (iommu->ga_log == NULL) iommu 743 drivers/iommu/amd_iommu.c head = readl(iommu->mmio_base + MMIO_GA_HEAD_OFFSET); iommu 744 drivers/iommu/amd_iommu.c tail = readl(iommu->mmio_base + MMIO_GA_TAIL_OFFSET); iommu 750 drivers/iommu/amd_iommu.c raw = (u64 *)(iommu->ga_log + head); iommu 758 drivers/iommu/amd_iommu.c writel(head, iommu->mmio_base + MMIO_GA_HEAD_OFFSET); iommu 787 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = (struct amd_iommu *) data; iommu 788 drivers/iommu/amd_iommu.c u32 status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET); iommu 793 drivers/iommu/amd_iommu.c iommu->mmio_base + MMIO_STATUS_OFFSET); iommu 797 drivers/iommu/amd_iommu.c iommu_poll_events(iommu); iommu 802 drivers/iommu/amd_iommu.c iommu_poll_ppr_log(iommu); iommu 808 drivers/iommu/amd_iommu.c iommu_poll_ga_log(iommu); iommu 825 drivers/iommu/amd_iommu.c status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET); iommu 858 drivers/iommu/amd_iommu.c static void copy_cmd_to_buffer(struct amd_iommu *iommu, iommu 863 drivers/iommu/amd_iommu.c target = iommu->cmd_buf + iommu->cmd_buf_tail; iommu 865 drivers/iommu/amd_iommu.c iommu->cmd_buf_tail += sizeof(*cmd); iommu 866 drivers/iommu/amd_iommu.c iommu->cmd_buf_tail %= CMD_BUFFER_SIZE; iommu 872 drivers/iommu/amd_iommu.c writel(iommu->cmd_buf_tail, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET); iommu 1028 drivers/iommu/amd_iommu.c static int __iommu_queue_command_sync(struct amd_iommu *iommu, iommu 1035 drivers/iommu/amd_iommu.c next_tail = (iommu->cmd_buf_tail + sizeof(*cmd)) % CMD_BUFFER_SIZE; iommu 1037 drivers/iommu/amd_iommu.c left = (iommu->cmd_buf_head - next_tail) % CMD_BUFFER_SIZE; iommu 1051 drivers/iommu/amd_iommu.c iommu->cmd_buf_head = readl(iommu->mmio_base + iommu 1057 drivers/iommu/amd_iommu.c copy_cmd_to_buffer(iommu, cmd); iommu 1060 drivers/iommu/amd_iommu.c iommu->need_sync = sync; iommu 1065 drivers/iommu/amd_iommu.c static int iommu_queue_command_sync(struct amd_iommu *iommu, iommu 1072 drivers/iommu/amd_iommu.c raw_spin_lock_irqsave(&iommu->lock, flags); iommu 1073 drivers/iommu/amd_iommu.c ret = __iommu_queue_command_sync(iommu, cmd, sync); iommu 1074 drivers/iommu/amd_iommu.c raw_spin_unlock_irqrestore(&iommu->lock, flags); iommu 1079 drivers/iommu/amd_iommu.c static int iommu_queue_command(struct amd_iommu *iommu, struct iommu_cmd *cmd) iommu 1081 drivers/iommu/amd_iommu.c return iommu_queue_command_sync(iommu, cmd, true); iommu 1088 drivers/iommu/amd_iommu.c static int iommu_completion_wait(struct amd_iommu *iommu) iommu 1094 drivers/iommu/amd_iommu.c if (!iommu->need_sync) iommu 1098 drivers/iommu/amd_iommu.c build_completion_wait(&cmd, (u64)&iommu->cmd_sem); iommu 1100 drivers/iommu/amd_iommu.c raw_spin_lock_irqsave(&iommu->lock, flags); iommu 1102 drivers/iommu/amd_iommu.c iommu->cmd_sem = 0; iommu 1104 drivers/iommu/amd_iommu.c ret = __iommu_queue_command_sync(iommu, &cmd, false); iommu 1108 drivers/iommu/amd_iommu.c ret = wait_on_sem(&iommu->cmd_sem); iommu 1111 drivers/iommu/amd_iommu.c raw_spin_unlock_irqrestore(&iommu->lock, flags); iommu 1116 drivers/iommu/amd_iommu.c static int iommu_flush_dte(struct amd_iommu *iommu, u16 devid) iommu 1122 drivers/iommu/amd_iommu.c return iommu_queue_command(iommu, &cmd); iommu 1125 drivers/iommu/amd_iommu.c static void amd_iommu_flush_dte_all(struct amd_iommu *iommu) iommu 1130 drivers/iommu/amd_iommu.c iommu_flush_dte(iommu, devid); iommu 1132 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 1139 drivers/iommu/amd_iommu.c static void amd_iommu_flush_tlb_all(struct amd_iommu *iommu) iommu 1147 drivers/iommu/amd_iommu.c iommu_queue_command(iommu, &cmd); iommu 1150 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 1153 drivers/iommu/amd_iommu.c static void amd_iommu_flush_tlb_domid(struct amd_iommu *iommu, u32 dom_id) iommu 1159 drivers/iommu/amd_iommu.c iommu_queue_command(iommu, &cmd); iommu 1161 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 1164 drivers/iommu/amd_iommu.c static void amd_iommu_flush_all(struct amd_iommu *iommu) iommu 1170 drivers/iommu/amd_iommu.c iommu_queue_command(iommu, &cmd); iommu 1171 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 1174 drivers/iommu/amd_iommu.c static void iommu_flush_irt(struct amd_iommu *iommu, u16 devid) iommu 1180 drivers/iommu/amd_iommu.c iommu_queue_command(iommu, &cmd); iommu 1183 drivers/iommu/amd_iommu.c static void amd_iommu_flush_irt_all(struct amd_iommu *iommu) iommu 1188 drivers/iommu/amd_iommu.c iommu_flush_irt(iommu, devid); iommu 1190 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 1193 drivers/iommu/amd_iommu.c void iommu_flush_all_caches(struct amd_iommu *iommu) iommu 1195 drivers/iommu/amd_iommu.c if (iommu_feature(iommu, FEATURE_IA)) { iommu 1196 drivers/iommu/amd_iommu.c amd_iommu_flush_all(iommu); iommu 1198 drivers/iommu/amd_iommu.c amd_iommu_flush_dte_all(iommu); iommu 1199 drivers/iommu/amd_iommu.c amd_iommu_flush_irt_all(iommu); iommu 1200 drivers/iommu/amd_iommu.c amd_iommu_flush_tlb_all(iommu); iommu 1210 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 1215 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 1219 drivers/iommu/amd_iommu.c return iommu_queue_command(iommu, &cmd); iommu 1224 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = data; iommu 1226 drivers/iommu/amd_iommu.c return iommu_flush_dte(iommu, alias); iommu 1234 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 1238 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 1242 drivers/iommu/amd_iommu.c device_flush_dte_alias, iommu); iommu 1244 drivers/iommu/amd_iommu.c ret = iommu_flush_dte(iommu, dev_data->devid); iommu 1250 drivers/iommu/amd_iommu.c ret = iommu_flush_dte(iommu, alias); iommu 1972 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; iommu 1974 drivers/iommu/amd_iommu.c if (iommu_feature(iommu, FEATURE_EPHSUP)) iommu 2017 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; iommu 2019 drivers/iommu/amd_iommu.c amd_iommu_flush_tlb_domid(iommu, old_domid); iommu 2035 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 2038 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 2046 drivers/iommu/amd_iommu.c domain->dev_iommu[iommu->index] += 1; iommu 2059 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 2061 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 2079 drivers/iommu/amd_iommu.c domain->dev_iommu[iommu->index] -= 1; iommu 2266 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 2276 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 2304 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 2311 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 2321 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 2324 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 3035 drivers/iommu/amd_iommu.c struct iommu_dev_data *dev_data = dev->archdata.iommu; iommu 3036 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3049 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 3050 drivers/iommu/amd_iommu.c if (!iommu) iommu 3059 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 3067 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3073 drivers/iommu/amd_iommu.c dev_data = dev->archdata.iommu; iommu 3075 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 3076 drivers/iommu/amd_iommu.c if (!iommu) iommu 3093 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 3253 drivers/iommu/amd_iommu.c struct iommu_dev_data *dev_data = dev->archdata.iommu; iommu 3414 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3425 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 3430 drivers/iommu/amd_iommu.c ret = iommu_queue_command(iommu, &cmd); iommu 3584 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3588 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[dev_data->devid]; iommu 3593 drivers/iommu/amd_iommu.c return iommu_queue_command(iommu, &cmd); iommu 3734 drivers/iommu/amd_iommu.c static void set_remap_table_entry(struct amd_iommu *iommu, u16 devid, iommu 3739 drivers/iommu/amd_iommu.c iommu_flush_dte(iommu, devid); iommu 3759 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3765 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 3766 drivers/iommu/amd_iommu.c if (!iommu) iommu 3776 drivers/iommu/amd_iommu.c set_remap_table_entry(iommu, devid, table); iommu 3794 drivers/iommu/amd_iommu.c set_remap_table_entry(iommu, devid, table); iommu 3805 drivers/iommu/amd_iommu.c set_remap_table_entry(iommu, devid, table); iommu 3808 drivers/iommu/amd_iommu.c set_remap_table_entry(iommu, alias, table); iommu 3811 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 3829 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; iommu 3831 drivers/iommu/amd_iommu.c if (!iommu) iommu 3846 drivers/iommu/amd_iommu.c if (!iommu->irte_ops->is_allocated(table, index)) { iommu 3856 drivers/iommu/amd_iommu.c iommu->irte_ops->set_allocated(table, index - c + 1); iommu 3877 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3881 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 3882 drivers/iommu/amd_iommu.c if (iommu == NULL) iommu 3902 drivers/iommu/amd_iommu.c iommu_flush_irt(iommu, devid); iommu 3903 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 3911 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3914 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 3915 drivers/iommu/amd_iommu.c if (iommu == NULL) iommu 3926 drivers/iommu/amd_iommu.c iommu_flush_irt(iommu, devid); iommu 3927 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 3935 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 3938 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 3939 drivers/iommu/amd_iommu.c if (iommu == NULL) iommu 3947 drivers/iommu/amd_iommu.c iommu->irte_ops->clear_allocated(table, index); iommu 3950 drivers/iommu/amd_iommu.c iommu_flush_irt(iommu, devid); iommu 3951 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 4112 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 4120 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 4121 drivers/iommu/amd_iommu.c if (iommu) iommu 4122 drivers/iommu/amd_iommu.c return iommu->ir_domain; iommu 4130 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 4143 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 4144 drivers/iommu/amd_iommu.c if (iommu) iommu 4145 drivers/iommu/amd_iommu.c return iommu->msi_domain; iommu 4172 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; iommu 4174 drivers/iommu/amd_iommu.c if (!iommu) iommu 4179 drivers/iommu/amd_iommu.c iommu->irte_ops->prepare(data->entry, apic->irq_delivery_mode, iommu 4265 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 4275 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 4277 drivers/iommu/amd_iommu.c iommu->irte_ops->set_allocated(table, i); iommu 4365 drivers/iommu/amd_iommu.c static void amd_ir_update_irte(struct irq_data *irqd, struct amd_iommu *iommu, iommu 4375 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[irte_info->devid]; iommu 4378 drivers/iommu/amd_iommu.c if (!iommu) iommu 4381 drivers/iommu/amd_iommu.c iommu->irte_ops->activate(data->entry, irte_info->devid, iommu 4383 drivers/iommu/amd_iommu.c amd_ir_update_irte(irq_data, iommu, data, irte_info, cfg); iommu 4392 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[irte_info->devid]; iommu 4394 drivers/iommu/amd_iommu.c if (iommu) iommu 4395 drivers/iommu/amd_iommu.c iommu->irte_ops->deactivate(data->entry, irte_info->devid, iommu 4458 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 4485 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[irte_info->devid]; iommu 4486 drivers/iommu/amd_iommu.c if (iommu == NULL) iommu 4512 drivers/iommu/amd_iommu.c static void amd_ir_update_irte(struct irq_data *irqd, struct amd_iommu *iommu, iommu 4522 drivers/iommu/amd_iommu.c iommu->irte_ops->set_affinity(ir_data->entry, irte_info->devid, iommu 4534 drivers/iommu/amd_iommu.c struct amd_iommu *iommu = amd_iommu_rlookup_table[irte_info->devid]; iommu 4537 drivers/iommu/amd_iommu.c if (!iommu) iommu 4544 drivers/iommu/amd_iommu.c amd_ir_update_irte(data, iommu, ir_data, irte_info, cfg); iommu 4570 drivers/iommu/amd_iommu.c int amd_iommu_create_irq_domain(struct amd_iommu *iommu) iommu 4574 drivers/iommu/amd_iommu.c fn = irq_domain_alloc_named_id_fwnode("AMD-IR", iommu->index); iommu 4577 drivers/iommu/amd_iommu.c iommu->ir_domain = irq_domain_create_tree(fn, &amd_ir_domain_ops, iommu); iommu 4579 drivers/iommu/amd_iommu.c if (!iommu->ir_domain) iommu 4582 drivers/iommu/amd_iommu.c iommu->ir_domain->parent = arch_get_ir_parent_domain(); iommu 4583 drivers/iommu/amd_iommu.c iommu->msi_domain = arch_create_remap_msi_irq_domain(iommu->ir_domain, iommu 4585 drivers/iommu/amd_iommu.c iommu->index); iommu 4592 drivers/iommu/amd_iommu.c struct amd_iommu *iommu; iommu 4603 drivers/iommu/amd_iommu.c iommu = amd_iommu_rlookup_table[devid]; iommu 4604 drivers/iommu/amd_iommu.c if (!iommu) iommu 4626 drivers/iommu/amd_iommu.c iommu_flush_irt(iommu, devid); iommu 4627 drivers/iommu/amd_iommu.c iommu_completion_wait(iommu); iommu 21 drivers/iommu/amd_iommu_debugfs.c void amd_iommu_debugfs_setup(struct amd_iommu *iommu) iommu 31 drivers/iommu/amd_iommu_debugfs.c snprintf(name, MAX_NAME_LEN, "iommu%02d", iommu->index); iommu 32 drivers/iommu/amd_iommu_debugfs.c iommu->debugfs = debugfs_create_dir(name, amd_iommu_debugfs); iommu 259 drivers/iommu/amd_iommu_init.c bool translation_pre_enabled(struct amd_iommu *iommu) iommu 261 drivers/iommu/amd_iommu_init.c return (iommu->flags & AMD_IOMMU_FLAG_TRANS_PRE_ENABLED); iommu 265 drivers/iommu/amd_iommu_init.c static void clear_translation_pre_enabled(struct amd_iommu *iommu) iommu 267 drivers/iommu/amd_iommu_init.c iommu->flags &= ~AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; iommu 270 drivers/iommu/amd_iommu_init.c static void init_translation_status(struct amd_iommu *iommu) iommu 274 drivers/iommu/amd_iommu_init.c ctrl = readq(iommu->mmio_base + MMIO_CONTROL_OFFSET); iommu 276 drivers/iommu/amd_iommu_init.c iommu->flags |= AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; iommu 300 drivers/iommu/amd_iommu_init.c static u32 iommu_read_l1(struct amd_iommu *iommu, u16 l1, u8 address) iommu 304 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf8, (address | l1 << 16)); iommu 305 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, 0xfc, &val); iommu 309 drivers/iommu/amd_iommu_init.c static void iommu_write_l1(struct amd_iommu *iommu, u16 l1, u8 address, u32 val) iommu 311 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf8, (address | l1 << 16 | 1 << 31)); iommu 312 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xfc, val); iommu 313 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf8, (address | l1 << 16)); iommu 316 drivers/iommu/amd_iommu_init.c static u32 iommu_read_l2(struct amd_iommu *iommu, u8 address) iommu 320 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf0, address); iommu 321 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, 0xf4, &val); iommu 325 drivers/iommu/amd_iommu_init.c static void iommu_write_l2(struct amd_iommu *iommu, u8 address, u32 val) iommu 327 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf0, (address | 1 << 8)); iommu 328 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf4, val); iommu 344 drivers/iommu/amd_iommu_init.c static void iommu_set_exclusion_range(struct amd_iommu *iommu) iommu 346 drivers/iommu/amd_iommu_init.c u64 start = iommu->exclusion_start & PAGE_MASK; iommu 347 drivers/iommu/amd_iommu_init.c u64 limit = (start + iommu->exclusion_length - 1) & PAGE_MASK; iommu 350 drivers/iommu/amd_iommu_init.c if (!iommu->exclusion_start) iommu 354 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_EXCL_BASE_OFFSET, iommu 358 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_EXCL_LIMIT_OFFSET, iommu 363 drivers/iommu/amd_iommu_init.c static void iommu_set_device_table(struct amd_iommu *iommu) iommu 367 drivers/iommu/amd_iommu_init.c BUG_ON(iommu->mmio_base == NULL); iommu 371 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_DEV_TABLE_OFFSET, iommu 376 drivers/iommu/amd_iommu_init.c static void iommu_feature_enable(struct amd_iommu *iommu, u8 bit) iommu 380 drivers/iommu/amd_iommu_init.c ctrl = readq(iommu->mmio_base + MMIO_CONTROL_OFFSET); iommu 382 drivers/iommu/amd_iommu_init.c writeq(ctrl, iommu->mmio_base + MMIO_CONTROL_OFFSET); iommu 385 drivers/iommu/amd_iommu_init.c static void iommu_feature_disable(struct amd_iommu *iommu, u8 bit) iommu 389 drivers/iommu/amd_iommu_init.c ctrl = readq(iommu->mmio_base + MMIO_CONTROL_OFFSET); iommu 391 drivers/iommu/amd_iommu_init.c writeq(ctrl, iommu->mmio_base + MMIO_CONTROL_OFFSET); iommu 394 drivers/iommu/amd_iommu_init.c static void iommu_set_inv_tlb_timeout(struct amd_iommu *iommu, int timeout) iommu 398 drivers/iommu/amd_iommu_init.c ctrl = readq(iommu->mmio_base + MMIO_CONTROL_OFFSET); iommu 401 drivers/iommu/amd_iommu_init.c writeq(ctrl, iommu->mmio_base + MMIO_CONTROL_OFFSET); iommu 405 drivers/iommu/amd_iommu_init.c static void iommu_enable(struct amd_iommu *iommu) iommu 407 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_IOMMU_EN); iommu 410 drivers/iommu/amd_iommu_init.c static void iommu_disable(struct amd_iommu *iommu) iommu 412 drivers/iommu/amd_iommu_init.c if (!iommu->mmio_base) iommu 416 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_CMDBUF_EN); iommu 419 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_EVT_INT_EN); iommu 420 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_EVT_LOG_EN); iommu 423 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_GALOG_EN); iommu 424 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_GAINT_EN); iommu 427 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_IOMMU_EN); iommu 446 drivers/iommu/amd_iommu_init.c static void __init iommu_unmap_mmio_space(struct amd_iommu *iommu) iommu 448 drivers/iommu/amd_iommu_init.c if (iommu->mmio_base) iommu 449 drivers/iommu/amd_iommu_init.c iounmap(iommu->mmio_base); iommu 450 drivers/iommu/amd_iommu_init.c release_mem_region(iommu->mmio_phys, iommu->mmio_phys_end); iommu 596 drivers/iommu/amd_iommu_init.c static int __init alloc_command_buffer(struct amd_iommu *iommu) iommu 598 drivers/iommu/amd_iommu_init.c iommu->cmd_buf = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, iommu 601 drivers/iommu/amd_iommu_init.c return iommu->cmd_buf ? 0 : -ENOMEM; iommu 608 drivers/iommu/amd_iommu_init.c void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu) iommu 610 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_CMDBUF_EN); iommu 612 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_CMD_HEAD_OFFSET); iommu 613 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_CMD_TAIL_OFFSET); iommu 614 drivers/iommu/amd_iommu_init.c iommu->cmd_buf_head = 0; iommu 615 drivers/iommu/amd_iommu_init.c iommu->cmd_buf_tail = 0; iommu 617 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_CMDBUF_EN); iommu 624 drivers/iommu/amd_iommu_init.c static void iommu_enable_command_buffer(struct amd_iommu *iommu) iommu 628 drivers/iommu/amd_iommu_init.c BUG_ON(iommu->cmd_buf == NULL); iommu 630 drivers/iommu/amd_iommu_init.c entry = iommu_virt_to_phys(iommu->cmd_buf); iommu 633 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_CMD_BUF_OFFSET, iommu 636 drivers/iommu/amd_iommu_init.c amd_iommu_reset_cmd_buffer(iommu); iommu 642 drivers/iommu/amd_iommu_init.c static void iommu_disable_command_buffer(struct amd_iommu *iommu) iommu 644 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_CMDBUF_EN); iommu 647 drivers/iommu/amd_iommu_init.c static void __init free_command_buffer(struct amd_iommu *iommu) iommu 649 drivers/iommu/amd_iommu_init.c free_pages((unsigned long)iommu->cmd_buf, get_order(CMD_BUFFER_SIZE)); iommu 653 drivers/iommu/amd_iommu_init.c static int __init alloc_event_buffer(struct amd_iommu *iommu) iommu 655 drivers/iommu/amd_iommu_init.c iommu->evt_buf = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, iommu 658 drivers/iommu/amd_iommu_init.c return iommu->evt_buf ? 0 : -ENOMEM; iommu 661 drivers/iommu/amd_iommu_init.c static void iommu_enable_event_buffer(struct amd_iommu *iommu) iommu 665 drivers/iommu/amd_iommu_init.c BUG_ON(iommu->evt_buf == NULL); iommu 667 drivers/iommu/amd_iommu_init.c entry = iommu_virt_to_phys(iommu->evt_buf) | EVT_LEN_MASK; iommu 669 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_EVT_BUF_OFFSET, iommu 673 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_EVT_HEAD_OFFSET); iommu 674 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_EVT_TAIL_OFFSET); iommu 676 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_EVT_LOG_EN); iommu 682 drivers/iommu/amd_iommu_init.c static void iommu_disable_event_buffer(struct amd_iommu *iommu) iommu 684 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_EVT_LOG_EN); iommu 687 drivers/iommu/amd_iommu_init.c static void __init free_event_buffer(struct amd_iommu *iommu) iommu 689 drivers/iommu/amd_iommu_init.c free_pages((unsigned long)iommu->evt_buf, get_order(EVT_BUFFER_SIZE)); iommu 693 drivers/iommu/amd_iommu_init.c static int __init alloc_ppr_log(struct amd_iommu *iommu) iommu 695 drivers/iommu/amd_iommu_init.c iommu->ppr_log = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, iommu 698 drivers/iommu/amd_iommu_init.c return iommu->ppr_log ? 0 : -ENOMEM; iommu 701 drivers/iommu/amd_iommu_init.c static void iommu_enable_ppr_log(struct amd_iommu *iommu) iommu 705 drivers/iommu/amd_iommu_init.c if (iommu->ppr_log == NULL) iommu 708 drivers/iommu/amd_iommu_init.c entry = iommu_virt_to_phys(iommu->ppr_log) | PPR_LOG_SIZE_512; iommu 710 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_PPR_LOG_OFFSET, iommu 714 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_PPR_HEAD_OFFSET); iommu 715 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_PPR_TAIL_OFFSET); iommu 717 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_PPFLOG_EN); iommu 718 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_PPR_EN); iommu 721 drivers/iommu/amd_iommu_init.c static void __init free_ppr_log(struct amd_iommu *iommu) iommu 723 drivers/iommu/amd_iommu_init.c if (iommu->ppr_log == NULL) iommu 726 drivers/iommu/amd_iommu_init.c free_pages((unsigned long)iommu->ppr_log, get_order(PPR_LOG_SIZE)); iommu 729 drivers/iommu/amd_iommu_init.c static void free_ga_log(struct amd_iommu *iommu) iommu 732 drivers/iommu/amd_iommu_init.c if (iommu->ga_log) iommu 733 drivers/iommu/amd_iommu_init.c free_pages((unsigned long)iommu->ga_log, iommu 735 drivers/iommu/amd_iommu_init.c if (iommu->ga_log_tail) iommu 736 drivers/iommu/amd_iommu_init.c free_pages((unsigned long)iommu->ga_log_tail, iommu 741 drivers/iommu/amd_iommu_init.c static int iommu_ga_log_enable(struct amd_iommu *iommu) iommu 746 drivers/iommu/amd_iommu_init.c if (!iommu->ga_log) iommu 749 drivers/iommu/amd_iommu_init.c status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET); iommu 755 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_GAINT_EN); iommu 756 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_GALOG_EN); iommu 759 drivers/iommu/amd_iommu_init.c status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET); iommu 771 drivers/iommu/amd_iommu_init.c static int iommu_init_ga_log(struct amd_iommu *iommu) iommu 778 drivers/iommu/amd_iommu_init.c iommu->ga_log = (u8 *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, iommu 780 drivers/iommu/amd_iommu_init.c if (!iommu->ga_log) iommu 783 drivers/iommu/amd_iommu_init.c iommu->ga_log_tail = (u8 *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, iommu 785 drivers/iommu/amd_iommu_init.c if (!iommu->ga_log_tail) iommu 788 drivers/iommu/amd_iommu_init.c entry = iommu_virt_to_phys(iommu->ga_log) | GA_LOG_SIZE_512; iommu 789 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_GA_LOG_BASE_OFFSET, iommu 791 drivers/iommu/amd_iommu_init.c entry = (iommu_virt_to_phys(iommu->ga_log_tail) & iommu 793 drivers/iommu/amd_iommu_init.c memcpy_toio(iommu->mmio_base + MMIO_GA_LOG_TAIL_OFFSET, iommu 795 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_GA_HEAD_OFFSET); iommu 796 drivers/iommu/amd_iommu_init.c writel(0x00, iommu->mmio_base + MMIO_GA_TAIL_OFFSET); iommu 800 drivers/iommu/amd_iommu_init.c free_ga_log(iommu); iommu 805 drivers/iommu/amd_iommu_init.c static int iommu_init_ga(struct amd_iommu *iommu) iommu 814 drivers/iommu/amd_iommu_init.c !iommu_feature(iommu, FEATURE_GAM_VAPIC)) iommu 817 drivers/iommu/amd_iommu_init.c ret = iommu_init_ga_log(iommu); iommu 823 drivers/iommu/amd_iommu_init.c static void iommu_enable_xt(struct amd_iommu *iommu) iommu 832 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_XT_EN); iommu 836 drivers/iommu/amd_iommu_init.c static void iommu_enable_gt(struct amd_iommu *iommu) iommu 838 drivers/iommu/amd_iommu_init.c if (!iommu_feature(iommu, FEATURE_GT)) iommu 841 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_GT_EN); iommu 868 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 877 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 879 drivers/iommu/amd_iommu_init.c lo = readl(iommu->mmio_base + MMIO_DEV_TABLE_OFFSET); iommu 880 drivers/iommu/amd_iommu_init.c hi = readl(iommu->mmio_base + MMIO_DEV_TABLE_OFFSET + 4); iommu 884 drivers/iommu/amd_iommu_init.c iommu->index); iommu 892 drivers/iommu/amd_iommu_init.c iommu->index); iommu 974 drivers/iommu/amd_iommu_init.c static void __init set_iommu_for_device(struct amd_iommu *iommu, u16 devid) iommu 976 drivers/iommu/amd_iommu_init.c amd_iommu_rlookup_table[devid] = iommu; iommu 983 drivers/iommu/amd_iommu_init.c static void __init set_dev_entry_from_acpi(struct amd_iommu *iommu, iommu 1003 drivers/iommu/amd_iommu_init.c set_iommu_for_device(iommu, devid); iommu 1119 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; iommu 1124 drivers/iommu/amd_iommu_init.c if (iommu) { iommu 1131 drivers/iommu/amd_iommu_init.c iommu->exclusion_start = m->range_start; iommu 1132 drivers/iommu/amd_iommu_init.c iommu->exclusion_length = m->range_length; iommu 1140 drivers/iommu/amd_iommu_init.c static int __init init_iommu_from_acpi(struct amd_iommu *iommu, iommu 1162 drivers/iommu/amd_iommu_init.c iommu->acpi_flags = h->flags; iommu 1186 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, dev_i, e->flags, 0); iommu 1198 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, devid, e->flags, 0); iommu 1228 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, devid , e->flags, 0); iommu 1229 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, devid_to, e->flags, 0); iommu 1261 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, devid, e->flags, iommu 1289 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, iommu 1292 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, dev_i, iommu 1328 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, devid, e->flags, 0); iommu 1393 drivers/iommu/amd_iommu_init.c set_dev_entry_from_acpi(iommu, devid, e->flags, 0); iommu 1407 drivers/iommu/amd_iommu_init.c static void __init free_iommu_one(struct amd_iommu *iommu) iommu 1409 drivers/iommu/amd_iommu_init.c free_command_buffer(iommu); iommu 1410 drivers/iommu/amd_iommu_init.c free_event_buffer(iommu); iommu 1411 drivers/iommu/amd_iommu_init.c free_ppr_log(iommu); iommu 1412 drivers/iommu/amd_iommu_init.c free_ga_log(iommu); iommu 1413 drivers/iommu/amd_iommu_init.c iommu_unmap_mmio_space(iommu); iommu 1418 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu, *next; iommu 1420 drivers/iommu/amd_iommu_init.c for_each_iommu_safe(iommu, next) { iommu 1421 drivers/iommu/amd_iommu_init.c list_del(&iommu->list); iommu 1422 drivers/iommu/amd_iommu_init.c free_iommu_one(iommu); iommu 1423 drivers/iommu/amd_iommu_init.c kfree(iommu); iommu 1433 drivers/iommu/amd_iommu_init.c static void amd_iommu_erratum_746_workaround(struct amd_iommu *iommu) iommu 1442 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf0, 0x90); iommu 1443 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, 0xf4, &value); iommu 1449 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf0, 0x90 | (1 << 8)); iommu 1451 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf4, value | 0x4); iommu 1452 drivers/iommu/amd_iommu_init.c pci_info(iommu->dev, "Applying erratum 746 workaround\n"); iommu 1455 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, 0xf0, 0x90); iommu 1464 drivers/iommu/amd_iommu_init.c static void amd_iommu_ats_write_check_workaround(struct amd_iommu *iommu) iommu 1474 drivers/iommu/amd_iommu_init.c value = iommu_read_l2(iommu, 0x47); iommu 1480 drivers/iommu/amd_iommu_init.c iommu_write_l2(iommu, 0x47, value | BIT(0)); iommu 1482 drivers/iommu/amd_iommu_init.c pci_info(iommu->dev, "Applying ATS write check workaround\n"); iommu 1490 drivers/iommu/amd_iommu_init.c static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h) iommu 1494 drivers/iommu/amd_iommu_init.c raw_spin_lock_init(&iommu->lock); iommu 1497 drivers/iommu/amd_iommu_init.c list_add_tail(&iommu->list, &amd_iommu_list); iommu 1498 drivers/iommu/amd_iommu_init.c iommu->index = amd_iommus_present++; iommu 1500 drivers/iommu/amd_iommu_init.c if (unlikely(iommu->index >= MAX_IOMMUS)) { iommu 1506 drivers/iommu/amd_iommu_init.c amd_iommus[iommu->index] = iommu; iommu 1511 drivers/iommu/amd_iommu_init.c iommu->devid = h->devid; iommu 1512 drivers/iommu/amd_iommu_init.c iommu->cap_ptr = h->cap_ptr; iommu 1513 drivers/iommu/amd_iommu_init.c iommu->pci_seg = h->pci_seg; iommu 1514 drivers/iommu/amd_iommu_init.c iommu->mmio_phys = h->mmio_phys; iommu 1522 drivers/iommu/amd_iommu_init.c iommu->mmio_phys_end = MMIO_REG_END_OFFSET; iommu 1524 drivers/iommu/amd_iommu_init.c iommu->mmio_phys_end = MMIO_CNTR_CONF_OFFSET; iommu 1531 drivers/iommu/amd_iommu_init.c iommu->mmio_phys_end = MMIO_REG_END_OFFSET; iommu 1533 drivers/iommu/amd_iommu_init.c iommu->mmio_phys_end = MMIO_CNTR_CONF_OFFSET; iommu 1550 drivers/iommu/amd_iommu_init.c iommu->mmio_base = iommu_map_mmio_space(iommu->mmio_phys, iommu 1551 drivers/iommu/amd_iommu_init.c iommu->mmio_phys_end); iommu 1552 drivers/iommu/amd_iommu_init.c if (!iommu->mmio_base) iommu 1555 drivers/iommu/amd_iommu_init.c if (alloc_command_buffer(iommu)) iommu 1558 drivers/iommu/amd_iommu_init.c if (alloc_event_buffer(iommu)) iommu 1561 drivers/iommu/amd_iommu_init.c iommu->int_enabled = false; iommu 1563 drivers/iommu/amd_iommu_init.c init_translation_status(iommu); iommu 1564 drivers/iommu/amd_iommu_init.c if (translation_pre_enabled(iommu) && !is_kdump_kernel()) { iommu 1565 drivers/iommu/amd_iommu_init.c iommu_disable(iommu); iommu 1566 drivers/iommu/amd_iommu_init.c clear_translation_pre_enabled(iommu); iommu 1568 drivers/iommu/amd_iommu_init.c iommu->index); iommu 1571 drivers/iommu/amd_iommu_init.c amd_iommu_pre_enabled = translation_pre_enabled(iommu); iommu 1573 drivers/iommu/amd_iommu_init.c ret = init_iommu_from_acpi(iommu, h); iommu 1577 drivers/iommu/amd_iommu_init.c ret = amd_iommu_create_irq_domain(iommu); iommu 1585 drivers/iommu/amd_iommu_init.c amd_iommu_rlookup_table[iommu->devid] = NULL; iommu 1624 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 1642 drivers/iommu/amd_iommu_init.c iommu = kzalloc(sizeof(struct amd_iommu), GFP_KERNEL); iommu 1643 drivers/iommu/amd_iommu_init.c if (iommu == NULL) iommu 1646 drivers/iommu/amd_iommu_init.c ret = init_iommu_one(iommu, h); iommu 1658 drivers/iommu/amd_iommu_init.c static int iommu_pc_get_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, iommu 1661 drivers/iommu/amd_iommu_init.c static void init_iommu_perf_ctr(struct amd_iommu *iommu) iommu 1663 drivers/iommu/amd_iommu_init.c struct pci_dev *pdev = iommu->dev; iommu 1666 drivers/iommu/amd_iommu_init.c if (!iommu_feature(iommu, FEATURE_PC)) iommu 1672 drivers/iommu/amd_iommu_init.c if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, false)) iommu 1676 drivers/iommu/amd_iommu_init.c if ((iommu_pc_get_set_reg(iommu, 0, 0, 0, &val, true)) || iommu 1677 drivers/iommu/amd_iommu_init.c (iommu_pc_get_set_reg(iommu, 0, 0, 0, &val2, false)) || iommu 1682 drivers/iommu/amd_iommu_init.c if (iommu_pc_get_set_reg(iommu, 0, 0, 0, &save_reg, true)) iommu 1687 drivers/iommu/amd_iommu_init.c val = readl(iommu->mmio_base + MMIO_CNTR_CONF_OFFSET); iommu 1688 drivers/iommu/amd_iommu_init.c iommu->max_banks = (u8) ((val >> 12) & 0x3f); iommu 1689 drivers/iommu/amd_iommu_init.c iommu->max_counters = (u8) ((val >> 7) & 0xf); iommu 1703 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu = dev_to_amd_iommu(dev); iommu 1704 drivers/iommu/amd_iommu_init.c return sprintf(buf, "%x\n", iommu->cap); iommu 1712 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu = dev_to_amd_iommu(dev); iommu 1713 drivers/iommu/amd_iommu_init.c return sprintf(buf, "%llx\n", iommu->features); iommu 1733 drivers/iommu/amd_iommu_init.c static int __init iommu_init_pci(struct amd_iommu *iommu) iommu 1735 drivers/iommu/amd_iommu_init.c int cap_ptr = iommu->cap_ptr; iommu 1739 drivers/iommu/amd_iommu_init.c iommu->dev = pci_get_domain_bus_and_slot(0, PCI_BUS_NUM(iommu->devid), iommu 1740 drivers/iommu/amd_iommu_init.c iommu->devid & 0xff); iommu 1741 drivers/iommu/amd_iommu_init.c if (!iommu->dev) iommu 1745 drivers/iommu/amd_iommu_init.c iommu->dev->match_driver = false; iommu 1747 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, cap_ptr + MMIO_CAP_HDR_OFFSET, iommu 1748 drivers/iommu/amd_iommu_init.c &iommu->cap); iommu 1749 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, cap_ptr + MMIO_RANGE_OFFSET, iommu 1751 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, cap_ptr + MMIO_MISC_OFFSET, iommu 1754 drivers/iommu/amd_iommu_init.c if (!(iommu->cap & (1 << IOMMU_CAP_IOTLB))) iommu 1758 drivers/iommu/amd_iommu_init.c low = readl(iommu->mmio_base + MMIO_EXT_FEATURES); iommu 1759 drivers/iommu/amd_iommu_init.c high = readl(iommu->mmio_base + MMIO_EXT_FEATURES + 4); iommu 1761 drivers/iommu/amd_iommu_init.c iommu->features = ((u64)high << 32) | low; iommu 1763 drivers/iommu/amd_iommu_init.c if (iommu_feature(iommu, FEATURE_GT)) { iommu 1768 drivers/iommu/amd_iommu_init.c pasmax = iommu->features & FEATURE_PASID_MASK; iommu 1776 drivers/iommu/amd_iommu_init.c glxval = iommu->features & FEATURE_GLXVAL_MASK; iommu 1785 drivers/iommu/amd_iommu_init.c if (iommu_feature(iommu, FEATURE_GT) && iommu 1786 drivers/iommu/amd_iommu_init.c iommu_feature(iommu, FEATURE_PPR)) { iommu 1787 drivers/iommu/amd_iommu_init.c iommu->is_iommu_v2 = true; iommu 1791 drivers/iommu/amd_iommu_init.c if (iommu_feature(iommu, FEATURE_PPR) && alloc_ppr_log(iommu)) iommu 1794 drivers/iommu/amd_iommu_init.c ret = iommu_init_ga(iommu); iommu 1798 drivers/iommu/amd_iommu_init.c if (iommu->cap & (1UL << IOMMU_CAP_NPCACHE)) iommu 1801 drivers/iommu/amd_iommu_init.c init_iommu_perf_ctr(iommu); iommu 1803 drivers/iommu/amd_iommu_init.c if (is_rd890_iommu(iommu->dev)) { iommu 1806 drivers/iommu/amd_iommu_init.c iommu->root_pdev = iommu 1807 drivers/iommu/amd_iommu_init.c pci_get_domain_bus_and_slot(0, iommu->dev->bus->number, iommu 1815 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, iommu->cap_ptr + 4, iommu 1816 drivers/iommu/amd_iommu_init.c &iommu->stored_addr_lo); iommu 1817 drivers/iommu/amd_iommu_init.c pci_read_config_dword(iommu->dev, iommu->cap_ptr + 8, iommu 1818 drivers/iommu/amd_iommu_init.c &iommu->stored_addr_hi); iommu 1821 drivers/iommu/amd_iommu_init.c iommu->stored_addr_lo &= ~1; iommu 1825 drivers/iommu/amd_iommu_init.c iommu->stored_l1[i][j] = iommu_read_l1(iommu, i, j); iommu 1828 drivers/iommu/amd_iommu_init.c iommu->stored_l2[i] = iommu_read_l2(iommu, i); iommu 1831 drivers/iommu/amd_iommu_init.c amd_iommu_erratum_746_workaround(iommu); iommu 1832 drivers/iommu/amd_iommu_init.c amd_iommu_ats_write_check_workaround(iommu); iommu 1834 drivers/iommu/amd_iommu_init.c iommu_device_sysfs_add(&iommu->iommu, &iommu->dev->dev, iommu 1835 drivers/iommu/amd_iommu_init.c amd_iommu_groups, "ivhd%d", iommu->index); iommu 1836 drivers/iommu/amd_iommu_init.c iommu_device_set_ops(&iommu->iommu, &amd_iommu_ops); iommu 1837 drivers/iommu/amd_iommu_init.c iommu_device_register(&iommu->iommu); iommu 1839 drivers/iommu/amd_iommu_init.c return pci_enable_device(iommu->dev); iommu 1848 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 1850 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 1851 drivers/iommu/amd_iommu_init.c struct pci_dev *pdev = iommu->dev; iommu 1854 drivers/iommu/amd_iommu_init.c pci_info(pdev, "Found IOMMU cap 0x%hx\n", iommu->cap_ptr); iommu 1856 drivers/iommu/amd_iommu_init.c if (iommu->cap & (1 << IOMMU_CAP_EFR)) { iommu 1858 drivers/iommu/amd_iommu_init.c iommu->features); iommu 1860 drivers/iommu/amd_iommu_init.c if (iommu_feature(iommu, (1ULL << i))) iommu 1864 drivers/iommu/amd_iommu_init.c if (iommu->features & FEATURE_GAM_VAPIC) iommu 1881 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 1884 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 1885 drivers/iommu/amd_iommu_init.c ret = iommu_init_pci(iommu); iommu 1904 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) iommu 1905 drivers/iommu/amd_iommu_init.c iommu_flush_all_caches(iommu); iommu 1922 drivers/iommu/amd_iommu_init.c static int iommu_setup_msi(struct amd_iommu *iommu) iommu 1926 drivers/iommu/amd_iommu_init.c r = pci_enable_msi(iommu->dev); iommu 1930 drivers/iommu/amd_iommu_init.c r = request_threaded_irq(iommu->dev->irq, iommu 1934 drivers/iommu/amd_iommu_init.c iommu); iommu 1937 drivers/iommu/amd_iommu_init.c pci_disable_msi(iommu->dev); iommu 1941 drivers/iommu/amd_iommu_init.c iommu->int_enabled = true; iommu 1956 drivers/iommu/amd_iommu_init.c static void iommu_update_intcapxt(struct amd_iommu *iommu) iommu 1959 drivers/iommu/amd_iommu_init.c u32 addr_lo = readl(iommu->mmio_base + MMIO_MSI_ADDR_LO_OFFSET); iommu 1960 drivers/iommu/amd_iommu_init.c u32 addr_hi = readl(iommu->mmio_base + MMIO_MSI_ADDR_HI_OFFSET); iommu 1961 drivers/iommu/amd_iommu_init.c u32 data = readl(iommu->mmio_base + MMIO_MSI_DATA_OFFSET); iommu 1977 drivers/iommu/amd_iommu_init.c writeq(val, iommu->mmio_base + MMIO_INTCAPXT_EVT_OFFSET); iommu 1978 drivers/iommu/amd_iommu_init.c writeq(val, iommu->mmio_base + MMIO_INTCAPXT_PPR_OFFSET); iommu 1979 drivers/iommu/amd_iommu_init.c writeq(val, iommu->mmio_base + MMIO_INTCAPXT_GALOG_OFFSET); iommu 1985 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 1987 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 1988 drivers/iommu/amd_iommu_init.c if (iommu->dev->irq == notify->irq) { iommu 1989 drivers/iommu/amd_iommu_init.c iommu_update_intcapxt(iommu); iommu 1999 drivers/iommu/amd_iommu_init.c static int iommu_init_intcapxt(struct amd_iommu *iommu) iommu 2002 drivers/iommu/amd_iommu_init.c struct irq_affinity_notify *notify = &iommu->intcapxt_notify; iommu 2015 drivers/iommu/amd_iommu_init.c notify->irq = iommu->dev->irq; iommu 2018 drivers/iommu/amd_iommu_init.c ret = irq_set_affinity_notifier(iommu->dev->irq, notify); iommu 2021 drivers/iommu/amd_iommu_init.c iommu->devid, iommu->dev->irq); iommu 2025 drivers/iommu/amd_iommu_init.c iommu_update_intcapxt(iommu); iommu 2026 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_INTCAPXT_EN); iommu 2030 drivers/iommu/amd_iommu_init.c static int iommu_init_msi(struct amd_iommu *iommu) iommu 2034 drivers/iommu/amd_iommu_init.c if (iommu->int_enabled) iommu 2037 drivers/iommu/amd_iommu_init.c if (iommu->dev->msi_cap) iommu 2038 drivers/iommu/amd_iommu_init.c ret = iommu_setup_msi(iommu); iommu 2046 drivers/iommu/amd_iommu_init.c ret = iommu_init_intcapxt(iommu); iommu 2050 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_EVT_INT_EN); iommu 2052 drivers/iommu/amd_iommu_init.c if (iommu->ppr_log != NULL) iommu 2053 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_PPFINT_EN); iommu 2055 drivers/iommu/amd_iommu_init.c iommu_ga_log_enable(iommu); iommu 2204 drivers/iommu/amd_iommu_init.c static void iommu_init_flags(struct amd_iommu *iommu) iommu 2206 drivers/iommu/amd_iommu_init.c iommu->acpi_flags & IVHD_FLAG_HT_TUN_EN_MASK ? iommu 2207 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_HT_TUN_EN) : iommu 2208 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_HT_TUN_EN); iommu 2210 drivers/iommu/amd_iommu_init.c iommu->acpi_flags & IVHD_FLAG_PASSPW_EN_MASK ? iommu 2211 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_PASSPW_EN) : iommu 2212 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_PASSPW_EN); iommu 2214 drivers/iommu/amd_iommu_init.c iommu->acpi_flags & IVHD_FLAG_RESPASSPW_EN_MASK ? iommu 2215 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_RESPASSPW_EN) : iommu 2216 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_RESPASSPW_EN); iommu 2218 drivers/iommu/amd_iommu_init.c iommu->acpi_flags & IVHD_FLAG_ISOC_EN_MASK ? iommu 2219 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_ISOC_EN) : iommu 2220 drivers/iommu/amd_iommu_init.c iommu_feature_disable(iommu, CONTROL_ISOC_EN); iommu 2225 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_COHERENT_EN); iommu 2228 drivers/iommu/amd_iommu_init.c iommu_set_inv_tlb_timeout(iommu, CTRL_INV_TO_1S); iommu 2231 drivers/iommu/amd_iommu_init.c static void iommu_apply_resume_quirks(struct amd_iommu *iommu) iommu 2235 drivers/iommu/amd_iommu_init.c struct pci_dev *pdev = iommu->root_pdev; iommu 2238 drivers/iommu/amd_iommu_init.c if (!is_rd890_iommu(iommu->dev) || !pdev) iommu 2255 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, iommu->cap_ptr + 4, iommu 2256 drivers/iommu/amd_iommu_init.c iommu->stored_addr_lo); iommu 2257 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, iommu->cap_ptr + 8, iommu 2258 drivers/iommu/amd_iommu_init.c iommu->stored_addr_hi); iommu 2263 drivers/iommu/amd_iommu_init.c iommu_write_l1(iommu, i, j, iommu->stored_l1[i][j]); iommu 2267 drivers/iommu/amd_iommu_init.c iommu_write_l2(iommu, i, iommu->stored_l2[i]); iommu 2270 drivers/iommu/amd_iommu_init.c pci_write_config_dword(iommu->dev, iommu->cap_ptr + 4, iommu 2271 drivers/iommu/amd_iommu_init.c iommu->stored_addr_lo | 1); iommu 2274 drivers/iommu/amd_iommu_init.c static void iommu_enable_ga(struct amd_iommu *iommu) iommu 2279 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_GAM_EN); iommu 2282 drivers/iommu/amd_iommu_init.c iommu_feature_enable(iommu, CONTROL_GA_EN); iommu 2283 drivers/iommu/amd_iommu_init.c iommu->irte_ops = &irte_128_ops; iommu 2286 drivers/iommu/amd_iommu_init.c iommu->irte_ops = &irte_32_ops; iommu 2292 drivers/iommu/amd_iommu_init.c static void early_enable_iommu(struct amd_iommu *iommu) iommu 2294 drivers/iommu/amd_iommu_init.c iommu_disable(iommu); iommu 2295 drivers/iommu/amd_iommu_init.c iommu_init_flags(iommu); iommu 2296 drivers/iommu/amd_iommu_init.c iommu_set_device_table(iommu); iommu 2297 drivers/iommu/amd_iommu_init.c iommu_enable_command_buffer(iommu); iommu 2298 drivers/iommu/amd_iommu_init.c iommu_enable_event_buffer(iommu); iommu 2299 drivers/iommu/amd_iommu_init.c iommu_set_exclusion_range(iommu); iommu 2300 drivers/iommu/amd_iommu_init.c iommu_enable_ga(iommu); iommu 2301 drivers/iommu/amd_iommu_init.c iommu_enable_xt(iommu); iommu 2302 drivers/iommu/amd_iommu_init.c iommu_enable(iommu); iommu 2303 drivers/iommu/amd_iommu_init.c iommu_flush_all_caches(iommu); iommu 2316 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 2331 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 2332 drivers/iommu/amd_iommu_init.c clear_translation_pre_enabled(iommu); iommu 2333 drivers/iommu/amd_iommu_init.c early_enable_iommu(iommu); iommu 2340 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 2341 drivers/iommu/amd_iommu_init.c iommu_disable_command_buffer(iommu); iommu 2342 drivers/iommu/amd_iommu_init.c iommu_disable_event_buffer(iommu); iommu 2343 drivers/iommu/amd_iommu_init.c iommu_enable_command_buffer(iommu); iommu 2344 drivers/iommu/amd_iommu_init.c iommu_enable_event_buffer(iommu); iommu 2345 drivers/iommu/amd_iommu_init.c iommu_enable_ga(iommu); iommu 2346 drivers/iommu/amd_iommu_init.c iommu_enable_xt(iommu); iommu 2347 drivers/iommu/amd_iommu_init.c iommu_set_device_table(iommu); iommu 2348 drivers/iommu/amd_iommu_init.c iommu_flush_all_caches(iommu); iommu 2360 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 2362 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 2363 drivers/iommu/amd_iommu_init.c iommu_enable_ppr_log(iommu); iommu 2364 drivers/iommu/amd_iommu_init.c iommu_enable_gt(iommu); iommu 2377 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 2379 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) iommu 2380 drivers/iommu/amd_iommu_init.c iommu_disable(iommu); iommu 2395 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 2397 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) iommu 2398 drivers/iommu/amd_iommu_init.c iommu_apply_resume_quirks(iommu); iommu 2685 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 2688 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) { iommu 2689 drivers/iommu/amd_iommu_init.c ret = iommu_init_msi(iommu); iommu 2790 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 2793 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) iommu 2794 drivers/iommu/amd_iommu_init.c iommu_flush_all_caches(iommu); iommu 2866 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 2880 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) iommu 2881 drivers/iommu/amd_iommu_init.c amd_iommu_debugfs_setup(iommu); iommu 2927 drivers/iommu/amd_iommu_init.c x86_init.iommu.iommu_init = amd_iommu_init; iommu 3088 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu; iommu 3090 drivers/iommu/amd_iommu_init.c for_each_iommu(iommu) iommu 3092 drivers/iommu/amd_iommu_init.c return iommu; iommu 3106 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu = get_amd_iommu(idx); iommu 3108 drivers/iommu/amd_iommu_init.c if (iommu) iommu 3109 drivers/iommu/amd_iommu_init.c return iommu->max_banks; iommu 3123 drivers/iommu/amd_iommu_init.c struct amd_iommu *iommu = get_amd_iommu(idx); iommu 3125 drivers/iommu/amd_iommu_init.c if (iommu) iommu 3126 drivers/iommu/amd_iommu_init.c return iommu->max_counters; iommu 3132 drivers/iommu/amd_iommu_init.c static int iommu_pc_get_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, iommu 3143 drivers/iommu/amd_iommu_init.c if (WARN_ON(!iommu || (fxn > 0x28) || (fxn & 7))) iommu 3149 drivers/iommu/amd_iommu_init.c max_offset_lim = (u32)(((0x40 | iommu->max_banks) << 12) | iommu 3150 drivers/iommu/amd_iommu_init.c (iommu->max_counters << 8) | 0x28); iommu 3158 drivers/iommu/amd_iommu_init.c writel((u32)val, iommu->mmio_base + offset); iommu 3159 drivers/iommu/amd_iommu_init.c writel((val >> 32), iommu->mmio_base + offset + 4); iommu 3161 drivers/iommu/amd_iommu_init.c *value = readl(iommu->mmio_base + offset + 4); iommu 3163 drivers/iommu/amd_iommu_init.c *value |= readl(iommu->mmio_base + offset); iommu 3170 drivers/iommu/amd_iommu_init.c int amd_iommu_pc_get_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, u8 fxn, u64 *value) iommu 3172 drivers/iommu/amd_iommu_init.c if (!iommu) iommu 3175 drivers/iommu/amd_iommu_init.c return iommu_pc_get_set_reg(iommu, bank, cntr, fxn, value, false); iommu 3179 drivers/iommu/amd_iommu_init.c int amd_iommu_pc_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, u8 fxn, u64 *value) iommu 3181 drivers/iommu/amd_iommu_init.c if (!iommu) iommu 3184 drivers/iommu/amd_iommu_init.c return iommu_pc_get_set_reg(iommu, bank, cntr, fxn, value, true); iommu 18 drivers/iommu/amd_iommu_proto.h extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu); iommu 25 drivers/iommu/amd_iommu_proto.h void amd_iommu_debugfs_setup(struct amd_iommu *iommu); iommu 27 drivers/iommu/amd_iommu_proto.h static inline void amd_iommu_debugfs_setup(struct amd_iommu *iommu) {} iommu 55 drivers/iommu/amd_iommu_proto.h extern int amd_iommu_create_irq_domain(struct amd_iommu *iommu); iommu 57 drivers/iommu/amd_iommu_proto.h static inline int amd_iommu_create_irq_domain(struct amd_iommu *iommu) iommu 76 drivers/iommu/amd_iommu_proto.h static inline bool iommu_feature(struct amd_iommu *iommu, u64 f) iommu 78 drivers/iommu/amd_iommu_proto.h if (!(iommu->cap & (1 << IOMMU_CAP_EFR))) iommu 81 drivers/iommu/amd_iommu_proto.h return !!(iommu->features & f); iommu 94 drivers/iommu/amd_iommu_proto.h extern bool translation_pre_enabled(struct amd_iommu *iommu); iommu 429 drivers/iommu/amd_iommu_types.h #define for_each_iommu(iommu) \ iommu 430 drivers/iommu/amd_iommu_types.h list_for_each_entry((iommu), &amd_iommu_list, list) iommu 431 drivers/iommu/amd_iommu_types.h #define for_each_iommu_safe(iommu, next) \ iommu 432 drivers/iommu/amd_iommu_types.h list_for_each_entry_safe((iommu), (next), &amd_iommu_list, list) iommu 564 drivers/iommu/amd_iommu_types.h struct iommu_device iommu; iommu 607 drivers/iommu/amd_iommu_types.h struct iommu_device *iommu = dev_to_iommu_device(dev); iommu 609 drivers/iommu/amd_iommu_types.h return container_of(iommu, struct amd_iommu, iommu); iommu 759 drivers/iommu/amd_iommu_types.h extern void iommu_flush_all_caches(struct amd_iommu *iommu); iommu 629 drivers/iommu/arm-smmu-v3.c struct iommu_device iommu; iommu 2580 drivers/iommu/arm-smmu-v3.c iommu_device_link(&smmu->iommu, dev); iommu 2599 drivers/iommu/arm-smmu-v3.c iommu_device_unlink(&smmu->iommu, dev); iommu 3651 drivers/iommu/arm-smmu-v3.c ret = iommu_device_sysfs_add(&smmu->iommu, dev, NULL, iommu 3656 drivers/iommu/arm-smmu-v3.c iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops); iommu 3657 drivers/iommu/arm-smmu-v3.c iommu_device_set_fwnode(&smmu->iommu, dev->fwnode); iommu 3659 drivers/iommu/arm-smmu-v3.c ret = iommu_device_register(&smmu->iommu); iommu 1374 drivers/iommu/arm-smmu.c iommu_device_link(&smmu->iommu, dev); iommu 1405 drivers/iommu/arm-smmu.c iommu_device_unlink(&smmu->iommu, dev); iommu 2112 drivers/iommu/arm-smmu.c err = iommu_device_sysfs_add(&smmu->iommu, smmu->dev, NULL, iommu 2119 drivers/iommu/arm-smmu.c iommu_device_set_ops(&smmu->iommu, &arm_smmu_ops); iommu 2120 drivers/iommu/arm-smmu.c iommu_device_set_fwnode(&smmu->iommu, dev->fwnode); iommu 2122 drivers/iommu/arm-smmu.c err = iommu_device_register(&smmu->iommu); iommu 278 drivers/iommu/arm-smmu.h struct iommu_device iommu; iommu 65 drivers/iommu/dmar.c static void free_iommu(struct intel_iommu *iommu); iommu 440 drivers/iommu/dmar.c if (dmaru->iommu) iommu 441 drivers/iommu/dmar.c free_iommu(dmaru->iommu); iommu 480 drivers/iommu/dmar.c drhd->iommu->node = node; iommu 909 drivers/iommu/dmar.c x86_init.iommu.iommu_init = intel_iommu_init; iommu 921 drivers/iommu/dmar.c static void unmap_iommu(struct intel_iommu *iommu) iommu 923 drivers/iommu/dmar.c iounmap(iommu->reg); iommu 924 drivers/iommu/dmar.c release_mem_region(iommu->reg_phys, iommu->reg_size); iommu 935 drivers/iommu/dmar.c static int map_iommu(struct intel_iommu *iommu, u64 phys_addr) iommu 939 drivers/iommu/dmar.c iommu->reg_phys = phys_addr; iommu 940 drivers/iommu/dmar.c iommu->reg_size = VTD_PAGE_SIZE; iommu 942 drivers/iommu/dmar.c if (!request_mem_region(iommu->reg_phys, iommu->reg_size, iommu->name)) { iommu 948 drivers/iommu/dmar.c iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size); iommu 949 drivers/iommu/dmar.c if (!iommu->reg) { iommu 955 drivers/iommu/dmar.c iommu->cap = dmar_readq(iommu->reg + DMAR_CAP_REG); iommu 956 drivers/iommu/dmar.c iommu->ecap = dmar_readq(iommu->reg + DMAR_ECAP_REG); iommu 958 drivers/iommu/dmar.c if (iommu->cap == (uint64_t)-1 && iommu->ecap == (uint64_t)-1) { iommu 965 drivers/iommu/dmar.c map_size = max_t(int, ecap_max_iotlb_offset(iommu->ecap), iommu 966 drivers/iommu/dmar.c cap_max_fault_reg_offset(iommu->cap)); iommu 968 drivers/iommu/dmar.c if (map_size > iommu->reg_size) { iommu 969 drivers/iommu/dmar.c iounmap(iommu->reg); iommu 970 drivers/iommu/dmar.c release_mem_region(iommu->reg_phys, iommu->reg_size); iommu 971 drivers/iommu/dmar.c iommu->reg_size = map_size; iommu 972 drivers/iommu/dmar.c if (!request_mem_region(iommu->reg_phys, iommu->reg_size, iommu 973 drivers/iommu/dmar.c iommu->name)) { iommu 978 drivers/iommu/dmar.c iommu->reg = ioremap(iommu->reg_phys, iommu->reg_size); iommu 979 drivers/iommu/dmar.c if (!iommu->reg) { iommu 989 drivers/iommu/dmar.c iounmap(iommu->reg); iommu 991 drivers/iommu/dmar.c release_mem_region(iommu->reg_phys, iommu->reg_size); iommu 996 drivers/iommu/dmar.c static int dmar_alloc_seq_id(struct intel_iommu *iommu) iommu 998 drivers/iommu/dmar.c iommu->seq_id = find_first_zero_bit(dmar_seq_ids, iommu 1000 drivers/iommu/dmar.c if (iommu->seq_id >= DMAR_UNITS_SUPPORTED) { iommu 1001 drivers/iommu/dmar.c iommu->seq_id = -1; iommu 1003 drivers/iommu/dmar.c set_bit(iommu->seq_id, dmar_seq_ids); iommu 1004 drivers/iommu/dmar.c sprintf(iommu->name, "dmar%d", iommu->seq_id); iommu 1007 drivers/iommu/dmar.c return iommu->seq_id; iommu 1010 drivers/iommu/dmar.c static void dmar_free_seq_id(struct intel_iommu *iommu) iommu 1012 drivers/iommu/dmar.c if (iommu->seq_id >= 0) { iommu 1013 drivers/iommu/dmar.c clear_bit(iommu->seq_id, dmar_seq_ids); iommu 1014 drivers/iommu/dmar.c iommu->seq_id = -1; iommu 1020 drivers/iommu/dmar.c struct intel_iommu *iommu; iommu 1031 drivers/iommu/dmar.c iommu = kzalloc(sizeof(*iommu), GFP_KERNEL); iommu 1032 drivers/iommu/dmar.c if (!iommu) iommu 1035 drivers/iommu/dmar.c if (dmar_alloc_seq_id(iommu) < 0) { iommu 1041 drivers/iommu/dmar.c err = map_iommu(iommu, drhd->reg_base_addr); iommu 1043 drivers/iommu/dmar.c pr_err("Failed to map %s\n", iommu->name); iommu 1048 drivers/iommu/dmar.c agaw = iommu_calculate_agaw(iommu); iommu 1051 drivers/iommu/dmar.c iommu->seq_id); iommu 1054 drivers/iommu/dmar.c msagaw = iommu_calculate_max_sagaw(iommu); iommu 1057 drivers/iommu/dmar.c iommu->seq_id); iommu 1060 drivers/iommu/dmar.c iommu->agaw = agaw; iommu 1061 drivers/iommu/dmar.c iommu->msagaw = msagaw; iommu 1062 drivers/iommu/dmar.c iommu->segment = drhd->segment; iommu 1064 drivers/iommu/dmar.c iommu->node = NUMA_NO_NODE; iommu 1066 drivers/iommu/dmar.c ver = readl(iommu->reg + DMAR_VER_REG); iommu 1068 drivers/iommu/dmar.c iommu->name, iommu 1071 drivers/iommu/dmar.c (unsigned long long)iommu->cap, iommu 1072 drivers/iommu/dmar.c (unsigned long long)iommu->ecap); iommu 1075 drivers/iommu/dmar.c sts = readl(iommu->reg + DMAR_GSTS_REG); iommu 1077 drivers/iommu/dmar.c iommu->gcmd |= DMA_GCMD_IRE; iommu 1079 drivers/iommu/dmar.c iommu->gcmd |= DMA_GCMD_TE; iommu 1081 drivers/iommu/dmar.c iommu->gcmd |= DMA_GCMD_QIE; iommu 1083 drivers/iommu/dmar.c raw_spin_lock_init(&iommu->register_lock); iommu 1086 drivers/iommu/dmar.c err = iommu_device_sysfs_add(&iommu->iommu, NULL, iommu 1088 drivers/iommu/dmar.c "%s", iommu->name); iommu 1092 drivers/iommu/dmar.c iommu_device_set_ops(&iommu->iommu, &intel_iommu_ops); iommu 1094 drivers/iommu/dmar.c err = iommu_device_register(&iommu->iommu); iommu 1099 drivers/iommu/dmar.c drhd->iommu = iommu; iommu 1104 drivers/iommu/dmar.c unmap_iommu(iommu); iommu 1106 drivers/iommu/dmar.c dmar_free_seq_id(iommu); iommu 1108 drivers/iommu/dmar.c kfree(iommu); iommu 1112 drivers/iommu/dmar.c static void free_iommu(struct intel_iommu *iommu) iommu 1115 drivers/iommu/dmar.c iommu_device_unregister(&iommu->iommu); iommu 1116 drivers/iommu/dmar.c iommu_device_sysfs_remove(&iommu->iommu); iommu 1119 drivers/iommu/dmar.c if (iommu->irq) { iommu 1120 drivers/iommu/dmar.c if (iommu->pr_irq) { iommu 1121 drivers/iommu/dmar.c free_irq(iommu->pr_irq, iommu); iommu 1122 drivers/iommu/dmar.c dmar_free_hwirq(iommu->pr_irq); iommu 1123 drivers/iommu/dmar.c iommu->pr_irq = 0; iommu 1125 drivers/iommu/dmar.c free_irq(iommu->irq, iommu); iommu 1126 drivers/iommu/dmar.c dmar_free_hwirq(iommu->irq); iommu 1127 drivers/iommu/dmar.c iommu->irq = 0; iommu 1130 drivers/iommu/dmar.c if (iommu->qi) { iommu 1131 drivers/iommu/dmar.c free_page((unsigned long)iommu->qi->desc); iommu 1132 drivers/iommu/dmar.c kfree(iommu->qi->desc_status); iommu 1133 drivers/iommu/dmar.c kfree(iommu->qi); iommu 1136 drivers/iommu/dmar.c if (iommu->reg) iommu 1137 drivers/iommu/dmar.c unmap_iommu(iommu); iommu 1139 drivers/iommu/dmar.c dmar_free_seq_id(iommu); iommu 1140 drivers/iommu/dmar.c kfree(iommu); iommu 1156 drivers/iommu/dmar.c static int qi_check_fault(struct intel_iommu *iommu, int index) iommu 1160 drivers/iommu/dmar.c struct q_inval *qi = iommu->qi; iommu 1162 drivers/iommu/dmar.c int shift = qi_shift(iommu); iommu 1167 drivers/iommu/dmar.c fault = readl(iommu->reg + DMAR_FSTS_REG); iommu 1175 drivers/iommu/dmar.c head = readl(iommu->reg + DMAR_IQH_REG); iommu 1189 drivers/iommu/dmar.c writel(DMA_FSTS_IQE, iommu->reg + DMAR_FSTS_REG); iommu 1199 drivers/iommu/dmar.c head = readl(iommu->reg + DMAR_IQH_REG); iommu 1202 drivers/iommu/dmar.c tail = readl(iommu->reg + DMAR_IQT_REG); iommu 1205 drivers/iommu/dmar.c writel(DMA_FSTS_ITE, iommu->reg + DMAR_FSTS_REG); iommu 1218 drivers/iommu/dmar.c writel(DMA_FSTS_ICE, iommu->reg + DMAR_FSTS_REG); iommu 1227 drivers/iommu/dmar.c int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu) iommu 1230 drivers/iommu/dmar.c struct q_inval *qi = iommu->qi; iommu 1251 drivers/iommu/dmar.c shift = qi_shift(iommu); iommu 1274 drivers/iommu/dmar.c writel(qi->free_head << shift, iommu->reg + DMAR_IQT_REG); iommu 1284 drivers/iommu/dmar.c rc = qi_check_fault(iommu, index); iommu 1307 drivers/iommu/dmar.c void qi_global_iec(struct intel_iommu *iommu) iommu 1317 drivers/iommu/dmar.c qi_submit_sync(&desc, iommu); iommu 1320 drivers/iommu/dmar.c void qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm, iommu 1331 drivers/iommu/dmar.c qi_submit_sync(&desc, iommu); iommu 1334 drivers/iommu/dmar.c void qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, iommu 1342 drivers/iommu/dmar.c if (cap_write_drain(iommu->cap)) iommu 1345 drivers/iommu/dmar.c if (cap_read_drain(iommu->cap)) iommu 1355 drivers/iommu/dmar.c qi_submit_sync(&desc, iommu); iommu 1358 drivers/iommu/dmar.c void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 pfsid, iommu 1377 drivers/iommu/dmar.c qi_submit_sync(&desc, iommu); iommu 1383 drivers/iommu/dmar.c void dmar_disable_qi(struct intel_iommu *iommu) iommu 1389 drivers/iommu/dmar.c if (!ecap_qis(iommu->ecap)) iommu 1392 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flags); iommu 1394 drivers/iommu/dmar.c sts = readl(iommu->reg + DMAR_GSTS_REG); iommu 1401 drivers/iommu/dmar.c while ((readl(iommu->reg + DMAR_IQT_REG) != iommu 1402 drivers/iommu/dmar.c readl(iommu->reg + DMAR_IQH_REG)) && iommu 1406 drivers/iommu/dmar.c iommu->gcmd &= ~DMA_GCMD_QIE; iommu 1407 drivers/iommu/dmar.c writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); iommu 1409 drivers/iommu/dmar.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, iommu 1412 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flags); iommu 1418 drivers/iommu/dmar.c static void __dmar_enable_qi(struct intel_iommu *iommu) iommu 1422 drivers/iommu/dmar.c struct q_inval *qi = iommu->qi; iommu 1432 drivers/iommu/dmar.c if (ecap_smts(iommu->ecap)) iommu 1435 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flags); iommu 1438 drivers/iommu/dmar.c writel(0, iommu->reg + DMAR_IQT_REG); iommu 1440 drivers/iommu/dmar.c dmar_writeq(iommu->reg + DMAR_IQA_REG, val); iommu 1442 drivers/iommu/dmar.c iommu->gcmd |= DMA_GCMD_QIE; iommu 1443 drivers/iommu/dmar.c writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); iommu 1446 drivers/iommu/dmar.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, readl, (sts & DMA_GSTS_QIES), sts); iommu 1448 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flags); iommu 1456 drivers/iommu/dmar.c int dmar_enable_qi(struct intel_iommu *iommu) iommu 1461 drivers/iommu/dmar.c if (!ecap_qis(iommu->ecap)) iommu 1467 drivers/iommu/dmar.c if (iommu->qi) iommu 1470 drivers/iommu/dmar.c iommu->qi = kmalloc(sizeof(*qi), GFP_ATOMIC); iommu 1471 drivers/iommu/dmar.c if (!iommu->qi) iommu 1474 drivers/iommu/dmar.c qi = iommu->qi; iommu 1480 drivers/iommu/dmar.c desc_page = alloc_pages_node(iommu->node, GFP_ATOMIC | __GFP_ZERO, iommu 1481 drivers/iommu/dmar.c !!ecap_smts(iommu->ecap)); iommu 1484 drivers/iommu/dmar.c iommu->qi = NULL; iommu 1494 drivers/iommu/dmar.c iommu->qi = NULL; iommu 1500 drivers/iommu/dmar.c __dmar_enable_qi(iommu); iommu 1620 drivers/iommu/dmar.c static inline int dmar_msi_reg(struct intel_iommu *iommu, int irq) iommu 1622 drivers/iommu/dmar.c if (iommu->irq == irq) iommu 1624 drivers/iommu/dmar.c else if (iommu->pr_irq == irq) iommu 1632 drivers/iommu/dmar.c struct intel_iommu *iommu = irq_data_get_irq_handler_data(data); iommu 1633 drivers/iommu/dmar.c int reg = dmar_msi_reg(iommu, data->irq); iommu 1637 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1638 drivers/iommu/dmar.c writel(0, iommu->reg + reg); iommu 1640 drivers/iommu/dmar.c readl(iommu->reg + reg); iommu 1641 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1646 drivers/iommu/dmar.c struct intel_iommu *iommu = irq_data_get_irq_handler_data(data); iommu 1647 drivers/iommu/dmar.c int reg = dmar_msi_reg(iommu, data->irq); iommu 1651 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1652 drivers/iommu/dmar.c writel(DMA_FECTL_IM, iommu->reg + reg); iommu 1654 drivers/iommu/dmar.c readl(iommu->reg + reg); iommu 1655 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1660 drivers/iommu/dmar.c struct intel_iommu *iommu = irq_get_handler_data(irq); iommu 1661 drivers/iommu/dmar.c int reg = dmar_msi_reg(iommu, irq); iommu 1664 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1665 drivers/iommu/dmar.c writel(msg->data, iommu->reg + reg + 4); iommu 1666 drivers/iommu/dmar.c writel(msg->address_lo, iommu->reg + reg + 8); iommu 1667 drivers/iommu/dmar.c writel(msg->address_hi, iommu->reg + reg + 12); iommu 1668 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1673 drivers/iommu/dmar.c struct intel_iommu *iommu = irq_get_handler_data(irq); iommu 1674 drivers/iommu/dmar.c int reg = dmar_msi_reg(iommu, irq); iommu 1677 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1678 drivers/iommu/dmar.c msg->data = readl(iommu->reg + reg + 4); iommu 1679 drivers/iommu/dmar.c msg->address_lo = readl(iommu->reg + reg + 8); iommu 1680 drivers/iommu/dmar.c msg->address_hi = readl(iommu->reg + reg + 12); iommu 1681 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1684 drivers/iommu/dmar.c static int dmar_fault_do_one(struct intel_iommu *iommu, int type, iommu 1710 drivers/iommu/dmar.c struct intel_iommu *iommu = dev_id; iommu 1718 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1719 drivers/iommu/dmar.c fault_status = readl(iommu->reg + DMAR_FSTS_REG); iommu 1728 drivers/iommu/dmar.c reg = cap_fault_reg_offset(iommu->cap); iommu 1740 drivers/iommu/dmar.c data = readl(iommu->reg + reg + iommu 1750 drivers/iommu/dmar.c data = readl(iommu->reg + reg + iommu 1755 drivers/iommu/dmar.c guest_addr = dmar_readq(iommu->reg + reg + iommu 1761 drivers/iommu/dmar.c writel(DMA_FRCD_F, iommu->reg + reg + iommu 1764 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1768 drivers/iommu/dmar.c dmar_fault_do_one(iommu, type, fault_reason, iommu 1773 drivers/iommu/dmar.c if (fault_index >= cap_num_fault_regs(iommu->cap)) iommu 1775 drivers/iommu/dmar.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1779 drivers/iommu/dmar.c iommu->reg + DMAR_FSTS_REG); iommu 1782 drivers/iommu/dmar.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1786 drivers/iommu/dmar.c int dmar_set_interrupt(struct intel_iommu *iommu) iommu 1793 drivers/iommu/dmar.c if (iommu->irq) iommu 1796 drivers/iommu/dmar.c irq = dmar_alloc_hwirq(iommu->seq_id, iommu->node, iommu); iommu 1798 drivers/iommu/dmar.c iommu->irq = irq; iommu 1804 drivers/iommu/dmar.c ret = request_irq(irq, dmar_fault, IRQF_NO_THREAD, iommu->name, iommu); iommu 1813 drivers/iommu/dmar.c struct intel_iommu *iommu; iommu 1818 drivers/iommu/dmar.c for_each_iommu(iommu, drhd) { iommu 1820 drivers/iommu/dmar.c int ret = dmar_set_interrupt(iommu); iommu 1831 drivers/iommu/dmar.c dmar_fault(iommu->irq, iommu); iommu 1832 drivers/iommu/dmar.c fault_status = readl(iommu->reg + DMAR_FSTS_REG); iommu 1833 drivers/iommu/dmar.c writel(fault_status, iommu->reg + DMAR_FSTS_REG); iommu 1842 drivers/iommu/dmar.c int dmar_reenable_qi(struct intel_iommu *iommu) iommu 1844 drivers/iommu/dmar.c if (!ecap_qis(iommu->ecap)) iommu 1847 drivers/iommu/dmar.c if (!iommu->qi) iommu 1853 drivers/iommu/dmar.c dmar_disable_qi(iommu); iommu 1859 drivers/iommu/dmar.c __dmar_enable_qi(iommu); iommu 176 drivers/iommu/exynos-iommu.c #define has_sysmmu(dev) (dev->archdata.iommu != NULL) iommu 278 drivers/iommu/exynos-iommu.c struct iommu_device iommu; /* IOMMU core handle */ iommu 628 drivers/iommu/exynos-iommu.c ret = iommu_device_sysfs_add(&data->iommu, &pdev->dev, NULL, iommu 633 drivers/iommu/exynos-iommu.c iommu_device_set_ops(&data->iommu, &exynos_iommu_ops); iommu 634 drivers/iommu/exynos-iommu.c iommu_device_set_fwnode(&data->iommu, &dev->of_node->fwnode); iommu 636 drivers/iommu/exynos-iommu.c ret = iommu_device_register(&data->iommu); iommu 673 drivers/iommu/exynos-iommu.c struct exynos_iommu_owner *owner = master->archdata.iommu; iommu 691 drivers/iommu/exynos-iommu.c struct exynos_iommu_owner *owner = master->archdata.iommu; iommu 840 drivers/iommu/exynos-iommu.c struct exynos_iommu_owner *owner = dev->archdata.iommu; iommu 878 drivers/iommu/exynos-iommu.c struct exynos_iommu_owner *owner = dev->archdata.iommu; iommu 1240 drivers/iommu/exynos-iommu.c struct exynos_iommu_owner *owner = dev->archdata.iommu; iommu 1269 drivers/iommu/exynos-iommu.c struct exynos_iommu_owner *owner = dev->archdata.iommu; iommu 1294 drivers/iommu/exynos-iommu.c struct exynos_iommu_owner *owner = dev->archdata.iommu; iommu 1312 drivers/iommu/exynos-iommu.c dev->archdata.iommu = owner; iommu 112 drivers/iommu/intel-iommu-debugfs.c struct intel_iommu *iommu; iommu 118 drivers/iommu/intel-iommu-debugfs.c for_each_active_iommu(iommu, drhd) { iommu 126 drivers/iommu/intel-iommu-debugfs.c iommu->name, drhd->reg_base_addr); iommu 132 drivers/iommu/intel-iommu-debugfs.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 134 drivers/iommu/intel-iommu-debugfs.c value = dmar_readl(iommu->reg + iommu_regs_32[i].offset); iommu 140 drivers/iommu/intel-iommu-debugfs.c value = dmar_readq(iommu->reg + iommu_regs_64[i].offset); iommu 145 drivers/iommu/intel-iommu-debugfs.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 213 drivers/iommu/intel-iommu-debugfs.c static void ctx_tbl_walk(struct seq_file *m, struct intel_iommu *iommu, u16 bus) iommu 235 drivers/iommu/intel-iommu-debugfs.c context = iommu_context_addr(iommu, bus, devfn, 0); iommu 244 drivers/iommu/intel-iommu-debugfs.c tbl_wlk.rt_entry = &iommu->root_entry[bus]; iommu 248 drivers/iommu/intel-iommu-debugfs.c if (dmar_readq(iommu->reg + DMAR_RTADDR_REG) & DMA_RTADDR_SMT) { iommu 259 drivers/iommu/intel-iommu-debugfs.c static void root_tbl_walk(struct seq_file *m, struct intel_iommu *iommu) iommu 264 drivers/iommu/intel-iommu-debugfs.c spin_lock_irqsave(&iommu->lock, flags); iommu 265 drivers/iommu/intel-iommu-debugfs.c seq_printf(m, "IOMMU %s: Root Table Address: 0x%llx\n", iommu->name, iommu 266 drivers/iommu/intel-iommu-debugfs.c (u64)virt_to_phys(iommu->root_entry)); iommu 275 drivers/iommu/intel-iommu-debugfs.c ctx_tbl_walk(m, iommu, bus); iommu 277 drivers/iommu/intel-iommu-debugfs.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 283 drivers/iommu/intel-iommu-debugfs.c struct intel_iommu *iommu; iommu 287 drivers/iommu/intel-iommu-debugfs.c for_each_active_iommu(iommu, drhd) { iommu 288 drivers/iommu/intel-iommu-debugfs.c sts = dmar_readl(iommu->reg + DMAR_GSTS_REG); iommu 291 drivers/iommu/intel-iommu-debugfs.c iommu->name); iommu 294 drivers/iommu/intel-iommu-debugfs.c root_tbl_walk(m, iommu); iommu 305 drivers/iommu/intel-iommu-debugfs.c struct intel_iommu *iommu) iommu 315 drivers/iommu/intel-iommu-debugfs.c ri_entry = &iommu->ir_table->base[idx]; iommu 329 drivers/iommu/intel-iommu-debugfs.c struct intel_iommu *iommu) iommu 339 drivers/iommu/intel-iommu-debugfs.c pi_entry = &iommu->ir_table->base[idx]; iommu 361 drivers/iommu/intel-iommu-debugfs.c struct intel_iommu *iommu; iommu 366 drivers/iommu/intel-iommu-debugfs.c for_each_active_iommu(iommu, drhd) { iommu 367 drivers/iommu/intel-iommu-debugfs.c if (!ecap_ir_support(iommu->ecap)) iommu 371 drivers/iommu/intel-iommu-debugfs.c iommu->name); iommu 373 drivers/iommu/intel-iommu-debugfs.c sts = dmar_readl(iommu->reg + DMAR_GSTS_REG); iommu 374 drivers/iommu/intel-iommu-debugfs.c if (iommu->ir_table && (sts & DMA_GSTS_IRES)) { iommu 375 drivers/iommu/intel-iommu-debugfs.c irta = virt_to_phys(iommu->ir_table->base); iommu 377 drivers/iommu/intel-iommu-debugfs.c ir_tbl_remap_entry_show(m, iommu); iommu 386 drivers/iommu/intel-iommu-debugfs.c for_each_active_iommu(iommu, drhd) { iommu 387 drivers/iommu/intel-iommu-debugfs.c if (!cap_pi_support(iommu->cap)) iommu 391 drivers/iommu/intel-iommu-debugfs.c iommu->name); iommu 393 drivers/iommu/intel-iommu-debugfs.c if (iommu->ir_table) { iommu 394 drivers/iommu/intel-iommu-debugfs.c irta = virt_to_phys(iommu->ir_table->base); iommu 396 drivers/iommu/intel-iommu-debugfs.c ir_tbl_posted_entry_show(m, iommu); iommu 344 drivers/iommu/intel-iommu.c static void domain_context_clear(struct intel_iommu *iommu, iommu 347 drivers/iommu/intel-iommu.c struct intel_iommu *iommu); iommu 412 drivers/iommu/intel-iommu.c static bool translation_pre_enabled(struct intel_iommu *iommu) iommu 414 drivers/iommu/intel-iommu.c return (iommu->flags & VTD_FLAG_TRANS_PRE_ENABLED); iommu 417 drivers/iommu/intel-iommu.c static void clear_translation_pre_enabled(struct intel_iommu *iommu) iommu 419 drivers/iommu/intel-iommu.c iommu->flags &= ~VTD_FLAG_TRANS_PRE_ENABLED; iommu 422 drivers/iommu/intel-iommu.c static void init_translation_status(struct intel_iommu *iommu) iommu 426 drivers/iommu/intel-iommu.c gsts = readl(iommu->reg + DMAR_GSTS_REG); iommu 428 drivers/iommu/intel-iommu.c iommu->flags |= VTD_FLAG_TRANS_PRE_ENABLED; iommu 484 drivers/iommu/intel-iommu.c static struct dmar_domain* get_iommu_domain(struct intel_iommu *iommu, u16 did) iommu 489 drivers/iommu/intel-iommu.c domains = iommu->domains[idx]; iommu 496 drivers/iommu/intel-iommu.c static void set_iommu_domain(struct intel_iommu *iommu, u16 did, iommu 502 drivers/iommu/intel-iommu.c if (!iommu->domains[idx]) { iommu 504 drivers/iommu/intel-iommu.c iommu->domains[idx] = kzalloc(size, GFP_ATOMIC); iommu 507 drivers/iommu/intel-iommu.c domains = iommu->domains[idx]; iommu 563 drivers/iommu/intel-iommu.c static int __iommu_calculate_agaw(struct intel_iommu *iommu, int max_gaw) iommu 568 drivers/iommu/intel-iommu.c sagaw = cap_sagaw(iommu->cap); iommu 581 drivers/iommu/intel-iommu.c int iommu_calculate_max_sagaw(struct intel_iommu *iommu) iommu 583 drivers/iommu/intel-iommu.c return __iommu_calculate_agaw(iommu, MAX_AGAW_WIDTH); iommu 591 drivers/iommu/intel-iommu.c int iommu_calculate_agaw(struct intel_iommu *iommu) iommu 593 drivers/iommu/intel-iommu.c return __iommu_calculate_agaw(iommu, DEFAULT_DOMAIN_ADDRESS_WIDTH); iommu 617 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 635 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 636 drivers/iommu/intel-iommu.c if (!ecap_coherent(iommu->ecap)) { iommu 647 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 651 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 652 drivers/iommu/intel-iommu.c if (iommu != skip) { iommu 653 drivers/iommu/intel-iommu.c if (!ecap_sc_support(iommu->ecap)) { iommu 667 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 676 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 677 drivers/iommu/intel-iommu.c if (iommu != skip) { iommu 678 drivers/iommu/intel-iommu.c mask &= cap_super_page_val(iommu->cap); iommu 696 drivers/iommu/intel-iommu.c struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus, iommu 699 drivers/iommu/intel-iommu.c struct root_entry *root = &iommu->root_entry[bus]; iommu 704 drivers/iommu/intel-iommu.c if (sm_supported(iommu)) { iommu 718 drivers/iommu/intel-iommu.c context = alloc_pgtable_page(iommu->node); iommu 722 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, (void *)context, CONTEXT_SIZE); iommu 725 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, entry, sizeof(*entry)); iommu 732 drivers/iommu/intel-iommu.c return dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO; iommu 765 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 794 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 824 drivers/iommu/intel-iommu.c iommu = NULL; iommu 828 drivers/iommu/intel-iommu.c return iommu; iommu 838 drivers/iommu/intel-iommu.c static int device_context_mapped(struct intel_iommu *iommu, u8 bus, u8 devfn) iommu 844 drivers/iommu/intel-iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 845 drivers/iommu/intel-iommu.c context = iommu_context_addr(iommu, bus, devfn, 0); iommu 848 drivers/iommu/intel-iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 852 drivers/iommu/intel-iommu.c static void free_context_table(struct intel_iommu *iommu) iommu 858 drivers/iommu/intel-iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 859 drivers/iommu/intel-iommu.c if (!iommu->root_entry) { iommu 863 drivers/iommu/intel-iommu.c context = iommu_context_addr(iommu, i, 0, 0); iommu 867 drivers/iommu/intel-iommu.c if (!sm_supported(iommu)) iommu 870 drivers/iommu/intel-iommu.c context = iommu_context_addr(iommu, i, 0x80, 0); iommu 875 drivers/iommu/intel-iommu.c free_pgtable_page(iommu->root_entry); iommu 876 drivers/iommu/intel-iommu.c iommu->root_entry = NULL; iommu 878 drivers/iommu/intel-iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 1190 drivers/iommu/intel-iommu.c static int iommu_alloc_root_entry(struct intel_iommu *iommu) iommu 1195 drivers/iommu/intel-iommu.c root = (struct root_entry *)alloc_pgtable_page(iommu->node); iommu 1198 drivers/iommu/intel-iommu.c iommu->name); iommu 1202 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, root, ROOT_SIZE); iommu 1204 drivers/iommu/intel-iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 1205 drivers/iommu/intel-iommu.c iommu->root_entry = root; iommu 1206 drivers/iommu/intel-iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 1211 drivers/iommu/intel-iommu.c static void iommu_set_root_entry(struct intel_iommu *iommu) iommu 1217 drivers/iommu/intel-iommu.c addr = virt_to_phys(iommu->root_entry); iommu 1218 drivers/iommu/intel-iommu.c if (sm_supported(iommu)) iommu 1221 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1222 drivers/iommu/intel-iommu.c dmar_writeq(iommu->reg + DMAR_RTADDR_REG, addr); iommu 1224 drivers/iommu/intel-iommu.c writel(iommu->gcmd | DMA_GCMD_SRTP, iommu->reg + DMAR_GCMD_REG); iommu 1227 drivers/iommu/intel-iommu.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, iommu 1230 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1233 drivers/iommu/intel-iommu.c void iommu_flush_write_buffer(struct intel_iommu *iommu) iommu 1238 drivers/iommu/intel-iommu.c if (!rwbf_quirk && !cap_rwbf(iommu->cap)) iommu 1241 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1242 drivers/iommu/intel-iommu.c writel(iommu->gcmd | DMA_GCMD_WBF, iommu->reg + DMAR_GCMD_REG); iommu 1245 drivers/iommu/intel-iommu.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, iommu 1248 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1252 drivers/iommu/intel-iommu.c static void __iommu_flush_context(struct intel_iommu *iommu, iommu 1275 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1276 drivers/iommu/intel-iommu.c dmar_writeq(iommu->reg + DMAR_CCMD_REG, val); iommu 1279 drivers/iommu/intel-iommu.c IOMMU_WAIT_OP(iommu, DMAR_CCMD_REG, iommu 1282 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1286 drivers/iommu/intel-iommu.c static void __iommu_flush_iotlb(struct intel_iommu *iommu, u16 did, iommu 1289 drivers/iommu/intel-iommu.c int tlb_offset = ecap_iotlb_offset(iommu->ecap); iommu 1315 drivers/iommu/intel-iommu.c if (cap_read_drain(iommu->cap)) iommu 1318 drivers/iommu/intel-iommu.c if (cap_write_drain(iommu->cap)) iommu 1321 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1324 drivers/iommu/intel-iommu.c dmar_writeq(iommu->reg + tlb_offset, val_iva); iommu 1325 drivers/iommu/intel-iommu.c dmar_writeq(iommu->reg + tlb_offset + 8, val); iommu 1328 drivers/iommu/intel-iommu.c IOMMU_WAIT_OP(iommu, tlb_offset + 8, iommu 1331 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1343 drivers/iommu/intel-iommu.c iommu_support_dev_iotlb (struct dmar_domain *domain, struct intel_iommu *iommu, iommu 1350 drivers/iommu/intel-iommu.c if (!iommu->qi) iommu 1354 drivers/iommu/intel-iommu.c if (info->iommu == iommu && info->bus == bus && iommu 1402 drivers/iommu/intel-iommu.c if (!ecap_dit(info->iommu->ecap)) iommu 1480 drivers/iommu/intel-iommu.c qi_flush_dev_iotlb(info->iommu, sid, info->pfsid, iommu 1486 drivers/iommu/intel-iommu.c static void iommu_flush_iotlb_psi(struct intel_iommu *iommu, iommu 1493 drivers/iommu/intel-iommu.c u16 did = domain->iommu_did[iommu->seq_id]; iommu 1505 drivers/iommu/intel-iommu.c if (!cap_pgsel_inv(iommu->cap) || mask > cap_max_amask_val(iommu->cap)) iommu 1506 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, did, 0, 0, iommu 1509 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, did, addr | ih, mask, iommu 1516 drivers/iommu/intel-iommu.c if (!cap_caching_mode(iommu->cap) || !map) iommu 1521 drivers/iommu/intel-iommu.c static inline void __mapping_notify_one(struct intel_iommu *iommu, iommu 1526 drivers/iommu/intel-iommu.c if (cap_caching_mode(iommu->cap)) iommu 1527 drivers/iommu/intel-iommu.c iommu_flush_iotlb_psi(iommu, domain, pfn, pages, 0, 1); iommu 1529 drivers/iommu/intel-iommu.c iommu_flush_write_buffer(iommu); iommu 1540 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = g_iommus[idx]; iommu 1541 drivers/iommu/intel-iommu.c u16 did = domain->iommu_did[iommu->seq_id]; iommu 1543 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH); iommu 1545 drivers/iommu/intel-iommu.c if (!cap_caching_mode(iommu->cap)) iommu 1546 drivers/iommu/intel-iommu.c iommu_flush_dev_iotlb(get_iommu_domain(iommu, did), iommu 1551 drivers/iommu/intel-iommu.c static void iommu_disable_protect_mem_regions(struct intel_iommu *iommu) iommu 1556 drivers/iommu/intel-iommu.c if (!cap_plmr(iommu->cap) && !cap_phmr(iommu->cap)) iommu 1559 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flags); iommu 1560 drivers/iommu/intel-iommu.c pmen = readl(iommu->reg + DMAR_PMEN_REG); iommu 1562 drivers/iommu/intel-iommu.c writel(pmen, iommu->reg + DMAR_PMEN_REG); iommu 1565 drivers/iommu/intel-iommu.c IOMMU_WAIT_OP(iommu, DMAR_PMEN_REG, iommu 1568 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flags); iommu 1571 drivers/iommu/intel-iommu.c static void iommu_enable_translation(struct intel_iommu *iommu) iommu 1576 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flags); iommu 1577 drivers/iommu/intel-iommu.c iommu->gcmd |= DMA_GCMD_TE; iommu 1578 drivers/iommu/intel-iommu.c writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); iommu 1581 drivers/iommu/intel-iommu.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, iommu 1584 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flags); iommu 1587 drivers/iommu/intel-iommu.c static void iommu_disable_translation(struct intel_iommu *iommu) iommu 1592 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 1593 drivers/iommu/intel-iommu.c iommu->gcmd &= ~DMA_GCMD_TE; iommu 1594 drivers/iommu/intel-iommu.c writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); iommu 1597 drivers/iommu/intel-iommu.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, iommu 1600 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 1603 drivers/iommu/intel-iommu.c static int iommu_init_domains(struct intel_iommu *iommu) iommu 1608 drivers/iommu/intel-iommu.c ndomains = cap_ndoms(iommu->cap); iommu 1610 drivers/iommu/intel-iommu.c iommu->name, ndomains); iommu 1613 drivers/iommu/intel-iommu.c spin_lock_init(&iommu->lock); iommu 1615 drivers/iommu/intel-iommu.c iommu->domain_ids = kcalloc(nlongs, sizeof(unsigned long), GFP_KERNEL); iommu 1616 drivers/iommu/intel-iommu.c if (!iommu->domain_ids) { iommu 1618 drivers/iommu/intel-iommu.c iommu->name); iommu 1623 drivers/iommu/intel-iommu.c iommu->domains = kzalloc(size, GFP_KERNEL); iommu 1625 drivers/iommu/intel-iommu.c if (iommu->domains) { iommu 1627 drivers/iommu/intel-iommu.c iommu->domains[0] = kzalloc(size, GFP_KERNEL); iommu 1630 drivers/iommu/intel-iommu.c if (!iommu->domains || !iommu->domains[0]) { iommu 1632 drivers/iommu/intel-iommu.c iommu->name); iommu 1633 drivers/iommu/intel-iommu.c kfree(iommu->domain_ids); iommu 1634 drivers/iommu/intel-iommu.c kfree(iommu->domains); iommu 1635 drivers/iommu/intel-iommu.c iommu->domain_ids = NULL; iommu 1636 drivers/iommu/intel-iommu.c iommu->domains = NULL; iommu 1646 drivers/iommu/intel-iommu.c set_bit(0, iommu->domain_ids); iommu 1655 drivers/iommu/intel-iommu.c if (sm_supported(iommu)) iommu 1656 drivers/iommu/intel-iommu.c set_bit(FLPT_DEFAULT_DID, iommu->domain_ids); iommu 1661 drivers/iommu/intel-iommu.c static void disable_dmar_iommu(struct intel_iommu *iommu) iommu 1666 drivers/iommu/intel-iommu.c if (!iommu->domains || !iommu->domain_ids) iommu 1671 drivers/iommu/intel-iommu.c if (info->iommu != iommu) iommu 1681 drivers/iommu/intel-iommu.c if (iommu->gcmd & DMA_GCMD_TE) iommu 1682 drivers/iommu/intel-iommu.c iommu_disable_translation(iommu); iommu 1685 drivers/iommu/intel-iommu.c static void free_dmar_iommu(struct intel_iommu *iommu) iommu 1687 drivers/iommu/intel-iommu.c if ((iommu->domains) && (iommu->domain_ids)) { iommu 1688 drivers/iommu/intel-iommu.c int elems = ALIGN(cap_ndoms(iommu->cap), 256) >> 8; iommu 1692 drivers/iommu/intel-iommu.c kfree(iommu->domains[i]); iommu 1693 drivers/iommu/intel-iommu.c kfree(iommu->domains); iommu 1694 drivers/iommu/intel-iommu.c kfree(iommu->domain_ids); iommu 1695 drivers/iommu/intel-iommu.c iommu->domains = NULL; iommu 1696 drivers/iommu/intel-iommu.c iommu->domain_ids = NULL; iommu 1699 drivers/iommu/intel-iommu.c g_iommus[iommu->seq_id] = NULL; iommu 1702 drivers/iommu/intel-iommu.c free_context_table(iommu); iommu 1705 drivers/iommu/intel-iommu.c if (pasid_supported(iommu)) { iommu 1706 drivers/iommu/intel-iommu.c if (ecap_prs(iommu->ecap)) iommu 1707 drivers/iommu/intel-iommu.c intel_svm_finish_prq(iommu); iommu 1731 drivers/iommu/intel-iommu.c struct intel_iommu *iommu) iommu 1737 drivers/iommu/intel-iommu.c assert_spin_locked(&iommu->lock); iommu 1739 drivers/iommu/intel-iommu.c domain->iommu_refcnt[iommu->seq_id] += 1; iommu 1741 drivers/iommu/intel-iommu.c if (domain->iommu_refcnt[iommu->seq_id] == 1) { iommu 1742 drivers/iommu/intel-iommu.c ndomains = cap_ndoms(iommu->cap); iommu 1743 drivers/iommu/intel-iommu.c num = find_first_zero_bit(iommu->domain_ids, ndomains); iommu 1746 drivers/iommu/intel-iommu.c pr_err("%s: No free domain ids\n", iommu->name); iommu 1747 drivers/iommu/intel-iommu.c domain->iommu_refcnt[iommu->seq_id] -= 1; iommu 1752 drivers/iommu/intel-iommu.c set_bit(num, iommu->domain_ids); iommu 1753 drivers/iommu/intel-iommu.c set_iommu_domain(iommu, num, domain); iommu 1755 drivers/iommu/intel-iommu.c domain->iommu_did[iommu->seq_id] = num; iommu 1756 drivers/iommu/intel-iommu.c domain->nid = iommu->node; iommu 1765 drivers/iommu/intel-iommu.c struct intel_iommu *iommu) iommu 1770 drivers/iommu/intel-iommu.c assert_spin_locked(&iommu->lock); iommu 1772 drivers/iommu/intel-iommu.c domain->iommu_refcnt[iommu->seq_id] -= 1; iommu 1774 drivers/iommu/intel-iommu.c if (domain->iommu_refcnt[iommu->seq_id] == 0) { iommu 1775 drivers/iommu/intel-iommu.c num = domain->iommu_did[iommu->seq_id]; iommu 1776 drivers/iommu/intel-iommu.c clear_bit(num, iommu->domain_ids); iommu 1777 drivers/iommu/intel-iommu.c set_iommu_domain(iommu, num, NULL); iommu 1780 drivers/iommu/intel-iommu.c domain->iommu_did[iommu->seq_id] = 0; iommu 1847 drivers/iommu/intel-iommu.c static int domain_init(struct dmar_domain *domain, struct intel_iommu *iommu, iommu 1864 drivers/iommu/intel-iommu.c if (guest_width > cap_mgaw(iommu->cap)) iommu 1865 drivers/iommu/intel-iommu.c guest_width = cap_mgaw(iommu->cap); iommu 1869 drivers/iommu/intel-iommu.c sagaw = cap_sagaw(iommu->cap); iommu 1879 drivers/iommu/intel-iommu.c if (ecap_coherent(iommu->ecap)) iommu 1884 drivers/iommu/intel-iommu.c if (ecap_sc_support(iommu->ecap)) iommu 1890 drivers/iommu/intel-iommu.c domain->iommu_superpage = fls(cap_super_page_val(iommu->cap)); iommu 1894 drivers/iommu/intel-iommu.c domain->nid = iommu->node; iommu 1900 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, domain->pgd, PAGE_SIZE); iommu 1974 drivers/iommu/intel-iommu.c struct intel_iommu *iommu, iommu 1978 drivers/iommu/intel-iommu.c u16 did = domain->iommu_did[iommu->seq_id]; iommu 1996 drivers/iommu/intel-iommu.c spin_lock(&iommu->lock); iommu 1999 drivers/iommu/intel-iommu.c context = iommu_context_addr(iommu, bus, devfn, 1); iommu 2019 drivers/iommu/intel-iommu.c if (did_old < cap_ndoms(iommu->cap)) { iommu 2020 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, did_old, iommu 2024 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, did_old, 0, 0, iommu 2031 drivers/iommu/intel-iommu.c if (sm_supported(iommu)) { iommu 2048 drivers/iommu/intel-iommu.c info = iommu_support_dev_iotlb(domain, iommu, bus, devfn); iommu 2064 drivers/iommu/intel-iommu.c for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) { iommu 2071 drivers/iommu/intel-iommu.c info = iommu_support_dev_iotlb(domain, iommu, bus, devfn); iommu 2085 drivers/iommu/intel-iommu.c context_set_address_width(context, iommu->msagaw); iommu 2101 drivers/iommu/intel-iommu.c if (cap_caching_mode(iommu->cap)) { iommu 2102 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, 0, iommu 2106 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, did, 0, 0, DMA_TLB_DSI_FLUSH); iommu 2108 drivers/iommu/intel-iommu.c iommu_flush_write_buffer(iommu); iommu 2115 drivers/iommu/intel-iommu.c spin_unlock(&iommu->lock); iommu 2123 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 2132 drivers/iommu/intel-iommu.c return domain_context_mapping_one(data->domain, data->iommu, iommu 2142 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 2145 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 2146 drivers/iommu/intel-iommu.c if (!iommu) iommu 2152 drivers/iommu/intel-iommu.c return domain_context_mapping_one(domain, iommu, table, iommu 2156 drivers/iommu/intel-iommu.c data.iommu = iommu; iommu 2166 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = opaque; iommu 2168 drivers/iommu/intel-iommu.c return !device_context_mapped(iommu, PCI_BUS_NUM(alias), alias & 0xff); iommu 2173 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 2176 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 2177 drivers/iommu/intel-iommu.c if (!iommu) iommu 2181 drivers/iommu/intel-iommu.c return device_context_mapped(iommu, bus, devfn); iommu 2184 drivers/iommu/intel-iommu.c domain_context_mapped_cb, iommu); iommu 2343 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 2351 drivers/iommu/intel-iommu.c iommu = g_iommus[iommu_id]; iommu 2352 drivers/iommu/intel-iommu.c __mapping_notify_one(iommu, domain, iov_pfn, nr_pages); iommu 2372 drivers/iommu/intel-iommu.c static void domain_context_clear_one(struct intel_iommu *iommu, u8 bus, u8 devfn) iommu 2378 drivers/iommu/intel-iommu.c if (!iommu) iommu 2381 drivers/iommu/intel-iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 2382 drivers/iommu/intel-iommu.c context = iommu_context_addr(iommu, bus, devfn, 0); iommu 2384 drivers/iommu/intel-iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 2389 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, context, sizeof(*context)); iommu 2390 drivers/iommu/intel-iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 2391 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, iommu 2396 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, iommu 2409 drivers/iommu/intel-iommu.c info->dev->archdata.iommu = NULL; iommu 2431 drivers/iommu/intel-iommu.c if (unlikely(dev->archdata.iommu == DEFER_DEVICE_DOMAIN_INFO)) { iommu 2434 drivers/iommu/intel-iommu.c dev->archdata.iommu = NULL; iommu 2441 drivers/iommu/intel-iommu.c info = dev->archdata.iommu; iommu 2454 drivers/iommu/intel-iommu.c if (info->iommu->segment == segment && info->bus == bus && iommu 2461 drivers/iommu/intel-iommu.c static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu, iommu 2482 drivers/iommu/intel-iommu.c info->iommu = iommu; iommu 2492 drivers/iommu/intel-iommu.c ecap_dev_iotlb_support(iommu->ecap) && iommu 2497 drivers/iommu/intel-iommu.c if (sm_supported(iommu)) { iommu 2498 drivers/iommu/intel-iommu.c if (pasid_supported(iommu)) { iommu 2504 drivers/iommu/intel-iommu.c if (info->ats_supported && ecap_prs(iommu->ecap) && iommu 2516 drivers/iommu/intel-iommu.c info2 = dmar_search_domain_by_dev_info(iommu->segment, bus, devfn); iommu 2530 drivers/iommu/intel-iommu.c spin_lock(&iommu->lock); iommu 2531 drivers/iommu/intel-iommu.c ret = domain_attach_iommu(domain, iommu); iommu 2532 drivers/iommu/intel-iommu.c spin_unlock(&iommu->lock); iommu 2543 drivers/iommu/intel-iommu.c dev->archdata.iommu = info; iommu 2547 drivers/iommu/intel-iommu.c if (dev && dev_is_pci(dev) && sm_supported(iommu)) { iommu 2556 drivers/iommu/intel-iommu.c spin_lock(&iommu->lock); iommu 2558 drivers/iommu/intel-iommu.c ret = intel_pasid_setup_pass_through(iommu, domain, iommu 2561 drivers/iommu/intel-iommu.c ret = intel_pasid_setup_second_level(iommu, domain, iommu 2563 drivers/iommu/intel-iommu.c spin_unlock(&iommu->lock); iommu 2590 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 2595 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 2596 drivers/iommu/intel-iommu.c if (!iommu) iommu 2609 drivers/iommu/intel-iommu.c iommu = info->iommu; iommu 2623 drivers/iommu/intel-iommu.c if (domain_init(domain, iommu, gaw)) { iommu 2635 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 2640 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 2641 drivers/iommu/intel-iommu.c if (!iommu) iommu 2653 drivers/iommu/intel-iommu.c tmp = dmar_insert_one_dev_info(iommu, PCI_BUS_NUM(dma_alias), iommu 2661 drivers/iommu/intel-iommu.c tmp = dmar_insert_one_dev_info(iommu, bus, devfn, dev, domain); iommu 2791 drivers/iommu/intel-iommu.c info = dev->archdata.iommu; iommu 2801 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 2804 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 2805 drivers/iommu/intel-iommu.c if (!iommu) iommu 2808 drivers/iommu/intel-iommu.c ndomain = dmar_insert_one_dev_info(iommu, bus, devfn, dev, domain); iommu 2955 drivers/iommu/intel-iommu.c static void intel_iommu_init_qi(struct intel_iommu *iommu) iommu 2963 drivers/iommu/intel-iommu.c if (!iommu->qi) { iommu 2967 drivers/iommu/intel-iommu.c dmar_fault(-1, iommu); iommu 2972 drivers/iommu/intel-iommu.c dmar_disable_qi(iommu); iommu 2975 drivers/iommu/intel-iommu.c if (dmar_enable_qi(iommu)) { iommu 2979 drivers/iommu/intel-iommu.c iommu->flush.flush_context = __iommu_flush_context; iommu 2980 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb = __iommu_flush_iotlb; iommu 2982 drivers/iommu/intel-iommu.c iommu->name); iommu 2984 drivers/iommu/intel-iommu.c iommu->flush.flush_context = qi_flush_context; iommu 2985 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb = qi_flush_iotlb; iommu 2986 drivers/iommu/intel-iommu.c pr_info("%s: Using Queued invalidation\n", iommu->name); iommu 2990 drivers/iommu/intel-iommu.c static int copy_context_table(struct intel_iommu *iommu, iommu 3012 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, new_ce, iommu 3042 drivers/iommu/intel-iommu.c new_ce = alloc_pgtable_page(iommu->node); iommu 3056 drivers/iommu/intel-iommu.c if (did >= 0 && did < cap_ndoms(iommu->cap)) iommu 3057 drivers/iommu/intel-iommu.c set_bit(did, iommu->domain_ids); iommu 3083 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, new_ce, VTD_PAGE_SIZE); iommu 3092 drivers/iommu/intel-iommu.c static int copy_translation_tables(struct intel_iommu *iommu) iommu 3103 drivers/iommu/intel-iommu.c rtaddr_reg = dmar_readq(iommu->reg + DMAR_RTADDR_REG); iommu 3105 drivers/iommu/intel-iommu.c new_ext = !!ecap_ecs(iommu->ecap); iommu 3132 drivers/iommu/intel-iommu.c ret = copy_context_table(iommu, &old_rt[bus], iommu 3136 drivers/iommu/intel-iommu.c iommu->name, bus); iommu 3141 drivers/iommu/intel-iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 3150 drivers/iommu/intel-iommu.c iommu->root_entry[bus].lo = val; iommu 3157 drivers/iommu/intel-iommu.c iommu->root_entry[bus].hi = val; iommu 3160 drivers/iommu/intel-iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 3164 drivers/iommu/intel-iommu.c __iommu_flush_cache(iommu, iommu->root_entry, PAGE_SIZE); iommu 3177 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 3211 drivers/iommu/intel-iommu.c for_each_iommu(iommu, drhd) { iommu 3213 drivers/iommu/intel-iommu.c iommu_disable_translation(iommu); iommu 3222 drivers/iommu/intel-iommu.c if (pasid_supported(iommu)) { iommu 3223 drivers/iommu/intel-iommu.c u32 temp = 2 << ecap_pss(iommu->ecap); iommu 3229 drivers/iommu/intel-iommu.c g_iommus[iommu->seq_id] = iommu; iommu 3231 drivers/iommu/intel-iommu.c intel_iommu_init_qi(iommu); iommu 3233 drivers/iommu/intel-iommu.c ret = iommu_init_domains(iommu); iommu 3237 drivers/iommu/intel-iommu.c init_translation_status(iommu); iommu 3239 drivers/iommu/intel-iommu.c if (translation_pre_enabled(iommu) && !is_kdump_kernel()) { iommu 3240 drivers/iommu/intel-iommu.c iommu_disable_translation(iommu); iommu 3241 drivers/iommu/intel-iommu.c clear_translation_pre_enabled(iommu); iommu 3243 drivers/iommu/intel-iommu.c iommu->name); iommu 3251 drivers/iommu/intel-iommu.c ret = iommu_alloc_root_entry(iommu); iommu 3255 drivers/iommu/intel-iommu.c if (translation_pre_enabled(iommu)) { iommu 3258 drivers/iommu/intel-iommu.c ret = copy_translation_tables(iommu); iommu 3270 drivers/iommu/intel-iommu.c iommu->name); iommu 3271 drivers/iommu/intel-iommu.c iommu_disable_translation(iommu); iommu 3272 drivers/iommu/intel-iommu.c clear_translation_pre_enabled(iommu); iommu 3275 drivers/iommu/intel-iommu.c iommu->name); iommu 3279 drivers/iommu/intel-iommu.c if (!ecap_pass_through(iommu->ecap)) iommu 3282 drivers/iommu/intel-iommu.c if (pasid_supported(iommu)) iommu 3283 drivers/iommu/intel-iommu.c intel_svm_init(iommu); iommu 3292 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 3293 drivers/iommu/intel-iommu.c iommu_flush_write_buffer(iommu); iommu 3294 drivers/iommu/intel-iommu.c iommu_set_root_entry(iommu); iommu 3295 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL); iommu 3296 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH); iommu 3322 drivers/iommu/intel-iommu.c for_each_iommu(iommu, drhd) { iommu 3329 drivers/iommu/intel-iommu.c iommu_disable_protect_mem_regions(iommu); iommu 3333 drivers/iommu/intel-iommu.c iommu_flush_write_buffer(iommu); iommu 3336 drivers/iommu/intel-iommu.c if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) { iommu 3342 drivers/iommu/intel-iommu.c ret = intel_svm_enable_prq(iommu); iommu 3348 drivers/iommu/intel-iommu.c ret = dmar_set_interrupt(iommu); iommu 3356 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 3357 drivers/iommu/intel-iommu.c disable_dmar_iommu(iommu); iommu 3358 drivers/iommu/intel-iommu.c free_dmar_iommu(iommu); iommu 3500 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 3509 drivers/iommu/intel-iommu.c iommu = domain_get_iommu(domain); iommu 3521 drivers/iommu/intel-iommu.c !cap_zlr(iommu->cap)) iommu 3578 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 3585 drivers/iommu/intel-iommu.c iommu = domain_get_iommu(domain); iommu 3599 drivers/iommu/intel-iommu.c iommu_flush_iotlb_psi(iommu, domain, start_pfn, iommu 3719 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 3729 drivers/iommu/intel-iommu.c iommu = domain_get_iommu(domain); iommu 3746 drivers/iommu/intel-iommu.c !cap_zlr(iommu->cap)) iommu 3813 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 3824 drivers/iommu/intel-iommu.c iommu = domain_get_iommu(domain); iommu 3825 drivers/iommu/intel-iommu.c if (WARN_ON(!iommu)) iommu 3839 drivers/iommu/intel-iommu.c !cap_zlr(iommu->cap)) iommu 4124 drivers/iommu/intel-iommu.c pdev->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO; iommu 4163 drivers/iommu/intel-iommu.c dev->archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO; iommu 4172 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = NULL; iommu 4174 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) iommu 4175 drivers/iommu/intel-iommu.c if (iommu->qi) iommu 4176 drivers/iommu/intel-iommu.c dmar_reenable_qi(iommu); iommu 4178 drivers/iommu/intel-iommu.c for_each_iommu(iommu, drhd) { iommu 4185 drivers/iommu/intel-iommu.c iommu_disable_protect_mem_regions(iommu); iommu 4189 drivers/iommu/intel-iommu.c iommu_flush_write_buffer(iommu); iommu 4191 drivers/iommu/intel-iommu.c iommu_set_root_entry(iommu); iommu 4193 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, 0, 0, 0, iommu 4195 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH); iommu 4196 drivers/iommu/intel-iommu.c iommu_enable_translation(iommu); iommu 4197 drivers/iommu/intel-iommu.c iommu_disable_protect_mem_regions(iommu); iommu 4206 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 4208 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 4209 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, 0, 0, 0, iommu 4211 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, 0, 0, 0, iommu 4219 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = NULL; iommu 4222 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 4223 drivers/iommu/intel-iommu.c iommu->iommu_state = kcalloc(MAX_SR_DMAR_REGS, sizeof(u32), iommu 4225 drivers/iommu/intel-iommu.c if (!iommu->iommu_state) iommu 4231 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 4232 drivers/iommu/intel-iommu.c iommu_disable_translation(iommu); iommu 4234 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 4236 drivers/iommu/intel-iommu.c iommu->iommu_state[SR_DMAR_FECTL_REG] = iommu 4237 drivers/iommu/intel-iommu.c readl(iommu->reg + DMAR_FECTL_REG); iommu 4238 drivers/iommu/intel-iommu.c iommu->iommu_state[SR_DMAR_FEDATA_REG] = iommu 4239 drivers/iommu/intel-iommu.c readl(iommu->reg + DMAR_FEDATA_REG); iommu 4240 drivers/iommu/intel-iommu.c iommu->iommu_state[SR_DMAR_FEADDR_REG] = iommu 4241 drivers/iommu/intel-iommu.c readl(iommu->reg + DMAR_FEADDR_REG); iommu 4242 drivers/iommu/intel-iommu.c iommu->iommu_state[SR_DMAR_FEUADDR_REG] = iommu 4243 drivers/iommu/intel-iommu.c readl(iommu->reg + DMAR_FEUADDR_REG); iommu 4245 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 4250 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) iommu 4251 drivers/iommu/intel-iommu.c kfree(iommu->iommu_state); iommu 4259 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = NULL; iommu 4270 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 4272 drivers/iommu/intel-iommu.c raw_spin_lock_irqsave(&iommu->register_lock, flag); iommu 4274 drivers/iommu/intel-iommu.c writel(iommu->iommu_state[SR_DMAR_FECTL_REG], iommu 4275 drivers/iommu/intel-iommu.c iommu->reg + DMAR_FECTL_REG); iommu 4276 drivers/iommu/intel-iommu.c writel(iommu->iommu_state[SR_DMAR_FEDATA_REG], iommu 4277 drivers/iommu/intel-iommu.c iommu->reg + DMAR_FEDATA_REG); iommu 4278 drivers/iommu/intel-iommu.c writel(iommu->iommu_state[SR_DMAR_FEADDR_REG], iommu 4279 drivers/iommu/intel-iommu.c iommu->reg + DMAR_FEADDR_REG); iommu 4280 drivers/iommu/intel-iommu.c writel(iommu->iommu_state[SR_DMAR_FEUADDR_REG], iommu 4281 drivers/iommu/intel-iommu.c iommu->reg + DMAR_FEUADDR_REG); iommu 4283 drivers/iommu/intel-iommu.c raw_spin_unlock_irqrestore(&iommu->register_lock, flag); iommu 4286 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) iommu 4287 drivers/iommu/intel-iommu.c kfree(iommu->iommu_state); iommu 4438 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dmaru->iommu; iommu 4440 drivers/iommu/intel-iommu.c if (g_iommus[iommu->seq_id]) iommu 4443 drivers/iommu/intel-iommu.c if (hw_pass_through && !ecap_pass_through(iommu->ecap)) { iommu 4445 drivers/iommu/intel-iommu.c iommu->name); iommu 4448 drivers/iommu/intel-iommu.c if (!ecap_sc_support(iommu->ecap) && iommu 4449 drivers/iommu/intel-iommu.c domain_update_iommu_snooping(iommu)) { iommu 4451 drivers/iommu/intel-iommu.c iommu->name); iommu 4454 drivers/iommu/intel-iommu.c sp = domain_update_iommu_superpage(iommu) - 1; iommu 4455 drivers/iommu/intel-iommu.c if (sp >= 0 && !(cap_super_page_val(iommu->cap) & (1 << sp))) { iommu 4457 drivers/iommu/intel-iommu.c iommu->name); iommu 4464 drivers/iommu/intel-iommu.c if (iommu->gcmd & DMA_GCMD_TE) iommu 4465 drivers/iommu/intel-iommu.c iommu_disable_translation(iommu); iommu 4467 drivers/iommu/intel-iommu.c g_iommus[iommu->seq_id] = iommu; iommu 4468 drivers/iommu/intel-iommu.c ret = iommu_init_domains(iommu); iommu 4470 drivers/iommu/intel-iommu.c ret = iommu_alloc_root_entry(iommu); iommu 4475 drivers/iommu/intel-iommu.c if (pasid_supported(iommu)) iommu 4476 drivers/iommu/intel-iommu.c intel_svm_init(iommu); iommu 4484 drivers/iommu/intel-iommu.c iommu_disable_protect_mem_regions(iommu); iommu 4488 drivers/iommu/intel-iommu.c intel_iommu_init_qi(iommu); iommu 4489 drivers/iommu/intel-iommu.c iommu_flush_write_buffer(iommu); iommu 4492 drivers/iommu/intel-iommu.c if (pasid_supported(iommu) && ecap_prs(iommu->ecap)) { iommu 4493 drivers/iommu/intel-iommu.c ret = intel_svm_enable_prq(iommu); iommu 4498 drivers/iommu/intel-iommu.c ret = dmar_set_interrupt(iommu); iommu 4502 drivers/iommu/intel-iommu.c iommu_set_root_entry(iommu); iommu 4503 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, 0, 0, 0, DMA_CCMD_GLOBAL_INVL); iommu 4504 drivers/iommu/intel-iommu.c iommu->flush.flush_iotlb(iommu, 0, 0, 0, DMA_TLB_GLOBAL_FLUSH); iommu 4505 drivers/iommu/intel-iommu.c iommu_enable_translation(iommu); iommu 4507 drivers/iommu/intel-iommu.c iommu_disable_protect_mem_regions(iommu); iommu 4511 drivers/iommu/intel-iommu.c disable_dmar_iommu(iommu); iommu 4513 drivers/iommu/intel-iommu.c free_dmar_iommu(iommu); iommu 4520 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dmaru->iommu; iommu 4524 drivers/iommu/intel-iommu.c if (iommu == NULL) iommu 4530 drivers/iommu/intel-iommu.c disable_dmar_iommu(iommu); iommu 4531 drivers/iommu/intel-iommu.c free_dmar_iommu(iommu); iommu 4674 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 4696 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) iommu 4697 drivers/iommu/intel-iommu.c iommu_flush_iotlb_psi(iommu, si_domain, iommu 4722 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = g_iommus[i]; iommu 4726 drivers/iommu/intel-iommu.c if (!iommu) iommu 4729 drivers/iommu/intel-iommu.c for (did = 0; did < cap_ndoms(iommu->cap); did++) { iommu 4730 drivers/iommu/intel-iommu.c domain = get_iommu_domain(iommu, (u16)did); iommu 4747 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = NULL; iommu 4750 drivers/iommu/intel-iommu.c for_each_iommu(iommu, drhd) iommu 4751 drivers/iommu/intel-iommu.c iommu_disable_translation(iommu); iommu 4758 drivers/iommu/intel-iommu.c return container_of(iommu_dev, struct intel_iommu, iommu); iommu 4765 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dev_to_intel_iommu(dev); iommu 4766 drivers/iommu/intel-iommu.c u32 ver = readl(iommu->reg + DMAR_VER_REG); iommu 4776 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dev_to_intel_iommu(dev); iommu 4777 drivers/iommu/intel-iommu.c return sprintf(buf, "%llx\n", iommu->reg_phys); iommu 4785 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dev_to_intel_iommu(dev); iommu 4786 drivers/iommu/intel-iommu.c return sprintf(buf, "%llx\n", iommu->cap); iommu 4794 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dev_to_intel_iommu(dev); iommu 4795 drivers/iommu/intel-iommu.c return sprintf(buf, "%llx\n", iommu->ecap); iommu 4803 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dev_to_intel_iommu(dev); iommu 4804 drivers/iommu/intel-iommu.c return sprintf(buf, "%ld\n", cap_ndoms(iommu->cap)); iommu 4812 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = dev_to_intel_iommu(dev); iommu 4813 drivers/iommu/intel-iommu.c return sprintf(buf, "%d\n", bitmap_weight(iommu->domain_ids, iommu 4814 drivers/iommu/intel-iommu.c cap_ndoms(iommu->cap))); iommu 4874 drivers/iommu/intel-iommu.c struct intel_iommu *iommu __maybe_unused; iommu 4878 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 4917 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 4967 drivers/iommu/intel-iommu.c for_each_iommu(iommu, drhd) iommu 4968 drivers/iommu/intel-iommu.c iommu_disable_protect_mem_regions(iommu); iommu 5021 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 5022 drivers/iommu/intel-iommu.c iommu_device_sysfs_add(&iommu->iommu, NULL, iommu 5024 drivers/iommu/intel-iommu.c "%s", iommu->name); iommu 5025 drivers/iommu/intel-iommu.c iommu_device_set_ops(&iommu->iommu, &intel_iommu_ops); iommu 5026 drivers/iommu/intel-iommu.c iommu_device_register(&iommu->iommu); iommu 5041 drivers/iommu/intel-iommu.c for_each_iommu(iommu, drhd) { iommu 5042 drivers/iommu/intel-iommu.c if (!drhd->ignored && !translation_pre_enabled(iommu)) iommu 5043 drivers/iommu/intel-iommu.c iommu_enable_translation(iommu); iommu 5045 drivers/iommu/intel-iommu.c iommu_disable_protect_mem_regions(iommu); iommu 5066 drivers/iommu/intel-iommu.c struct intel_iommu *iommu = opaque; iommu 5068 drivers/iommu/intel-iommu.c domain_context_clear_one(iommu, PCI_BUS_NUM(alias), alias & 0xff); iommu 5078 drivers/iommu/intel-iommu.c static void domain_context_clear(struct intel_iommu *iommu, struct device *dev) iommu 5080 drivers/iommu/intel-iommu.c if (!iommu || !dev || !dev_is_pci(dev)) iommu 5083 drivers/iommu/intel-iommu.c pci_for_each_dma_alias(to_pci_dev(dev), &domain_context_clear_one_cb, iommu); iommu 5089 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5097 drivers/iommu/intel-iommu.c iommu = info->iommu; iommu 5101 drivers/iommu/intel-iommu.c if (dev_is_pci(info->dev) && sm_supported(iommu)) iommu 5102 drivers/iommu/intel-iommu.c intel_pasid_tear_down_entry(iommu, info->dev, iommu 5106 drivers/iommu/intel-iommu.c domain_context_clear(iommu, info->dev); iommu 5112 drivers/iommu/intel-iommu.c spin_lock_irqsave(&iommu->lock, flags); iommu 5113 drivers/iommu/intel-iommu.c domain_detach_iommu(domain, iommu); iommu 5114 drivers/iommu/intel-iommu.c spin_unlock_irqrestore(&iommu->lock, flags); iommu 5131 drivers/iommu/intel-iommu.c info = dev->archdata.iommu; iommu 5221 drivers/iommu/intel-iommu.c struct device_domain_info *info = dev->archdata.iommu; iommu 5230 drivers/iommu/intel-iommu.c struct device_domain_info *info = dev->archdata.iommu; iommu 5243 drivers/iommu/intel-iommu.c struct device_domain_info *info = dev->archdata.iommu; iommu 5262 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5264 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 5265 drivers/iommu/intel-iommu.c if (!iommu) iommu 5286 drivers/iommu/intel-iommu.c spin_lock(&iommu->lock); iommu 5287 drivers/iommu/intel-iommu.c ret = domain_attach_iommu(domain, iommu); iommu 5292 drivers/iommu/intel-iommu.c ret = intel_pasid_setup_second_level(iommu, domain, dev, iommu 5296 drivers/iommu/intel-iommu.c spin_unlock(&iommu->lock); iommu 5305 drivers/iommu/intel-iommu.c domain_detach_iommu(domain, iommu); iommu 5307 drivers/iommu/intel-iommu.c spin_unlock(&iommu->lock); iommu 5319 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5326 drivers/iommu/intel-iommu.c info = dev->archdata.iommu; iommu 5327 drivers/iommu/intel-iommu.c iommu = info->iommu; iommu 5331 drivers/iommu/intel-iommu.c spin_lock(&iommu->lock); iommu 5332 drivers/iommu/intel-iommu.c intel_pasid_tear_down_entry(iommu, dev, domain->default_pasid); iommu 5333 drivers/iommu/intel-iommu.c domain_detach_iommu(domain, iommu); iommu 5334 drivers/iommu/intel-iommu.c spin_unlock(&iommu->lock); iommu 5343 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5347 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 5348 drivers/iommu/intel-iommu.c if (!iommu) iommu 5352 drivers/iommu/intel-iommu.c addr_width = agaw_to_width(iommu->agaw); iommu 5353 drivers/iommu/intel-iommu.c if (addr_width > cap_mgaw(iommu->cap)) iommu 5354 drivers/iommu/intel-iommu.c addr_width = cap_mgaw(iommu->cap); iommu 5367 drivers/iommu/intel-iommu.c while (iommu->agaw < dmar_domain->agaw) { iommu 5533 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5537 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 5538 drivers/iommu/intel-iommu.c if (!sm_supported(iommu)) { iommu 5551 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5555 drivers/iommu/intel-iommu.c for_each_active_iommu(iommu, drhd) { iommu 5556 drivers/iommu/intel-iommu.c if (!pasid_supported(iommu)) { iommu 5580 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5585 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 5586 drivers/iommu/intel-iommu.c if (!iommu) iommu 5589 drivers/iommu/intel-iommu.c iommu_device_link(&iommu->iommu, dev); iommu 5591 drivers/iommu/intel-iommu.c if (translation_pre_enabled(iommu)) iommu 5592 drivers/iommu/intel-iommu.c dev->archdata.iommu = DEFER_DEVICE_DOMAIN_INFO; iommu 5643 drivers/iommu/intel-iommu.c iommu_device_unlink(&iommu->iommu, dev); iommu 5649 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5652 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 5653 drivers/iommu/intel-iommu.c if (!iommu) iommu 5660 drivers/iommu/intel-iommu.c iommu_device_unlink(&iommu->iommu, dev); iommu 5732 drivers/iommu/intel-iommu.c int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct device *dev) iommu 5746 drivers/iommu/intel-iommu.c spin_lock(&iommu->lock); iommu 5749 drivers/iommu/intel-iommu.c info = dev->archdata.iommu; iommu 5753 drivers/iommu/intel-iommu.c context = iommu_context_addr(iommu, info->bus, info->devfn, 0); iommu 5763 drivers/iommu/intel-iommu.c iommu->flush.flush_context(iommu, iommu 5764 drivers/iommu/intel-iommu.c domain->iommu_did[iommu->seq_id], iommu 5777 drivers/iommu/intel-iommu.c spin_unlock(&iommu->lock); iommu 5806 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5815 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 5816 drivers/iommu/intel-iommu.c if ((!iommu)) { iommu 5821 drivers/iommu/intel-iommu.c return iommu; iommu 5828 drivers/iommu/intel-iommu.c struct intel_iommu *iommu; iommu 5833 drivers/iommu/intel-iommu.c iommu = device_to_iommu(dev, &bus, &devfn); iommu 5834 drivers/iommu/intel-iommu.c if (!iommu || dmar_disabled) iommu 5837 drivers/iommu/intel-iommu.c if (!sm_supported(iommu) || !pasid_supported(iommu)) iommu 5840 drivers/iommu/intel-iommu.c ret = intel_iommu_enable_pasid(iommu, dev); iommu 5845 drivers/iommu/intel-iommu.c info = dev->archdata.iommu; iommu 5858 drivers/iommu/intel-iommu.c info = dev->archdata.iommu; iommu 5935 drivers/iommu/intel-iommu.c struct device_domain_info *info = dev->archdata.iommu; iommu 5955 drivers/iommu/intel-iommu.c return dev->archdata.iommu == DEFER_DEVICE_DOMAIN_INFO; iommu 96 drivers/iommu/intel-pasid.c if (info->iommu->segment == data->segment && iommu 133 drivers/iommu/intel-pasid.c info = dev->archdata.iommu; iommu 155 drivers/iommu/intel-pasid.c pages = alloc_pages_node(info->iommu->node, iommu 180 drivers/iommu/intel-pasid.c info = dev->archdata.iommu; iommu 206 drivers/iommu/intel-pasid.c info = dev->archdata.iommu; iommu 217 drivers/iommu/intel-pasid.c info = dev->archdata.iommu; iommu 238 drivers/iommu/intel-pasid.c info = dev->archdata.iommu; iommu 245 drivers/iommu/intel-pasid.c entries = alloc_pgtable_page(info->iommu->node); iommu 399 drivers/iommu/intel-pasid.c pasid_cache_invalidation_with_pasid(struct intel_iommu *iommu, iommu 409 drivers/iommu/intel-pasid.c qi_submit_sync(&desc, iommu); iommu 413 drivers/iommu/intel-pasid.c iotlb_invalidation_with_pasid(struct intel_iommu *iommu, u16 did, u32 pasid) iommu 423 drivers/iommu/intel-pasid.c qi_submit_sync(&desc, iommu); iommu 427 drivers/iommu/intel-pasid.c devtlb_invalidation_with_pasid(struct intel_iommu *iommu, iommu 433 drivers/iommu/intel-pasid.c info = dev->archdata.iommu; iommu 441 drivers/iommu/intel-pasid.c qi_flush_dev_iotlb(iommu, sid, pfsid, qdep, 0, 64 - VTD_PAGE_SHIFT); iommu 444 drivers/iommu/intel-pasid.c void intel_pasid_tear_down_entry(struct intel_iommu *iommu, iommu 457 drivers/iommu/intel-pasid.c if (!ecap_coherent(iommu->ecap)) iommu 460 drivers/iommu/intel-pasid.c pasid_cache_invalidation_with_pasid(iommu, did, pasid); iommu 461 drivers/iommu/intel-pasid.c iotlb_invalidation_with_pasid(iommu, did, pasid); iommu 464 drivers/iommu/intel-pasid.c if (!cap_caching_mode(iommu->cap)) iommu 465 drivers/iommu/intel-pasid.c devtlb_invalidation_with_pasid(iommu, dev, pasid); iommu 472 drivers/iommu/intel-pasid.c int intel_pasid_setup_first_level(struct intel_iommu *iommu, iommu 478 drivers/iommu/intel-pasid.c if (!ecap_flts(iommu->ecap)) { iommu 480 drivers/iommu/intel-pasid.c iommu->name); iommu 493 drivers/iommu/intel-pasid.c if (!ecap_srs(iommu->ecap)) { iommu 495 drivers/iommu/intel-pasid.c iommu->name); iommu 504 drivers/iommu/intel-pasid.c if (cap_5lp_support(iommu->cap)) { iommu 515 drivers/iommu/intel-pasid.c pasid_set_address_width(pte, iommu->agaw); iommu 516 drivers/iommu/intel-pasid.c pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); iommu 522 drivers/iommu/intel-pasid.c if (!ecap_coherent(iommu->ecap)) iommu 525 drivers/iommu/intel-pasid.c if (cap_caching_mode(iommu->cap)) { iommu 526 drivers/iommu/intel-pasid.c pasid_cache_invalidation_with_pasid(iommu, did, pasid); iommu 527 drivers/iommu/intel-pasid.c iotlb_invalidation_with_pasid(iommu, did, pasid); iommu 529 drivers/iommu/intel-pasid.c iommu_flush_write_buffer(iommu); iommu 538 drivers/iommu/intel-pasid.c int intel_pasid_setup_second_level(struct intel_iommu *iommu, iommu 552 drivers/iommu/intel-pasid.c if (!ecap_slts(iommu->ecap)) { iommu 554 drivers/iommu/intel-pasid.c iommu->name); iommu 563 drivers/iommu/intel-pasid.c for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) { iommu 572 drivers/iommu/intel-pasid.c did = domain->iommu_did[iommu->seq_id]; iommu 586 drivers/iommu/intel-pasid.c pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); iommu 595 drivers/iommu/intel-pasid.c if (!ecap_coherent(iommu->ecap)) iommu 598 drivers/iommu/intel-pasid.c if (cap_caching_mode(iommu->cap)) { iommu 599 drivers/iommu/intel-pasid.c pasid_cache_invalidation_with_pasid(iommu, did, pasid); iommu 600 drivers/iommu/intel-pasid.c iotlb_invalidation_with_pasid(iommu, did, pasid); iommu 602 drivers/iommu/intel-pasid.c iommu_flush_write_buffer(iommu); iommu 611 drivers/iommu/intel-pasid.c int intel_pasid_setup_pass_through(struct intel_iommu *iommu, iommu 626 drivers/iommu/intel-pasid.c pasid_set_address_width(pte, iommu->agaw); iommu 629 drivers/iommu/intel-pasid.c pasid_set_page_snoop(pte, !!ecap_smpwc(iommu->ecap)); iommu 638 drivers/iommu/intel-pasid.c if (!ecap_coherent(iommu->ecap)) iommu 641 drivers/iommu/intel-pasid.c if (cap_caching_mode(iommu->cap)) { iommu 642 drivers/iommu/intel-pasid.c pasid_cache_invalidation_with_pasid(iommu, did, pasid); iommu 643 drivers/iommu/intel-pasid.c iotlb_invalidation_with_pasid(iommu, did, pasid); iommu 645 drivers/iommu/intel-pasid.c iommu_flush_write_buffer(iommu); iommu 87 drivers/iommu/intel-pasid.h int intel_pasid_setup_first_level(struct intel_iommu *iommu, iommu 90 drivers/iommu/intel-pasid.h int intel_pasid_setup_second_level(struct intel_iommu *iommu, iommu 93 drivers/iommu/intel-pasid.h int intel_pasid_setup_pass_through(struct intel_iommu *iommu, iommu 96 drivers/iommu/intel-pasid.h void intel_pasid_tear_down_entry(struct intel_iommu *iommu, iommu 26 drivers/iommu/intel-svm.c int intel_svm_init(struct intel_iommu *iommu) iommu 29 drivers/iommu/intel-svm.c !cap_fl1gp_support(iommu->cap)) iommu 33 drivers/iommu/intel-svm.c !cap_5lp_support(iommu->cap)) iommu 41 drivers/iommu/intel-svm.c int intel_svm_enable_prq(struct intel_iommu *iommu) iommu 49 drivers/iommu/intel-svm.c iommu->name); iommu 52 drivers/iommu/intel-svm.c iommu->prq = page_address(pages); iommu 54 drivers/iommu/intel-svm.c irq = dmar_alloc_hwirq(DMAR_UNITS_SUPPORTED + iommu->seq_id, iommu->node, iommu); iommu 57 drivers/iommu/intel-svm.c iommu->name); iommu 60 drivers/iommu/intel-svm.c free_pages((unsigned long)iommu->prq, PRQ_ORDER); iommu 61 drivers/iommu/intel-svm.c iommu->prq = NULL; iommu 64 drivers/iommu/intel-svm.c iommu->pr_irq = irq; iommu 66 drivers/iommu/intel-svm.c snprintf(iommu->prq_name, sizeof(iommu->prq_name), "dmar%d-prq", iommu->seq_id); iommu 69 drivers/iommu/intel-svm.c iommu->prq_name, iommu); iommu 72 drivers/iommu/intel-svm.c iommu->name); iommu 74 drivers/iommu/intel-svm.c iommu->pr_irq = 0; iommu 77 drivers/iommu/intel-svm.c dmar_writeq(iommu->reg + DMAR_PQH_REG, 0ULL); iommu 78 drivers/iommu/intel-svm.c dmar_writeq(iommu->reg + DMAR_PQT_REG, 0ULL); iommu 79 drivers/iommu/intel-svm.c dmar_writeq(iommu->reg + DMAR_PQA_REG, virt_to_phys(iommu->prq) | PRQ_ORDER); iommu 84 drivers/iommu/intel-svm.c int intel_svm_finish_prq(struct intel_iommu *iommu) iommu 86 drivers/iommu/intel-svm.c dmar_writeq(iommu->reg + DMAR_PQH_REG, 0ULL); iommu 87 drivers/iommu/intel-svm.c dmar_writeq(iommu->reg + DMAR_PQT_REG, 0ULL); iommu 88 drivers/iommu/intel-svm.c dmar_writeq(iommu->reg + DMAR_PQA_REG, 0ULL); iommu 90 drivers/iommu/intel-svm.c if (iommu->pr_irq) { iommu 91 drivers/iommu/intel-svm.c free_irq(iommu->pr_irq, iommu); iommu 92 drivers/iommu/intel-svm.c dmar_free_hwirq(iommu->pr_irq); iommu 93 drivers/iommu/intel-svm.c iommu->pr_irq = 0; iommu 96 drivers/iommu/intel-svm.c free_pages((unsigned long)iommu->prq, PRQ_ORDER); iommu 97 drivers/iommu/intel-svm.c iommu->prq = NULL; iommu 126 drivers/iommu/intel-svm.c qi_submit_sync(&desc, svm->iommu); iommu 150 drivers/iommu/intel-svm.c qi_submit_sync(&desc, svm->iommu); iommu 195 drivers/iommu/intel-svm.c intel_pasid_tear_down_entry(svm->iommu, sdev->dev, svm->pasid); iommu 212 drivers/iommu/intel-svm.c struct intel_iommu *iommu = intel_svm_device_to_iommu(dev); iommu 220 drivers/iommu/intel-svm.c if (!iommu || dmar_disabled) iommu 231 drivers/iommu/intel-svm.c if (!ecap_srs(iommu->ecap)) iommu 277 drivers/iommu/intel-svm.c ret = intel_iommu_enable_pasid(iommu, dev); iommu 285 drivers/iommu/intel-svm.c info = dev->archdata.iommu; iommu 312 drivers/iommu/intel-svm.c svm->iommu = iommu; iommu 319 drivers/iommu/intel-svm.c !!cap_caching_mode(iommu->cap), iommu 343 drivers/iommu/intel-svm.c spin_lock(&iommu->lock); iommu 344 drivers/iommu/intel-svm.c ret = intel_pasid_setup_first_level(iommu, dev, iommu 348 drivers/iommu/intel-svm.c spin_unlock(&iommu->lock); iommu 364 drivers/iommu/intel-svm.c spin_lock(&iommu->lock); iommu 365 drivers/iommu/intel-svm.c ret = intel_pasid_setup_first_level(iommu, dev, iommu 369 drivers/iommu/intel-svm.c spin_unlock(&iommu->lock); iommu 391 drivers/iommu/intel-svm.c struct intel_iommu *iommu; iommu 396 drivers/iommu/intel-svm.c iommu = intel_svm_device_to_iommu(dev); iommu 397 drivers/iommu/intel-svm.c if (!iommu) iommu 417 drivers/iommu/intel-svm.c intel_pasid_tear_down_entry(iommu, dev, svm->pasid); iommu 448 drivers/iommu/intel-svm.c struct intel_iommu *iommu; iommu 453 drivers/iommu/intel-svm.c iommu = intel_svm_device_to_iommu(dev); iommu 454 drivers/iommu/intel-svm.c if (!iommu) iommu 533 drivers/iommu/intel-svm.c struct intel_iommu *iommu = d; iommu 539 drivers/iommu/intel-svm.c writel(DMA_PRS_PPR, iommu->reg + DMAR_PRS_REG); iommu 541 drivers/iommu/intel-svm.c tail = dmar_readq(iommu->reg + DMAR_PQT_REG) & PRQ_RING_MASK; iommu 542 drivers/iommu/intel-svm.c head = dmar_readq(iommu->reg + DMAR_PQH_REG) & PRQ_RING_MASK; iommu 554 drivers/iommu/intel-svm.c req = &iommu->prq[head / sizeof(*req)]; iommu 560 drivers/iommu/intel-svm.c iommu->name, ((unsigned long long *)req)[0], iommu 575 drivers/iommu/intel-svm.c iommu->name, req->pasid, ((unsigned long long *)req)[0], iommu 660 drivers/iommu/intel-svm.c qi_submit_sync(&resp, iommu); iommu 665 drivers/iommu/intel-svm.c dmar_writeq(iommu->reg + DMAR_PQH_REG, tail); iommu 32 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 39 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 46 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 82 drivers/iommu/intel_irq_remapping.c static void iommu_disable_irq_remapping(struct intel_iommu *iommu); iommu 85 drivers/iommu/intel_irq_remapping.c static bool ir_pre_enabled(struct intel_iommu *iommu) iommu 87 drivers/iommu/intel_irq_remapping.c return (iommu->flags & VTD_FLAG_IRQ_REMAP_PRE_ENABLED); iommu 90 drivers/iommu/intel_irq_remapping.c static void clear_ir_pre_enabled(struct intel_iommu *iommu) iommu 92 drivers/iommu/intel_irq_remapping.c iommu->flags &= ~VTD_FLAG_IRQ_REMAP_PRE_ENABLED; iommu 95 drivers/iommu/intel_irq_remapping.c static void init_ir_status(struct intel_iommu *iommu) iommu 99 drivers/iommu/intel_irq_remapping.c gsts = readl(iommu->reg + DMAR_GSTS_REG); iommu 101 drivers/iommu/intel_irq_remapping.c iommu->flags |= VTD_FLAG_IRQ_REMAP_PRE_ENABLED; iommu 104 drivers/iommu/intel_irq_remapping.c static int alloc_irte(struct intel_iommu *iommu, iommu 107 drivers/iommu/intel_irq_remapping.c struct ir_table *table = iommu->ir_table; iommu 120 drivers/iommu/intel_irq_remapping.c if (mask > ecap_max_handle_mask(iommu->ecap)) { iommu 123 drivers/iommu/intel_irq_remapping.c ecap_max_handle_mask(iommu->ecap)); iommu 131 drivers/iommu/intel_irq_remapping.c pr_warn("IR%d: can't allocate an IRTE\n", iommu->seq_id); iommu 133 drivers/iommu/intel_irq_remapping.c irq_iommu->iommu = iommu; iommu 144 drivers/iommu/intel_irq_remapping.c static int qi_flush_iec(struct intel_iommu *iommu, int index, int mask) iommu 154 drivers/iommu/intel_irq_remapping.c return qi_submit_sync(&desc, iommu); iommu 160 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 170 drivers/iommu/intel_irq_remapping.c iommu = irq_iommu->iommu; iommu 173 drivers/iommu/intel_irq_remapping.c irte = &iommu->ir_table->base[index]; iommu 195 drivers/iommu/intel_irq_remapping.c __iommu_flush_cache(iommu, irte, sizeof(*irte)); iommu 197 drivers/iommu/intel_irq_remapping.c rc = qi_flush_iec(iommu, index, 0); iommu 211 drivers/iommu/intel_irq_remapping.c if (ir_hpet[i].id == hpet_id && ir_hpet[i].iommu) iommu 212 drivers/iommu/intel_irq_remapping.c return ir_hpet[i].iommu; iommu 221 drivers/iommu/intel_irq_remapping.c if (ir_ioapic[i].id == apic && ir_ioapic[i].iommu) iommu 222 drivers/iommu/intel_irq_remapping.c return ir_ioapic[i].iommu; iommu 234 drivers/iommu/intel_irq_remapping.c return drhd->iommu; iommu 240 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 246 drivers/iommu/intel_irq_remapping.c iommu = irq_iommu->iommu; iommu 249 drivers/iommu/intel_irq_remapping.c start = iommu->ir_table->base + index; iommu 256 drivers/iommu/intel_irq_remapping.c bitmap_release_region(iommu->ir_table->bitmap, index, iommu 259 drivers/iommu/intel_irq_remapping.c return qi_flush_iec(iommu, index, irq_iommu->irte_mask); iommu 319 drivers/iommu/intel_irq_remapping.c if (ir_ioapic[i].iommu && ir_ioapic[i].id == apic) { iommu 346 drivers/iommu/intel_irq_remapping.c if (ir_hpet[i].iommu && ir_hpet[i].id == id) { iommu 432 drivers/iommu/intel_irq_remapping.c static int iommu_load_old_irte(struct intel_iommu *iommu) iommu 441 drivers/iommu/intel_irq_remapping.c irta = dmar_readq(iommu->reg + DMAR_IRTA_REG); iommu 455 drivers/iommu/intel_irq_remapping.c memcpy(iommu->ir_table->base, old_ir_table, size); iommu 457 drivers/iommu/intel_irq_remapping.c __iommu_flush_cache(iommu, iommu->ir_table->base, size); iommu 464 drivers/iommu/intel_irq_remapping.c if (iommu->ir_table->base[i].present) iommu 465 drivers/iommu/intel_irq_remapping.c bitmap_set(iommu->ir_table->bitmap, i, 1); iommu 474 drivers/iommu/intel_irq_remapping.c static void iommu_set_irq_remapping(struct intel_iommu *iommu, int mode) iommu 480 drivers/iommu/intel_irq_remapping.c addr = virt_to_phys((void *)iommu->ir_table->base); iommu 482 drivers/iommu/intel_irq_remapping.c raw_spin_lock_irqsave(&iommu->register_lock, flags); iommu 484 drivers/iommu/intel_irq_remapping.c dmar_writeq(iommu->reg + DMAR_IRTA_REG, iommu 488 drivers/iommu/intel_irq_remapping.c writel(iommu->gcmd | DMA_GCMD_SIRTP, iommu->reg + DMAR_GCMD_REG); iommu 490 drivers/iommu/intel_irq_remapping.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, iommu 492 drivers/iommu/intel_irq_remapping.c raw_spin_unlock_irqrestore(&iommu->register_lock, flags); iommu 498 drivers/iommu/intel_irq_remapping.c qi_global_iec(iommu); iommu 501 drivers/iommu/intel_irq_remapping.c static void iommu_enable_irq_remapping(struct intel_iommu *iommu) iommu 506 drivers/iommu/intel_irq_remapping.c raw_spin_lock_irqsave(&iommu->register_lock, flags); iommu 509 drivers/iommu/intel_irq_remapping.c iommu->gcmd |= DMA_GCMD_IRE; iommu 510 drivers/iommu/intel_irq_remapping.c iommu->gcmd &= ~DMA_GCMD_CFI; /* Block compatibility-format MSIs */ iommu 511 drivers/iommu/intel_irq_remapping.c writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); iommu 513 drivers/iommu/intel_irq_remapping.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, iommu 526 drivers/iommu/intel_irq_remapping.c raw_spin_unlock_irqrestore(&iommu->register_lock, flags); iommu 529 drivers/iommu/intel_irq_remapping.c static int intel_setup_irq_remapping(struct intel_iommu *iommu) iommu 536 drivers/iommu/intel_irq_remapping.c if (iommu->ir_table) iommu 543 drivers/iommu/intel_irq_remapping.c pages = alloc_pages_node(iommu->node, GFP_KERNEL | __GFP_ZERO, iommu 547 drivers/iommu/intel_irq_remapping.c iommu->seq_id, INTR_REMAP_PAGE_ORDER); iommu 553 drivers/iommu/intel_irq_remapping.c pr_err("IR%d: failed to allocate bitmap\n", iommu->seq_id); iommu 557 drivers/iommu/intel_irq_remapping.c fn = irq_domain_alloc_named_id_fwnode("INTEL-IR", iommu->seq_id); iommu 561 drivers/iommu/intel_irq_remapping.c iommu->ir_domain = iommu 565 drivers/iommu/intel_irq_remapping.c iommu); iommu 567 drivers/iommu/intel_irq_remapping.c if (!iommu->ir_domain) { iommu 568 drivers/iommu/intel_irq_remapping.c pr_err("IR%d: failed to allocate irqdomain\n", iommu->seq_id); iommu 571 drivers/iommu/intel_irq_remapping.c iommu->ir_msi_domain = iommu 572 drivers/iommu/intel_irq_remapping.c arch_create_remap_msi_irq_domain(iommu->ir_domain, iommu 574 drivers/iommu/intel_irq_remapping.c iommu->seq_id); iommu 578 drivers/iommu/intel_irq_remapping.c iommu->ir_table = ir_table; iommu 584 drivers/iommu/intel_irq_remapping.c if (!iommu->qi) { iommu 588 drivers/iommu/intel_irq_remapping.c dmar_fault(-1, iommu); iommu 589 drivers/iommu/intel_irq_remapping.c dmar_disable_qi(iommu); iommu 591 drivers/iommu/intel_irq_remapping.c if (dmar_enable_qi(iommu)) { iommu 597 drivers/iommu/intel_irq_remapping.c init_ir_status(iommu); iommu 599 drivers/iommu/intel_irq_remapping.c if (ir_pre_enabled(iommu)) { iommu 602 drivers/iommu/intel_irq_remapping.c iommu->name); iommu 603 drivers/iommu/intel_irq_remapping.c clear_ir_pre_enabled(iommu); iommu 604 drivers/iommu/intel_irq_remapping.c iommu_disable_irq_remapping(iommu); iommu 605 drivers/iommu/intel_irq_remapping.c } else if (iommu_load_old_irte(iommu)) iommu 607 drivers/iommu/intel_irq_remapping.c iommu->name); iommu 610 drivers/iommu/intel_irq_remapping.c iommu->name); iommu 613 drivers/iommu/intel_irq_remapping.c iommu_set_irq_remapping(iommu, eim_mode); iommu 624 drivers/iommu/intel_irq_remapping.c iommu->ir_table = NULL; iommu 629 drivers/iommu/intel_irq_remapping.c static void intel_teardown_irq_remapping(struct intel_iommu *iommu) iommu 631 drivers/iommu/intel_irq_remapping.c if (iommu && iommu->ir_table) { iommu 632 drivers/iommu/intel_irq_remapping.c if (iommu->ir_msi_domain) { iommu 633 drivers/iommu/intel_irq_remapping.c irq_domain_remove(iommu->ir_msi_domain); iommu 634 drivers/iommu/intel_irq_remapping.c iommu->ir_msi_domain = NULL; iommu 636 drivers/iommu/intel_irq_remapping.c if (iommu->ir_domain) { iommu 637 drivers/iommu/intel_irq_remapping.c irq_domain_remove(iommu->ir_domain); iommu 638 drivers/iommu/intel_irq_remapping.c iommu->ir_domain = NULL; iommu 640 drivers/iommu/intel_irq_remapping.c free_pages((unsigned long)iommu->ir_table->base, iommu 642 drivers/iommu/intel_irq_remapping.c bitmap_free(iommu->ir_table->bitmap); iommu 643 drivers/iommu/intel_irq_remapping.c kfree(iommu->ir_table); iommu 644 drivers/iommu/intel_irq_remapping.c iommu->ir_table = NULL; iommu 651 drivers/iommu/intel_irq_remapping.c static void iommu_disable_irq_remapping(struct intel_iommu *iommu) iommu 656 drivers/iommu/intel_irq_remapping.c if (!ecap_ir_support(iommu->ecap)) iommu 663 drivers/iommu/intel_irq_remapping.c qi_global_iec(iommu); iommu 665 drivers/iommu/intel_irq_remapping.c raw_spin_lock_irqsave(&iommu->register_lock, flags); iommu 667 drivers/iommu/intel_irq_remapping.c sts = readl(iommu->reg + DMAR_GSTS_REG); iommu 671 drivers/iommu/intel_irq_remapping.c iommu->gcmd &= ~DMA_GCMD_IRE; iommu 672 drivers/iommu/intel_irq_remapping.c writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG); iommu 674 drivers/iommu/intel_irq_remapping.c IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG, iommu 678 drivers/iommu/intel_irq_remapping.c raw_spin_unlock_irqrestore(&iommu->register_lock, flags); iommu 693 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 695 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) { iommu 696 drivers/iommu/intel_irq_remapping.c if (ecap_ir_support(iommu->ecap)) { iommu 697 drivers/iommu/intel_irq_remapping.c iommu_disable_irq_remapping(iommu); iommu 698 drivers/iommu/intel_irq_remapping.c intel_teardown_irq_remapping(iommu); iommu 709 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 734 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) iommu 735 drivers/iommu/intel_irq_remapping.c if (!ecap_ir_support(iommu->ecap)) iommu 747 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) { iommu 748 drivers/iommu/intel_irq_remapping.c if (eim && !ecap_eim_support(iommu->ecap)) { iommu 749 drivers/iommu/intel_irq_remapping.c pr_info("%s does not support EIM\n", iommu->name); iommu 759 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) { iommu 760 drivers/iommu/intel_irq_remapping.c if (intel_setup_irq_remapping(iommu)) { iommu 762 drivers/iommu/intel_irq_remapping.c iommu->name); iommu 780 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 794 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) iommu 795 drivers/iommu/intel_irq_remapping.c if (!cap_pi_support(iommu->cap)) { iommu 806 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 812 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) { iommu 813 drivers/iommu/intel_irq_remapping.c if (!ir_pre_enabled(iommu)) iommu 814 drivers/iommu/intel_irq_remapping.c iommu_enable_irq_remapping(iommu); iommu 835 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu, iommu 858 drivers/iommu/intel_irq_remapping.c if (ir_hpet[count].iommu == iommu && iommu 861 drivers/iommu/intel_irq_remapping.c else if (ir_hpet[count].iommu == NULL && free == -1) iommu 869 drivers/iommu/intel_irq_remapping.c ir_hpet[free].iommu = iommu; iommu 880 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu, iommu 903 drivers/iommu/intel_irq_remapping.c if (ir_ioapic[count].iommu == iommu && iommu 906 drivers/iommu/intel_irq_remapping.c else if (ir_ioapic[count].iommu == NULL && free == -1) iommu 916 drivers/iommu/intel_irq_remapping.c ir_ioapic[free].iommu = iommu; iommu 919 drivers/iommu/intel_irq_remapping.c scope->enumeration_id, drhd->address, iommu->seq_id); iommu 925 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu) iommu 939 drivers/iommu/intel_irq_remapping.c ret = ir_parse_one_ioapic_scope(scope, iommu, drhd); iommu 941 drivers/iommu/intel_irq_remapping.c ret = ir_parse_one_hpet_scope(scope, iommu, drhd); iommu 948 drivers/iommu/intel_irq_remapping.c static void ir_remove_ioapic_hpet_scope(struct intel_iommu *iommu) iommu 953 drivers/iommu/intel_irq_remapping.c if (ir_hpet[i].iommu == iommu) iommu 954 drivers/iommu/intel_irq_remapping.c ir_hpet[i].iommu = NULL; iommu 957 drivers/iommu/intel_irq_remapping.c if (ir_ioapic[i].iommu == iommu) iommu 958 drivers/iommu/intel_irq_remapping.c ir_ioapic[i].iommu = NULL; iommu 968 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 972 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) { iommu 975 drivers/iommu/intel_irq_remapping.c if (!ecap_ir_support(iommu->ecap)) iommu 978 drivers/iommu/intel_irq_remapping.c ret = ir_parse_ioapic_hpet_scope(drhd->hdr, iommu); iommu 1019 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu = NULL; iommu 1024 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) { iommu 1025 drivers/iommu/intel_irq_remapping.c if (!ecap_ir_support(iommu->ecap)) iommu 1028 drivers/iommu/intel_irq_remapping.c iommu_disable_irq_remapping(iommu); iommu 1042 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu = NULL; iommu 1044 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) iommu 1045 drivers/iommu/intel_irq_remapping.c if (iommu->qi) iommu 1046 drivers/iommu/intel_irq_remapping.c dmar_reenable_qi(iommu); iommu 1051 drivers/iommu/intel_irq_remapping.c for_each_iommu(iommu, drhd) { iommu 1052 drivers/iommu/intel_irq_remapping.c if (!ecap_ir_support(iommu->ecap)) iommu 1056 drivers/iommu/intel_irq_remapping.c iommu_set_irq_remapping(iommu, eim); iommu 1057 drivers/iommu/intel_irq_remapping.c iommu_enable_irq_remapping(iommu); iommu 1097 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu = NULL; iommu 1104 drivers/iommu/intel_irq_remapping.c iommu = map_ioapic_to_ir(info->ioapic_id); iommu 1107 drivers/iommu/intel_irq_remapping.c iommu = map_hpet_to_ir(info->hpet_id); iommu 1111 drivers/iommu/intel_irq_remapping.c iommu = map_dev_to_ir(info->msi_dev); iommu 1118 drivers/iommu/intel_irq_remapping.c return iommu ? iommu->ir_domain : NULL; iommu 1123 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu; iommu 1131 drivers/iommu/intel_irq_remapping.c iommu = map_dev_to_ir(info->msi_dev); iommu 1132 drivers/iommu/intel_irq_remapping.c if (iommu) iommu 1133 drivers/iommu/intel_irq_remapping.c return iommu->ir_msi_domain; iommu 1347 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu = domain->host_data; iommu 1354 drivers/iommu/intel_irq_remapping.c if (!info || !iommu) iommu 1377 drivers/iommu/intel_irq_remapping.c index = alloc_irte(iommu, &data->irq_2_iommu, nr_irqs); iommu 1453 drivers/iommu/intel_irq_remapping.c static int dmar_ir_add(struct dmar_drhd_unit *dmaru, struct intel_iommu *iommu) iommu 1458 drivers/iommu/intel_irq_remapping.c if (eim && !ecap_eim_support(iommu->ecap)) { iommu 1460 drivers/iommu/intel_irq_remapping.c iommu->reg_phys, iommu->ecap); iommu 1464 drivers/iommu/intel_irq_remapping.c if (ir_parse_ioapic_hpet_scope(dmaru->hdr, iommu)) { iommu 1466 drivers/iommu/intel_irq_remapping.c iommu->reg_phys); iommu 1473 drivers/iommu/intel_irq_remapping.c ret = intel_setup_irq_remapping(iommu); iommu 1476 drivers/iommu/intel_irq_remapping.c iommu->name); iommu 1477 drivers/iommu/intel_irq_remapping.c intel_teardown_irq_remapping(iommu); iommu 1478 drivers/iommu/intel_irq_remapping.c ir_remove_ioapic_hpet_scope(iommu); iommu 1480 drivers/iommu/intel_irq_remapping.c iommu_enable_irq_remapping(iommu); iommu 1489 drivers/iommu/intel_irq_remapping.c struct intel_iommu *iommu = dmaru->iommu; iommu 1493 drivers/iommu/intel_irq_remapping.c if (iommu == NULL) iommu 1495 drivers/iommu/intel_irq_remapping.c if (!ecap_ir_support(iommu->ecap)) iommu 1498 drivers/iommu/intel_irq_remapping.c !cap_pi_support(iommu->cap)) iommu 1502 drivers/iommu/intel_irq_remapping.c if (!iommu->ir_table) iommu 1503 drivers/iommu/intel_irq_remapping.c ret = dmar_ir_add(dmaru, iommu); iommu 1505 drivers/iommu/intel_irq_remapping.c if (iommu->ir_table) { iommu 1506 drivers/iommu/intel_irq_remapping.c if (!bitmap_empty(iommu->ir_table->bitmap, iommu 1510 drivers/iommu/intel_irq_remapping.c iommu_disable_irq_remapping(iommu); iommu 1511 drivers/iommu/intel_irq_remapping.c intel_teardown_irq_remapping(iommu); iommu 1512 drivers/iommu/intel_irq_remapping.c ir_remove_ioapic_hpet_scope(iommu); iommu 54 drivers/iommu/iommu-sysfs.c int iommu_device_sysfs_add(struct iommu_device *iommu, iommu 62 drivers/iommu/iommu-sysfs.c iommu->dev = kzalloc(sizeof(*iommu->dev), GFP_KERNEL); iommu 63 drivers/iommu/iommu-sysfs.c if (!iommu->dev) iommu 66 drivers/iommu/iommu-sysfs.c device_initialize(iommu->dev); iommu 68 drivers/iommu/iommu-sysfs.c iommu->dev->class = &iommu_class; iommu 69 drivers/iommu/iommu-sysfs.c iommu->dev->parent = parent; iommu 70 drivers/iommu/iommu-sysfs.c iommu->dev->groups = groups; iommu 73 drivers/iommu/iommu-sysfs.c ret = kobject_set_name_vargs(&iommu->dev->kobj, fmt, vargs); iommu 78 drivers/iommu/iommu-sysfs.c ret = device_add(iommu->dev); iommu 82 drivers/iommu/iommu-sysfs.c dev_set_drvdata(iommu->dev, iommu); iommu 87 drivers/iommu/iommu-sysfs.c put_device(iommu->dev); iommu 91 drivers/iommu/iommu-sysfs.c void iommu_device_sysfs_remove(struct iommu_device *iommu) iommu 93 drivers/iommu/iommu-sysfs.c dev_set_drvdata(iommu->dev, NULL); iommu 94 drivers/iommu/iommu-sysfs.c device_unregister(iommu->dev); iommu 95 drivers/iommu/iommu-sysfs.c iommu->dev = NULL; iommu 103 drivers/iommu/iommu-sysfs.c int iommu_device_link(struct iommu_device *iommu, struct device *link) iommu 107 drivers/iommu/iommu-sysfs.c if (!iommu || IS_ERR(iommu)) iommu 110 drivers/iommu/iommu-sysfs.c ret = sysfs_add_link_to_group(&iommu->dev->kobj, "devices", iommu 115 drivers/iommu/iommu-sysfs.c ret = sysfs_create_link_nowarn(&link->kobj, &iommu->dev->kobj, "iommu"); iommu 117 drivers/iommu/iommu-sysfs.c sysfs_remove_link_from_group(&iommu->dev->kobj, "devices", iommu 123 drivers/iommu/iommu-sysfs.c void iommu_device_unlink(struct iommu_device *iommu, struct device *link) iommu 125 drivers/iommu/iommu-sysfs.c if (!iommu || IS_ERR(iommu)) iommu 129 drivers/iommu/iommu-sysfs.c sysfs_remove_link_from_group(&iommu->dev->kobj, "devices", dev_name(link)); iommu 137 drivers/iommu/iommu.c int iommu_device_register(struct iommu_device *iommu) iommu 140 drivers/iommu/iommu.c list_add_tail(&iommu->list, &iommu_device_list); iommu 145 drivers/iommu/iommu.c void iommu_device_unregister(struct iommu_device *iommu) iommu 148 drivers/iommu/iommu.c list_del(&iommu->list); iommu 2280 drivers/iommu/iommu.c struct iommu_device *iommu; iommu 2283 drivers/iommu/iommu.c list_for_each_entry(iommu, &iommu_device_list, list) iommu 2284 drivers/iommu/iommu.c if (iommu->fwnode == fwnode) { iommu 2285 drivers/iommu/iommu.c ops = iommu->ops; iommu 58 drivers/iommu/ipmmu-vmsa.c struct iommu_device iommu; iommu 933 drivers/iommu/ipmmu-vmsa.c iommu_device_link(&mmu->iommu, dev); iommu 941 drivers/iommu/ipmmu-vmsa.c iommu_device_unlink(&mmu->iommu, dev); iommu 1132 drivers/iommu/ipmmu-vmsa.c ret = iommu_device_sysfs_add(&mmu->iommu, &pdev->dev, NULL, iommu 1137 drivers/iommu/ipmmu-vmsa.c iommu_device_set_ops(&mmu->iommu, &ipmmu_ops); iommu 1138 drivers/iommu/ipmmu-vmsa.c iommu_device_set_fwnode(&mmu->iommu, iommu 1141 drivers/iommu/ipmmu-vmsa.c ret = iommu_device_register(&mmu->iommu); iommu 1166 drivers/iommu/ipmmu-vmsa.c iommu_device_sysfs_remove(&mmu->iommu); iommu 1167 drivers/iommu/ipmmu-vmsa.c iommu_device_unregister(&mmu->iommu); iommu 55 drivers/iommu/msm_iommu.c static int __enable_clocks(struct msm_iommu_dev *iommu) iommu 59 drivers/iommu/msm_iommu.c ret = clk_enable(iommu->pclk); iommu 63 drivers/iommu/msm_iommu.c if (iommu->clk) { iommu 64 drivers/iommu/msm_iommu.c ret = clk_enable(iommu->clk); iommu 66 drivers/iommu/msm_iommu.c clk_disable(iommu->pclk); iommu 72 drivers/iommu/msm_iommu.c static void __disable_clocks(struct msm_iommu_dev *iommu) iommu 74 drivers/iommu/msm_iommu.c if (iommu->clk) iommu 75 drivers/iommu/msm_iommu.c clk_disable(iommu->clk); iommu 76 drivers/iommu/msm_iommu.c clk_disable(iommu->pclk); iommu 121 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu = NULL; iommu 125 drivers/iommu/msm_iommu.c list_for_each_entry(iommu, &priv->list_attached, dom_node) { iommu 126 drivers/iommu/msm_iommu.c ret = __enable_clocks(iommu); iommu 130 drivers/iommu/msm_iommu.c list_for_each_entry(master, &iommu->ctx_list, list) iommu 131 drivers/iommu/msm_iommu.c SET_CTX_TLBIALL(iommu->base, master->num, 0); iommu 133 drivers/iommu/msm_iommu.c __disable_clocks(iommu); iommu 143 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu = NULL; iommu 148 drivers/iommu/msm_iommu.c list_for_each_entry(iommu, &priv->list_attached, dom_node) { iommu 149 drivers/iommu/msm_iommu.c ret = __enable_clocks(iommu); iommu 153 drivers/iommu/msm_iommu.c list_for_each_entry(master, &iommu->ctx_list, list) { iommu 157 drivers/iommu/msm_iommu.c iova |= GET_CONTEXTIDR_ASID(iommu->base, iommu 159 drivers/iommu/msm_iommu.c SET_TLBIVA(iommu->base, master->num, iova); iommu 164 drivers/iommu/msm_iommu.c __disable_clocks(iommu); iommu 214 drivers/iommu/msm_iommu.c static void config_mids(struct msm_iommu_dev *iommu, iommu 223 drivers/iommu/msm_iommu.c SET_M2VCBR_N(iommu->base, mid, 0); iommu 224 drivers/iommu/msm_iommu.c SET_CBACR_N(iommu->base, ctx, 0); iommu 227 drivers/iommu/msm_iommu.c SET_VMID(iommu->base, mid, 0); iommu 230 drivers/iommu/msm_iommu.c SET_CBNDX(iommu->base, mid, ctx); iommu 233 drivers/iommu/msm_iommu.c SET_CBVMID(iommu->base, ctx, 0); iommu 236 drivers/iommu/msm_iommu.c SET_CONTEXTIDR_ASID(iommu->base, ctx, ctx); iommu 239 drivers/iommu/msm_iommu.c SET_NSCFG(iommu->base, mid, 3); iommu 375 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu, *ret = NULL; iommu 378 drivers/iommu/msm_iommu.c list_for_each_entry(iommu, &qcom_iommu_devices, dev_node) { iommu 379 drivers/iommu/msm_iommu.c master = list_first_entry(&iommu->ctx_list, iommu 383 drivers/iommu/msm_iommu.c ret = iommu; iommu 393 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu; iommu 398 drivers/iommu/msm_iommu.c iommu = find_iommu_for_dev(dev); iommu 401 drivers/iommu/msm_iommu.c if (iommu) iommu 402 drivers/iommu/msm_iommu.c iommu_device_link(&iommu->iommu, dev); iommu 417 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu; iommu 421 drivers/iommu/msm_iommu.c iommu = find_iommu_for_dev(dev); iommu 424 drivers/iommu/msm_iommu.c if (iommu) iommu 425 drivers/iommu/msm_iommu.c iommu_device_unlink(&iommu->iommu, dev); iommu 434 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu; iommu 442 drivers/iommu/msm_iommu.c list_for_each_entry(iommu, &qcom_iommu_devices, dev_node) { iommu 443 drivers/iommu/msm_iommu.c master = list_first_entry(&iommu->ctx_list, iommu 447 drivers/iommu/msm_iommu.c ret = __enable_clocks(iommu); iommu 451 drivers/iommu/msm_iommu.c list_for_each_entry(master, &iommu->ctx_list, list) { iommu 458 drivers/iommu/msm_iommu.c msm_iommu_alloc_ctx(iommu->context_map, iommu 459 drivers/iommu/msm_iommu.c 0, iommu->ncb); iommu 464 drivers/iommu/msm_iommu.c config_mids(iommu, master); iommu 465 drivers/iommu/msm_iommu.c __program_context(iommu->base, master->num, iommu 468 drivers/iommu/msm_iommu.c __disable_clocks(iommu); iommu 469 drivers/iommu/msm_iommu.c list_add(&iommu->dom_node, &priv->list_attached); iommu 484 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu; iommu 491 drivers/iommu/msm_iommu.c list_for_each_entry(iommu, &priv->list_attached, dom_node) { iommu 492 drivers/iommu/msm_iommu.c ret = __enable_clocks(iommu); iommu 496 drivers/iommu/msm_iommu.c list_for_each_entry(master, &iommu->ctx_list, list) { iommu 497 drivers/iommu/msm_iommu.c msm_iommu_free_ctx(iommu->context_map, master->num); iommu 498 drivers/iommu/msm_iommu.c __reset_context(iommu->base, master->num); iommu 500 drivers/iommu/msm_iommu.c __disable_clocks(iommu); iommu 537 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu; iommu 546 drivers/iommu/msm_iommu.c iommu = list_first_entry(&priv->list_attached, iommu 549 drivers/iommu/msm_iommu.c if (list_empty(&iommu->ctx_list)) iommu 552 drivers/iommu/msm_iommu.c master = list_first_entry(&iommu->ctx_list, iommu 557 drivers/iommu/msm_iommu.c ret = __enable_clocks(iommu); iommu 562 drivers/iommu/msm_iommu.c SET_CTX_TLBIALL(iommu->base, master->num, 0); iommu 563 drivers/iommu/msm_iommu.c SET_V2PPR(iommu->base, master->num, va & V2Pxx_VA); iommu 565 drivers/iommu/msm_iommu.c par = GET_PAR(iommu->base, master->num); iommu 568 drivers/iommu/msm_iommu.c if (GET_NOFAULT_SS(iommu->base, master->num)) iommu 573 drivers/iommu/msm_iommu.c if (GET_FAULT(iommu->base, master->num)) iommu 576 drivers/iommu/msm_iommu.c __disable_clocks(iommu); iommu 613 drivers/iommu/msm_iommu.c struct msm_iommu_dev **iommu, iommu 616 drivers/iommu/msm_iommu.c struct msm_iommu_ctx_dev *master = dev->archdata.iommu; iommu 619 drivers/iommu/msm_iommu.c if (list_empty(&(*iommu)->ctx_list)) { iommu 622 drivers/iommu/msm_iommu.c list_add(&master->list, &(*iommu)->ctx_list); iommu 623 drivers/iommu/msm_iommu.c dev->archdata.iommu = master; iommu 639 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu; iommu 644 drivers/iommu/msm_iommu.c list_for_each_entry(iommu, &qcom_iommu_devices, dev_node) iommu 645 drivers/iommu/msm_iommu.c if (iommu->dev->of_node == spec->np) iommu 648 drivers/iommu/msm_iommu.c if (!iommu || iommu->dev->of_node != spec->np) { iommu 653 drivers/iommu/msm_iommu.c insert_iommu_master(dev, &iommu, spec); iommu 662 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu = dev_id; iommu 668 drivers/iommu/msm_iommu.c if (!iommu) { iommu 674 drivers/iommu/msm_iommu.c pr_err("base = %08x\n", (unsigned int)iommu->base); iommu 676 drivers/iommu/msm_iommu.c ret = __enable_clocks(iommu); iommu 680 drivers/iommu/msm_iommu.c for (i = 0; i < iommu->ncb; i++) { iommu 681 drivers/iommu/msm_iommu.c fsr = GET_FSR(iommu->base, i); iommu 685 drivers/iommu/msm_iommu.c print_ctx_regs(iommu->base, i); iommu 686 drivers/iommu/msm_iommu.c SET_FSR(iommu->base, i, 0x4000000F); iommu 689 drivers/iommu/msm_iommu.c __disable_clocks(iommu); iommu 722 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu; iommu 725 drivers/iommu/msm_iommu.c iommu = devm_kzalloc(&pdev->dev, sizeof(*iommu), GFP_KERNEL); iommu 726 drivers/iommu/msm_iommu.c if (!iommu) iommu 729 drivers/iommu/msm_iommu.c iommu->dev = &pdev->dev; iommu 730 drivers/iommu/msm_iommu.c INIT_LIST_HEAD(&iommu->ctx_list); iommu 732 drivers/iommu/msm_iommu.c iommu->pclk = devm_clk_get(iommu->dev, "smmu_pclk"); iommu 733 drivers/iommu/msm_iommu.c if (IS_ERR(iommu->pclk)) { iommu 734 drivers/iommu/msm_iommu.c dev_err(iommu->dev, "could not get smmu_pclk\n"); iommu 735 drivers/iommu/msm_iommu.c return PTR_ERR(iommu->pclk); iommu 738 drivers/iommu/msm_iommu.c ret = clk_prepare(iommu->pclk); iommu 740 drivers/iommu/msm_iommu.c dev_err(iommu->dev, "could not prepare smmu_pclk\n"); iommu 744 drivers/iommu/msm_iommu.c iommu->clk = devm_clk_get(iommu->dev, "iommu_clk"); iommu 745 drivers/iommu/msm_iommu.c if (IS_ERR(iommu->clk)) { iommu 746 drivers/iommu/msm_iommu.c dev_err(iommu->dev, "could not get iommu_clk\n"); iommu 747 drivers/iommu/msm_iommu.c clk_unprepare(iommu->pclk); iommu 748 drivers/iommu/msm_iommu.c return PTR_ERR(iommu->clk); iommu 751 drivers/iommu/msm_iommu.c ret = clk_prepare(iommu->clk); iommu 753 drivers/iommu/msm_iommu.c dev_err(iommu->dev, "could not prepare iommu_clk\n"); iommu 754 drivers/iommu/msm_iommu.c clk_unprepare(iommu->pclk); iommu 759 drivers/iommu/msm_iommu.c iommu->base = devm_ioremap_resource(iommu->dev, r); iommu 760 drivers/iommu/msm_iommu.c if (IS_ERR(iommu->base)) { iommu 761 drivers/iommu/msm_iommu.c dev_err(iommu->dev, "could not get iommu base\n"); iommu 762 drivers/iommu/msm_iommu.c ret = PTR_ERR(iommu->base); iommu 767 drivers/iommu/msm_iommu.c iommu->irq = platform_get_irq(pdev, 0); iommu 768 drivers/iommu/msm_iommu.c if (iommu->irq < 0) { iommu 773 drivers/iommu/msm_iommu.c ret = of_property_read_u32(iommu->dev->of_node, "qcom,ncb", &val); iommu 775 drivers/iommu/msm_iommu.c dev_err(iommu->dev, "could not get ncb\n"); iommu 778 drivers/iommu/msm_iommu.c iommu->ncb = val; iommu 780 drivers/iommu/msm_iommu.c msm_iommu_reset(iommu->base, iommu->ncb); iommu 781 drivers/iommu/msm_iommu.c SET_M(iommu->base, 0, 1); iommu 782 drivers/iommu/msm_iommu.c SET_PAR(iommu->base, 0, 0); iommu 783 drivers/iommu/msm_iommu.c SET_V2PCFG(iommu->base, 0, 1); iommu 784 drivers/iommu/msm_iommu.c SET_V2PPR(iommu->base, 0, 0); iommu 785 drivers/iommu/msm_iommu.c par = GET_PAR(iommu->base, 0); iommu 786 drivers/iommu/msm_iommu.c SET_V2PCFG(iommu->base, 0, 0); iommu 787 drivers/iommu/msm_iommu.c SET_M(iommu->base, 0, 0); iommu 795 drivers/iommu/msm_iommu.c ret = devm_request_threaded_irq(iommu->dev, iommu->irq, NULL, iommu 799 drivers/iommu/msm_iommu.c iommu); iommu 801 drivers/iommu/msm_iommu.c pr_err("Request IRQ %d failed with ret=%d\n", iommu->irq, ret); iommu 805 drivers/iommu/msm_iommu.c list_add(&iommu->dev_node, &qcom_iommu_devices); iommu 807 drivers/iommu/msm_iommu.c ret = iommu_device_sysfs_add(&iommu->iommu, iommu->dev, NULL, iommu 814 drivers/iommu/msm_iommu.c iommu_device_set_ops(&iommu->iommu, &msm_iommu_ops); iommu 815 drivers/iommu/msm_iommu.c iommu_device_set_fwnode(&iommu->iommu, &pdev->dev.of_node->fwnode); iommu 817 drivers/iommu/msm_iommu.c ret = iommu_device_register(&iommu->iommu); iommu 826 drivers/iommu/msm_iommu.c iommu->base, iommu->irq, iommu->ncb); iommu 830 drivers/iommu/msm_iommu.c clk_unprepare(iommu->clk); iommu 831 drivers/iommu/msm_iommu.c clk_unprepare(iommu->pclk); iommu 842 drivers/iommu/msm_iommu.c struct msm_iommu_dev *iommu = platform_get_drvdata(pdev); iommu 844 drivers/iommu/msm_iommu.c clk_unprepare(iommu->clk); iommu 845 drivers/iommu/msm_iommu.c clk_unprepare(iommu->pclk); iommu 60 drivers/iommu/msm_iommu.h struct iommu_device iommu; iommu 507 drivers/iommu/mtk_iommu.c iommu_device_link(&data->iommu, dev); iommu 526 drivers/iommu/mtk_iommu.c iommu_device_unlink(&data->iommu, dev); iommu 744 drivers/iommu/mtk_iommu.c ret = iommu_device_sysfs_add(&data->iommu, dev, NULL, iommu 749 drivers/iommu/mtk_iommu.c iommu_device_set_ops(&data->iommu, &mtk_iommu_ops); iommu 750 drivers/iommu/mtk_iommu.c iommu_device_set_fwnode(&data->iommu, &pdev->dev.of_node->fwnode); iommu 752 drivers/iommu/mtk_iommu.c ret = iommu_device_register(&data->iommu); iommu 769 drivers/iommu/mtk_iommu.c iommu_device_sysfs_remove(&data->iommu); iommu 770 drivers/iommu/mtk_iommu.c iommu_device_unregister(&data->iommu); iommu 63 drivers/iommu/mtk_iommu.h struct iommu_device iommu; iommu 405 drivers/iommu/mtk_iommu_v1.c mtk_mapping = m4udev->archdata.iommu; iommu 413 drivers/iommu/mtk_iommu_v1.c m4udev->archdata.iommu = mtk_mapping; iommu 463 drivers/iommu/mtk_iommu_v1.c mtk_mapping = data->dev->archdata.iommu; iommu 470 drivers/iommu/mtk_iommu_v1.c return iommu_device_link(&data->iommu, dev); iommu 482 drivers/iommu/mtk_iommu_v1.c iommu_device_unlink(&data->iommu, dev); iommu 626 drivers/iommu/mtk_iommu_v1.c ret = iommu_device_sysfs_add(&data->iommu, &pdev->dev, NULL, iommu 631 drivers/iommu/mtk_iommu_v1.c iommu_device_set_ops(&data->iommu, &mtk_iommu_ops); iommu 633 drivers/iommu/mtk_iommu_v1.c ret = iommu_device_register(&data->iommu); iommu 647 drivers/iommu/mtk_iommu_v1.c iommu_device_sysfs_remove(&data->iommu); iommu 648 drivers/iommu/mtk_iommu_v1.c iommu_device_unregister(&data->iommu); iommu 85 drivers/iommu/omap-iommu.c struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; iommu 115 drivers/iommu/omap-iommu.c struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; iommu 964 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu; iommu 971 drivers/iommu/omap-iommu.c iommu = omap_domain->iommus; iommu 972 drivers/iommu/omap-iommu.c iommu += (omap_domain->num_iommus - 1); iommu 973 drivers/iommu/omap-iommu.c for (i = 0; i < omap_domain->num_iommus; i++, iommu--) { iommu 974 drivers/iommu/omap-iommu.c oiommu = iommu->iommu_dev; iommu 993 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu; iommu 1000 drivers/iommu/omap-iommu.c iommu = omap_domain->iommus; iommu 1001 drivers/iommu/omap-iommu.c for (i = 0; i < omap_domain->num_iommus; i++, iommu++) { iommu 1002 drivers/iommu/omap-iommu.c oiommu = iommu->iommu_dev; iommu 1245 drivers/iommu/omap-iommu.c err = iommu_device_sysfs_add(&obj->iommu, obj->dev, NULL, iommu 1250 drivers/iommu/omap-iommu.c iommu_device_set_ops(&obj->iommu, &omap_iommu_ops); iommu 1252 drivers/iommu/omap-iommu.c err = iommu_device_register(&obj->iommu); iommu 1274 drivers/iommu/omap-iommu.c iommu_device_sysfs_remove(&obj->iommu); iommu 1288 drivers/iommu/omap-iommu.c iommu_device_sysfs_remove(&obj->iommu); iommu 1289 drivers/iommu/omap-iommu.c iommu_device_unregister(&obj->iommu); iommu 1346 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu; iommu 1363 drivers/iommu/omap-iommu.c iommu = omap_domain->iommus; iommu 1364 drivers/iommu/omap-iommu.c for (i = 0; i < omap_domain->num_iommus; i++, iommu++) { iommu 1365 drivers/iommu/omap-iommu.c oiommu = iommu->iommu_dev; iommu 1376 drivers/iommu/omap-iommu.c iommu--; iommu 1377 drivers/iommu/omap-iommu.c oiommu = iommu->iommu_dev; iommu 1390 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu; iommu 1398 drivers/iommu/omap-iommu.c iommu = omap_domain->iommus; iommu 1399 drivers/iommu/omap-iommu.c for (i = 0; i < omap_domain->num_iommus; i++, iommu++) { iommu 1400 drivers/iommu/omap-iommu.c oiommu = iommu->iommu_dev; iommu 1417 drivers/iommu/omap-iommu.c struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; iommu 1432 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu; iommu 1439 drivers/iommu/omap-iommu.c odomain->iommus = kcalloc(odomain->num_iommus, sizeof(*iommu), iommu 1444 drivers/iommu/omap-iommu.c iommu = odomain->iommus; iommu 1445 drivers/iommu/omap-iommu.c for (i = 0; i < odomain->num_iommus; i++, iommu++) { iommu 1446 drivers/iommu/omap-iommu.c iommu->pgtable = kzalloc(IOPGD_TABLE_SIZE, GFP_ATOMIC); iommu 1447 drivers/iommu/omap-iommu.c if (!iommu->pgtable) iommu 1454 drivers/iommu/omap-iommu.c if (WARN_ON(!IS_ALIGNED((long)iommu->pgtable, iommu 1465 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu = odomain->iommus; iommu 1467 drivers/iommu/omap-iommu.c for (i = 0; iommu && i < odomain->num_iommus; i++, iommu++) iommu 1468 drivers/iommu/omap-iommu.c kfree(iommu->pgtable); iommu 1479 drivers/iommu/omap-iommu.c struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; iommu 1480 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu; iommu 1506 drivers/iommu/omap-iommu.c iommu = omap_domain->iommus; iommu 1507 drivers/iommu/omap-iommu.c for (i = 0; i < omap_domain->num_iommus; i++, iommu++, arch_data++) { iommu 1510 drivers/iommu/omap-iommu.c ret = omap_iommu_attach(oiommu, iommu->pgtable); iommu 1517 drivers/iommu/omap-iommu.c iommu->iommu_dev = oiommu; iommu 1526 drivers/iommu/omap-iommu.c iommu--; iommu 1528 drivers/iommu/omap-iommu.c oiommu = iommu->iommu_dev; iommu 1530 drivers/iommu/omap-iommu.c iommu->iommu_dev = NULL; iommu 1543 drivers/iommu/omap-iommu.c struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; iommu 1544 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu = omap_domain->iommus; iommu 1563 drivers/iommu/omap-iommu.c iommu += (omap_domain->num_iommus - 1); iommu 1565 drivers/iommu/omap-iommu.c for (i = 0; i < omap_domain->num_iommus; i++, iommu--, arch_data--) { iommu 1566 drivers/iommu/omap-iommu.c oiommu = iommu->iommu_dev; iommu 1570 drivers/iommu/omap-iommu.c iommu->iommu_dev = NULL; iommu 1627 drivers/iommu/omap-iommu.c struct omap_iommu_device *iommu = omap_domain->iommus; iommu 1628 drivers/iommu/omap-iommu.c struct omap_iommu *oiommu = iommu->iommu_dev; iommu 1743 drivers/iommu/omap-iommu.c ret = iommu_device_link(&oiommu->iommu, dev); iommu 1749 drivers/iommu/omap-iommu.c dev->archdata.iommu = arch_data; iommu 1757 drivers/iommu/omap-iommu.c iommu_device_unlink(&oiommu->iommu, dev); iommu 1758 drivers/iommu/omap-iommu.c dev->archdata.iommu = NULL; iommu 1780 drivers/iommu/omap-iommu.c struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; iommu 1785 drivers/iommu/omap-iommu.c iommu_device_unlink(&arch_data->iommu_dev->iommu, dev); iommu 1788 drivers/iommu/omap-iommu.c dev->archdata.iommu = NULL; iommu 1795 drivers/iommu/omap-iommu.c struct omap_iommu_arch_data *arch_data = dev->archdata.iommu; iommu 82 drivers/iommu/omap-iommu.h struct iommu_device iommu; iommu 44 drivers/iommu/qcom_iommu.c struct iommu_device iommu; iommu 67 drivers/iommu/qcom_iommu.c struct qcom_iommu_dev *iommu; iommu 234 drivers/iommu/qcom_iommu.c if (qcom_domain->iommu) iommu 245 drivers/iommu/qcom_iommu.c qcom_domain->iommu = qcom_iommu; iommu 311 drivers/iommu/qcom_iommu.c qcom_domain->iommu = NULL; iommu 350 drivers/iommu/qcom_iommu.c if (qcom_domain->iommu) { iommu 357 drivers/iommu/qcom_iommu.c pm_runtime_get_sync(qcom_domain->iommu->dev); iommu 359 drivers/iommu/qcom_iommu.c pm_runtime_put_sync(qcom_domain->iommu->dev); iommu 388 drivers/iommu/qcom_iommu.c if (qcom_domain->iommu != qcom_iommu) { iommu 391 drivers/iommu/qcom_iommu.c dev_name(qcom_domain->iommu->dev), iommu 406 drivers/iommu/qcom_iommu.c if (WARN_ON(!qcom_domain->iommu)) iommu 454 drivers/iommu/qcom_iommu.c pm_runtime_get_sync(qcom_domain->iommu->dev); iommu 458 drivers/iommu/qcom_iommu.c pm_runtime_put_sync(qcom_domain->iommu->dev); iommu 471 drivers/iommu/qcom_iommu.c pm_runtime_get_sync(qcom_domain->iommu->dev); iommu 473 drivers/iommu/qcom_iommu.c pm_runtime_put_sync(qcom_domain->iommu->dev); iommu 542 drivers/iommu/qcom_iommu.c iommu_device_link(&qcom_iommu->iommu, dev); iommu 554 drivers/iommu/qcom_iommu.c iommu_device_unlink(&qcom_iommu->iommu, dev); iommu 860 drivers/iommu/qcom_iommu.c ret = iommu_device_sysfs_add(&qcom_iommu->iommu, dev, NULL, iommu 867 drivers/iommu/qcom_iommu.c iommu_device_set_ops(&qcom_iommu->iommu, &qcom_iommu_ops); iommu 868 drivers/iommu/qcom_iommu.c iommu_device_set_fwnode(&qcom_iommu->iommu, dev->fwnode); iommu 870 drivers/iommu/qcom_iommu.c ret = iommu_device_register(&qcom_iommu->iommu); iommu 895 drivers/iommu/qcom_iommu.c iommu_device_sysfs_remove(&qcom_iommu->iommu); iommu 896 drivers/iommu/qcom_iommu.c iommu_device_unregister(&qcom_iommu->iommu); iommu 107 drivers/iommu/rockchip-iommu.c struct iommu_device iommu; iommu 115 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 285 drivers/iommu/rockchip-iommu.c static void rk_iommu_command(struct rk_iommu *iommu, u32 command) iommu 289 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 290 drivers/iommu/rockchip-iommu.c writel(command, iommu->bases[i] + RK_MMU_COMMAND); iommu 297 drivers/iommu/rockchip-iommu.c static void rk_iommu_zap_lines(struct rk_iommu *iommu, dma_addr_t iova_start, iommu 306 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) { iommu 310 drivers/iommu/rockchip-iommu.c rk_iommu_write(iommu->bases[i], RK_MMU_ZAP_ONE_LINE, iova); iommu 314 drivers/iommu/rockchip-iommu.c static bool rk_iommu_is_stall_active(struct rk_iommu *iommu) iommu 319 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 320 drivers/iommu/rockchip-iommu.c active &= !!(rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) & iommu 326 drivers/iommu/rockchip-iommu.c static bool rk_iommu_is_paging_enabled(struct rk_iommu *iommu) iommu 331 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 332 drivers/iommu/rockchip-iommu.c enable &= !!(rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) & iommu 338 drivers/iommu/rockchip-iommu.c static bool rk_iommu_is_reset_done(struct rk_iommu *iommu) iommu 343 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 344 drivers/iommu/rockchip-iommu.c done &= rk_iommu_read(iommu->bases[i], RK_MMU_DTE_ADDR) == 0; iommu 349 drivers/iommu/rockchip-iommu.c static int rk_iommu_enable_stall(struct rk_iommu *iommu) iommu 354 drivers/iommu/rockchip-iommu.c if (rk_iommu_is_stall_active(iommu)) iommu 358 drivers/iommu/rockchip-iommu.c if (!rk_iommu_is_paging_enabled(iommu)) iommu 361 drivers/iommu/rockchip-iommu.c rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_STALL); iommu 363 drivers/iommu/rockchip-iommu.c ret = readx_poll_timeout(rk_iommu_is_stall_active, iommu, val, iommu 367 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 368 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "Enable stall request timed out, status: %#08x\n", iommu 369 drivers/iommu/rockchip-iommu.c rk_iommu_read(iommu->bases[i], RK_MMU_STATUS)); iommu 374 drivers/iommu/rockchip-iommu.c static int rk_iommu_disable_stall(struct rk_iommu *iommu) iommu 379 drivers/iommu/rockchip-iommu.c if (!rk_iommu_is_stall_active(iommu)) iommu 382 drivers/iommu/rockchip-iommu.c rk_iommu_command(iommu, RK_MMU_CMD_DISABLE_STALL); iommu 384 drivers/iommu/rockchip-iommu.c ret = readx_poll_timeout(rk_iommu_is_stall_active, iommu, val, iommu 388 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 389 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "Disable stall request timed out, status: %#08x\n", iommu 390 drivers/iommu/rockchip-iommu.c rk_iommu_read(iommu->bases[i], RK_MMU_STATUS)); iommu 395 drivers/iommu/rockchip-iommu.c static int rk_iommu_enable_paging(struct rk_iommu *iommu) iommu 400 drivers/iommu/rockchip-iommu.c if (rk_iommu_is_paging_enabled(iommu)) iommu 403 drivers/iommu/rockchip-iommu.c rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_PAGING); iommu 405 drivers/iommu/rockchip-iommu.c ret = readx_poll_timeout(rk_iommu_is_paging_enabled, iommu, val, iommu 409 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 410 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "Enable paging request timed out, status: %#08x\n", iommu 411 drivers/iommu/rockchip-iommu.c rk_iommu_read(iommu->bases[i], RK_MMU_STATUS)); iommu 416 drivers/iommu/rockchip-iommu.c static int rk_iommu_disable_paging(struct rk_iommu *iommu) iommu 421 drivers/iommu/rockchip-iommu.c if (!rk_iommu_is_paging_enabled(iommu)) iommu 424 drivers/iommu/rockchip-iommu.c rk_iommu_command(iommu, RK_MMU_CMD_DISABLE_PAGING); iommu 426 drivers/iommu/rockchip-iommu.c ret = readx_poll_timeout(rk_iommu_is_paging_enabled, iommu, val, iommu 430 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) iommu 431 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "Disable paging request timed out, status: %#08x\n", iommu 432 drivers/iommu/rockchip-iommu.c rk_iommu_read(iommu->bases[i], RK_MMU_STATUS)); iommu 437 drivers/iommu/rockchip-iommu.c static int rk_iommu_force_reset(struct rk_iommu *iommu) iommu 443 drivers/iommu/rockchip-iommu.c if (iommu->reset_disabled) iommu 450 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) { iommu 451 drivers/iommu/rockchip-iommu.c rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, DTE_ADDR_DUMMY); iommu 453 drivers/iommu/rockchip-iommu.c dte_addr = rk_iommu_read(iommu->bases[i], RK_MMU_DTE_ADDR); iommu 455 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "Error during raw reset. MMU_DTE_ADDR is not functioning\n"); iommu 460 drivers/iommu/rockchip-iommu.c rk_iommu_command(iommu, RK_MMU_CMD_FORCE_RESET); iommu 462 drivers/iommu/rockchip-iommu.c ret = readx_poll_timeout(rk_iommu_is_reset_done, iommu, val, iommu 466 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "FORCE_RESET command timed out\n"); iommu 473 drivers/iommu/rockchip-iommu.c static void log_iova(struct rk_iommu *iommu, int index, dma_addr_t iova) iommu 475 drivers/iommu/rockchip-iommu.c void __iomem *base = iommu->bases[index]; iommu 512 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "iova = %pad: dte_index: %#03x pte_index: %#03x page_offset: %#03x\n", iommu 514 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "mmu_dte_addr: %pa dte@%pa: %#08x valid: %u pte@%pa: %#08x valid: %u page@%pa flags: %#03x\n", iommu 522 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu = dev_id; iommu 529 drivers/iommu/rockchip-iommu.c err = pm_runtime_get_if_in_use(iommu->dev); iommu 533 drivers/iommu/rockchip-iommu.c if (WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks))) iommu 536 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) { iommu 537 drivers/iommu/rockchip-iommu.c int_status = rk_iommu_read(iommu->bases[i], RK_MMU_INT_STATUS); iommu 542 drivers/iommu/rockchip-iommu.c iova = rk_iommu_read(iommu->bases[i], RK_MMU_PAGE_FAULT_ADDR); iommu 547 drivers/iommu/rockchip-iommu.c status = rk_iommu_read(iommu->bases[i], RK_MMU_STATUS); iommu 551 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "Page fault at %pad of type %s\n", iommu 555 drivers/iommu/rockchip-iommu.c log_iova(iommu, i, iova); iommu 562 drivers/iommu/rockchip-iommu.c if (iommu->domain) iommu 563 drivers/iommu/rockchip-iommu.c report_iommu_fault(iommu->domain, iommu->dev, iova, iommu 566 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "Page fault while iommu not attached to domain?\n"); iommu 568 drivers/iommu/rockchip-iommu.c rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE); iommu 569 drivers/iommu/rockchip-iommu.c rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_PAGE_FAULT_DONE); iommu 573 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "BUS_ERROR occurred at %pad\n", &iova); iommu 576 drivers/iommu/rockchip-iommu.c dev_err(iommu->dev, "unexpected int_status: %#08x\n", iommu 579 drivers/iommu/rockchip-iommu.c rk_iommu_write(iommu->bases[i], RK_MMU_INT_CLEAR, int_status); iommu 582 drivers/iommu/rockchip-iommu.c clk_bulk_disable(iommu->num_clocks, iommu->clocks); iommu 585 drivers/iommu/rockchip-iommu.c pm_runtime_put(iommu->dev); iommu 626 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 629 drivers/iommu/rockchip-iommu.c iommu = list_entry(pos, struct rk_iommu, node); iommu 632 drivers/iommu/rockchip-iommu.c ret = pm_runtime_get_if_in_use(iommu->dev); iommu 636 drivers/iommu/rockchip-iommu.c WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu 637 drivers/iommu/rockchip-iommu.c iommu->clocks)); iommu 638 drivers/iommu/rockchip-iommu.c rk_iommu_zap_lines(iommu, iova, size); iommu 639 drivers/iommu/rockchip-iommu.c clk_bulk_disable(iommu->num_clocks, iommu->clocks); iommu 640 drivers/iommu/rockchip-iommu.c pm_runtime_put(iommu->dev); iommu 839 drivers/iommu/rockchip-iommu.c struct rk_iommudata *data = dev->archdata.iommu; iommu 841 drivers/iommu/rockchip-iommu.c return data ? data->iommu : NULL; iommu 845 drivers/iommu/rockchip-iommu.c static void rk_iommu_disable(struct rk_iommu *iommu) iommu 850 drivers/iommu/rockchip-iommu.c WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks)); iommu 851 drivers/iommu/rockchip-iommu.c rk_iommu_enable_stall(iommu); iommu 852 drivers/iommu/rockchip-iommu.c rk_iommu_disable_paging(iommu); iommu 853 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) { iommu 854 drivers/iommu/rockchip-iommu.c rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, 0); iommu 855 drivers/iommu/rockchip-iommu.c rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, 0); iommu 857 drivers/iommu/rockchip-iommu.c rk_iommu_disable_stall(iommu); iommu 858 drivers/iommu/rockchip-iommu.c clk_bulk_disable(iommu->num_clocks, iommu->clocks); iommu 862 drivers/iommu/rockchip-iommu.c static int rk_iommu_enable(struct rk_iommu *iommu) iommu 864 drivers/iommu/rockchip-iommu.c struct iommu_domain *domain = iommu->domain; iommu 868 drivers/iommu/rockchip-iommu.c ret = clk_bulk_enable(iommu->num_clocks, iommu->clocks); iommu 872 drivers/iommu/rockchip-iommu.c ret = rk_iommu_enable_stall(iommu); iommu 876 drivers/iommu/rockchip-iommu.c ret = rk_iommu_force_reset(iommu); iommu 880 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_mmu; i++) { iommu 881 drivers/iommu/rockchip-iommu.c rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, iommu 883 drivers/iommu/rockchip-iommu.c rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE); iommu 884 drivers/iommu/rockchip-iommu.c rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, RK_MMU_IRQ_MASK); iommu 887 drivers/iommu/rockchip-iommu.c ret = rk_iommu_enable_paging(iommu); iommu 890 drivers/iommu/rockchip-iommu.c rk_iommu_disable_stall(iommu); iommu 892 drivers/iommu/rockchip-iommu.c clk_bulk_disable(iommu->num_clocks, iommu->clocks); iommu 899 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 905 drivers/iommu/rockchip-iommu.c iommu = rk_iommu_from_dev(dev); iommu 906 drivers/iommu/rockchip-iommu.c if (!iommu) iommu 912 drivers/iommu/rockchip-iommu.c if (iommu->domain != domain) iommu 915 drivers/iommu/rockchip-iommu.c iommu->domain = NULL; iommu 918 drivers/iommu/rockchip-iommu.c list_del_init(&iommu->node); iommu 921 drivers/iommu/rockchip-iommu.c ret = pm_runtime_get_if_in_use(iommu->dev); iommu 924 drivers/iommu/rockchip-iommu.c rk_iommu_disable(iommu); iommu 925 drivers/iommu/rockchip-iommu.c pm_runtime_put(iommu->dev); iommu 932 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 941 drivers/iommu/rockchip-iommu.c iommu = rk_iommu_from_dev(dev); iommu 942 drivers/iommu/rockchip-iommu.c if (!iommu) iommu 948 drivers/iommu/rockchip-iommu.c if (iommu->domain == domain) iommu 951 drivers/iommu/rockchip-iommu.c if (iommu->domain) iommu 952 drivers/iommu/rockchip-iommu.c rk_iommu_detach_device(iommu->domain, dev); iommu 954 drivers/iommu/rockchip-iommu.c iommu->domain = domain; iommu 957 drivers/iommu/rockchip-iommu.c list_add_tail(&iommu->node, &rk_domain->iommus); iommu 960 drivers/iommu/rockchip-iommu.c ret = pm_runtime_get_if_in_use(iommu->dev); iommu 964 drivers/iommu/rockchip-iommu.c ret = rk_iommu_enable(iommu); iommu 966 drivers/iommu/rockchip-iommu.c rk_iommu_detach_device(iommu->domain, dev); iommu 968 drivers/iommu/rockchip-iommu.c pm_runtime_put(iommu->dev); iommu 1060 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 1063 drivers/iommu/rockchip-iommu.c data = dev->archdata.iommu; iommu 1067 drivers/iommu/rockchip-iommu.c iommu = rk_iommu_from_dev(dev); iommu 1074 drivers/iommu/rockchip-iommu.c iommu_device_link(&iommu->iommu, dev); iommu 1075 drivers/iommu/rockchip-iommu.c data->link = device_link_add(dev, iommu->dev, iommu 1083 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 1084 drivers/iommu/rockchip-iommu.c struct rk_iommudata *data = dev->archdata.iommu; iommu 1086 drivers/iommu/rockchip-iommu.c iommu = rk_iommu_from_dev(dev); iommu 1089 drivers/iommu/rockchip-iommu.c iommu_device_unlink(&iommu->iommu, dev); iommu 1095 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 1097 drivers/iommu/rockchip-iommu.c iommu = rk_iommu_from_dev(dev); iommu 1099 drivers/iommu/rockchip-iommu.c return iommu_group_ref_get(iommu->group); iommu 1114 drivers/iommu/rockchip-iommu.c data->iommu = platform_get_drvdata(iommu_dev); iommu 1115 drivers/iommu/rockchip-iommu.c dev->archdata.iommu = data; iommu 1140 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu; iommu 1145 drivers/iommu/rockchip-iommu.c iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL); iommu 1146 drivers/iommu/rockchip-iommu.c if (!iommu) iommu 1149 drivers/iommu/rockchip-iommu.c platform_set_drvdata(pdev, iommu); iommu 1150 drivers/iommu/rockchip-iommu.c iommu->dev = dev; iommu 1151 drivers/iommu/rockchip-iommu.c iommu->num_mmu = 0; iommu 1153 drivers/iommu/rockchip-iommu.c iommu->bases = devm_kcalloc(dev, num_res, sizeof(*iommu->bases), iommu 1155 drivers/iommu/rockchip-iommu.c if (!iommu->bases) iommu 1162 drivers/iommu/rockchip-iommu.c iommu->bases[i] = devm_ioremap_resource(&pdev->dev, res); iommu 1163 drivers/iommu/rockchip-iommu.c if (IS_ERR(iommu->bases[i])) iommu 1165 drivers/iommu/rockchip-iommu.c iommu->num_mmu++; iommu 1167 drivers/iommu/rockchip-iommu.c if (iommu->num_mmu == 0) iommu 1168 drivers/iommu/rockchip-iommu.c return PTR_ERR(iommu->bases[0]); iommu 1170 drivers/iommu/rockchip-iommu.c iommu->num_irq = platform_irq_count(pdev); iommu 1171 drivers/iommu/rockchip-iommu.c if (iommu->num_irq < 0) iommu 1172 drivers/iommu/rockchip-iommu.c return iommu->num_irq; iommu 1174 drivers/iommu/rockchip-iommu.c iommu->reset_disabled = device_property_read_bool(dev, iommu 1177 drivers/iommu/rockchip-iommu.c iommu->num_clocks = ARRAY_SIZE(rk_iommu_clocks); iommu 1178 drivers/iommu/rockchip-iommu.c iommu->clocks = devm_kcalloc(iommu->dev, iommu->num_clocks, iommu 1179 drivers/iommu/rockchip-iommu.c sizeof(*iommu->clocks), GFP_KERNEL); iommu 1180 drivers/iommu/rockchip-iommu.c if (!iommu->clocks) iommu 1183 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_clocks; ++i) iommu 1184 drivers/iommu/rockchip-iommu.c iommu->clocks[i].id = rk_iommu_clocks[i]; iommu 1191 drivers/iommu/rockchip-iommu.c err = devm_clk_bulk_get(iommu->dev, iommu->num_clocks, iommu->clocks); iommu 1193 drivers/iommu/rockchip-iommu.c iommu->num_clocks = 0; iommu 1197 drivers/iommu/rockchip-iommu.c err = clk_bulk_prepare(iommu->num_clocks, iommu->clocks); iommu 1201 drivers/iommu/rockchip-iommu.c iommu->group = iommu_group_alloc(); iommu 1202 drivers/iommu/rockchip-iommu.c if (IS_ERR(iommu->group)) { iommu 1203 drivers/iommu/rockchip-iommu.c err = PTR_ERR(iommu->group); iommu 1207 drivers/iommu/rockchip-iommu.c err = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev)); iommu 1211 drivers/iommu/rockchip-iommu.c iommu_device_set_ops(&iommu->iommu, &rk_iommu_ops); iommu 1212 drivers/iommu/rockchip-iommu.c iommu_device_set_fwnode(&iommu->iommu, &dev->of_node->fwnode); iommu 1214 drivers/iommu/rockchip-iommu.c err = iommu_device_register(&iommu->iommu); iommu 1230 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_irq; i++) { iommu 1236 drivers/iommu/rockchip-iommu.c err = devm_request_irq(iommu->dev, irq, rk_iommu_irq, iommu 1237 drivers/iommu/rockchip-iommu.c IRQF_SHARED, dev_name(dev), iommu); iommu 1246 drivers/iommu/rockchip-iommu.c iommu_device_sysfs_remove(&iommu->iommu); iommu 1248 drivers/iommu/rockchip-iommu.c iommu_group_put(iommu->group); iommu 1250 drivers/iommu/rockchip-iommu.c clk_bulk_unprepare(iommu->num_clocks, iommu->clocks); iommu 1256 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu = platform_get_drvdata(pdev); iommu 1259 drivers/iommu/rockchip-iommu.c for (i = 0; i < iommu->num_irq; i++) { iommu 1262 drivers/iommu/rockchip-iommu.c devm_free_irq(iommu->dev, irq, iommu); iommu 1270 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu = dev_get_drvdata(dev); iommu 1272 drivers/iommu/rockchip-iommu.c if (!iommu->domain) iommu 1275 drivers/iommu/rockchip-iommu.c rk_iommu_disable(iommu); iommu 1281 drivers/iommu/rockchip-iommu.c struct rk_iommu *iommu = dev_get_drvdata(dev); iommu 1283 drivers/iommu/rockchip-iommu.c if (!iommu->domain) iommu 1286 drivers/iommu/rockchip-iommu.c return rk_iommu_enable(iommu); iommu 45 drivers/iommu/tegra-gart.c struct iommu_device iommu; /* IOMMU Core handle */ iommu 116 drivers/iommu/tegra-gart.c } else if (dev->archdata.iommu != domain) { iommu 117 drivers/iommu/tegra-gart.c dev->archdata.iommu = domain; iommu 134 drivers/iommu/tegra-gart.c if (dev->archdata.iommu == domain) { iommu 135 drivers/iommu/tegra-gart.c dev->archdata.iommu = NULL; iommu 259 drivers/iommu/tegra-gart.c iommu_device_link(&gart_handle->iommu, dev); iommu 267 drivers/iommu/tegra-gart.c iommu_device_unlink(&gart_handle->iommu, dev); iommu 361 drivers/iommu/tegra-gart.c err = iommu_device_sysfs_add(&gart->iommu, dev, NULL, "gart"); iommu 365 drivers/iommu/tegra-gart.c iommu_device_set_ops(&gart->iommu, &gart_iommu_ops); iommu 366 drivers/iommu/tegra-gart.c iommu_device_set_fwnode(&gart->iommu, dev->fwnode); iommu 368 drivers/iommu/tegra-gart.c err = iommu_device_register(&gart->iommu); iommu 382 drivers/iommu/tegra-gart.c iommu_device_unregister(&gart->iommu); iommu 384 drivers/iommu/tegra-gart.c iommu_device_sysfs_remove(&gart->iommu); iommu 45 drivers/iommu/tegra-smmu.c struct iommu_device iommu; /* IOMMU Core code handle */ iommu 463 drivers/iommu/tegra-smmu.c struct tegra_smmu *smmu = dev->archdata.iommu; iommu 736 drivers/iommu/tegra-smmu.c const struct iommu_ops *ops = smmu->iommu.ops; iommu 779 drivers/iommu/tegra-smmu.c dev->archdata.iommu = smmu; iommu 781 drivers/iommu/tegra-smmu.c iommu_device_link(&smmu->iommu, dev); iommu 804 drivers/iommu/tegra-smmu.c struct tegra_smmu *smmu = dev->archdata.iommu; iommu 807 drivers/iommu/tegra-smmu.c iommu_device_unlink(&smmu->iommu, dev); iommu 809 drivers/iommu/tegra-smmu.c dev->archdata.iommu = NULL; iommu 869 drivers/iommu/tegra-smmu.c struct tegra_smmu *smmu = dev->archdata.iommu; iommu 1061 drivers/iommu/tegra-smmu.c err = iommu_device_sysfs_add(&smmu->iommu, dev, NULL, dev_name(dev)); iommu 1065 drivers/iommu/tegra-smmu.c iommu_device_set_ops(&smmu->iommu, &tegra_smmu_ops); iommu 1066 drivers/iommu/tegra-smmu.c iommu_device_set_fwnode(&smmu->iommu, dev->fwnode); iommu 1068 drivers/iommu/tegra-smmu.c err = iommu_device_register(&smmu->iommu); iommu 1070 drivers/iommu/tegra-smmu.c iommu_device_sysfs_remove(&smmu->iommu); iommu 1076 drivers/iommu/tegra-smmu.c iommu_device_unregister(&smmu->iommu); iommu 1077 drivers/iommu/tegra-smmu.c iommu_device_sysfs_remove(&smmu->iommu); iommu 1089 drivers/iommu/tegra-smmu.c iommu_device_unregister(&smmu->iommu); iommu 1090 drivers/iommu/tegra-smmu.c iommu_device_sysfs_remove(&smmu->iommu); iommu 36 drivers/iommu/virtio-iommu.c struct iommu_device iommu; iommu 899 drivers/iommu/virtio-iommu.c ret = iommu_device_link(&viommu->iommu, dev); iommu 918 drivers/iommu/virtio-iommu.c iommu_device_unlink(&viommu->iommu, dev); iommu 937 drivers/iommu/virtio-iommu.c iommu_device_unlink(&vdev->viommu->iommu, dev); iommu 1084 drivers/iommu/virtio-iommu.c ret = iommu_device_sysfs_add(&viommu->iommu, dev, NULL, "%s", iommu 1089 drivers/iommu/virtio-iommu.c iommu_device_set_ops(&viommu->iommu, &viommu_ops); iommu 1090 drivers/iommu/virtio-iommu.c iommu_device_set_fwnode(&viommu->iommu, parent_dev->fwnode); iommu 1092 drivers/iommu/virtio-iommu.c iommu_device_register(&viommu->iommu); iommu 1124 drivers/iommu/virtio-iommu.c iommu_device_sysfs_remove(&viommu->iommu); iommu 1125 drivers/iommu/virtio-iommu.c iommu_device_unregister(&viommu->iommu); iommu 1136 drivers/iommu/virtio-iommu.c iommu_device_sysfs_remove(&viommu->iommu); iommu 1137 drivers/iommu/virtio-iommu.c iommu_device_unregister(&viommu->iommu); iommu 133 drivers/media/platform/qcom/venus/firmware.c struct iommu_domain *iommu; iommu 141 drivers/media/platform/qcom/venus/firmware.c iommu = core->fw.iommu_domain; iommu 144 drivers/media/platform/qcom/venus/firmware.c ret = iommu_map(iommu, VENUS_FW_START_ADDR, mem_phys, mem_size, iommu 159 drivers/media/platform/qcom/venus/firmware.c struct iommu_domain *iommu; iommu 173 drivers/media/platform/qcom/venus/firmware.c iommu = core->fw.iommu_domain; iommu 175 drivers/media/platform/qcom/venus/firmware.c unmapped = iommu_unmap(iommu, VENUS_FW_START_ADDR, mapped); iommu 284 drivers/media/platform/qcom/venus/firmware.c struct iommu_domain *iommu; iommu 289 drivers/media/platform/qcom/venus/firmware.c iommu = core->fw.iommu_domain; iommu 291 drivers/media/platform/qcom/venus/firmware.c iommu_detach_device(iommu, core->fw.dev); iommu 292 drivers/media/platform/qcom/venus/firmware.c iommu_domain_free(iommu); iommu 14 drivers/media/platform/s5p-mfc/s5p_mfc_iommu.h return dev->archdata.iommu != NULL; iommu 95 drivers/of/device.c const struct iommu_ops *iommu; iommu 162 drivers/of/device.c iommu = of_iommu_configure(dev, np); iommu 163 drivers/of/device.c if (IS_ERR(iommu) && PTR_ERR(iommu) == -EPROBE_DEFER) iommu 167 drivers/of/device.c iommu ? " " : " not "); iommu 169 drivers/of/device.c arch_setup_dma_ops(dev, dma_addr, size, iommu, coherent); iommu 1550 drivers/parisc/ccio-dma.c hba->iommu = ioc; iommu 980 drivers/parisc/dino.c dino_dev->hba.iommu = ccio_get_iommu(dev); iommu 309 drivers/parisc/eisa.c eisa_dev.hba.iommu = ccio_get_iommu(dev); iommu 35 drivers/parisc/iommu.h return pdata->iommu; iommu 1557 drivers/parisc/lba_pci.c lba_dev->hba.iommu = sba_get_iommu(dev); /* get iommu data */ iommu 124 drivers/vfio/vfio_iommu_type1.c #define IS_IOMMU_CAP_DOMAIN_IN_CONTAINER(iommu) \ iommu 125 drivers/vfio/vfio_iommu_type1.c (!list_empty(&iommu->domain_list)) iommu 134 drivers/vfio/vfio_iommu_type1.c static struct vfio_dma *vfio_find_dma(struct vfio_iommu *iommu, iommu 137 drivers/vfio/vfio_iommu_type1.c struct rb_node *node = iommu->dma_list.rb_node; iommu 153 drivers/vfio/vfio_iommu_type1.c static void vfio_link_dma(struct vfio_iommu *iommu, struct vfio_dma *new) iommu 155 drivers/vfio/vfio_iommu_type1.c struct rb_node **link = &iommu->dma_list.rb_node, *parent = NULL; iommu 169 drivers/vfio/vfio_iommu_type1.c rb_insert_color(&new->node, &iommu->dma_list); iommu 172 drivers/vfio/vfio_iommu_type1.c static void vfio_unlink_dma(struct vfio_iommu *iommu, struct vfio_dma *old) iommu 174 drivers/vfio/vfio_iommu_type1.c rb_erase(&old->node, &iommu->dma_list); iommu 546 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 552 drivers/vfio/vfio_iommu_type1.c if (!iommu || !user_pfn || !phys_pfn) iommu 556 drivers/vfio/vfio_iommu_type1.c if (!iommu->v2) iommu 559 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 562 drivers/vfio/vfio_iommu_type1.c if (!iommu->notifier.head) { iommu 572 drivers/vfio/vfio_iommu_type1.c do_accounting = !IS_IOMMU_CAP_DOMAIN_IN_CONTAINER(iommu); iommu 579 drivers/vfio/vfio_iommu_type1.c dma = vfio_find_dma(iommu, iova, PAGE_SIZE); iommu 618 drivers/vfio/vfio_iommu_type1.c dma = vfio_find_dma(iommu, iova, PAGE_SIZE); iommu 623 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 631 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 635 drivers/vfio/vfio_iommu_type1.c if (!iommu || !user_pfn) iommu 639 drivers/vfio/vfio_iommu_type1.c if (!iommu->v2) iommu 642 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 644 drivers/vfio/vfio_iommu_type1.c do_accounting = !IS_IOMMU_CAP_DOMAIN_IN_CONTAINER(iommu); iommu 650 drivers/vfio/vfio_iommu_type1.c dma = vfio_find_dma(iommu, iova, PAGE_SIZE); iommu 657 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 752 drivers/vfio/vfio_iommu_type1.c static long vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma, iommu 765 drivers/vfio/vfio_iommu_type1.c if (!IS_IOMMU_CAP_DOMAIN_IN_CONTAINER(iommu)) iommu 775 drivers/vfio/vfio_iommu_type1.c domain = d = list_first_entry(&iommu->domain_list, iommu 778 drivers/vfio/vfio_iommu_type1.c list_for_each_entry_continue(d, &iommu->domain_list, next) { iommu 836 drivers/vfio/vfio_iommu_type1.c static void vfio_remove_dma(struct vfio_iommu *iommu, struct vfio_dma *dma) iommu 838 drivers/vfio/vfio_iommu_type1.c vfio_unmap_unpin(iommu, dma, true); iommu 839 drivers/vfio/vfio_iommu_type1.c vfio_unlink_dma(iommu, dma); iommu 842 drivers/vfio/vfio_iommu_type1.c iommu->dma_avail++; iommu 845 drivers/vfio/vfio_iommu_type1.c static unsigned long vfio_pgsize_bitmap(struct vfio_iommu *iommu) iommu 850 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 851 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(domain, &iommu->domain_list, next) iommu 853 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 871 drivers/vfio/vfio_iommu_type1.c static int vfio_dma_do_unmap(struct vfio_iommu *iommu, iommu 879 drivers/vfio/vfio_iommu_type1.c mask = ((uint64_t)1 << __ffs(vfio_pgsize_bitmap(iommu))) - 1; iommu 891 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 924 drivers/vfio/vfio_iommu_type1.c if (iommu->v2) { iommu 925 drivers/vfio/vfio_iommu_type1.c dma = vfio_find_dma(iommu, unmap->iova, 1); iommu 930 drivers/vfio/vfio_iommu_type1.c dma = vfio_find_dma(iommu, unmap->iova + unmap->size - 1, 0); iommu 937 drivers/vfio/vfio_iommu_type1.c while ((dma = vfio_find_dma(iommu, unmap->iova, unmap->size))) { iommu 938 drivers/vfio/vfio_iommu_type1.c if (!iommu->v2 && unmap->iova > dma->iova) iommu 966 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 967 drivers/vfio/vfio_iommu_type1.c blocking_notifier_call_chain(&iommu->notifier, iommu 973 drivers/vfio/vfio_iommu_type1.c vfio_remove_dma(iommu, dma); iommu 977 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 985 drivers/vfio/vfio_iommu_type1.c static int vfio_iommu_map(struct vfio_iommu *iommu, dma_addr_t iova, iommu 991 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(d, &iommu->domain_list, next) { iommu 1003 drivers/vfio/vfio_iommu_type1.c list_for_each_entry_continue_reverse(d, &iommu->domain_list, next) iommu 1009 drivers/vfio/vfio_iommu_type1.c static int vfio_pin_map_dma(struct vfio_iommu *iommu, struct vfio_dma *dma, iommu 1030 drivers/vfio/vfio_iommu_type1.c ret = vfio_iommu_map(iommu, iova + dma->size, pfn, npage, iommu 1045 drivers/vfio/vfio_iommu_type1.c vfio_remove_dma(iommu, dma); iommu 1053 drivers/vfio/vfio_iommu_type1.c static bool vfio_iommu_iova_dma_valid(struct vfio_iommu *iommu, iommu 1056 drivers/vfio/vfio_iommu_type1.c struct list_head *iova = &iommu->iova_list; iommu 1071 drivers/vfio/vfio_iommu_type1.c static int vfio_dma_do_map(struct vfio_iommu *iommu, iommu 1085 drivers/vfio/vfio_iommu_type1.c mask = ((uint64_t)1 << __ffs(vfio_pgsize_bitmap(iommu))) - 1; iommu 1102 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 1104 drivers/vfio/vfio_iommu_type1.c if (vfio_find_dma(iommu, iova, size)) { iommu 1109 drivers/vfio/vfio_iommu_type1.c if (!iommu->dma_avail) { iommu 1114 drivers/vfio/vfio_iommu_type1.c if (!vfio_iommu_iova_dma_valid(iommu, iova, iova + size - 1)) { iommu 1125 drivers/vfio/vfio_iommu_type1.c iommu->dma_avail--; iommu 1162 drivers/vfio/vfio_iommu_type1.c vfio_link_dma(iommu, dma); iommu 1165 drivers/vfio/vfio_iommu_type1.c if (!IS_IOMMU_CAP_DOMAIN_IN_CONTAINER(iommu)) iommu 1168 drivers/vfio/vfio_iommu_type1.c ret = vfio_pin_map_dma(iommu, dma, size); iommu 1171 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 1187 drivers/vfio/vfio_iommu_type1.c static int vfio_iommu_replay(struct vfio_iommu *iommu, iommu 1196 drivers/vfio/vfio_iommu_type1.c d = list_first_entry(&iommu->domain_list, struct vfio_domain, next); iommu 1197 drivers/vfio/vfio_iommu_type1.c n = rb_first(&iommu->dma_list); iommu 1460 drivers/vfio/vfio_iommu_type1.c static bool vfio_iommu_aper_conflict(struct vfio_iommu *iommu, iommu 1464 drivers/vfio/vfio_iommu_type1.c struct list_head *iova = &iommu->iova_list; iommu 1477 drivers/vfio/vfio_iommu_type1.c if (vfio_find_dma(iommu, first->start, start - first->start)) iommu 1483 drivers/vfio/vfio_iommu_type1.c if (vfio_find_dma(iommu, end + 1, last->end - end)) iommu 1534 drivers/vfio/vfio_iommu_type1.c static bool vfio_iommu_resv_conflict(struct vfio_iommu *iommu, iommu 1544 drivers/vfio/vfio_iommu_type1.c if (vfio_find_dma(iommu, region->start, region->length)) iommu 1623 drivers/vfio/vfio_iommu_type1.c static int vfio_iommu_iova_get_copy(struct vfio_iommu *iommu, iommu 1626 drivers/vfio/vfio_iommu_type1.c struct list_head *iova = &iommu->iova_list; iommu 1643 drivers/vfio/vfio_iommu_type1.c static void vfio_iommu_iova_insert_copy(struct vfio_iommu *iommu, iommu 1646 drivers/vfio/vfio_iommu_type1.c struct list_head *iova = &iommu->iova_list; iommu 1655 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 1666 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 1668 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(d, &iommu->domain_list, next) { iommu 1670 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 1675 drivers/vfio/vfio_iommu_type1.c if (iommu->external_domain) { iommu 1676 drivers/vfio/vfio_iommu_type1.c if (find_iommu_group(iommu->external_domain, iommu_group)) { iommu 1677 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 1705 drivers/vfio/vfio_iommu_type1.c if (!iommu->external_domain) { iommu 1707 drivers/vfio/vfio_iommu_type1.c iommu->external_domain = domain; iommu 1713 drivers/vfio/vfio_iommu_type1.c &iommu->external_domain->group_list); iommu 1714 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 1728 drivers/vfio/vfio_iommu_type1.c if (iommu->nesting) { iommu 1744 drivers/vfio/vfio_iommu_type1.c if (vfio_iommu_aper_conflict(iommu, geo.aperture_start, iommu 1754 drivers/vfio/vfio_iommu_type1.c if (vfio_iommu_resv_conflict(iommu, &group_resv_regions)) { iommu 1764 drivers/vfio/vfio_iommu_type1.c ret = vfio_iommu_iova_get_copy(iommu, &iova_copy); iommu 1802 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(d, &iommu->domain_list, next) { iommu 1822 drivers/vfio/vfio_iommu_type1.c ret = vfio_iommu_replay(iommu, domain); iommu 1832 drivers/vfio/vfio_iommu_type1.c list_add(&domain->next, &iommu->domain_list); iommu 1835 drivers/vfio/vfio_iommu_type1.c vfio_iommu_iova_insert_copy(iommu, &iova_copy); iommu 1836 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 1850 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 1854 drivers/vfio/vfio_iommu_type1.c static void vfio_iommu_unmap_unpin_all(struct vfio_iommu *iommu) iommu 1858 drivers/vfio/vfio_iommu_type1.c while ((node = rb_first(&iommu->dma_list))) iommu 1859 drivers/vfio/vfio_iommu_type1.c vfio_remove_dma(iommu, rb_entry(node, struct vfio_dma, node)); iommu 1862 drivers/vfio/vfio_iommu_type1.c static void vfio_iommu_unmap_unpin_reaccount(struct vfio_iommu *iommu) iommu 1866 drivers/vfio/vfio_iommu_type1.c n = rb_first(&iommu->dma_list); iommu 1872 drivers/vfio/vfio_iommu_type1.c unlocked += vfio_unmap_unpin(iommu, dma, false); iommu 1885 drivers/vfio/vfio_iommu_type1.c static void vfio_sanity_check_pfn_list(struct vfio_iommu *iommu) iommu 1889 drivers/vfio/vfio_iommu_type1.c n = rb_first(&iommu->dma_list); iommu 1899 drivers/vfio/vfio_iommu_type1.c WARN_ON(iommu->notifier.head); iommu 1907 drivers/vfio/vfio_iommu_type1.c static void vfio_iommu_aper_expand(struct vfio_iommu *iommu, iommu 1919 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(domain, &iommu->domain_list, next) { iommu 1941 drivers/vfio/vfio_iommu_type1.c static int vfio_iommu_resv_refresh(struct vfio_iommu *iommu, iommu 1954 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(d, &iommu->domain_list, next) { iommu 1985 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 1990 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 1992 drivers/vfio/vfio_iommu_type1.c if (iommu->external_domain) { iommu 1993 drivers/vfio/vfio_iommu_type1.c group = find_iommu_group(iommu->external_domain, iommu_group); iommu 1998 drivers/vfio/vfio_iommu_type1.c if (list_empty(&iommu->external_domain->group_list)) { iommu 1999 drivers/vfio/vfio_iommu_type1.c vfio_sanity_check_pfn_list(iommu); iommu 2001 drivers/vfio/vfio_iommu_type1.c if (!IS_IOMMU_CAP_DOMAIN_IN_CONTAINER(iommu)) iommu 2002 drivers/vfio/vfio_iommu_type1.c vfio_iommu_unmap_unpin_all(iommu); iommu 2004 drivers/vfio/vfio_iommu_type1.c kfree(iommu->external_domain); iommu 2005 drivers/vfio/vfio_iommu_type1.c iommu->external_domain = NULL; iommu 2016 drivers/vfio/vfio_iommu_type1.c vfio_iommu_iova_get_copy(iommu, &iova_copy); iommu 2018 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(domain, &iommu->domain_list, next) { iommu 2034 drivers/vfio/vfio_iommu_type1.c if (list_is_singular(&iommu->domain_list)) { iommu 2035 drivers/vfio/vfio_iommu_type1.c if (!iommu->external_domain) iommu 2036 drivers/vfio/vfio_iommu_type1.c vfio_iommu_unmap_unpin_all(iommu); iommu 2038 drivers/vfio/vfio_iommu_type1.c vfio_iommu_unmap_unpin_reaccount(iommu); iommu 2043 drivers/vfio/vfio_iommu_type1.c vfio_iommu_aper_expand(iommu, &iova_copy); iommu 2048 drivers/vfio/vfio_iommu_type1.c if (!vfio_iommu_resv_refresh(iommu, &iova_copy)) iommu 2049 drivers/vfio/vfio_iommu_type1.c vfio_iommu_iova_insert_copy(iommu, &iova_copy); iommu 2054 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 2059 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu; iommu 2061 drivers/vfio/vfio_iommu_type1.c iommu = kzalloc(sizeof(*iommu), GFP_KERNEL); iommu 2062 drivers/vfio/vfio_iommu_type1.c if (!iommu) iommu 2069 drivers/vfio/vfio_iommu_type1.c iommu->nesting = true; iommu 2072 drivers/vfio/vfio_iommu_type1.c iommu->v2 = true; iommu 2075 drivers/vfio/vfio_iommu_type1.c kfree(iommu); iommu 2079 drivers/vfio/vfio_iommu_type1.c INIT_LIST_HEAD(&iommu->domain_list); iommu 2080 drivers/vfio/vfio_iommu_type1.c INIT_LIST_HEAD(&iommu->iova_list); iommu 2081 drivers/vfio/vfio_iommu_type1.c iommu->dma_list = RB_ROOT; iommu 2082 drivers/vfio/vfio_iommu_type1.c iommu->dma_avail = dma_entry_limit; iommu 2083 drivers/vfio/vfio_iommu_type1.c mutex_init(&iommu->lock); iommu 2084 drivers/vfio/vfio_iommu_type1.c BLOCKING_INIT_NOTIFIER_HEAD(&iommu->notifier); iommu 2086 drivers/vfio/vfio_iommu_type1.c return iommu; iommu 2107 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 2110 drivers/vfio/vfio_iommu_type1.c if (iommu->external_domain) { iommu 2111 drivers/vfio/vfio_iommu_type1.c vfio_release_domain(iommu->external_domain, true); iommu 2112 drivers/vfio/vfio_iommu_type1.c vfio_sanity_check_pfn_list(iommu); iommu 2113 drivers/vfio/vfio_iommu_type1.c kfree(iommu->external_domain); iommu 2116 drivers/vfio/vfio_iommu_type1.c vfio_iommu_unmap_unpin_all(iommu); iommu 2119 drivers/vfio/vfio_iommu_type1.c &iommu->domain_list, next) { iommu 2125 drivers/vfio/vfio_iommu_type1.c vfio_iommu_iova_free(&iommu->iova_list); iommu 2127 drivers/vfio/vfio_iommu_type1.c kfree(iommu); iommu 2130 drivers/vfio/vfio_iommu_type1.c static int vfio_domains_have_iommu_cache(struct vfio_iommu *iommu) iommu 2135 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 2136 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(domain, &iommu->domain_list, next) { iommu 2142 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 2168 drivers/vfio/vfio_iommu_type1.c static int vfio_iommu_iova_build_caps(struct vfio_iommu *iommu, iommu 2176 drivers/vfio/vfio_iommu_type1.c mutex_lock(&iommu->lock); iommu 2178 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(iova, &iommu->iova_list, list) iommu 2200 drivers/vfio/vfio_iommu_type1.c list_for_each_entry(iova, &iommu->iova_list, list) { iommu 2210 drivers/vfio/vfio_iommu_type1.c mutex_unlock(&iommu->lock); iommu 2217 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 2227 drivers/vfio/vfio_iommu_type1.c if (!iommu) iommu 2229 drivers/vfio/vfio_iommu_type1.c return vfio_domains_have_iommu_cache(iommu); iommu 2257 drivers/vfio/vfio_iommu_type1.c info.iova_pgsizes = vfio_pgsize_bitmap(iommu); iommu 2259 drivers/vfio/vfio_iommu_type1.c ret = vfio_iommu_iova_build_caps(iommu, &caps); iommu 2298 drivers/vfio/vfio_iommu_type1.c return vfio_dma_do_map(iommu, &map); iommu 2312 drivers/vfio/vfio_iommu_type1.c ret = vfio_dma_do_unmap(iommu, &unmap); iommu 2327 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 2336 drivers/vfio/vfio_iommu_type1.c return blocking_notifier_chain_register(&iommu->notifier, nb); iommu 2342 drivers/vfio/vfio_iommu_type1.c struct vfio_iommu *iommu = iommu_data; iommu 2344 drivers/vfio/vfio_iommu_type1.c return blocking_notifier_chain_unregister(&iommu->notifier, nb); iommu 706 include/linux/dma-mapping.h const struct iommu_ops *iommu, bool coherent); iommu 709 include/linux/dma-mapping.h u64 size, const struct iommu_ops *iommu, bool coherent) iommu 51 include/linux/dmar.h struct intel_iommu *iommu; iommu 84 include/linux/dmar.h if (i=drhd->iommu, drhd->ignored) {} else iommu 89 include/linux/dmar.h if (i=drhd->iommu, 0) {} else iommu 278 include/linux/dmar.h extern int dmar_set_interrupt(struct intel_iommu *iommu); iommu 285 include/linux/intel-iommu.h #define IOMMU_WAIT_OP(iommu, offset, op, cond, sts) \ iommu 289 include/linux/intel-iommu.h sts = op(iommu->reg + offset); \ iommu 389 include/linux/intel-iommu.h #define qi_shift(iommu) (DMAR_IQ_SHIFT + !!ecap_smts((iommu)->ecap)) iommu 424 include/linux/intel-iommu.h void (*flush_context)(struct intel_iommu *iommu, u16 did, u16 sid, iommu 426 include/linux/intel-iommu.h void (*flush_iotlb)(struct intel_iommu *iommu, u16 did, u64 addr, iommu 443 include/linux/intel-iommu.h #define sm_supported(iommu) (intel_iommu_sm && ecap_smts((iommu)->ecap)) iommu 444 include/linux/intel-iommu.h #define pasid_supported(iommu) (sm_supported(iommu) && \ iommu 445 include/linux/intel-iommu.h ecap_pasid((iommu)->ecap)) iommu 556 include/linux/intel-iommu.h struct iommu_device iommu; /* IOMMU core code handle */ iommu 581 include/linux/intel-iommu.h struct intel_iommu *iommu; /* IOMMU used by this device */ iommu 587 include/linux/intel-iommu.h struct intel_iommu *iommu, void *addr, int size) iommu 589 include/linux/intel-iommu.h if (!ecap_coherent(iommu->ecap)) iommu 639 include/linux/intel-iommu.h extern int dmar_enable_qi(struct intel_iommu *iommu); iommu 640 include/linux/intel-iommu.h extern void dmar_disable_qi(struct intel_iommu *iommu); iommu 641 include/linux/intel-iommu.h extern int dmar_reenable_qi(struct intel_iommu *iommu); iommu 642 include/linux/intel-iommu.h extern void qi_global_iec(struct intel_iommu *iommu); iommu 644 include/linux/intel-iommu.h extern void qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid, iommu 646 include/linux/intel-iommu.h extern void qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, iommu 648 include/linux/intel-iommu.h extern void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 pfsid, iommu 650 include/linux/intel-iommu.h extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); iommu 659 include/linux/intel-iommu.h void iommu_flush_write_buffer(struct intel_iommu *iommu); iommu 660 include/linux/intel-iommu.h int intel_iommu_enable_pasid(struct intel_iommu *iommu, struct device *dev); iommu 663 include/linux/intel-iommu.h int intel_svm_init(struct intel_iommu *iommu); iommu 664 include/linux/intel-iommu.h extern int intel_svm_enable_prq(struct intel_iommu *iommu); iommu 665 include/linux/intel-iommu.h extern int intel_svm_finish_prq(struct intel_iommu *iommu); iommu 683 include/linux/intel-iommu.h struct intel_iommu *iommu; iommu 701 include/linux/intel-iommu.h struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus, iommu 705 include/linux/intel-iommu.h extern int iommu_calculate_agaw(struct intel_iommu *iommu); iommu 706 include/linux/intel-iommu.h extern int iommu_calculate_max_sagaw(struct intel_iommu *iommu); iommu 711 include/linux/intel-iommu.h static inline int iommu_calculate_agaw(struct intel_iommu *iommu) iommu 715 include/linux/intel-iommu.h static inline int iommu_calculate_max_sagaw(struct intel_iommu *iommu) iommu 369 include/linux/iommu.h int iommu_device_register(struct iommu_device *iommu); iommu 370 include/linux/iommu.h void iommu_device_unregister(struct iommu_device *iommu); iommu 371 include/linux/iommu.h int iommu_device_sysfs_add(struct iommu_device *iommu, iommu 375 include/linux/iommu.h void iommu_device_sysfs_remove(struct iommu_device *iommu); iommu 376 include/linux/iommu.h int iommu_device_link(struct iommu_device *iommu, struct device *link); iommu 377 include/linux/iommu.h void iommu_device_unlink(struct iommu_device *iommu, struct device *link); iommu 379 include/linux/iommu.h static inline void iommu_device_set_ops(struct iommu_device *iommu, iommu 382 include/linux/iommu.h iommu->ops = ops; iommu 385 include/linux/iommu.h static inline void iommu_device_set_fwnode(struct iommu_device *iommu, iommu 388 include/linux/iommu.h iommu->fwnode = fwnode; iommu 868 include/linux/iommu.h static inline int iommu_device_register(struct iommu_device *iommu) iommu 873 include/linux/iommu.h static inline void iommu_device_set_ops(struct iommu_device *iommu, iommu 878 include/linux/iommu.h static inline void iommu_device_set_fwnode(struct iommu_device *iommu, iommu 898 include/linux/iommu.h static inline void iommu_device_unregister(struct iommu_device *iommu) iommu 902 include/linux/iommu.h static inline int iommu_device_sysfs_add(struct iommu_device *iommu, iommu 910 include/linux/iommu.h static inline void iommu_device_sysfs_remove(struct iommu_device *iommu) iommu 9 include/trace/events/iommu.h #define TRACE_SYSTEM iommu