aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2008-07-10 19:56:01 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-07-26 15:14:46 -0400
commit42e421b184967c8bc70d72eed8e1b179e9a51acb (patch)
tree6176b464c6aae4010c227921832372a59c259da2 /drivers/scsi/qla2xxx
parente792121ec85672c1fa48f79d13986a3f4f56c590 (diff)
[SCSI] qla2xxx: Verify the RISC is not in ROM code if firmware-load is disabled.
Add an additional check to verify that the current executing firmware is in fact non-ROM code. The non-ROM Get-ID mailbox command is used for verification. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c7
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c2
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index f8cfeb0e91a6..fd3ff5e57133 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -334,6 +334,8 @@ static int
334qla2x00_isp_firmware(scsi_qla_host_t *ha) 334qla2x00_isp_firmware(scsi_qla_host_t *ha)
335{ 335{
336 int rval; 336 int rval;
337 uint16_t loop_id, topo, sw_cap;
338 uint8_t domain, area, al_pa;
337 339
338 /* Assume loading risc code */ 340 /* Assume loading risc code */
339 rval = QLA_FUNCTION_FAILED; 341 rval = QLA_FUNCTION_FAILED;
@@ -345,6 +347,11 @@ qla2x00_isp_firmware(scsi_qla_host_t *ha)
345 347
346 /* Verify checksum of loaded RISC code. */ 348 /* Verify checksum of loaded RISC code. */
347 rval = qla2x00_verify_checksum(ha, ha->fw_srisc_address); 349 rval = qla2x00_verify_checksum(ha, ha->fw_srisc_address);
350 if (rval == QLA_SUCCESS) {
351 /* And, verify we are not in ROM code. */
352 rval = qla2x00_get_adapter_id(ha, &loop_id, &al_pa,
353 &area, &domain, &topo, &sw_cap);
354 }
348 } 355 }
349 356
350 if (rval) { 357 if (rval) {
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
index dc5788bbc549..7d7de592f720 100644
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -919,6 +919,8 @@ qla2x00_get_adapter_id(scsi_qla_host_t *ha, uint16_t *id, uint8_t *al_pa,
919 rval = qla2x00_mailbox_command(ha, mcp); 919 rval = qla2x00_mailbox_command(ha, mcp);
920 if (mcp->mb[0] == MBS_COMMAND_ERROR) 920 if (mcp->mb[0] == MBS_COMMAND_ERROR)
921 rval = QLA_COMMAND_ERROR; 921 rval = QLA_COMMAND_ERROR;
922 else if (mcp->mb[0] == MBS_INVALID_COMMAND)
923 rval = QLA_INVALID_COMMAND;
922 924
923 /* Return data. */ 925 /* Return data. */
924 *id = mcp->mb[1]; 926 *id = mcp->mb[1];