scsi: smartpqi: add in controller checkpoint for controller lockups.
tell smartpqi controller to generate a checkpoint for rare lockup conditions. Reviewed-by: Scott Benesh <scott.benesh@microsemi.com> Reviewed-by: Scott Teel <scott.teel@microsemi.com> Signed-off-by: Kevin Barnett <kevin.barnett@microsemi.com> Signed-off-by: Don Brace <don.brace@microsemi.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
a81ed5f338
commit
5b0fba0f40
|
@ -933,10 +933,10 @@ struct pqi_ctrl_info {
|
|||
struct Scsi_Host *scsi_host;
|
||||
|
||||
struct mutex scan_mutex;
|
||||
bool controller_online : 1;
|
||||
u8 inbound_spanning_supported : 1;
|
||||
u8 outbound_spanning_supported : 1;
|
||||
u8 pqi_mode_enabled : 1;
|
||||
u8 controller_online : 1;
|
||||
u8 heartbeat_timer_started : 1;
|
||||
|
||||
struct list_head scsi_device_list;
|
||||
|
|
|
@ -2697,6 +2697,7 @@ static void pqi_take_ctrl_offline(struct pqi_ctrl_info *ctrl_info)
|
|||
|
||||
ctrl_info->controller_online = false;
|
||||
dev_err(&ctrl_info->pci_dev->dev, "controller offline\n");
|
||||
sis_shutdown_ctrl(ctrl_info);
|
||||
|
||||
for (i = 0; i < ctrl_info->num_queue_groups; i++) {
|
||||
queue_group = &ctrl_info->queue_groups[i];
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#define SIS_REENABLE_SIS_MODE 0x1
|
||||
#define SIS_ENABLE_MSIX 0x40
|
||||
#define SIS_SOFT_RESET 0x100
|
||||
#define SIS_TRIGGER_SHUTDOWN 0x800000
|
||||
#define SIS_CMD_READY 0x200
|
||||
#define SIS_CMD_COMPLETE 0x1000
|
||||
#define SIS_CLEAR_CTRL_TO_HOST_DOORBELL 0x1000
|
||||
|
@ -342,6 +343,12 @@ void sis_soft_reset(struct pqi_ctrl_info *ctrl_info)
|
|||
&ctrl_info->registers->sis_host_to_ctrl_doorbell);
|
||||
}
|
||||
|
||||
void sis_shutdown_ctrl(struct pqi_ctrl_info *ctrl_info)
|
||||
{
|
||||
writel(SIS_TRIGGER_SHUTDOWN,
|
||||
&ctrl_info->registers->sis_host_to_ctrl_doorbell);
|
||||
}
|
||||
|
||||
#define SIS_MODE_READY_TIMEOUT_SECS 30
|
||||
|
||||
int sis_reenable_sis_mode(struct pqi_ctrl_info *ctrl_info)
|
||||
|
|
|
@ -27,6 +27,7 @@ int sis_init_base_struct_addr(struct pqi_ctrl_info *ctrl_info);
|
|||
void sis_enable_msix(struct pqi_ctrl_info *ctrl_info);
|
||||
void sis_disable_msix(struct pqi_ctrl_info *ctrl_info);
|
||||
void sis_soft_reset(struct pqi_ctrl_info *ctrl_info);
|
||||
void sis_shutdown_ctrl(struct pqi_ctrl_info *ctrl_info);
|
||||
int sis_reenable_sis_mode(struct pqi_ctrl_info *ctrl_info);
|
||||
void sis_write_driver_scratch(struct pqi_ctrl_info *ctrl_info, u32 value);
|
||||
u32 sis_read_driver_scratch(struct pqi_ctrl_info *ctrl_info);
|
||||
|
|
Loading…
Reference in New Issue