| /kernel/linux/linux-6.6/arch/sparc/kernel/ |
| D | iommu.c | 2 /* 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 …]
|
| D | iommu-common.c | 3 * 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 …]
|
| /kernel/linux/linux-5.10/arch/sparc/kernel/ |
| D | iommu.c | 2 /* 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 …]
|
| D | iommu-common.c | 3 * 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 …]
|
| /kernel/linux/linux-6.6/drivers/iommu/ |
| D | sun50i-iommu.c | 14 #include <linux/iommu.h> 99 struct iommu_device iommu; member 101 /* Lock to modify the IOMMU registers */ 124 struct sun50i_iommu *iommu; member 137 static u32 iommu_read(struct sun50i_iommu *iommu, u32 offset) in iommu_read() argument 139 return readl(iommu->base + offset); in iommu_read() 142 static void iommu_write(struct sun50i_iommu *iommu, u32 offset, u32 value) in iommu_write() argument 144 writel(value, iommu->base + offset); in iommu_write() 148 * The Allwinner H6 IOMMU uses a 2-level page table. 157 * The IOMMU supports a single DT, pointed by the IOMMU_TTB_REG [all …]
|
| D | msm_iommu.c | 18 #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 …]
|
| D | rockchip-iommu.c | 3 * IOMMU API for Rockchip 17 #include <linux/iommu.h> 92 /* list of clocks required by IOMMU */ 113 struct iommu_device iommu; member 115 struct iommu_domain *domain; /* domain to which iommu is attached */ 120 struct device_link *link; /* runtime PM link from IOMMU to master */ 121 struct rk_iommu *iommu; member 142 * The Rockchip rk3288 iommu uses a 2-level page table. 151 * Each iommu device has a MMU_DTE_ADDR register that contains the physical 304 * rk3288 iova (IOMMU Virtual Address) format [all …]
|
| D | iommu-sysfs.c | 3 * 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 …]
|
| /kernel/linux/linux-5.10/drivers/iommu/ |
| D | sun50i-iommu.c | 10 #include <linux/dma-iommu.h> 15 #include <linux/iommu.h> 98 struct iommu_device iommu; member 100 /* Lock to modify the IOMMU registers */ 123 struct sun50i_iommu *iommu; member 136 static u32 iommu_read(struct sun50i_iommu *iommu, u32 offset) in iommu_read() argument 138 return readl(iommu->base + offset); in iommu_read() 141 static void iommu_write(struct sun50i_iommu *iommu, u32 offset, u32 value) in iommu_write() argument 143 writel(value, iommu->base + offset); in iommu_write() 147 * The Allwinner H6 IOMMU uses a 2-level page table. [all …]
|
| D | msm_iommu.c | 18 #include <linux/iommu.h> 55 static int __enable_clocks(struct msm_iommu_dev *iommu) in __enable_clocks() argument 59 ret = clk_enable(iommu->pclk); in __enable_clocks() 63 if (iommu->clk) { in __enable_clocks() 64 ret = clk_enable(iommu->clk); in __enable_clocks() 66 clk_disable(iommu->pclk); in __enable_clocks() 72 static void __disable_clocks(struct msm_iommu_dev *iommu) in __disable_clocks() argument 74 if (iommu->clk) in __disable_clocks() 75 clk_disable(iommu->clk); in __disable_clocks() 76 clk_disable(iommu->pclk); in __disable_clocks() [all …]
|
| D | rockchip-iommu.c | 3 * IOMMU API for Rockchip 13 #include <linux/dma-iommu.h> 18 #include <linux/iommu.h> 94 /* list of clocks required by IOMMU */ 107 struct iommu_device iommu; member 109 struct iommu_domain *domain; /* domain to which iommu is attached */ 114 struct device_link *link; /* runtime PM link from IOMMU to master */ 115 struct rk_iommu *iommu; member 134 * The Rockchip rk3288 iommu uses a 2-level page table. 143 * Each iommu device has a MMU_DTE_ADDR register that contains the physical [all …]
|
| D | iommu-sysfs.c | 3 * 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 …]
|
| /kernel/linux/linux-6.6/Documentation/devicetree/bindings/pci/ |
| D | pci-iommu.txt | 2 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 …]
|
| /kernel/linux/linux-5.10/Documentation/devicetree/bindings/pci/ |
| D | pci-iommu.txt | 2 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 …]
|
| /kernel/linux/linux-5.10/drivers/iommu/amd/ |
| D | init.c | 19 #include <linux/amd-iommu.h> 25 #include <asm/iommu.h> 102 * structure describing one IOMMU in the ACPI table. Typically followed by one 122 * A device entry describing which devices a specific IOMMU translates and 138 * An AMD IOMMU memory definition structure. It defines things like exclusion 203 * mappings of the PCI device ids to the actual requestor ids on the IOMMU. 209 * The rlookup table is used to find the IOMMU which is responsible 222 * AMD IOMMU allows up to 2^16 different protection domains. This is a bitmap 267 bool translation_pre_enabled(struct amd_iommu *iommu) in translation_pre_enabled() argument 269 return (iommu->flags & AMD_IOMMU_FLAG_TRANS_PRE_ENABLED); in translation_pre_enabled() [all …]
|
| /kernel/linux/linux-6.6/drivers/iommu/amd/ |
| D | init.c | 20 #include <linux/amd-iommu.h> 26 #include <asm/iommu.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 199 * AMD IOMMU allows up to 2^16 different protection domains. This is a bitmap 239 bool translation_pre_enabled(struct amd_iommu *iommu) in translation_pre_enabled() argument 241 return (iommu->flags & AMD_IOMMU_FLAG_TRANS_PRE_ENABLED); in translation_pre_enabled() 244 static void clear_translation_pre_enabled(struct amd_iommu *iommu) in clear_translation_pre_enabled() argument 246 iommu->flags &= ~AMD_IOMMU_FLAG_TRANS_PRE_ENABLED; in clear_translation_pre_enabled() [all …]
|
| /kernel/linux/linux-5.10/Documentation/devicetree/bindings/iommu/ |
| D | iommu.txt | 5 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 …]
|
| /kernel/linux/linux-6.6/drivers/iommu/intel/ |
| D | cap_audit.c | 3 * cap_audit.c - audit iommu capabilities for boot time and hot plug 13 #include "iommu.h" 74 static int cap_audit_hotplug(struct intel_iommu *iommu, enum cap_audit_type type) in cap_audit_hotplug() argument 81 CHECK_FEATURE_MISMATCH_HOTPLUG(iommu, cap, pi_support, CAP_PI_MASK); in cap_audit_hotplug() 82 CHECK_FEATURE_MISMATCH_HOTPLUG(iommu, ecap, eim_support, ECAP_EIM_MASK); in cap_audit_hotplug() 86 CHECK_FEATURE_MISMATCH_HOTPLUG(iommu, cap, fl5lp_support, CAP_FL5LP_MASK); in cap_audit_hotplug() 87 CHECK_FEATURE_MISMATCH_HOTPLUG(iommu, cap, fl1gp_support, CAP_FL1GP_MASK); in cap_audit_hotplug() 88 CHECK_FEATURE_MISMATCH_HOTPLUG(iommu, cap, read_drain, CAP_RD_MASK); in cap_audit_hotplug() 89 CHECK_FEATURE_MISMATCH_HOTPLUG(iommu, cap, write_drain, CAP_WD_MASK); in cap_audit_hotplug() 90 CHECK_FEATURE_MISMATCH_HOTPLUG(iommu, cap, pgsel_inv, CAP_PSI_MASK); in cap_audit_hotplug() [all …]
|
| D | irq_remapping.c | 23 #include "iommu.h" 33 struct intel_iommu *iommu; member 40 struct intel_iommu *iommu; member 47 struct intel_iommu *iommu; member 74 * ->iommu->register_lock 83 static void iommu_disable_irq_remapping(struct intel_iommu *iommu); 87 static bool ir_pre_enabled(struct intel_iommu *iommu) in ir_pre_enabled() argument 89 return (iommu->flags & VTD_FLAG_IRQ_REMAP_PRE_ENABLED); in ir_pre_enabled() 92 static void clear_ir_pre_enabled(struct intel_iommu *iommu) in clear_ir_pre_enabled() argument 94 iommu->flags &= ~VTD_FLAG_IRQ_REMAP_PRE_ENABLED; in clear_ir_pre_enabled() [all …]
|
| D | svm.c | 22 #include "iommu.h" 25 #include "../iommu-sva.h" 64 int intel_svm_enable_prq(struct intel_iommu *iommu) in intel_svm_enable_prq() argument 72 pr_warn("IOMMU: %s: Failed to allocate page request queue\n", in intel_svm_enable_prq() 73 iommu->name); in intel_svm_enable_prq() 76 iommu->prq = page_address(pages); in intel_svm_enable_prq() 78 irq = dmar_alloc_hwirq(IOMMU_IRQ_ID_OFFSET_PRQ + iommu->seq_id, iommu->node, iommu); in intel_svm_enable_prq() 80 pr_err("IOMMU: %s: Failed to create IRQ vector for page request queue\n", in intel_svm_enable_prq() 81 iommu->name); in intel_svm_enable_prq() 85 iommu->pr_irq = irq; in intel_svm_enable_prq() [all …]
|
| D | iommu.c | 27 #include "iommu.h" 28 #include "../dma-iommu.h" 30 #include "../iommu-sva.h" 223 static inline bool context_copied(struct intel_iommu *iommu, u8 bus, u8 devfn) in context_copied() argument 225 if (!iommu->copied_tables) in context_copied() 228 return test_bit(((long)bus << 8) | devfn, iommu->copied_tables); in context_copied() 232 set_context_copied(struct intel_iommu *iommu, u8 bus, u8 devfn) in set_context_copied() argument 234 set_bit(((long)bus << 8) | devfn, iommu->copied_tables); in set_context_copied() 238 clear_context_copied(struct intel_iommu *iommu, u8 bus, u8 devfn) in clear_context_copied() argument 240 clear_bit(((long)bus << 8) | devfn, iommu->copied_tables); in clear_context_copied() [all …]
|
| /kernel/linux/linux-5.10/drivers/iommu/intel/ |
| D | irq_remapping.c | 13 #include <linux/intel-iommu.h> 33 struct intel_iommu *iommu; member 40 struct intel_iommu *iommu; member 47 struct intel_iommu *iommu; member 74 * ->iommu->register_lock 83 static void iommu_disable_irq_remapping(struct intel_iommu *iommu); 86 static bool ir_pre_enabled(struct intel_iommu *iommu) in ir_pre_enabled() argument 88 return (iommu->flags & VTD_FLAG_IRQ_REMAP_PRE_ENABLED); in ir_pre_enabled() 91 static void clear_ir_pre_enabled(struct intel_iommu *iommu) in clear_ir_pre_enabled() argument 93 iommu->flags &= ~VTD_FLAG_IRQ_REMAP_PRE_ENABLED; in clear_ir_pre_enabled() [all …]
|
| D | iommu.c | 33 #include <linux/iommu.h> 34 #include <linux/intel-iommu.h> 47 #include <asm/iommu.h> 90 * to the IOMMU core, which will then use this information to split 94 * Traditionally the IOMMU core just handed us the mappings directly, 101 * If at some point we'd like to utilize the IOMMU core's new behavior, 171 /* global iommu list, set NULL for ignored DMAR units */ 293 * 2. It maps to each iommu if successful. 294 * 3. Each iommu mapps to this domain if successful. 414 static bool translation_pre_enabled(struct intel_iommu *iommu) in translation_pre_enabled() argument [all …]
|
| /kernel/linux/linux-6.6/Documentation/devicetree/bindings/iommu/ |
| D | iommu.txt | 5 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 …]
|
| /kernel/linux/linux-5.10/Documentation/devicetree/bindings/virtio/ |
| D | iommu.txt | 1 * virtio IOMMU PCI device 3 When virtio-iommu uses the PCI transport, its programming interface is 5 device tree statically describes the relation between IOMMU and DMA 6 masters. Therefore, the PCI root complex that hosts the virtio-iommu 7 contains a child node representing the IOMMU device explicitly. 11 - compatible: Should be "virtio,pci-iommu" 12 - reg: PCI address of the IOMMU. As defined in the PCI Bus 18 - #iommu-cells: Each platform DMA master managed by the IOMMU is assigned 20 For virtio-iommu, #iommu-cells must be 1. 24 - DMA from the IOMMU device isn't managed by another IOMMU. Therefore the [all …]
|