static inline __attribute_const__ u32 msi_multi_mask(struct msi_desc *desc)
 {
        /* Don't shift by >= width of type */
-       if (desc->msi_attrib.multi_cap >= 5)
+       if (desc->pci.msi_attrib.multi_cap >= 5)
                return 0xffffffff;
-       return (1 << (1 << desc->msi_attrib.multi_cap)) - 1;
+       return (1 << (1 << desc->pci.msi_attrib.multi_cap)) - 1;
 }
 
 static noinline void pci_msi_update_mask(struct msi_desc *desc, u32 clear, u32 set)
        raw_spinlock_t *lock = &desc->dev->msi_lock;
        unsigned long flags;
 
-       if (!desc->msi_attrib.can_mask)
+       if (!desc->pci.msi_attrib.can_mask)
                return;
 
        raw_spin_lock_irqsave(lock, flags);
-       desc->msi_mask &= ~clear;
-       desc->msi_mask |= set;
-       pci_write_config_dword(msi_desc_to_pci_dev(desc), desc->mask_pos,
-                              desc->msi_mask);
+       desc->pci.msi_mask &= ~clear;
+       desc->pci.msi_mask |= set;
+       pci_write_config_dword(msi_desc_to_pci_dev(desc), desc->pci.mask_pos,
+                              desc->pci.msi_mask);
        raw_spin_unlock_irqrestore(lock, flags);
 }
 
 
 static inline void __iomem *pci_msix_desc_addr(struct msi_desc *desc)
 {
-       return desc->mask_base + desc->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
+       return desc->pci.mask_base + desc->pci.msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
 }
 
 /*
 {
        void __iomem *desc_addr = pci_msix_desc_addr(desc);
 
-       if (desc->msi_attrib.can_mask)
+       if (desc->pci.msi_attrib.can_mask)
                writel(ctrl, desc_addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
 }
 
 static inline void pci_msix_mask(struct msi_desc *desc)
 {
-       desc->msix_ctrl |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
-       pci_msix_write_vector_ctrl(desc, desc->msix_ctrl);
+       desc->pci.msix_ctrl |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
+       pci_msix_write_vector_ctrl(desc, desc->pci.msix_ctrl);
        /* Flush write to device */
-       readl(desc->mask_base);
+       readl(desc->pci.mask_base);
 }
 
 static inline void pci_msix_unmask(struct msi_desc *desc)
 {
-       desc->msix_ctrl &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT;
-       pci_msix_write_vector_ctrl(desc, desc->msix_ctrl);
+       desc->pci.msix_ctrl &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT;
+       pci_msix_write_vector_ctrl(desc, desc->pci.msix_ctrl);
 }
 
 static void __pci_msi_mask_desc(struct msi_desc *desc, u32 mask)
 {
-       if (desc->msi_attrib.is_msix)
+       if (desc->pci.msi_attrib.is_msix)
                pci_msix_mask(desc);
        else
                pci_msi_mask(desc, mask);
 
 static void __pci_msi_unmask_desc(struct msi_desc *desc, u32 mask)
 {
-       if (desc->msi_attrib.is_msix)
+       if (desc->pci.msi_attrib.is_msix)
                pci_msix_unmask(desc);
        else
                pci_msi_unmask(desc, mask);
 
        BUG_ON(dev->current_state != PCI_D0);
 
-       if (entry->msi_attrib.is_msix) {
+       if (entry->pci.msi_attrib.is_msix) {
                void __iomem *base = pci_msix_desc_addr(entry);
 
-               if (WARN_ON_ONCE(entry->msi_attrib.is_virtual))
+               if (WARN_ON_ONCE(entry->pci.msi_attrib.is_virtual))
                        return;
 
                msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR);
 
                pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
                                      &msg->address_lo);
-               if (entry->msi_attrib.is_64) {
+               if (entry->pci.msi_attrib.is_64) {
                        pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
                                              &msg->address_hi);
                        pci_read_config_word(dev, pos + PCI_MSI_DATA_64, &data);
 
        if (dev->current_state != PCI_D0 || pci_dev_is_disconnected(dev)) {
                /* Don't touch the hardware now */
-       } else if (entry->msi_attrib.is_msix) {
+       } else if (entry->pci.msi_attrib.is_msix) {
                void __iomem *base = pci_msix_desc_addr(entry);
-               u32 ctrl = entry->msix_ctrl;
+               u32 ctrl = entry->pci.msix_ctrl;
                bool unmasked = !(ctrl & PCI_MSIX_ENTRY_CTRL_MASKBIT);
 
-               if (entry->msi_attrib.is_virtual)
+               if (entry->pci.msi_attrib.is_virtual)
                        goto skip;
 
                /*
 
                pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
                msgctl &= ~PCI_MSI_FLAGS_QSIZE;
-               msgctl |= entry->msi_attrib.multiple << 4;
+               msgctl |= entry->pci.msi_attrib.multiple << 4;
                pci_write_config_word(dev, pos + PCI_MSI_FLAGS, msgctl);
 
                pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
                                       msg->address_lo);
-               if (entry->msi_attrib.is_64) {
+               if (entry->pci.msi_attrib.is_64) {
                        pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
                                               msg->address_hi);
                        pci_write_config_word(dev, pos + PCI_MSI_DATA_64,
        pci_msi_teardown_msi_irqs(dev);
 
        list_for_each_entry_safe(entry, tmp, msi_list, list) {
-               if (entry->msi_attrib.is_msix) {
+               if (entry->pci.msi_attrib.is_msix) {
                        if (list_is_last(&entry->list, msi_list))
-                               iounmap(entry->mask_base);
+                               iounmap(entry->pci.mask_base);
                }
 
                list_del(&entry->list);
        pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
        pci_msi_update_mask(entry, 0, 0);
        control &= ~PCI_MSI_FLAGS_QSIZE;
-       control |= (entry->msi_attrib.multiple << 4) | PCI_MSI_FLAGS_ENABLE;
+       control |= (entry->pci.msi_attrib.multiple << 4) | PCI_MSI_FLAGS_ENABLE;
        pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
 }
 
 
        arch_restore_msi_irqs(dev);
        for_each_pci_msi_entry(entry, dev)
-               pci_msix_write_vector_ctrl(entry, entry->msix_ctrl);
+               pci_msix_write_vector_ctrl(entry, entry->pci.msix_ctrl);
 
        pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
 }
        if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
                control |= PCI_MSI_FLAGS_MASKBIT;
 
-       entry->msi_attrib.is_msix       = 0;
-       entry->msi_attrib.is_64         = !!(control & PCI_MSI_FLAGS_64BIT);
-       entry->msi_attrib.is_virtual    = 0;
-       entry->msi_attrib.entry_nr      = 0;
-       entry->msi_attrib.can_mask      = !pci_msi_ignore_mask &&
+       entry->pci.msi_attrib.is_msix   = 0;
+       entry->pci.msi_attrib.is_64             = !!(control & PCI_MSI_FLAGS_64BIT);
+       entry->pci.msi_attrib.is_virtual    = 0;
+       entry->pci.msi_attrib.entry_nr  = 0;
+       entry->pci.msi_attrib.can_mask  = !pci_msi_ignore_mask &&
                                          !!(control & PCI_MSI_FLAGS_MASKBIT);
-       entry->msi_attrib.default_irq   = dev->irq;     /* Save IOAPIC IRQ */
-       entry->msi_attrib.multi_cap     = (control & PCI_MSI_FLAGS_QMASK) >> 1;
-       entry->msi_attrib.multiple      = ilog2(__roundup_pow_of_two(nvec));
+       entry->pci.msi_attrib.default_irq       = dev->irq;     /* Save IOAPIC IRQ */
+       entry->pci.msi_attrib.multi_cap = (control & PCI_MSI_FLAGS_QMASK) >> 1;
+       entry->pci.msi_attrib.multiple  = ilog2(__roundup_pow_of_two(nvec));
 
        if (control & PCI_MSI_FLAGS_64BIT)
-               entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
+               entry->pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
        else
-               entry->mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
+               entry->pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
 
        /* Save the initial mask status */
-       if (entry->msi_attrib.can_mask)
-               pci_read_config_dword(dev, entry->mask_pos, &entry->msi_mask);
+       if (entry->pci.msi_attrib.can_mask)
+               pci_read_config_dword(dev, entry->pci.mask_pos, &entry->pci.msi_mask);
 
 out:
        kfree(masks);
                        goto out;
                }
 
-               entry->msi_attrib.is_msix       = 1;
-               entry->msi_attrib.is_64         = 1;
+               entry->pci.msi_attrib.is_msix   = 1;
+               entry->pci.msi_attrib.is_64     = 1;
 
                if (entries)
-                       entry->msi_attrib.entry_nr = entries[i].entry;
+                       entry->pci.msi_attrib.entry_nr = entries[i].entry;
                else
-                       entry->msi_attrib.entry_nr = i;
+                       entry->pci.msi_attrib.entry_nr = i;
 
-               entry->msi_attrib.is_virtual =
-                       entry->msi_attrib.entry_nr >= vec_count;
+               entry->pci.msi_attrib.is_virtual =
+                       entry->pci.msi_attrib.entry_nr >= vec_count;
 
-               entry->msi_attrib.can_mask      = !pci_msi_ignore_mask &&
-                                                 !entry->msi_attrib.is_virtual;
+               entry->pci.msi_attrib.can_mask  = !pci_msi_ignore_mask &&
+                                                 !entry->pci.msi_attrib.is_virtual;
 
-               entry->msi_attrib.default_irq   = dev->irq;
-               entry->mask_base                = base;
+               entry->pci.msi_attrib.default_irq       = dev->irq;
+               entry->pci.mask_base                    = base;
 
-               if (entry->msi_attrib.can_mask) {
+               if (entry->pci.msi_attrib.can_mask) {
                        addr = pci_msix_desc_addr(entry);
-                       entry->msix_ctrl = readl(addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
+                       entry->pci.msix_ctrl = readl(addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
                }
 
                list_add_tail(&entry->list, dev_to_msi_list(&dev->dev));
        pci_msi_unmask(desc, msi_multi_mask(desc));
 
        /* Restore dev->irq to its default pin-assertion IRQ */
-       dev->irq = desc->msi_attrib.default_irq;
+       dev->irq = desc->pci.msi_attrib.default_irq;
        pcibios_alloc_irq(dev);
 }
 
                struct msi_desc *entry;
 
                for_each_pci_msi_entry(entry, dev) {
-                       if (entry->msi_attrib.entry_nr == nr)
+                       if (entry->pci.msi_attrib.entry_nr == nr)
                                return entry->irq;
                }
                WARN_ON_ONCE(1);
                struct msi_desc *entry;
 
                for_each_pci_msi_entry(entry, dev) {
-                       if (entry->msi_attrib.entry_nr == nr)
+                       if (entry->pci.msi_attrib.entry_nr == nr)
                                return &entry->affinity->mask;
                }
                WARN_ON_ONCE(1);
 {
        struct pci_dev *dev = msi_desc_to_pci_dev(desc);
 
-       return (irq_hw_number_t)desc->msi_attrib.entry_nr |
+       return (irq_hw_number_t)desc->pci.msi_attrib.entry_nr |
                pci_dev_id(dev) << 11 |
                (pci_domain_nr(dev->bus) & 0xFFFFFFFF) << 27;
 }
 
 static inline bool pci_msi_desc_is_multi_msi(struct msi_desc *desc)
 {
-       return !desc->msi_attrib.is_msix && desc->nvec_used > 1;
+       return !desc->pci.msi_attrib.is_msix && desc->nvec_used > 1;
 }
 
 /**
        if (pci_msi_desc_is_multi_msi(desc) &&
            !(info->flags & MSI_FLAG_MULTI_PCI_MSI))
                return 1;
-       else if (desc->msi_attrib.is_msix && !(info->flags & MSI_FLAG_PCI_MSIX))
+       else if (desc->pci.msi_attrib.is_msix && !(info->flags & MSI_FLAG_PCI_MSIX))
                return -ENOTSUPP;
 
        return 0;
 
 typedef void (*irq_write_msi_msg_t)(struct msi_desc *desc,
                                    struct msi_msg *msg);
 
+/**
+ * pci_msi_desc - PCI/MSI specific MSI descriptor data
+ *
+ * @msi_mask:  [PCI MSI]   MSI cached mask bits
+ * @msix_ctrl: [PCI MSI-X] MSI-X cached per vector control bits
+ * @is_msix:   [PCI MSI/X] True if MSI-X
+ * @multiple:  [PCI MSI/X] log2 num of messages allocated
+ * @multi_cap: [PCI MSI/X] log2 num of messages supported
+ * @can_mask:  [PCI MSI/X] Masking supported?
+ * @is_64:     [PCI MSI/X] Address size: 0=32bit 1=64bit
+ * @entry_nr:  [PCI MSI/X] Entry which is described by this descriptor
+ * @default_irq:[PCI MSI/X] The default pre-assigned non-MSI irq
+ * @mask_pos:  [PCI MSI]   Mask register position
+ * @mask_base: [PCI MSI-X] Mask register base address
+ */
+struct pci_msi_desc {
+       union {
+               u32 msi_mask;
+               u32 msix_ctrl;
+       };
+       struct {
+               u8      is_msix         : 1;
+               u8      multiple        : 3;
+               u8      multi_cap       : 3;
+               u8      can_mask        : 1;
+               u8      is_64           : 1;
+               u8      is_virtual      : 1;
+               u16     entry_nr;
+               unsigned default_irq;
+       } msi_attrib;
+       union {
+               u8      mask_pos;
+               void __iomem *mask_base;
+       };
+};
+
 /**
  * platform_msi_desc - Platform device specific msi descriptor data
  * @msi_priv_data:     Pointer to platform private data
  *                     address or data changes
  * @write_msi_msg_data:        Data parameter for the callback.
  *
- * @msi_mask:  [PCI MSI]   MSI cached mask bits
- * @msix_ctrl: [PCI MSI-X] MSI-X cached per vector control bits
- * @is_msix:   [PCI MSI/X] True if MSI-X
- * @multiple:  [PCI MSI/X] log2 num of messages allocated
- * @multi_cap: [PCI MSI/X] log2 num of messages supported
- * @maskbit:   [PCI MSI/X] Mask-Pending bit supported?
- * @is_64:     [PCI MSI/X] Address size: 0=32bit 1=64bit
- * @entry_nr:  [PCI MSI/X] Entry which is described by this descriptor
- * @default_irq:[PCI MSI/X] The default pre-assigned non-MSI irq
- * @mask_pos:  [PCI MSI]   Mask register position
- * @mask_base: [PCI MSI-X] Mask register base address
+ * @pci:       [PCI]       PCI speficic msi descriptor data
  * @platform:  [platform]  Platform device specific msi descriptor data
  * @fsl_mc:    [fsl-mc]    FSL MC device specific msi descriptor data
  * @inta:      [INTA]      TISCI based INTA specific msi descriptor data
        void *write_msi_msg_data;
 
        union {
-               /* PCI MSI/X specific data */
-               struct {
-                       union {
-                               u32 msi_mask;
-                               u32 msix_ctrl;
-                       };
-                       struct {
-                               u8      is_msix         : 1;
-                               u8      multiple        : 3;
-                               u8      multi_cap       : 3;
-                               u8      can_mask        : 1;
-                               u8      is_64           : 1;
-                               u8      is_virtual      : 1;
-                               u16     entry_nr;
-                               unsigned default_irq;
-                       } msi_attrib;
-                       union {
-                               u8      mask_pos;
-                               void __iomem *mask_base;
-                       };
-               };
-
-               /*
-                * Non PCI variants add their data structure here. New
-                * entries need to use a named structure. We want
-                * proper name spaces for this. The PCI part is
-                * anonymous for now as it would require an immediate
-                * tree wide cleanup.
-                */
-               struct platform_msi_desc platform;
-               struct fsl_mc_msi_desc fsl_mc;
-               struct ti_sci_inta_msi_desc inta;
+               struct pci_msi_desc             pci;
+               struct platform_msi_desc        platform;
+               struct fsl_mc_msi_desc          fsl_mc;
+               struct ti_sci_inta_msi_desc     inta;
        };
 };