diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 07498118359..3eebe663a2e 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -126,34 +126,26 @@ lpfc_config_port_prep(struct lpfc_hba * phba) | |||
126 | return -ERESTART; | 126 | return -ERESTART; |
127 | } | 127 | } |
128 | 128 | ||
129 | /* The HBA's current state is provided by the ProgType and rr fields. | 129 | /* |
130 | * Read and check the value of these fields before continuing to config | 130 | * The value of rr must be 1 since the driver set the cv field to 1. |
131 | * this port. | 131 | * This setting requires the FW to set all revision fields. |
132 | */ | 132 | */ |
133 | if (mb->un.varRdRev.rr == 0 || mb->un.varRdRev.un.b.ProgType != 2) { | 133 | if (mb->un.varRdRev.rr == 0) { |
134 | /* Old firmware */ | ||
135 | vp->rev.rBit = 0; | 134 | vp->rev.rBit = 0; |
136 | lpfc_printf_log(phba, | 135 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
137 | KERN_ERR, | 136 | "%d:0440 Adapter failed to init, READ_REV has " |
138 | LOG_INIT, | 137 | "missing revision information.\n", |
139 | "%d:0440 Adapter failed to init, mbxCmd x%x " | 138 | phba->brd_no); |
140 | "READ_REV detected outdated firmware" | ||
141 | "Data: x%x\n", | ||
142 | phba->brd_no, | ||
143 | mb->mbxCommand, 0); | ||
144 | mempool_free(pmb, phba->mbox_mem_pool); | 139 | mempool_free(pmb, phba->mbox_mem_pool); |
145 | return -ERESTART; | 140 | return -ERESTART; |
146 | } else { | ||
147 | vp->rev.rBit = 1; | ||
148 | vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev; | ||
149 | memcpy(vp->rev.sli1FwName, | ||
150 | (char*)mb->un.varRdRev.sli1FwName, 16); | ||
151 | vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev; | ||
152 | memcpy(vp->rev.sli2FwName, | ||
153 | (char *)mb->un.varRdRev.sli2FwName, 16); | ||
154 | } | 141 | } |
155 | 142 | ||
156 | /* Save information as VPD data */ | 143 | /* Save information as VPD data */ |
144 | vp->rev.rBit = 1; | ||
145 | vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev; | ||
146 | memcpy(vp->rev.sli1FwName, (char*) mb->un.varRdRev.sli1FwName, 16); | ||
147 | vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev; | ||
148 | memcpy(vp->rev.sli2FwName, (char *) mb->un.varRdRev.sli2FwName, 16); | ||
157 | vp->rev.biuRev = mb->un.varRdRev.biuRev; | 149 | vp->rev.biuRev = mb->un.varRdRev.biuRev; |
158 | vp->rev.smRev = mb->un.varRdRev.smRev; | 150 | vp->rev.smRev = mb->un.varRdRev.smRev; |
159 | vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev; | 151 | vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev; |