Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 058a8fac authored by Adam Radford's avatar Adam Radford Committed by James Bottomley
Browse files

[SCSI] megaraid_sas: Continue booting immediately if FW in FAULT at driver load time

parent a748dcc2
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -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");
			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 */
+2 −2
Original line number Diff line number Diff line
@@ -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;