summaryrefslogtreecommitdiffstats
path: root/include/linux/msi.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-05-19 13:58:45 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-05-19 13:58:45 -0400
commitd9351ea14ddca708d3cb384f828af4bf82fcc772 (patch)
tree90c5fe9067f1005ce512c63b2e664a670af72b4f /include/linux/msi.h
parent39feaa3ff4453594297574e116a55bd6d5371f37 (diff)
parentfb4e0592654adb31bc6f3a738d6499b816a655d6 (diff)
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull IRQ chip updates from Ingo Molnar: "A late irqchips update: - New TI INTR/INTA set of drivers - Rewrite of the stm32mp1-exti driver as a platform driver - Update the IOMMU MSI mapping API to be RT friendly - A number of cleanups and other low impact fixes" * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (34 commits) iommu/dma-iommu: Remove iommu_dma_map_msi_msg() irqchip/gic-v3-mbi: Don't map the MSI page in mbi_compose_m{b, s}i_msg() irqchip/ls-scfg-msi: Don't map the MSI page in ls_scfg_msi_compose_msg() irqchip/gic-v3-its: Don't map the MSI page in its_irq_compose_msi_msg() irqchip/gicv2m: Don't map the MSI page in gicv2m_compose_msi_msg() iommu/dma-iommu: Split iommu_dma_map_msi_msg() in two parts genirq/msi: Add a new field in msi_desc to store an IOMMU cookie arm64: arch_k3: Enable interrupt controller drivers irqchip/ti-sci-inta: Add msi domain support soc: ti: Add MSI domain bus support for Interrupt Aggregator irqchip/ti-sci-inta: Add support for Interrupt Aggregator driver dt-bindings: irqchip: Introduce TISCI Interrupt Aggregator bindings irqchip/ti-sci-intr: Add support for Interrupt Router driver dt-bindings: irqchip: Introduce TISCI Interrupt router bindings gpio: thunderx: Use the default parent apis for {request,release}_resources genirq: Introduce irq_chip_{request,release}_resource_parent() apis firmware: ti_sci: Add helper apis to manage resources firmware: ti_sci: Add RM mapping table for am654 firmware: ti_sci: Add support for IRQ management firmware: ti_sci: Add support for RM core ops ...
Diffstat (limited to 'include/linux/msi.h')
-rw-r--r--include/linux/msi.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/include/linux/msi.h b/include/linux/msi.h
index 052f04fcf953..d48e919d55ae 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -48,6 +48,14 @@ struct fsl_mc_msi_desc {
48}; 48};
49 49
50/** 50/**
51 * ti_sci_inta_msi_desc - TISCI based INTA specific msi descriptor data
52 * @dev_index: TISCI device index
53 */
54struct ti_sci_inta_msi_desc {
55 u16 dev_index;
56};
57
58/**
51 * struct msi_desc - Descriptor structure for MSI based interrupts 59 * struct msi_desc - Descriptor structure for MSI based interrupts
52 * @list: List head for management 60 * @list: List head for management
53 * @irq: The base interrupt number 61 * @irq: The base interrupt number
@@ -68,6 +76,7 @@ struct fsl_mc_msi_desc {
68 * @mask_base: [PCI MSI-X] Mask register base address 76 * @mask_base: [PCI MSI-X] Mask register base address
69 * @platform: [platform] Platform device specific msi descriptor data 77 * @platform: [platform] Platform device specific msi descriptor data
70 * @fsl_mc: [fsl-mc] FSL MC device specific msi descriptor data 78 * @fsl_mc: [fsl-mc] FSL MC device specific msi descriptor data
79 * @inta: [INTA] TISCI based INTA specific msi descriptor data
71 */ 80 */
72struct msi_desc { 81struct msi_desc {
73 /* Shared device/bus type independent data */ 82 /* Shared device/bus type independent data */
@@ -77,6 +86,9 @@ struct msi_desc {
77 struct device *dev; 86 struct device *dev;
78 struct msi_msg msg; 87 struct msi_msg msg;
79 struct irq_affinity_desc *affinity; 88 struct irq_affinity_desc *affinity;
89#ifdef CONFIG_IRQ_MSI_IOMMU
90 const void *iommu_cookie;
91#endif
80 92
81 union { 93 union {
82 /* PCI MSI/X specific data */ 94 /* PCI MSI/X specific data */
@@ -106,6 +118,7 @@ struct msi_desc {
106 */ 118 */
107 struct platform_msi_desc platform; 119 struct platform_msi_desc platform;
108 struct fsl_mc_msi_desc fsl_mc; 120 struct fsl_mc_msi_desc fsl_mc;
121 struct ti_sci_inta_msi_desc inta;
109 }; 122 };
110}; 123};
111 124
@@ -119,6 +132,29 @@ struct msi_desc {
119#define for_each_msi_entry_safe(desc, tmp, dev) \ 132#define for_each_msi_entry_safe(desc, tmp, dev) \
120 list_for_each_entry_safe((desc), (tmp), dev_to_msi_list((dev)), list) 133 list_for_each_entry_safe((desc), (tmp), dev_to_msi_list((dev)), list)
121 134
135#ifdef CONFIG_IRQ_MSI_IOMMU
136static inline const void *msi_desc_get_iommu_cookie(struct msi_desc *desc)
137{
138 return desc->iommu_cookie;
139}
140
141static inline void msi_desc_set_iommu_cookie(struct msi_desc *desc,
142 const void *iommu_cookie)
143{
144 desc->iommu_cookie = iommu_cookie;
145}
146#else
147static inline const void *msi_desc_get_iommu_cookie(struct msi_desc *desc)
148{
149 return NULL;
150}
151
152static inline void msi_desc_set_iommu_cookie(struct msi_desc *desc,
153 const void *iommu_cookie)
154{
155}
156#endif
157
122#ifdef CONFIG_PCI_MSI 158#ifdef CONFIG_PCI_MSI
123#define first_pci_msi_entry(pdev) first_msi_entry(&(pdev)->dev) 159#define first_pci_msi_entry(pdev) first_msi_entry(&(pdev)->dev)
124#define for_each_pci_msi_entry(desc, pdev) \ 160#define for_each_pci_msi_entry(desc, pdev) \