[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>
This commit is contained in:
parent
e792121ec8
commit
42e421b184
|
@ -334,6 +334,8 @@ static int
|
||||||
qla2x00_isp_firmware(scsi_qla_host_t *ha)
|
qla2x00_isp_firmware(scsi_qla_host_t *ha)
|
||||||
{
|
{
|
||||||
int rval;
|
int rval;
|
||||||
|
uint16_t loop_id, topo, sw_cap;
|
||||||
|
uint8_t domain, area, al_pa;
|
||||||
|
|
||||||
/* Assume loading risc code */
|
/* Assume loading risc code */
|
||||||
rval = QLA_FUNCTION_FAILED;
|
rval = QLA_FUNCTION_FAILED;
|
||||||
|
@ -345,6 +347,11 @@ qla2x00_isp_firmware(scsi_qla_host_t *ha)
|
||||||
|
|
||||||
/* Verify checksum of loaded RISC code. */
|
/* Verify checksum of loaded RISC code. */
|
||||||
rval = qla2x00_verify_checksum(ha, ha->fw_srisc_address);
|
rval = qla2x00_verify_checksum(ha, ha->fw_srisc_address);
|
||||||
|
if (rval == QLA_SUCCESS) {
|
||||||
|
/* And, verify we are not in ROM code. */
|
||||||
|
rval = qla2x00_get_adapter_id(ha, &loop_id, &al_pa,
|
||||||
|
&area, &domain, &topo, &sw_cap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rval) {
|
if (rval) {
|
||||||
|
|
|
@ -919,6 +919,8 @@ qla2x00_get_adapter_id(scsi_qla_host_t *ha, uint16_t *id, uint8_t *al_pa,
|
||||||
rval = qla2x00_mailbox_command(ha, mcp);
|
rval = qla2x00_mailbox_command(ha, mcp);
|
||||||
if (mcp->mb[0] == MBS_COMMAND_ERROR)
|
if (mcp->mb[0] == MBS_COMMAND_ERROR)
|
||||||
rval = QLA_COMMAND_ERROR;
|
rval = QLA_COMMAND_ERROR;
|
||||||
|
else if (mcp->mb[0] == MBS_INVALID_COMMAND)
|
||||||
|
rval = QLA_INVALID_COMMAND;
|
||||||
|
|
||||||
/* Return data. */
|
/* Return data. */
|
||||||
*id = mcp->mb[1];
|
*id = mcp->mb[1];
|
||||||
|
|
Reference in New Issue