* [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes
@ 2024-03-07 15:08 Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 1/7] mpi3mr: Block devices are not removed from OS even vd's are offlined Ranjan Kumar
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 1244 bytes --]
Few Enhancements and minor fixes of mpi3mr driver.
Changes since v1:
- Updated Function name to mpi3mr_refresh_tgtdevs and
changed logical condition
- Updated the patch headline .
- Reverted the SCSIIOSTATUSREPLY change as it was
unintentionally removed.
Ranjan Kumar (7):
mpi3mr: Block devices are not removed from OS even vd's are offlined
mpi3mr: Set MPI request flags appropriately
mpi3mr: Clear controller-wide flag that is used to block IOCTLS for
the unresponsive controller
mpi3mr: Set the WriteSame Divert Capability in the IOCInit MPI Request
mpi3mr: Debug ability improvements
mpi3mr: Update MPI Headers to revision 31
mpi3mr: driver version upgrade to 8.8.1.0.50
drivers/scsi/mpi3mr/mpi/mpi30_cnfg.h | 3 +++
drivers/scsi/mpi3mr/mpi/mpi30_image.h | 20 ++++----------
drivers/scsi/mpi3mr/mpi/mpi30_ioc.h | 20 ++++++++------
drivers/scsi/mpi3mr/mpi/mpi30_transport.h | 2 +-
drivers/scsi/mpi3mr/mpi3mr.h | 12 ++++++---
drivers/scsi/mpi3mr/mpi3mr_app.c | 21 ++++++++++-----
drivers/scsi/mpi3mr/mpi3mr_fw.c | 32 +++++++++++++++--------
drivers/scsi/mpi3mr/mpi3mr_os.c | 12 ++++-----
8 files changed, 70 insertions(+), 52 deletions(-)
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/7] mpi3mr: Block devices are not removed from OS even vd's are offlined
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
@ 2024-03-07 15:08 ` Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 2/7] mpi3mr: Set MPI request flags appropriately Ranjan Kumar
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 2977 bytes --]
The driver did not remove the virtual disk that was
exposed as hidden and offline after the controller was reset.
Drive is removed from OS when firmware sends "device added" event
with hidden bit set or access status indicating inability to accept I/Os.
Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
Signed-off-by: Sathya Prakash <sathya.prakash@broadcom.com>
---
drivers/scsi/mpi3mr/mpi3mr.h | 2 +-
drivers/scsi/mpi3mr/mpi3mr_os.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/scsi/mpi3mr/mpi3mr.h b/drivers/scsi/mpi3mr/mpi3mr.h
index 3de1ee05c44e..06359915a48d 100644
--- a/drivers/scsi/mpi3mr/mpi3mr.h
+++ b/drivers/scsi/mpi3mr/mpi3mr.h
@@ -1348,7 +1348,7 @@ void mpi3mr_wait_for_host_io(struct mpi3mr_ioc *mrioc, u32 timeout);
void mpi3mr_cleanup_fwevt_list(struct mpi3mr_ioc *mrioc);
void mpi3mr_flush_host_io(struct mpi3mr_ioc *mrioc);
void mpi3mr_invalidate_devhandles(struct mpi3mr_ioc *mrioc);
-void mpi3mr_rfresh_tgtdevs(struct mpi3mr_ioc *mrioc);
+void mpi3mr_refresh_tgtdevs(struct mpi3mr_ioc *mrioc);
void mpi3mr_flush_delayed_cmd_lists(struct mpi3mr_ioc *mrioc);
void mpi3mr_check_rh_fault_ioc(struct mpi3mr_ioc *mrioc, u32 reason_code);
void mpi3mr_print_fault_info(struct mpi3mr_ioc *mrioc);
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index 73c831a97d27..bfd32354b662 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -1029,7 +1029,7 @@ mpi3mr_update_sdev(struct scsi_device *sdev, void *data)
}
/**
- * mpi3mr_rfresh_tgtdevs - Refresh target device exposure
+ * mpi3mr_refresh_tgtdevs - Refresh target device exposure
* @mrioc: Adapter instance reference
*
* This is executed post controller reset to identify any
@@ -1039,7 +1039,7 @@ mpi3mr_update_sdev(struct scsi_device *sdev, void *data)
* Return: Nothing.
*/
-void mpi3mr_rfresh_tgtdevs(struct mpi3mr_ioc *mrioc)
+void mpi3mr_refresh_tgtdevs(struct mpi3mr_ioc *mrioc)
{
struct mpi3mr_tgt_dev *tgtdev, *tgtdev_next;
struct mpi3mr_stgt_priv_data *tgt_priv;
@@ -1047,8 +1047,8 @@ void mpi3mr_rfresh_tgtdevs(struct mpi3mr_ioc *mrioc)
dprint_reset(mrioc, "refresh target devices: check for removals\n");
list_for_each_entry_safe(tgtdev, tgtdev_next, &mrioc->tgtdev_list,
list) {
- if ((tgtdev->dev_handle == MPI3MR_INVALID_DEV_HANDLE) &&
- tgtdev->is_hidden &&
+ if (((tgtdev->dev_handle == MPI3MR_INVALID_DEV_HANDLE) ||
+ tgtdev->is_hidden) &&
tgtdev->host_exposed && tgtdev->starget &&
tgtdev->starget->hostdata) {
tgt_priv = tgtdev->starget->hostdata;
@@ -2010,7 +2010,7 @@ static void mpi3mr_fwevt_bh(struct mpi3mr_ioc *mrioc,
mpi3mr_refresh_sas_ports(mrioc);
mpi3mr_refresh_expanders(mrioc);
}
- mpi3mr_rfresh_tgtdevs(mrioc);
+ mpi3mr_refresh_tgtdevs(mrioc);
ioc_info(mrioc,
"scan for non responding and newly added devices after soft reset completed\n");
break;
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/7] mpi3mr: Set MPI request flags appropriately
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 1/7] mpi3mr: Block devices are not removed from OS even vd's are offlined Ranjan Kumar
@ 2024-03-07 15:08 ` Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 3/7] mpi3mr: Clear controller-wide flag that is used to block IOCTLS for the unresponsive controller Ranjan Kumar
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 905 bytes --]
“Flags” inside MPI request is bitfield-based.
So ‘Flags’ should be updated with bitwise OR operation.
Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
Signed-off-by: Sathya Prakash <sathya.prakash@broadcom.com>
---
drivers/scsi/mpi3mr/mpi3mr_os.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c
index bfd32354b662..5f975e0db388 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_os.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_os.c
@@ -4895,7 +4895,7 @@ static int mpi3mr_qcmd(struct Scsi_Host *shost,
MPI3_SCSIIO_MSGFLAGS_DIVERT_TO_FIRMWARE;
scsiio_flags |= MPI3_SCSIIO_FLAGS_DIVERT_REASON_IO_THROTTLING;
}
- scsiio_req->flags = cpu_to_le32(scsiio_flags);
+ scsiio_req->flags |= cpu_to_le32(scsiio_flags);
if (mpi3mr_op_request_post(mrioc, op_req_q,
scmd_priv_data->mpi3mr_scsiio_req)) {
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 3/7] mpi3mr: Clear controller-wide flag that is used to block IOCTLS for the unresponsive controller
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 1/7] mpi3mr: Block devices are not removed from OS even vd's are offlined Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 2/7] mpi3mr: Set MPI request flags appropriately Ranjan Kumar
@ 2024-03-07 15:08 ` Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 4/7] mpi3mr: Set the WriteSame Divert Capability in the IOCInit MPI Request Ranjan Kumar
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 994 bytes --]
Driver uses a controller-wide flag to block IOCTLs when
controller reset is in progress. This flag is set before
controller reset is initiated and clear after the controller
reset is completed.
Driver will clear the controller-wide block IOCTLs flag after
controller reset is failed and controller is marked unrecoverable.
Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
---
drivers/scsi/mpi3mr/mpi3mr_fw.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/scsi/mpi3mr/mpi3mr_fw.c b/drivers/scsi/mpi3mr/mpi3mr_fw.c
index 528f19f782f2..a21fbff60b59 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_fw.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_fw.c
@@ -5102,6 +5102,7 @@ int mpi3mr_soft_reset_handler(struct mpi3mr_ioc *mrioc,
mrioc->device_refresh_on = 0;
mrioc->unrecoverable = 1;
mrioc->reset_in_progress = 0;
+ mrioc->stop_bsgs = 0;
retval = -1;
mpi3mr_flush_cmds_for_unrecovered_controller(mrioc);
}
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 4/7] mpi3mr: Set the WriteSame Divert Capability in the IOCInit MPI Request
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
` (2 preceding siblings ...)
2024-03-07 15:08 ` [PATCH v2 3/7] mpi3mr: Clear controller-wide flag that is used to block IOCTLS for the unresponsive controller Ranjan Kumar
@ 2024-03-07 15:08 ` Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 5/7] mpi3mr: Debug ability improvements Ranjan Kumar
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 1671 bytes --]
Driver is modified to set the Write Same Divert Capability bit
in the IOCInit message for the firmware to know that the driver
is capable of diverting certain write same commands as defined
by the MPI specification.
Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
Signed-off-by: Sathya Prakash <sathya.prakash@broadcom.com>
---
drivers/scsi/mpi3mr/mpi/mpi30_ioc.h | 2 +-
drivers/scsi/mpi3mr/mpi3mr_fw.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h b/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h
index 0cb24fc03620..85b91583bacf 100644
--- a/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h
+++ b/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h
@@ -27,7 +27,7 @@ struct mpi3_ioc_init_request {
__le64 sense_buffer_free_queue_address;
__le64 driver_information_address;
};
-
+#define MPI3_IOCINIT_MSGFLAGS_WRITESAMEDIVERT_SUPPORTED (0x08)
#define MPI3_IOCINIT_MSGFLAGS_SCSIIOSTATUSREPLY_SUPPORTED (0x04)
#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_MASK (0x03)
#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_NOT_USED (0x00)
diff --git a/drivers/scsi/mpi3mr/mpi3mr_fw.c b/drivers/scsi/mpi3mr/mpi3mr_fw.c
index a21fbff60b59..6ce75366dd8a 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_fw.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_fw.c
@@ -3302,6 +3302,8 @@ static int mpi3mr_issue_iocinit(struct mpi3mr_ioc *mrioc)
iocinit_req.msg_flags |=
MPI3_IOCINIT_MSGFLAGS_SCSIIOSTATUSREPLY_SUPPORTED;
+ iocinit_req.msg_flags =
+ MPI3_IOCINIT_MSGFLAGS_WRITESAMEDIVERT_SUPPORTED;
init_completion(&mrioc->init_cmds.done);
retval = mpi3mr_admin_request_post(mrioc, &iocinit_req,
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 5/7] mpi3mr: Debug ability improvements
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
` (3 preceding siblings ...)
2024-03-07 15:08 ` [PATCH v2 4/7] mpi3mr: Set the WriteSame Divert Capability in the IOCInit MPI Request Ranjan Kumar
@ 2024-03-07 15:08 ` Ranjan Kumar
2024-03-08 11:40 ` kernel test robot
2024-03-07 15:08 ` [PATCH v2 6/7] mpi3mr: Update MPI Headers to revision 31 Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 7/7] mpi3mr: driver version upgrade to 8.8.1.0.50 Ranjan Kumar
6 siblings, 1 reply; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 6653 bytes --]
Driver updated to include OS type in fault/reset reason code.
MPI request sent through IOCTL now automatically dumped on timeout.
Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
Signed-off-by: Sathya Prakash <sathya.prakash@broadcom.com>
---
drivers/scsi/mpi3mr/mpi3mr.h | 6 +++++-
drivers/scsi/mpi3mr/mpi3mr_app.c | 21 ++++++++++++++-------
drivers/scsi/mpi3mr/mpi3mr_fw.c | 21 ++++++++++++++-------
3 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/drivers/scsi/mpi3mr/mpi3mr.h b/drivers/scsi/mpi3mr/mpi3mr.h
index 06359915a48d..d7ee94aff67a 100644
--- a/drivers/scsi/mpi3mr/mpi3mr.h
+++ b/drivers/scsi/mpi3mr/mpi3mr.h
@@ -294,6 +294,10 @@ enum mpi3mr_reset_reason {
MPI3MR_RESET_FROM_SAS_TRANSPORT_TIMEOUT = 30,
};
+#define MPI3MR_RESET_REASON_OSTYPE_LINUX 1
+#define MPI3MR_RESET_REASON_OSTYPE_SHIFT 28
+#define MPI3MR_RESET_REASON_IOCNUM_SHIFT 20
+
/* Queue type definitions */
enum queue_type {
MPI3MR_DEFAULT_QUEUE = 0,
@@ -1336,7 +1340,7 @@ void mpi3mr_start_watchdog(struct mpi3mr_ioc *mrioc);
void mpi3mr_stop_watchdog(struct mpi3mr_ioc *mrioc);
int mpi3mr_soft_reset_handler(struct mpi3mr_ioc *mrioc,
- u32 reset_reason, u8 snapdump);
+ u16 reset_reason, u8 snapdump);
void mpi3mr_ioc_disable_intr(struct mpi3mr_ioc *mrioc);
void mpi3mr_ioc_enable_intr(struct mpi3mr_ioc *mrioc);
diff --git a/drivers/scsi/mpi3mr/mpi3mr_app.c b/drivers/scsi/mpi3mr/mpi3mr_app.c
index 0380996b5ad2..38f63bc7ef3b 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_app.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_app.c
@@ -1598,26 +1598,33 @@ static long mpi3mr_bsg_process_mpt_cmds(struct bsg_job *job)
rval = -EAGAIN;
if (mrioc->bsg_cmds.state & MPI3MR_CMD_RESET)
goto out_unlock;
- dprint_bsg_err(mrioc,
- "%s: bsg request timedout after %d seconds\n", __func__,
- karg->timeout);
- if (mrioc->logging_level & MPI3_DEBUG_BSG_ERROR) {
- dprint_dump(mpi_req, MPI3MR_ADMIN_REQ_FRAME_SZ,
+ if (((mpi_header->function != MPI3_FUNCTION_SCSI_IO) &&
+ (mpi_header->function != MPI3_FUNCTION_NVME_ENCAPSULATED))
+ || (mrioc->logging_level & MPI3_DEBUG_BSG_ERROR)) {
+ ioc_info(mrioc, "%s: bsg request timedout after %d seconds\n",
+ __func__, karg->timeout);
+ if (!(mrioc->logging_level & MPI3_DEBUG_BSG_INFO)) {
+ dprint_dump(mpi_req, MPI3MR_ADMIN_REQ_FRAME_SZ,
"bsg_mpi3_req");
if (mpi_header->function ==
- MPI3_BSG_FUNCTION_MGMT_PASSTHROUGH) {
+ MPI3_FUNCTION_MGMT_PASSTHROUGH) {
drv_buf_iter = &drv_bufs[0];
dprint_dump(drv_buf_iter->kern_buf,
rmc_size, "mpi3_mgmt_req");
+ }
}
}
if ((mpi_header->function == MPI3_BSG_FUNCTION_NVME_ENCAPSULATED) ||
- (mpi_header->function == MPI3_BSG_FUNCTION_SCSI_IO))
+ (mpi_header->function == MPI3_BSG_FUNCTION_SCSI_IO)) {
+ dprint_bsg_err(mrioc, "%s: bsg request timedout after %d seconds,\n"
+ "issuing target reset to (0x%04x)\n", __func__,
+ karg->timeout, mpi_header->function_dependent);
mpi3mr_issue_tm(mrioc,
MPI3_SCSITASKMGMT_TASKTYPE_TARGET_RESET,
mpi_header->function_dependent, 0,
MPI3MR_HOSTTAG_BLK_TMS, MPI3MR_RESETTM_TIMEOUT,
&mrioc->host_tm_cmds, &resp_code, NULL);
+ }
if (!(mrioc->bsg_cmds.state & MPI3MR_CMD_COMPLETE) &&
!(mrioc->bsg_cmds.state & MPI3MR_CMD_RESET))
mpi3mr_soft_reset_handler(mrioc,
diff --git a/drivers/scsi/mpi3mr/mpi3mr_fw.c b/drivers/scsi/mpi3mr/mpi3mr_fw.c
index 6ce75366dd8a..07accf01be0f 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_fw.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_fw.c
@@ -11,7 +11,7 @@
#include <linux/io-64-nonatomic-lo-hi.h>
static int
-mpi3mr_issue_reset(struct mpi3mr_ioc *mrioc, u16 reset_type, u32 reset_reason);
+mpi3mr_issue_reset(struct mpi3mr_ioc *mrioc, u16 reset_type, u16 reset_reason);
static int mpi3mr_setup_admin_qpair(struct mpi3mr_ioc *mrioc);
static void mpi3mr_process_factsdata(struct mpi3mr_ioc *mrioc,
struct mpi3_ioc_facts_data *facts_data);
@@ -1195,7 +1195,7 @@ static inline void mpi3mr_clear_reset_history(struct mpi3mr_ioc *mrioc)
static int mpi3mr_issue_and_process_mur(struct mpi3mr_ioc *mrioc,
u32 reset_reason)
{
- u32 ioc_config, timeout, ioc_status;
+ u32 ioc_config, timeout, ioc_status, scratch_pad0;
int retval = -1;
ioc_info(mrioc, "Issuing Message unit Reset(MUR)\n");
@@ -1204,7 +1204,11 @@ static int mpi3mr_issue_and_process_mur(struct mpi3mr_ioc *mrioc,
return retval;
}
mpi3mr_clear_reset_history(mrioc);
- writel(reset_reason, &mrioc->sysif_regs->scratchpad[0]);
+ scratch_pad0 = ((MPI3MR_RESET_REASON_OSTYPE_LINUX <<
+ MPI3MR_RESET_REASON_OSTYPE_SHIFT) |
+ (mrioc->facts.ioc_num <<
+ MPI3MR_RESET_REASON_IOCNUM_SHIFT) | reset_reason);
+ writel(scratch_pad0, &mrioc->sysif_regs->scratchpad[0]);
ioc_config = readl(&mrioc->sysif_regs->ioc_configuration);
ioc_config &= ~MPI3_SYSIF_IOC_CONFIG_ENABLE_IOC;
writel(ioc_config, &mrioc->sysif_regs->ioc_configuration);
@@ -1520,11 +1524,11 @@ static inline void mpi3mr_set_diagsave(struct mpi3mr_ioc *mrioc)
* Return: 0 on success, non-zero on failure.
*/
static int mpi3mr_issue_reset(struct mpi3mr_ioc *mrioc, u16 reset_type,
- u32 reset_reason)
+ u16 reset_reason)
{
int retval = -1;
u8 unlock_retry_count = 0;
- u32 host_diagnostic, ioc_status, ioc_config;
+ u32 host_diagnostic, ioc_status, ioc_config, scratch_pad0;
u32 timeout = MPI3MR_RESET_ACK_TIMEOUT * 10;
if ((reset_type != MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET) &&
@@ -1576,6 +1580,9 @@ static int mpi3mr_issue_reset(struct mpi3mr_ioc *mrioc, u16 reset_type,
unlock_retry_count, host_diagnostic);
} while (!(host_diagnostic & MPI3_SYSIF_HOST_DIAG_DIAG_WRITE_ENABLE));
+ scratch_pad0 = ((MPI3MR_RESET_REASON_OSTYPE_LINUX <<
+ MPI3MR_RESET_REASON_OSTYPE_SHIFT) | (mrioc->facts.ioc_num <<
+ MPI3MR_RESET_REASON_IOCNUM_SHIFT) | reset_reason);
writel(reset_reason, &mrioc->sysif_regs->scratchpad[0]);
writel(host_diagnostic | reset_type,
&mrioc->sysif_regs->host_diagnostic);
@@ -2581,7 +2588,7 @@ static void mpi3mr_watchdog_work(struct work_struct *work)
unsigned long flags;
enum mpi3mr_iocstate ioc_state;
u32 fault, host_diagnostic, ioc_status;
- u32 reset_reason = MPI3MR_RESET_FROM_FAULT_WATCH;
+ u16 reset_reason = MPI3MR_RESET_FROM_FAULT_WATCH;
if (mrioc->reset_in_progress)
return;
@@ -4968,7 +4975,7 @@ void mpi3mr_pel_get_seqnum_complete(struct mpi3mr_ioc *mrioc,
* Return: 0 on success, non-zero on failure.
*/
int mpi3mr_soft_reset_handler(struct mpi3mr_ioc *mrioc,
- u32 reset_reason, u8 snapdump)
+ u16 reset_reason, u8 snapdump)
{
int retval = 0, i;
unsigned long flags;
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 6/7] mpi3mr: Update MPI Headers to revision 31
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
` (4 preceding siblings ...)
2024-03-07 15:08 ` [PATCH v2 5/7] mpi3mr: Debug ability improvements Ranjan Kumar
@ 2024-03-07 15:08 ` Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 7/7] mpi3mr: driver version upgrade to 8.8.1.0.50 Ranjan Kumar
6 siblings, 0 replies; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 8642 bytes --]
Update MPI Headers to revision 31
Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
Signed-off-by: Sathya Prakash <sathya.prakash@broadcom.com>
---
drivers/scsi/mpi3mr/mpi/mpi30_cnfg.h | 3 +++
drivers/scsi/mpi3mr/mpi/mpi30_image.h | 20 +++++---------------
drivers/scsi/mpi3mr/mpi/mpi30_ioc.h | 18 +++++++++++-------
drivers/scsi/mpi3mr/mpi/mpi30_transport.h | 2 +-
drivers/scsi/mpi3mr/mpi3mr_fw.c | 8 ++++----
5 files changed, 24 insertions(+), 27 deletions(-)
diff --git a/drivers/scsi/mpi3mr/mpi/mpi30_cnfg.h b/drivers/scsi/mpi3mr/mpi/mpi30_cnfg.h
index 35f81af40f51..6a19e17eb1a7 100644
--- a/drivers/scsi/mpi3mr/mpi/mpi30_cnfg.h
+++ b/drivers/scsi/mpi3mr/mpi/mpi30_cnfg.h
@@ -309,6 +309,7 @@ struct mpi3_man6_gpio_entry {
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_GENERIC (0x00)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_CABLE_MGMT (0x10)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_ACTIVE_CABLE_OVERCURRENT (0x20)
+#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_ACK_REQUIRED (0x02)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_MASK (0x01)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_EDGE (0x00)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_LEVEL (0x01)
@@ -1315,6 +1316,8 @@ struct mpi3_driver_page0 {
__le32 reserved18;
};
#define MPI3_DRIVER0_PAGEVERSION (0x00)
+#define MPI3_DRIVER0_BSDOPTS_DEVICEEXPOSURE_DISABLE (0x00000020)
+#define MPI3_DRIVER0_BSDOPTS_WRITECACHE_DISABLE (0x00000010)
#define MPI3_DRIVER0_BSDOPTS_HEADLESS_MODE_ENABLE (0x00000008)
#define MPI3_DRIVER0_BSDOPTS_DIS_HII_CONFIG_UTIL (0x00000004)
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_MASK (0x00000003)
diff --git a/drivers/scsi/mpi3mr/mpi/mpi30_image.h b/drivers/scsi/mpi3mr/mpi/mpi30_image.h
index 47035b811902..7df242190135 100644
--- a/drivers/scsi/mpi3mr/mpi/mpi30_image.h
+++ b/drivers/scsi/mpi3mr/mpi/mpi30_image.h
@@ -198,16 +198,17 @@ struct mpi3_supported_devices_data {
struct mpi3_supported_device supported_device[MPI3_SUPPORTED_DEVICE_MAX];
};
-#ifndef MPI3_ENCRYPTED_HASH_MAX
-#define MPI3_ENCRYPTED_HASH_MAX (1)
+#ifndef MPI3_PUBLIC_KEY_MAX
+#define MPI3_PUBLIC_KEY_MAX (1)
#endif
struct mpi3_encrypted_hash_entry {
u8 hash_image_type;
u8 hash_algorithm;
u8 encryption_algorithm;
u8 reserved03;
- __le32 reserved04;
- __le32 encrypted_hash[MPI3_ENCRYPTED_HASH_MAX];
+ __le16 public_key_size;
+ __le16 signature_size;
+ __le32 public_key[MPI3_PUBLIC_KEY_MAX];
};
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_SIGNATURE (0x03)
@@ -228,17 +229,6 @@ struct mpi3_encrypted_hash_entry {
#define MPI3_ENCRYPTION_ALGORITHM_RSA2048 (0x04)
#define MPI3_ENCRYPTION_ALGORITHM_RSA4096 (0x05)
#define MPI3_ENCRYPTION_ALGORITHM_RSA3072 (0x06)
-#ifndef MPI3_PUBLIC_KEY_MAX
-#define MPI3_PUBLIC_KEY_MAX (1)
-#endif
-struct mpi3_encrypted_key_with_hash_entry {
- u8 hash_image_type;
- u8 hash_algorithm;
- u8 encryption_algorithm;
- u8 reserved03;
- __le32 reserved04;
- __le32 public_key[MPI3_PUBLIC_KEY_MAX];
-};
#ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
#define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1)
diff --git a/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h b/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h
index 85b91583bacf..028784949873 100644
--- a/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h
+++ b/drivers/scsi/mpi3mr/mpi/mpi30_ioc.h
@@ -101,6 +101,8 @@ struct mpi3_ioc_facts_data {
__le16 max_io_throttle_group;
__le16 io_throttle_low;
__le16 io_throttle_high;
+ __le32 diag_fdl_size;
+ __le32 diag_tty_size;
};
#define MPI3_IOCFACTS_CAPABILITY_NON_SUPERVISOR_MASK (0x80000000)
#define MPI3_IOCFACTS_CAPABILITY_SUPERVISOR_IOC (0x00000000)
@@ -108,13 +110,13 @@ struct mpi3_ioc_facts_data {
#define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_MASK (0x00000600)
#define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_FIXED_THRESHOLD (0x00000000)
#define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_OUTSTANDING_IO (0x00000200)
-#define MPI3_IOCFACTS_CAPABILITY_COMPLETE_RESET_CAPABLE (0x00000100)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_TRACE_ENABLED (0x00000080)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_FW_ENABLED (0x00000040)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_DRIVER_ENABLED (0x00000020)
-#define MPI3_IOCFACTS_CAPABILITY_ADVANCED_HOST_PD_ENABLED (0x00000010)
-#define MPI3_IOCFACTS_CAPABILITY_RAID_CAPABLE (0x00000008)
-#define MPI3_IOCFACTS_CAPABILITY_MULTIPATH_ENABLED (0x00000002)
+#define MPI3_IOCFACTS_CAPABILITY_COMPLETE_RESET_SUPPORTED (0x00000100)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_TRACE_SUPPORTED (0x00000080)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_FW_SUPPORTED (0x00000040)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_DRIVER_SUPPORTED (0x00000020)
+#define MPI3_IOCFACTS_CAPABILITY_ADVANCED_HOST_PD_SUPPORTED (0x00000010)
+#define MPI3_IOCFACTS_CAPABILITY_RAID_SUPPORTED (0x00000008)
+#define MPI3_IOCFACTS_CAPABILITY_MULTIPATH_SUPPORTED (0x00000002)
#define MPI3_IOCFACTS_CAPABILITY_COALESCE_CTRL_SUPPORTED (0x00000001)
#define MPI3_IOCFACTS_PID_TYPE_MASK (0xf000)
#define MPI3_IOCFACTS_PID_TYPE_SHIFT (12)
@@ -159,6 +161,8 @@ struct mpi3_ioc_facts_data {
#define MPI3_IOCFACTS_FLAGS_PERSONALITY_RAID_DDR (0x00000002)
#define MPI3_IOCFACTS_IO_THROTTLE_DATA_LENGTH_NOT_REQUIRED (0x0000)
#define MPI3_IOCFACTS_MAX_IO_THROTTLE_GROUP_NOT_REQUIRED (0x0000)
+#define MPI3_IOCFACTS_DIAGFDLSIZE_NOT_SUPPORTED (0x00000000)
+#define MPI3_IOCFACTS_DIAGTTYSIZE_NOT_SUPPORTED (0x00000000)
struct mpi3_mgmt_passthrough_request {
__le16 host_tag;
u8 ioc_use_only02;
diff --git a/drivers/scsi/mpi3mr/mpi/mpi30_transport.h b/drivers/scsi/mpi3mr/mpi/mpi30_transport.h
index 1e0a3dcaf723..fdc3d1968e43 100644
--- a/drivers/scsi/mpi3mr/mpi/mpi30_transport.h
+++ b/drivers/scsi/mpi3mr/mpi/mpi30_transport.h
@@ -18,7 +18,7 @@ union mpi3_version_union {
#define MPI3_VERSION_MAJOR (3)
#define MPI3_VERSION_MINOR (0)
-#define MPI3_VERSION_UNIT (28)
+#define MPI3_VERSION_UNIT (31)
#define MPI3_VERSION_DEV (0)
#define MPI3_DEVHANDLE_INVALID (0xffff)
struct mpi3_sysif_oper_queue_indexes {
diff --git a/drivers/scsi/mpi3mr/mpi3mr_fw.c b/drivers/scsi/mpi3mr/mpi3mr_fw.c
index 07accf01be0f..0f102ba49759 100644
--- a/drivers/scsi/mpi3mr/mpi3mr_fw.c
+++ b/drivers/scsi/mpi3mr/mpi3mr_fw.c
@@ -1280,7 +1280,7 @@ mpi3mr_revalidate_factsdata(struct mpi3mr_ioc *mrioc)
mrioc->shost->max_sectors * 512, mrioc->facts.max_data_length);
if ((mrioc->sas_transport_enabled) && (mrioc->facts.ioc_capabilities &
- MPI3_IOCFACTS_CAPABILITY_MULTIPATH_ENABLED))
+ MPI3_IOCFACTS_CAPABILITY_MULTIPATH_SUPPORTED))
ioc_err(mrioc,
"critical error: multipath capability is enabled at the\n"
"\tcontroller while sas transport support is enabled at the\n"
@@ -3677,8 +3677,8 @@ static const struct {
u32 capability;
char *name;
} mpi3mr_capabilities[] = {
- { MPI3_IOCFACTS_CAPABILITY_RAID_CAPABLE, "RAID" },
- { MPI3_IOCFACTS_CAPABILITY_MULTIPATH_ENABLED, "MultiPath" },
+ { MPI3_IOCFACTS_CAPABILITY_RAID_SUPPORTED, "RAID" },
+ { MPI3_IOCFACTS_CAPABILITY_MULTIPATH_SUPPORTED, "MultiPath" },
};
/**
@@ -3960,7 +3960,7 @@ int mpi3mr_init_ioc(struct mpi3mr_ioc *mrioc)
MPI3MR_HOST_IOS_KDUMP);
if (!(mrioc->facts.ioc_capabilities &
- MPI3_IOCFACTS_CAPABILITY_MULTIPATH_ENABLED)) {
+ MPI3_IOCFACTS_CAPABILITY_MULTIPATH_SUPPORTED)) {
mrioc->sas_transport_enabled = 1;
mrioc->scsi_device_channel = 1;
mrioc->shost->max_channel = 1;
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 7/7] mpi3mr: driver version upgrade to 8.8.1.0.50
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
` (5 preceding siblings ...)
2024-03-07 15:08 ` [PATCH v2 6/7] mpi3mr: Update MPI Headers to revision 31 Ranjan Kumar
@ 2024-03-07 15:08 ` Ranjan Kumar
6 siblings, 0 replies; 9+ messages in thread
From: Ranjan Kumar @ 2024-03-07 15:08 UTC (permalink / raw)
To: linux-scsi, martin.petersen
Cc: rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
[-- Attachment #1: Type: text/plain, Size: 752 bytes --]
Update driver version to 8.8.1.0.50
Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
---
drivers/scsi/mpi3mr/mpi3mr.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/mpi3mr/mpi3mr.h b/drivers/scsi/mpi3mr/mpi3mr.h
index d7ee94aff67a..b7fdffef2157 100644
--- a/drivers/scsi/mpi3mr/mpi3mr.h
+++ b/drivers/scsi/mpi3mr/mpi3mr.h
@@ -55,8 +55,8 @@ extern struct list_head mrioc_list;
extern int prot_mask;
extern atomic64_t event_counter;
-#define MPI3MR_DRIVER_VERSION "8.5.1.0.0"
-#define MPI3MR_DRIVER_RELDATE "5-December-2023"
+#define MPI3MR_DRIVER_VERSION "8.8.1.0.50"
+#define MPI3MR_DRIVER_RELDATE "5-March-2024"
#define MPI3MR_DRIVER_NAME "mpi3mr"
#define MPI3MR_DRIVER_LICENSE "GPL"
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 5/7] mpi3mr: Debug ability improvements
2024-03-07 15:08 ` [PATCH v2 5/7] mpi3mr: Debug ability improvements Ranjan Kumar
@ 2024-03-08 11:40 ` kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-03-08 11:40 UTC (permalink / raw)
To: Ranjan Kumar, linux-scsi, martin.petersen
Cc: oe-kbuild-all, rajsekhar.chundru, sathya.prakash, sumit.saxena,
chandrakanth.patil, prayas.patel, Ranjan Kumar
Hi Ranjan,
kernel test robot noticed the following build warnings:
[auto build test WARNING on mkp-scsi/for-next]
[also build test WARNING on jejb-scsi/for-next linus/master v6.8-rc7 next-20240308]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Ranjan-Kumar/mpi3mr-Block-devices-are-not-removed-from-OS-even-vd-s-are-offlined/20240307-231302
base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
patch link: https://lore.kernel.org/r/20240307150825.7613-6-ranjan.kumar%40broadcom.com
patch subject: [PATCH v2 5/7] mpi3mr: Debug ability improvements
config: microblaze-allmodconfig (https://download.01.org/0day-ci/archive/20240308/202403081903.q3Dq54zZ-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240308/202403081903.q3Dq54zZ-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202403081903.q3Dq54zZ-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_issue_reset':
>> drivers/scsi/mpi3mr/mpi3mr_fw.c:1531:54: warning: variable 'scratch_pad0' set but not used [-Wunused-but-set-variable]
1531 | u32 host_diagnostic, ioc_status, ioc_config, scratch_pad0;
| ^~~~~~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_setup_isr':
drivers/scsi/mpi3mr/mpi3mr_fw.c:732:58: warning: '%d' directive output may be truncated writing between 1 and 3 bytes into a region of size between 1 and 32 [-Wformat-truncation=]
732 | snprintf(intr_info->name, MPI3MR_NAME_LENGTH, "%s%d-msix%d",
| ^~
In function 'mpi3mr_request_irq',
inlined from 'mpi3mr_setup_isr' at drivers/scsi/mpi3mr/mpi3mr_fw.c:857:12:
drivers/scsi/mpi3mr/mpi3mr_fw.c:732:55: note: directive argument in the range [0, 255]
732 | snprintf(intr_info->name, MPI3MR_NAME_LENGTH, "%s%d-msix%d",
| ^~~~~~~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:732:55: note: directive argument in the range [0, 65535]
drivers/scsi/mpi3mr/mpi3mr_fw.c:732:9: note: 'snprintf' output between 8 and 45 bytes into a destination of size 32
732 | snprintf(intr_info->name, MPI3MR_NAME_LENGTH, "%s%d-msix%d",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
733 | mrioc->driver_name, mrioc->id, index);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_start_watchdog':
drivers/scsi/mpi3mr/mpi3mr_fw.c:2690:60: warning: '%s' directive output may be truncated writing up to 31 bytes into a region of size 11 [-Wformat-truncation=]
2690 | sizeof(mrioc->watchdog_work_q_name), "watchdog_%s%d", mrioc->name,
| ^~
drivers/scsi/mpi3mr/mpi3mr_fw.c:2690:50: note: directive argument in the range [0, 255]
2690 | sizeof(mrioc->watchdog_work_q_name), "watchdog_%s%d", mrioc->name,
| ^~~~~~~~~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:2689:9: note: 'snprintf' output between 11 and 44 bytes into a destination of size 20
2689 | snprintf(mrioc->watchdog_work_q_name,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2690 | sizeof(mrioc->watchdog_work_q_name), "watchdog_%s%d", mrioc->name,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2691 | mrioc->id);
| ~~~~~~~~~~
vim +/scratch_pad0 +1531 drivers/scsi/mpi3mr/mpi3mr_fw.c
1512
1513 /**
1514 * mpi3mr_issue_reset - Issue reset to the controller
1515 * @mrioc: Adapter reference
1516 * @reset_type: Reset type
1517 * @reset_reason: Reset reason code
1518 *
1519 * Unlock the host diagnostic registers and write the specific
1520 * reset type to that, wait for reset acknowledgment from the
1521 * controller, if the reset is not successful retry for the
1522 * predefined number of times.
1523 *
1524 * Return: 0 on success, non-zero on failure.
1525 */
1526 static int mpi3mr_issue_reset(struct mpi3mr_ioc *mrioc, u16 reset_type,
1527 u16 reset_reason)
1528 {
1529 int retval = -1;
1530 u8 unlock_retry_count = 0;
> 1531 u32 host_diagnostic, ioc_status, ioc_config, scratch_pad0;
1532 u32 timeout = MPI3MR_RESET_ACK_TIMEOUT * 10;
1533
1534 if ((reset_type != MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET) &&
1535 (reset_type != MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT))
1536 return retval;
1537 if (mrioc->unrecoverable)
1538 return retval;
1539 if (reset_reason == MPI3MR_RESET_FROM_FIRMWARE) {
1540 retval = 0;
1541 return retval;
1542 }
1543
1544 ioc_info(mrioc, "%s reset due to %s(0x%x)\n",
1545 mpi3mr_reset_type_name(reset_type),
1546 mpi3mr_reset_rc_name(reset_reason), reset_reason);
1547
1548 mpi3mr_clear_reset_history(mrioc);
1549 do {
1550 ioc_info(mrioc,
1551 "Write magic sequence to unlock host diag register (retry=%d)\n",
1552 ++unlock_retry_count);
1553 if (unlock_retry_count >= MPI3MR_HOSTDIAG_UNLOCK_RETRY_COUNT) {
1554 ioc_err(mrioc,
1555 "%s reset failed due to unlock failure, host_diagnostic(0x%08x)\n",
1556 mpi3mr_reset_type_name(reset_type),
1557 host_diagnostic);
1558 mrioc->unrecoverable = 1;
1559 return retval;
1560 }
1561
1562 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_FLUSH,
1563 &mrioc->sysif_regs->write_sequence);
1564 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_1ST,
1565 &mrioc->sysif_regs->write_sequence);
1566 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_2ND,
1567 &mrioc->sysif_regs->write_sequence);
1568 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_3RD,
1569 &mrioc->sysif_regs->write_sequence);
1570 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_4TH,
1571 &mrioc->sysif_regs->write_sequence);
1572 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_5TH,
1573 &mrioc->sysif_regs->write_sequence);
1574 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_6TH,
1575 &mrioc->sysif_regs->write_sequence);
1576 usleep_range(1000, 1100);
1577 host_diagnostic = readl(&mrioc->sysif_regs->host_diagnostic);
1578 ioc_info(mrioc,
1579 "wrote magic sequence: retry_count(%d), host_diagnostic(0x%08x)\n",
1580 unlock_retry_count, host_diagnostic);
1581 } while (!(host_diagnostic & MPI3_SYSIF_HOST_DIAG_DIAG_WRITE_ENABLE));
1582
1583 scratch_pad0 = ((MPI3MR_RESET_REASON_OSTYPE_LINUX <<
1584 MPI3MR_RESET_REASON_OSTYPE_SHIFT) | (mrioc->facts.ioc_num <<
1585 MPI3MR_RESET_REASON_IOCNUM_SHIFT) | reset_reason);
1586 writel(reset_reason, &mrioc->sysif_regs->scratchpad[0]);
1587 writel(host_diagnostic | reset_type,
1588 &mrioc->sysif_regs->host_diagnostic);
1589 switch (reset_type) {
1590 case MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET:
1591 do {
1592 ioc_status = readl(&mrioc->sysif_regs->ioc_status);
1593 ioc_config =
1594 readl(&mrioc->sysif_regs->ioc_configuration);
1595 if ((ioc_status & MPI3_SYSIF_IOC_STATUS_RESET_HISTORY)
1596 && mpi3mr_soft_reset_success(ioc_status, ioc_config)
1597 ) {
1598 mpi3mr_clear_reset_history(mrioc);
1599 retval = 0;
1600 break;
1601 }
1602 msleep(100);
1603 } while (--timeout);
1604 mpi3mr_print_fault_info(mrioc);
1605 break;
1606 case MPI3_SYSIF_HOST_DIAG_RESET_ACTION_DIAG_FAULT:
1607 do {
1608 ioc_status = readl(&mrioc->sysif_regs->ioc_status);
1609 if (mpi3mr_diagfault_success(mrioc, ioc_status)) {
1610 retval = 0;
1611 break;
1612 }
1613 msleep(100);
1614 } while (--timeout);
1615 break;
1616 default:
1617 break;
1618 }
1619
1620 writel(MPI3_SYSIF_WRITE_SEQUENCE_KEY_VALUE_2ND,
1621 &mrioc->sysif_regs->write_sequence);
1622
1623 ioc_config = readl(&mrioc->sysif_regs->ioc_configuration);
1624 ioc_status = readl(&mrioc->sysif_regs->ioc_status);
1625 ioc_info(mrioc,
1626 "ioc_status/ioc_onfig after %s reset is (0x%x)/(0x%x)\n",
1627 (!retval)?"successful":"failed", ioc_status,
1628 ioc_config);
1629 if (retval)
1630 mrioc->unrecoverable = 1;
1631 return retval;
1632 }
1633
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-03-08 11:40 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-07 15:08 [PATCH v2 0/7] mpi3mr: Few Enhancements and minor fixes Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 1/7] mpi3mr: Block devices are not removed from OS even vd's are offlined Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 2/7] mpi3mr: Set MPI request flags appropriately Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 3/7] mpi3mr: Clear controller-wide flag that is used to block IOCTLS for the unresponsive controller Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 4/7] mpi3mr: Set the WriteSame Divert Capability in the IOCInit MPI Request Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 5/7] mpi3mr: Debug ability improvements Ranjan Kumar
2024-03-08 11:40 ` kernel test robot
2024-03-07 15:08 ` [PATCH v2 6/7] mpi3mr: Update MPI Headers to revision 31 Ranjan Kumar
2024-03-07 15:08 ` [PATCH v2 7/7] mpi3mr: driver version upgrade to 8.8.1.0.50 Ranjan Kumar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.