#define ISMT_DESC_ENTRIES      2       /* number of descriptor entries */
 #define ISMT_MAX_RETRIES       3       /* number of SMBus retries to attempt */
+#define ISMT_LOG_ENTRIES       3       /* number of interrupt cause log entries */
 
 /* Hardware Descriptor Constants - Control Field */
 #define ISMT_DESC_CWRL 0x01    /* Command/Write Length */
        u8 head;                                /* ring buffer head pointer */
        struct completion cmp;                  /* interrupt completion */
        u8 buffer[I2C_SMBUS_BLOCK_MAX + 16];    /* temp R/W data buffer */
+       dma_addr_t log_dma;
+       u32 *log;
 };
 
 static const struct pci_device_id ismt_ids[] = {
        memset(desc, 0, sizeof(struct ismt_desc));
        desc->tgtaddr_rw = ISMT_DESC_ADDR_RW(addr, read_write);
 
+       /* Always clear the log entries */
+       memset(priv->log, 0, ISMT_LOG_ENTRIES * sizeof(u32));
+
        /* Initialize common control bits */
        if (likely(pci_dev_msi_enabled(priv->pci_dev)))
                desc->control = ISMT_DESC_INT | ISMT_DESC_FAIR;
        /* initialize the Master Descriptor Base Address (MDBA) */
        writeq(priv->io_rng_dma, priv->smba + ISMT_MSTR_MDBA);
 
+       writeq(priv->log_dma, priv->smba + ISMT_GR_SMTICL);
+
        /* initialize the Master Control Register (MCTRL) */
        writel(ISMT_MCTRL_MEIE, priv->smba + ISMT_MSTR_MCTRL);
 
        priv->head = 0;
        init_completion(&priv->cmp);
 
+       priv->log = dmam_alloc_coherent(&priv->pci_dev->dev,
+                                       ISMT_LOG_ENTRIES * sizeof(u32),
+                                       &priv->log_dma, GFP_KERNEL);
+       if (!priv->log)
+               return -ENOMEM;
+
        return 0;
 }