static void mc_handle_msi(struct irq_desc *desc)
 {
        struct mc_pcie *port = irq_desc_get_handler_data(desc);
+       struct irq_chip *chip = irq_desc_get_chip(desc);
        struct device *dev = port->dev;
        struct mc_msi *msi = &port->msi;
        void __iomem *bridge_base_addr =
        u32 bit;
        int ret;
 
+       chained_irq_enter(chip, desc);
+
        status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
        if (status & PM_MSI_INT_MSI_MASK) {
                status = readl_relaxed(bridge_base_addr + ISTATUS_MSI);
                                                    bit);
                }
        }
+
+       chained_irq_exit(chip, desc);
 }
 
 static void mc_msi_bottom_irq_ack(struct irq_data *data)
 static void mc_handle_intx(struct irq_desc *desc)
 {
        struct mc_pcie *port = irq_desc_get_handler_data(desc);
+       struct irq_chip *chip = irq_desc_get_chip(desc);
        struct device *dev = port->dev;
        void __iomem *bridge_base_addr =
                port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
        u32 bit;
        int ret;
 
+       chained_irq_enter(chip, desc);
+
        status = readl_relaxed(bridge_base_addr + ISTATUS_LOCAL);
        if (status & PM_MSI_INT_INTX_MASK) {
                status &= PM_MSI_INT_INTX_MASK;
                                                    bit);
                }
        }
+
+       chained_irq_exit(chip, desc);
 }
 
 static void mc_ack_intx_irq(struct irq_data *data)