Commit c02a3342 authored by Balsundar P's avatar Balsundar P Committed by Martin K. Petersen
Browse files

scsi: aacraid: fixed firmware assert issue

Before issuing IOP reset, INTX mode is selected. This is triggering MSGU
lockup and ended in basecode assert. Use DROP_IO command when IOP reset is
sent in preparation for interrupt mode switch.

Link: https://lore.kernel.org/r/1571120524-6037-4-git-send-email-balsundar.p@microsemi.com


Signed-off-by: default avatarBalsundar P <balsundar.p@microsemi.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent f2244c1b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1673,6 +1673,7 @@ struct aac_dev
	u8			adapter_shutdown;
	u32			handle_pci_error;
	bool			init_reset;
	u8			soft_reset_support;
};

#define aac_adapter_interrupt(dev) \
+5 −0
Original line number Diff line number Diff line
@@ -571,6 +571,11 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)
		else
			dev->sa_firmware = 0;

		if (status[4] & le32_to_cpu(AAC_EXTOPT_SOFT_RESET))
			dev->soft_reset_support = 1;
		else
			dev->soft_reset_support = 0;

		if ((dev->comm_interface == AAC_COMM_MESSAGE) &&
		    (status[2] > dev->base_size)) {
			aac_adapter_ioremap(dev, 0);
+10 −0
Original line number Diff line number Diff line
@@ -733,10 +733,20 @@ static bool aac_is_ctrl_up_and_running(struct aac_dev *dev)
	return ctrl_up;
}

static void aac_src_drop_io(struct aac_dev *dev)
{
	if (!dev->soft_reset_support)
		return;

	aac_adapter_sync_cmd(dev, DROP_IO,
			0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL);
}

static void aac_notify_fw_of_iop_reset(struct aac_dev *dev)
{
	aac_adapter_sync_cmd(dev, IOP_RESET_ALWAYS, 0, 0, 0, 0, 0, 0, NULL,
						NULL, NULL, NULL, NULL);
	aac_src_drop_io(dev);
}

static void aac_send_iop_reset(struct aac_dev *dev)