slot_ctrl &= ~mask;
        slot_ctrl |= (cmd & mask);
-       /* Don't enable command completed if caller is changing it. */
-       if (!(mask & CMD_CMPL_INTR_ENABLE))
-               slot_ctrl |= CMD_CMPL_INTR_ENABLE;
-
        ctrl->cmd_busy = 1;
        smp_mb();
        retval = pciehp_writew(ctrl, SLOTCTRL, slot_ctrl);
        if (MRL_SENS(ctrl))
                cmd |= MRL_DETECT_ENABLE;
        if (!pciehp_poll_mode)
-               cmd |= HP_INTR_ENABLE;
+               cmd |= HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE;
 
-       mask = PRSN_DETECT_ENABLE | ATTN_BUTTN_ENABLE |
-               PWR_FAULT_DETECT_ENABLE | MRL_DETECT_ENABLE | HP_INTR_ENABLE;
+       mask = PRSN_DETECT_ENABLE | ATTN_BUTTN_ENABLE | MRL_DETECT_ENABLE |
+              PWR_FAULT_DETECT_ENABLE | HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE;
 
        if (pcie_write_cmd(ctrl, cmd, mask)) {
                err("%s: Cannot enable software notification\n", __func__);