aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrking@us.ibm.com <brking@us.ibm.com>2005-11-01 18:01:54 -0500
committerJames Bottomley <jejb@mulgrave.(none)>2005-11-06 14:05:42 -0500
commit3d1d0da67520aa5dbcea617d52546ae046e946a4 (patch)
treeddbf40e4161cea381add46f34b74f91b9e08f486
parentb0df54bb4c9df6c1b1633a9f990b718059cda394 (diff)
[SCSI] ipr: Runtime reset
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>
-rw-r--r--drivers/scsi/ipr.c4
-rw-r--r--drivers/scsi/ipr.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index b773852b4ea8..97f33ddc7bdd 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -4281,6 +4281,7 @@ static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd)
4281 ioa_cfg->in_reset_reload = 0; 4281 ioa_cfg->in_reset_reload = 0;
4282 ioa_cfg->allow_cmds = 1; 4282 ioa_cfg->allow_cmds = 1;
4283 ioa_cfg->reset_cmd = NULL; 4283 ioa_cfg->reset_cmd = NULL;
4284 ioa_cfg->doorbell |= IPR_RUNTIME_RESET;
4284 4285
4285 list_for_each_entry(res, &ioa_cfg->used_res_q, queue) { 4286 list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
4286 if (ioa_cfg->allow_ml_add_del && (res->add_to_ml || res->del_from_ml)) { 4287 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)
5101 } 5102 }
5102 5103
5103 /* Enable destructive diagnostics on IOA */ 5104 /* Enable destructive diagnostics on IOA */
5104 writel(IPR_DOORBELL, ioa_cfg->regs.set_uproc_interrupt_reg); 5105 writel(ioa_cfg->doorbell, ioa_cfg->regs.set_uproc_interrupt_reg);
5105 5106
5106 writel(IPR_PCII_OPER_INTERRUPTS, ioa_cfg->regs.clr_interrupt_mask_reg); 5107 writel(IPR_PCII_OPER_INTERRUPTS, ioa_cfg->regs.clr_interrupt_mask_reg);
5107 int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg); 5108 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,
5917 ioa_cfg->host = host; 5918 ioa_cfg->host = host;
5918 ioa_cfg->pdev = pdev; 5919 ioa_cfg->pdev = pdev;
5919 ioa_cfg->log_level = ipr_log_level; 5920 ioa_cfg->log_level = ipr_log_level;
5921 ioa_cfg->doorbell = IPR_DOORBELL;
5920 sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER); 5922 sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER);
5921 sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL); 5923 sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL);
5922 sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL); 5924 sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL);
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
index 57d55b284caf..8aad480e9b64 100644
--- a/drivers/scsi/ipr.h
+++ b/drivers/scsi/ipr.h
@@ -192,6 +192,7 @@
192#define IPR_SDT_FMT2_EXP_ROM_SEL 0x8 192#define IPR_SDT_FMT2_EXP_ROM_SEL 0x8
193#define IPR_FMT2_SDT_READY_TO_USE 0xC4D4E3F2 193#define IPR_FMT2_SDT_READY_TO_USE 0xC4D4E3F2
194#define IPR_DOORBELL 0x82800000 194#define IPR_DOORBELL 0x82800000
195#define IPR_RUNTIME_RESET 0x40000000
195 196
196#define IPR_PCII_IOA_TRANS_TO_OPER (0x80000000 >> 0) 197#define IPR_PCII_IOA_TRANS_TO_OPER (0x80000000 >> 0)
197#define IPR_PCII_IOARCB_XFER_FAILED (0x80000000 >> 3) 198#define IPR_PCII_IOARCB_XFER_FAILED (0x80000000 >> 3)
@@ -913,6 +914,7 @@ struct ipr_ioa_cfg {
913 u16 reset_retries; 914 u16 reset_retries;
914 915
915 u32 errors_logged; 916 u32 errors_logged;
917 u32 doorbell;
916 918
917 struct Scsi_Host *host; 919 struct Scsi_Host *host;
918 struct pci_dev *pdev; 920 struct pci_dev *pdev;