[SCSI] megaraid_sas: Continue booting immediately if FW in FAULT at driver load time
Signed-off-by: Adam Radford <aradford@gmail.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
a748dcc2b1
commit
058a8facfe
|
@ -84,7 +84,7 @@ MODULE_VERSION(MEGASAS_VERSION);
|
|||
MODULE_AUTHOR("megaraidlinux@lsi.com");
|
||||
MODULE_DESCRIPTION("LSI MegaRAID SAS Driver");
|
||||
|
||||
int megasas_transition_to_ready(struct megasas_instance *instance);
|
||||
int megasas_transition_to_ready(struct megasas_instance *instance, int ocr);
|
||||
static int megasas_get_pd_list(struct megasas_instance *instance);
|
||||
static int megasas_issue_init_mfi(struct megasas_instance *instance);
|
||||
static int megasas_register_aen(struct megasas_instance *instance,
|
||||
|
@ -2477,7 +2477,7 @@ process_fw_state_change_wq(struct work_struct *work)
|
|||
msleep(1000);
|
||||
}
|
||||
|
||||
if (megasas_transition_to_ready(instance)) {
|
||||
if (megasas_transition_to_ready(instance, 1)) {
|
||||
printk(KERN_NOTICE "megaraid_sas:adapter not ready\n");
|
||||
|
||||
megaraid_sas_kill_hba(instance);
|
||||
|
@ -2617,7 +2617,7 @@ static irqreturn_t megasas_isr(int irq, void *devp)
|
|||
* has to wait for the ready state.
|
||||
*/
|
||||
int
|
||||
megasas_transition_to_ready(struct megasas_instance* instance)
|
||||
megasas_transition_to_ready(struct megasas_instance *instance, int ocr)
|
||||
{
|
||||
int i;
|
||||
u8 max_wait;
|
||||
|
@ -2639,11 +2639,13 @@ megasas_transition_to_ready(struct megasas_instance* instance)
|
|||
switch (fw_state) {
|
||||
|
||||
case MFI_STATE_FAULT:
|
||||
|
||||
printk(KERN_DEBUG "megasas: FW in FAULT state!!\n");
|
||||
max_wait = MEGASAS_RESET_WAIT_TIME;
|
||||
cur_state = MFI_STATE_FAULT;
|
||||
break;
|
||||
if (ocr) {
|
||||
max_wait = MEGASAS_RESET_WAIT_TIME;
|
||||
cur_state = MFI_STATE_FAULT;
|
||||
break;
|
||||
} else
|
||||
return -ENODEV;
|
||||
|
||||
case MFI_STATE_WAIT_HANDSHAKE:
|
||||
/*
|
||||
|
@ -3520,7 +3522,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
|||
/*
|
||||
* We expect the FW state to be READY
|
||||
*/
|
||||
if (megasas_transition_to_ready(instance))
|
||||
if (megasas_transition_to_ready(instance, 0))
|
||||
goto fail_ready_state;
|
||||
|
||||
/* Check if MSI-X is supported while in ready state */
|
||||
|
@ -4357,7 +4359,7 @@ megasas_resume(struct pci_dev *pdev)
|
|||
/*
|
||||
* We expect the FW state to be READY
|
||||
*/
|
||||
if (megasas_transition_to_ready(instance))
|
||||
if (megasas_transition_to_ready(instance, 0))
|
||||
goto fail_ready_state;
|
||||
|
||||
/* Now re-enable MSI-X */
|
||||
|
|
|
@ -89,7 +89,7 @@ u8 MR_ValidateMapInfo(struct MR_FW_RAID_MAP_ALL *map,
|
|||
struct LD_LOAD_BALANCE_INFO *lbInfo);
|
||||
u16 get_updated_dev_handle(struct LD_LOAD_BALANCE_INFO *lbInfo,
|
||||
struct IO_REQUEST_INFO *in_info);
|
||||
int megasas_transition_to_ready(struct megasas_instance *instance);
|
||||
int megasas_transition_to_ready(struct megasas_instance *instance, int ocr);
|
||||
void megaraid_sas_kill_hba(struct megasas_instance *instance);
|
||||
|
||||
extern u32 megasas_dbg_lvl;
|
||||
|
@ -2173,7 +2173,7 @@ int megasas_reset_fusion(struct Scsi_Host *shost)
|
|||
}
|
||||
|
||||
/* Wait for FW to become ready */
|
||||
if (megasas_transition_to_ready(instance)) {
|
||||
if (megasas_transition_to_ready(instance, 1)) {
|
||||
printk(KERN_WARNING "megaraid_sas: Failed to "
|
||||
"transition controller to ready.\n");
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue