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: Balsundar P <balsundar.p@microsemi.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
f2244c1b35
commit
c02a3342ba
|
@ -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) \
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue