]> err.no Git - linux-2.6/commitdiff
[SCSI] ipr: Runtime reset
authorbrking@us.ibm.com <brking@us.ibm.com>
Tue, 1 Nov 2005 23:01:54 +0000 (17:01 -0600)
committerJames Bottomley <jejb@mulgrave.(none)>
Sun, 6 Nov 2005 19:05:42 +0000 (13:05 -0600)
Some IPR RAID adapter will automatically create single device RAID arrays
for all attached devices when the card is initialized. Setting the
RUNTIME_RESET doorbell bit will prevent this from occurring, since we
only want this behavior the first time the card is initialized and not
each time the card happens to get reset.

Signed-off-by: Brian King <brking@us.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/ipr.c
drivers/scsi/ipr.h

index b773852b4ea83d63f2deb1958431518864d6d5eb..97f33ddc7bdda8cd72ea8046d983aec23a0b18db 100644 (file)
@@ -4281,6 +4281,7 @@ static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd)
        ioa_cfg->in_reset_reload = 0;
        ioa_cfg->allow_cmds = 1;
        ioa_cfg->reset_cmd = NULL;
+       ioa_cfg->doorbell |= IPR_RUNTIME_RESET;
 
        list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
                if (ioa_cfg->allow_ml_add_del && (res->add_to_ml || res->del_from_ml)) {
@@ -5101,7 +5102,7 @@ static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd)
        }
 
        /* Enable destructive diagnostics on IOA */
-       writel(IPR_DOORBELL, ioa_cfg->regs.set_uproc_interrupt_reg);
+       writel(ioa_cfg->doorbell, ioa_cfg->regs.set_uproc_interrupt_reg);
 
        writel(IPR_PCII_OPER_INTERRUPTS, ioa_cfg->regs.clr_interrupt_mask_reg);
        int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
@@ -5917,6 +5918,7 @@ static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg,
        ioa_cfg->host = host;
        ioa_cfg->pdev = pdev;
        ioa_cfg->log_level = ipr_log_level;
+       ioa_cfg->doorbell = IPR_DOORBELL;
        sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER);
        sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL);
        sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL);
index 57d55b284caf8737768e28edb860b2fef09c28b1..8aad480e9b642077ed533c14493107067062c2cf 100644 (file)
 #define IPR_SDT_FMT2_EXP_ROM_SEL                       0x8
 #define IPR_FMT2_SDT_READY_TO_USE                      0xC4D4E3F2
 #define IPR_DOORBELL                                   0x82800000
+#define IPR_RUNTIME_RESET                              0x40000000
 
 #define IPR_PCII_IOA_TRANS_TO_OPER                     (0x80000000 >> 0)
 #define IPR_PCII_IOARCB_XFER_FAILED                    (0x80000000 >> 3)
@@ -913,6 +914,7 @@ struct ipr_ioa_cfg {
        u16 reset_retries;
 
        u32 errors_logged;
+       u32 doorbell;
 
        struct Scsi_Host *host;
        struct pci_dev *pdev;