Home
last modified time | relevance | path

Searched full:iommu (Results 1 – 25 of 881) sorted by relevance

12345678910>>...36

/linux-6.14.4/arch/sparc/kernel/
Diommu.c2 /* iommu.c: Generic sparc64 IOMMU support.
15 #include <linux/iommu-helper.h>
17 #include <asm/iommu-common.h>
23 #include <asm/iommu.h>
49 /* Must be invoked under the IOMMU lock. */
52 struct iommu *iommu = container_of(iommu_map_table, struct iommu, tbl); in iommu_flushall() local
53 if (iommu->iommu_flushinv) { in iommu_flushall()
54 iommu_write(iommu->iommu_flushinv, ~(u64)0); in iommu_flushall()
59 tag = iommu->iommu_tags; in iommu_flushall()
66 (void) iommu_read(iommu->write_complete_reg); in iommu_flushall()
[all …]
Diommu-common.c3 * IOMMU mmap management and range allocation functions.
4 * Based almost entirely upon the powerpc iommu allocator.
10 #include <linux/iommu-helper.h>
13 #include <asm/iommu-common.h>
19 static inline bool need_flush(struct iommu_map_table *iommu) in need_flush() argument
21 return ((iommu->flags & IOMMU_NEED_FLUSH) != 0); in need_flush()
24 static inline void set_flush(struct iommu_map_table *iommu) in set_flush() argument
26 iommu->flags |= IOMMU_NEED_FLUSH; in set_flush()
29 static inline void clear_flush(struct iommu_map_table *iommu) in clear_flush() argument
31 iommu->flags &= ~IOMMU_NEED_FLUSH; in clear_flush()
[all …]
/linux-6.14.4/drivers/iommu/intel/
Dprq.c5 * Originally split from drivers/iommu/intel/svm.c
11 #include "iommu.h"
13 #include "../iommu-pages.h"
64 struct intel_iommu *iommu; in intel_iommu_drain_pasid_prq() local
73 iommu = info->iommu; in intel_iommu_drain_pasid_prq()
76 did = domain ? domain_id_iommu(domain, iommu) : FLPT_DEFAULT_DID; in intel_iommu_drain_pasid_prq()
83 reinit_completion(&iommu->prq_complete); in intel_iommu_drain_pasid_prq()
84 tail = dmar_readq(iommu->reg + DMAR_PQT_REG) & PRQ_RING_MASK; in intel_iommu_drain_pasid_prq()
85 head = dmar_readq(iommu->reg + DMAR_PQH_REG) & PRQ_RING_MASK; in intel_iommu_drain_pasid_prq()
89 req = &iommu->prq[head / sizeof(*req)]; in intel_iommu_drain_pasid_prq()
[all …]
Dpasid.c15 #include <linux/iommu.h>
21 #include "iommu.h"
23 #include "../iommu-pages.h"
26 * Intel IOMMU system wide PASID name space:
63 dir = iommu_alloc_pages_node(info->iommu->node, GFP_KERNEL, order); in intel_pasid_alloc_table()
74 if (!ecap_coherent(info->iommu->ecap)) in intel_pasid_alloc_table()
151 entries = iommu_alloc_page_node(info->iommu->node, GFP_ATOMIC); in intel_pasid_get_entry()
167 if (!ecap_coherent(info->iommu->ecap)) { in intel_pasid_get_entry()
195 pasid_cache_invalidation_with_pasid(struct intel_iommu *iommu, in pasid_cache_invalidation_with_pasid() argument
206 qi_submit_sync(iommu, &desc, 1, 0); in pasid_cache_invalidation_with_pasid()
[all …]
Dirq_remapping.c24 #include "iommu.h"
26 #include "../iommu-pages.h"
29 struct intel_iommu *iommu; member
36 struct intel_iommu *iommu; member
43 struct intel_iommu *iommu; member
71 * ->iommu->register_lock
80 static void iommu_disable_irq_remapping(struct intel_iommu *iommu);
84 static bool ir_pre_enabled(struct intel_iommu *iommu) in ir_pre_enabled() argument
86 return (iommu->flags & VTD_FLAG_IRQ_REMAP_PRE_ENABLED); in ir_pre_enabled()
89 static void clear_ir_pre_enabled(struct intel_iommu *iommu) in clear_ir_pre_enabled() argument
[all …]
Diommu.c27 #include "iommu.h"
28 #include "../dma-iommu.h"
30 #include "../iommu-pages.h"
119 * Looks up an IOMMU-probed device using its source ID.
125 * released by the iommu subsystem after being returned. The caller
129 struct device *device_rbtree_find(struct intel_iommu *iommu, u16 rid) in device_rbtree_find() argument
135 spin_lock_irqsave(&iommu->device_rbtree_lock, flags); in device_rbtree_find()
136 node = rb_find(&rid, &iommu->device_rbtree, device_rid_cmp_key); in device_rbtree_find()
139 spin_unlock_irqrestore(&iommu->device_rbtree_lock, flags); in device_rbtree_find()
144 static int device_rbtree_insert(struct intel_iommu *iommu, in device_rbtree_insert() argument
[all …]
Ddmar.c28 #include <linux/iommu.h>
33 #include "iommu.h"
35 #include "../iommu-pages.h"
68 static void free_iommu(struct intel_iommu *iommu);
462 if (dmaru->iommu) in dmar_free_drhd()
463 free_iommu(dmaru->iommu); in dmar_free_drhd()
502 drhd->iommu->node = node; in dmar_parse_one_rhsa()
767 pr_warn("No IOMMU scope found for ANDD enumeration ID %d (%s)\n", in dmar_acpi_insert_dev_scope()
940 x86_init.iommu.iommu_init = intel_iommu_init; in detect_intel_iommu()
953 static void unmap_iommu(struct intel_iommu *iommu) in unmap_iommu() argument
[all …]
Dcache.c13 #include <linux/iommu.h>
18 #include "iommu.h"
24 struct intel_iommu *iommu, struct device *dev, in cache_tage_match() argument
34 return tag->iommu == iommu; in cache_tage_match()
48 struct intel_iommu *iommu = info->iommu; in cache_tag_assign() local
58 tag->iommu = iommu; in cache_tag_assign()
66 tag->dev = iommu->iommu.dev; in cache_tag_assign()
71 if (cache_tage_match(temp, did, iommu, dev, pasid, type)) { in cache_tag_assign()
78 if (temp->iommu == iommu) in cache_tag_assign()
82 * Link cache tags of same iommu unit together, so corresponding in cache_tag_assign()
[all …]
Ddebugfs.c17 #include "iommu.h"
116 struct intel_iommu *iommu; in iommu_regset_show() local
122 for_each_active_iommu(iommu, drhd) { in iommu_regset_show()
124 seq_puts(m, "IOMMU: Invalid base address\n"); in iommu_regset_show()
129 seq_printf(m, "IOMMU: %s Register Base Address: %llx\n", in iommu_regset_show()
130 iommu->name, drhd->reg_base_addr); in iommu_regset_show()
136 raw_spin_lock_irqsave(&iommu->register_lock, flag); in iommu_regset_show()
138 value = dmar_readl(iommu->reg + iommu_regs_32[i].offset); in iommu_regset_show()
144 value = dmar_readq(iommu->reg + iommu_regs_64[i].offset); in iommu_regset_show()
149 raw_spin_unlock_irqrestore(&iommu->register_lock, flag); in iommu_regset_show()
[all …]
/linux-6.14.4/drivers/iommu/
Dsun50i-iommu.c14 #include <linux/iommu.h>
29 #include "iommu-pages.h"
101 struct iommu_device iommu; member
103 /* Lock to modify the IOMMU registers */
125 struct sun50i_iommu *iommu; member
138 static u32 iommu_read(struct sun50i_iommu *iommu, u32 offset) in iommu_read() argument
140 return readl(iommu->base + offset); in iommu_read()
143 static void iommu_write(struct sun50i_iommu *iommu, u32 offset, u32 value) in iommu_write() argument
145 writel(value, iommu->base + offset); in iommu_write()
149 * The Allwinner H6 IOMMU uses a 2-level page table.
[all …]
Dmsm_iommu.c18 #include <linux/iommu.h>
54 static int __enable_clocks(struct msm_iommu_dev *iommu) in __enable_clocks() argument
58 ret = clk_enable(iommu->pclk); in __enable_clocks()
62 if (iommu->clk) { in __enable_clocks()
63 ret = clk_enable(iommu->clk); in __enable_clocks()
65 clk_disable(iommu->pclk); in __enable_clocks()
71 static void __disable_clocks(struct msm_iommu_dev *iommu) in __disable_clocks() argument
73 if (iommu->clk) in __disable_clocks()
74 clk_disable(iommu->clk); in __disable_clocks()
75 clk_disable(iommu->pclk); in __disable_clocks()
[all …]
Drockchip-iommu.c3 * IOMMU API for Rockchip
17 #include <linux/iommu.h>
30 #include "iommu-pages.h"
95 /* list of clocks required by IOMMU */
116 struct iommu_device iommu; member
118 struct iommu_domain *domain; /* domain to which iommu is attached */
122 struct device_link *link; /* runtime PM link from IOMMU to master */
123 struct rk_iommu *iommu; member
144 * The Rockchip rk3288 iommu uses a 2-level page table.
153 * Each iommu device has a MMU_DTE_ADDR register that contains the physical
[all …]
Diommu-sysfs.c3 * IOMMU sysfs class support
10 #include <linux/iommu.h>
16 * As devices are added to the IOMMU, we'll add links to the group.
38 .name = "iommu",
50 * Init the struct device for the IOMMU. IOMMU specific attributes can
52 * IOMMU type.
54 int iommu_device_sysfs_add(struct iommu_device *iommu, in iommu_device_sysfs_add() argument
62 iommu->dev = kzalloc(sizeof(*iommu->dev), GFP_KERNEL); in iommu_device_sysfs_add()
63 if (!iommu->dev) in iommu_device_sysfs_add()
66 device_initialize(iommu->dev); in iommu_device_sysfs_add()
[all …]
DKconfig15 bool "IOMMU Hardware Support"
26 menu "Generic IOMMU Pagetable Support"
60 for 64KB pages/16MB supersections if indicated by the IOMMU driver.
86 bool "Export IOMMU internals in DebugFS"
89 Allows exposure of IOMMU device internals. This option enables
90 the use of debugfs by IOMMU drivers as required. Devices can,
91 at initialization time, cause the IOMMU code to create a top-level
92 debug/iommu directory, and then populate a subdirectory with
96 prompt "IOMMU default domain type"
101 Choose the type of IOMMU domain used to manage DMA API usage by
[all …]
/linux-6.14.4/Documentation/devicetree/bindings/pci/
Dpci-iommu.txt2 relationship between PCI(e) devices and IOMMU(s).
17 Requester ID. While a given PCI device can only master through one IOMMU, a
18 root complex may split masters across a set of IOMMUs (e.g. with one IOMMU per
22 and a mechanism is required to map from a PCI device to its IOMMU and sideband
25 For generic IOMMU bindings, see
26 Documentation/devicetree/bindings/iommu/iommu.txt.
35 - iommu-map: Maps a Requester ID to an IOMMU and associated IOMMU specifier
39 (rid-base,iommu,iommu-base,length).
42 the listed IOMMU, with the IOMMU specifier (r - rid-base + iommu-base).
44 - iommu-map-mask: A mask to be applied to each Requester ID prior to being
[all …]
/linux-6.14.4/drivers/iommu/amd/
Dinit.c20 #include <linux/amd-iommu.h>
26 #include <asm/iommu.h>
39 #include "../iommu-pages.h"
99 * structure describing one IOMMU in the ACPI table. Typically followed by one
119 * A device entry describing which devices a specific IOMMU translates and
137 * An AMD IOMMU memory definition structure. It defines things like exclusion
229 bool translation_pre_enabled(struct amd_iommu *iommu) in translation_pre_enabled() argument
231 return (iommu->flags & AMD_IOMMU_FLAG_TRANS_PRE_ENABLED); in translation_pre_enabled()
234 static void clear_translation_pre_enabled(struct amd_iommu *iommu) in clear_translation_pre_enabled() argument
236 iommu->flags &= ~AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; in clear_translation_pre_enabled()
[all …]
Dppr.c9 #include <linux/amd-iommu.h>
13 #include <asm/iommu.h>
18 #include "../iommu-pages.h"
20 int __init amd_iommu_alloc_ppr_log(struct amd_iommu *iommu) in amd_iommu_alloc_ppr_log() argument
22 iommu->ppr_log = iommu_alloc_4k_pages(iommu, GFP_KERNEL | __GFP_ZERO, in amd_iommu_alloc_ppr_log()
24 return iommu->ppr_log ? 0 : -ENOMEM; in amd_iommu_alloc_ppr_log()
27 void amd_iommu_enable_ppr_log(struct amd_iommu *iommu) in amd_iommu_enable_ppr_log() argument
31 if (iommu->ppr_log == NULL) in amd_iommu_enable_ppr_log()
34 iommu_feature_enable(iommu, CONTROL_PPR_EN); in amd_iommu_enable_ppr_log()
36 entry = iommu_virt_to_phys(iommu->ppr_log) | PPR_LOG_SIZE_512; in amd_iommu_enable_ppr_log()
[all …]
/linux-6.14.4/drivers/iommu/riscv/
Diommu-platform.c3 * RISC-V IOMMU as a platform device
19 #include "iommu-bits.h"
20 #include "iommu.h"
25 struct riscv_iommu_device *iommu = dev_get_drvdata(dev); in riscv_iommu_write_msi_msg() local
33 "uh oh, the IOMMU can't send MSIs to 0x%llx, sending to 0x%llx instead\n", in riscv_iommu_write_msi_msg()
39 riscv_iommu_writeq(iommu, RISCV_IOMMU_REG_MSI_CFG_TBL_ADDR(idx), addr); in riscv_iommu_write_msi_msg()
40 riscv_iommu_writel(iommu, RISCV_IOMMU_REG_MSI_CFG_TBL_DATA(idx), msg->data); in riscv_iommu_write_msi_msg()
41 riscv_iommu_writel(iommu, RISCV_IOMMU_REG_MSI_CFG_TBL_CTRL(idx), 0); in riscv_iommu_write_msi_msg()
48 struct riscv_iommu_device *iommu = NULL; in riscv_iommu_platform_probe() local
52 iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL); in riscv_iommu_platform_probe()
[all …]
Diommu.c3 * IOMMU API for RISC-V IOMMU implementations.
13 #define pr_fmt(fmt) "riscv-iommu: " fmt
18 #include <linux/iommu.h>
23 #include "../iommu-pages.h"
24 #include "iommu-bits.h"
25 #include "iommu.h"
37 /* RISC-V IOMMU PPN <> PHYS address conversions, PHYS <=> PPN[53:10] */
42 iommu_get_iommu_dev(dev, struct riscv_iommu_device, iommu)
44 /* IOMMU PSCID allocation namespace. */
69 static void *riscv_iommu_get_pages(struct riscv_iommu_device *iommu, int order) in riscv_iommu_get_pages() argument
[all …]
Diommu-pci.c7 * RISCV IOMMU as a PCIe device
16 #include <linux/iommu.h>
20 #include "iommu-bits.h"
21 #include "iommu.h"
23 /* QEMU RISC-V IOMMU implementation */
36 struct riscv_iommu_device *iommu; in riscv_iommu_pci_probe() local
53 iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL); in riscv_iommu_pci_probe()
54 if (!iommu) in riscv_iommu_pci_probe()
57 iommu->dev = dev; in riscv_iommu_pci_probe()
58 iommu->reg = pcim_iomap_table(pdev)[0]; in riscv_iommu_pci_probe()
[all …]
/linux-6.14.4/Documentation/devicetree/bindings/iommu/
Driscv,iommu.yaml4 $id: http://devicetree.org/schemas/iommu/riscv,iommu.yaml#
7 title: RISC-V IOMMU Architecture Implementation
13 The RISC-V IOMMU provides memory address translation and isolation for
22 Visit https://github.com/riscv-non-isa/riscv-iommu for more details.
24 For information on assigning RISC-V IOMMU to its peripheral devices,
25 see generic IOMMU bindings.
28 # For PCIe IOMMU hardware compatible property should contain the vendor
31 # actually required. For non-PCIe hardware implementations 'riscv,iommu'
37 - qemu,riscv-iommu
38 - const: riscv,iommu
[all …]
Diommu.txt5 IOMMU device node:
8 An IOMMU can provide the following services:
19 through the IOMMU and faulting when encountering accesses to unmapped
29 IOMMUs can be single-master or multiple-master. Single-master IOMMU devices
31 master IOMMU devices can translate accesses from more than one master.
33 The device tree node of the IOMMU device's parent bus must contain a valid
35 IOMMU maps to memory. An empty "dma-ranges" property means that there is a
36 1:1 mapping from IOMMU to memory.
40 - #iommu-cells: The number of cells in an IOMMU specifier needed to encode an
43 The meaning of the IOMMU specifier is defined by the device tree binding of
[all …]
Dqcom,iommu.yaml4 $id: http://devicetree.org/schemas/iommu/qcom,iommu.yaml#
7 title: Qualcomm Technologies legacy IOMMU implementations
14 a similar looking IOMMU, but without access to the global register space
23 - qcom,msm8916-iommu
24 - qcom,msm8917-iommu
25 - qcom,msm8953-iommu
26 - const: qcom,msm-iommu-v1
29 - qcom,msm8953-iommu
30 - qcom,msm8976-iommu
31 - const: qcom,msm-iommu-v2
[all …]
/linux-6.14.4/drivers/vfio/
Dvfio_iommu_type1.c3 * VFIO: IOMMU DMA mapping support for Type1 IOMMU
12 * We arbitrarily define a Type1 IOMMU as one matching the below code.
13 * It could be called the x86 IOMMU as it's designed for AMD-Vi & Intel
15 * implementing a similar IOMMU could make use of this. We expect the
16 * IOMMU to support the IOMMU API and have few to no restrictions around
17 * the IOVA range that can be mapped. The Type1 IOMMU is currently
19 * userspace pages pinned into memory. We also assume devices and IOMMU
20 * domains are PCI based as the IOMMU API is still centered around a
28 #include <linux/iommu.h>
44 #define DRIVER_DESC "Type1 IOMMU driver for VFIO"
[all …]
/linux-6.14.4/arch/powerpc/platforms/cell/
Diommu.c3 * IOMMU implementation for Cell Broadband Processor Architecture
24 #include <asm/iommu.h>
95 /* IOMMU sizing */
104 struct cbe_iommu *iommu; member
131 static void invalidate_tce_cache(struct cbe_iommu *iommu, unsigned long *pte, in invalidate_tce_cache() argument
138 reg = iommu->xlate_regs + IOC_IOPT_CacheInvd; in invalidate_tce_cache()
195 invalidate_tce_cache(window->iommu, io_pte, npages); in tce_build_cell()
218 __pa(window->iommu->pad_page) | in tce_free_cell()
229 invalidate_tce_cache(window->iommu, io_pte, npages); in tce_free_cell()
235 struct cbe_iommu *iommu = data; in ioc_interrupt() local
[all …]

12345678910>>...36