@@ -555,6 +555,7 @@ qla2xxx_find_flt_start(scsi_qla_host_t *vha, uint32_t *start)
555
555
struct qla_flt_location * fltl = (void * )req -> ring ;
556
556
uint32_t * dcode = (uint32_t * )req -> ring ;
557
557
uint8_t * buf = (void * )req -> ring , * bcode , last_image ;
558
+ int rc ;
558
559
559
560
/*
560
561
* FLT-location structure resides after the last PCI region.
@@ -584,14 +585,24 @@ qla2xxx_find_flt_start(scsi_qla_host_t *vha, uint32_t *start)
584
585
pcihdr = 0 ;
585
586
do {
586
587
/* Verify PCI expansion ROM header. */
587
- qla24xx_read_flash_data (vha , dcode , pcihdr >> 2 , 0x20 );
588
+ rc = qla24xx_read_flash_data (vha , dcode , pcihdr >> 2 , 0x20 );
589
+ if (rc ) {
590
+ ql_log (ql_log_info , vha , 0x016d ,
591
+ "Unable to read PCI Expansion Rom Header (%x).\n" , rc );
592
+ return QLA_FUNCTION_FAILED ;
593
+ }
588
594
bcode = buf + (pcihdr % 4 );
589
595
if (bcode [0x0 ] != 0x55 || bcode [0x1 ] != 0xaa )
590
596
goto end ;
591
597
592
598
/* Locate PCI data structure. */
593
599
pcids = pcihdr + ((bcode [0x19 ] << 8 ) | bcode [0x18 ]);
594
- qla24xx_read_flash_data (vha , dcode , pcids >> 2 , 0x20 );
600
+ rc = qla24xx_read_flash_data (vha , dcode , pcids >> 2 , 0x20 );
601
+ if (rc ) {
602
+ ql_log (ql_log_info , vha , 0x0179 ,
603
+ "Unable to read PCI Data Structure (%x).\n" , rc );
604
+ return QLA_FUNCTION_FAILED ;
605
+ }
595
606
bcode = buf + (pcihdr % 4 );
596
607
597
608
/* Validate signature of PCI data structure. */
@@ -606,7 +617,12 @@ qla2xxx_find_flt_start(scsi_qla_host_t *vha, uint32_t *start)
606
617
} while (!last_image );
607
618
608
619
/* Now verify FLT-location structure. */
609
- qla24xx_read_flash_data (vha , dcode , pcihdr >> 2 , sizeof (* fltl ) >> 2 );
620
+ rc = qla24xx_read_flash_data (vha , dcode , pcihdr >> 2 , sizeof (* fltl ) >> 2 );
621
+ if (rc ) {
622
+ ql_log (ql_log_info , vha , 0x017a ,
623
+ "Unable to read FLT (%x).\n" , rc );
624
+ return QLA_FUNCTION_FAILED ;
625
+ }
610
626
if (memcmp (fltl -> sig , "QFLT" , 4 ))
611
627
goto end ;
612
628
@@ -2605,13 +2621,18 @@ qla24xx_read_optrom_data(struct scsi_qla_host *vha, void *buf,
2605
2621
uint32_t offset , uint32_t length )
2606
2622
{
2607
2623
struct qla_hw_data * ha = vha -> hw ;
2624
+ int rc ;
2608
2625
2609
2626
/* Suspend HBA. */
2610
2627
scsi_block_requests (vha -> host );
2611
2628
set_bit (MBX_UPDATE_FLASH_ACTIVE , & ha -> mbx_cmd_flags );
2612
2629
2613
2630
/* Go with read. */
2614
- qla24xx_read_flash_data (vha , buf , offset >> 2 , length >> 2 );
2631
+ rc = qla24xx_read_flash_data (vha , buf , offset >> 2 , length >> 2 );
2632
+ if (rc ) {
2633
+ ql_log (ql_log_info , vha , 0x01a0 ,
2634
+ "Unable to perform optrom read(%x).\n" , rc );
2635
+ }
2615
2636
2616
2637
/* Resume HBA. */
2617
2638
clear_bit (MBX_UPDATE_FLASH_ACTIVE , & ha -> mbx_cmd_flags );
@@ -3412,7 +3433,7 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf)
3412
3433
struct active_regions active_regions = { };
3413
3434
3414
3435
if (IS_P3P_TYPE (ha ))
3415
- return ret ;
3436
+ return QLA_SUCCESS ;
3416
3437
3417
3438
if (!mbuf )
3418
3439
return QLA_FUNCTION_FAILED ;
@@ -3432,20 +3453,31 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf)
3432
3453
3433
3454
do {
3434
3455
/* Verify PCI expansion ROM header. */
3435
- qla24xx_read_flash_data (vha , dcode , pcihdr >> 2 , 0x20 );
3456
+ ret = qla24xx_read_flash_data (vha , dcode , pcihdr >> 2 , 0x20 );
3457
+ if (ret ) {
3458
+ ql_log (ql_log_info , vha , 0x017d ,
3459
+ "Unable to read PCI EXP Rom Header(%x).\n" , ret );
3460
+ return QLA_FUNCTION_FAILED ;
3461
+ }
3462
+
3436
3463
bcode = mbuf + (pcihdr % 4 );
3437
3464
if (memcmp (bcode , "\x55\xaa" , 2 )) {
3438
3465
/* No signature */
3439
3466
ql_log (ql_log_fatal , vha , 0x0059 ,
3440
3467
"No matching ROM signature.\n" );
3441
- ret = QLA_FUNCTION_FAILED ;
3442
- break ;
3468
+ return QLA_FUNCTION_FAILED ;
3443
3469
}
3444
3470
3445
3471
/* Locate PCI data structure. */
3446
3472
pcids = pcihdr + ((bcode [0x19 ] << 8 ) | bcode [0x18 ]);
3447
3473
3448
- qla24xx_read_flash_data (vha , dcode , pcids >> 2 , 0x20 );
3474
+ ret = qla24xx_read_flash_data (vha , dcode , pcids >> 2 , 0x20 );
3475
+ if (ret ) {
3476
+ ql_log (ql_log_info , vha , 0x018e ,
3477
+ "Unable to read PCI Data Structure (%x).\n" , ret );
3478
+ return QLA_FUNCTION_FAILED ;
3479
+ }
3480
+
3449
3481
bcode = mbuf + (pcihdr % 4 );
3450
3482
3451
3483
/* Validate signature of PCI data structure. */
@@ -3454,8 +3486,7 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf)
3454
3486
ql_log (ql_log_fatal , vha , 0x005a ,
3455
3487
"PCI data struct not found pcir_adr=%x.\n" , pcids );
3456
3488
ql_dump_buffer (ql_dbg_init , vha , 0x0059 , dcode , 32 );
3457
- ret = QLA_FUNCTION_FAILED ;
3458
- break ;
3489
+ return QLA_FUNCTION_FAILED ;
3459
3490
}
3460
3491
3461
3492
/* Read version */
@@ -3507,20 +3538,26 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf)
3507
3538
faddr = ha -> flt_region_fw_sec ;
3508
3539
}
3509
3540
3510
- qla24xx_read_flash_data (vha , dcode , faddr , 8 );
3511
- if (qla24xx_risc_firmware_invalid (dcode )) {
3512
- ql_log (ql_log_warn , vha , 0x005f ,
3513
- "Unrecognized fw revision at %x.\n" ,
3514
- ha -> flt_region_fw * 4 );
3515
- ql_dump_buffer (ql_dbg_init , vha , 0x005f , dcode , 32 );
3541
+ ret = qla24xx_read_flash_data (vha , dcode , faddr , 8 );
3542
+ if (ret ) {
3543
+ ql_log (ql_log_info , vha , 0x019e ,
3544
+ "Unable to read FW version (%x).\n" , ret );
3545
+ return ret ;
3516
3546
} else {
3517
- for (i = 0 ; i < 4 ; i ++ )
3518
- ha -> fw_revision [i ] =
3547
+ if (qla24xx_risc_firmware_invalid (dcode )) {
3548
+ ql_log (ql_log_warn , vha , 0x005f ,
3549
+ "Unrecognized fw revision at %x.\n" ,
3550
+ ha -> flt_region_fw * 4 );
3551
+ ql_dump_buffer (ql_dbg_init , vha , 0x005f , dcode , 32 );
3552
+ } else {
3553
+ for (i = 0 ; i < 4 ; i ++ )
3554
+ ha -> fw_revision [i ] =
3519
3555
be32_to_cpu ((__force __be32 )dcode [4 + i ]);
3520
- ql_dbg (ql_dbg_init , vha , 0x0060 ,
3521
- "Firmware revision (flash) %u.%u.%u (%x).\n" ,
3522
- ha -> fw_revision [0 ], ha -> fw_revision [1 ],
3523
- ha -> fw_revision [2 ], ha -> fw_revision [3 ]);
3556
+ ql_dbg (ql_dbg_init , vha , 0x0060 ,
3557
+ "Firmware revision (flash) %u.%u.%u (%x).\n" ,
3558
+ ha -> fw_revision [0 ], ha -> fw_revision [1 ],
3559
+ ha -> fw_revision [2 ], ha -> fw_revision [3 ]);
3560
+ }
3524
3561
}
3525
3562
3526
3563
/* Check for golden firmware and get version if available */
@@ -3531,18 +3568,23 @@ qla24xx_get_flash_version(scsi_qla_host_t *vha, void *mbuf)
3531
3568
3532
3569
memset (ha -> gold_fw_version , 0 , sizeof (ha -> gold_fw_version ));
3533
3570
faddr = ha -> flt_region_gold_fw ;
3534
- qla24xx_read_flash_data (vha , dcode , ha -> flt_region_gold_fw , 8 );
3535
- if (qla24xx_risc_firmware_invalid (dcode )) {
3536
- ql_log (ql_log_warn , vha , 0x0056 ,
3537
- "Unrecognized golden fw at %#x.\n" , faddr );
3538
- ql_dump_buffer (ql_dbg_init , vha , 0x0056 , dcode , 32 );
3571
+ ret = qla24xx_read_flash_data (vha , dcode , ha -> flt_region_gold_fw , 8 );
3572
+ if (ret ) {
3573
+ ql_log (ql_log_info , vha , 0x019f ,
3574
+ "Unable to read Gold FW version (%x).\n" , ret );
3539
3575
return ret ;
3540
- }
3541
-
3542
- for (i = 0 ; i < 4 ; i ++ )
3543
- ha -> gold_fw_version [i ] =
3544
- be32_to_cpu ((__force __be32 )dcode [4 + i ]);
3576
+ } else {
3577
+ if (qla24xx_risc_firmware_invalid (dcode )) {
3578
+ ql_log (ql_log_warn , vha , 0x0056 ,
3579
+ "Unrecognized golden fw at %#x.\n" , faddr );
3580
+ ql_dump_buffer (ql_dbg_init , vha , 0x0056 , dcode , 32 );
3581
+ return QLA_FUNCTION_FAILED ;
3582
+ }
3545
3583
3584
+ for (i = 0 ; i < 4 ; i ++ )
3585
+ ha -> gold_fw_version [i ] =
3586
+ be32_to_cpu ((__force __be32 )dcode [4 + i ]);
3587
+ }
3546
3588
return ret ;
3547
3589
}
3548
3590
0 commit comments