#include <linux/pseudo_fs.h>
 #include <linux/poll.h>
 #include <linux/sched/signal.h>
-
+#include <linux/interrupt.h>
+#include <asm/xive.h>
 #include <misc/ocxl.h>
 
 #include <uapi/misc/cxl.h>
        struct ocxl_hw_afu *afu = ctx->hw_afu;
        struct device *dev = afu->dev;
        struct ocxlflash_irqs *irq;
-       void __iomem *vtrig;
+       struct xive_irq_data *xd;
        u32 virq;
        int rc = 0;
 
                goto err1;
        }
 
-       vtrig = ioremap(irq->ptrig, PAGE_SIZE);
-       if (unlikely(!vtrig)) {
-               dev_err(dev, "%s: Trigger page mapping failed\n", __func__);
-               rc = -ENOMEM;
+       xd = irq_get_handler_data(virq);
+       if (unlikely(!xd)) {
+               dev_err(dev, "%s: Can't get interrupt data\n", __func__);
+               rc = -ENXIO;
                goto err2;
        }
 
        irq->virq = virq;
-       irq->vtrig = vtrig;
+       irq->vtrig = xd->trig_mmio;
 out:
        return rc;
 err2:
        }
 
        irq = &ctx->irqs[num];
-       if (irq->vtrig)
-               iounmap(irq->vtrig);
 
        if (irq_find_mapping(NULL, irq->hwirq)) {
                free_irq(irq->virq, cookie);
                }
 
                irqs[i].hwirq = hwirq;
-               irqs[i].ptrig = addr;
        }
 
        ctx->irqs = irqs;