All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] megaraid_sas: Block zero-length ATA VPD inquiry due to firmware bug
@ 2025-04-02 19:37 Chandrakanth Patil
  2025-04-02 19:37 ` [PATCH 2/2] megaraid_sas: Driver version update to 07.734.00.00-rc1 Chandrakanth Patil
  2025-04-03 15:23 ` [PATCH 1/2] megaraid_sas: Block zero-length ATA VPD inquiry due to firmware bug Martin K. Petersen
  0 siblings, 2 replies; 3+ messages in thread
From: Chandrakanth Patil @ 2025-04-02 19:37 UTC (permalink / raw)
  To: linux-scsi, martin.petersen
  Cc: sathya.prakash, sumit.saxena, ranjan.kumar, prayas.patel,
	rajsekhar.chundru, Chandrakanth Patil

There is a firmware bug where ATA VPD inquiry commands with zero data
length are not handled and fail with a non-standard return status code
0xf0.

Hence, the driver blocks zero-length ATA VPD inquiry commands by setting
the device no_vpd_size flag to 1. Additionally, if the firmware still
returns status code 0xf0 in other failure scenarios, the driver converts
it to a SCSI 'check condition' for proper OS handling.

Suggested-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
---
 drivers/scsi/megaraid/megaraid_sas_base.c   | 9 +++++++--
 drivers/scsi/megaraid/megaraid_sas_fusion.c | 5 ++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 28c75865967a..d793924547f8 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -2103,6 +2103,9 @@ static int megasas_sdev_configure(struct scsi_device *sdev,
 	/* This sdev property may change post OCR */
 	megasas_set_dynamic_target_properties(sdev, lim, is_target_prop);
 
+	if (!MEGASAS_IS_LOGICAL(sdev))
+		sdev->no_vpd_size = 1;
+
 	mutex_unlock(&instance->reset_mutex);
 
 	return 0;
@@ -3662,8 +3665,10 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
 
 		case MFI_STAT_SCSI_IO_FAILED:
 		case MFI_STAT_LD_INIT_IN_PROGRESS:
-			cmd->scmd->result =
-			    (DID_ERROR << 16) | hdr->scsi_status;
+			if (hdr->scsi_status == 0xf0)
+				cmd->scmd->result = (DID_ERROR << 16) | SAM_STAT_CHECK_CONDITION;
+			else
+				cmd->scmd->result = (DID_ERROR << 16) | hdr->scsi_status;
 			break;
 
 		case MFI_STAT_SCSI_DONE_WITH_ERROR:
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 1eec23da28e2..1eea4df9e47d 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -2043,7 +2043,10 @@ map_cmd_status(struct fusion_context *fusion,
 
 	case MFI_STAT_SCSI_IO_FAILED:
 	case MFI_STAT_LD_INIT_IN_PROGRESS:
-		scmd->result = (DID_ERROR << 16) | ext_status;
+		if (ext_status == 0xf0)
+			scmd->result = (DID_ERROR << 16) | SAM_STAT_CHECK_CONDITION;
+		else
+			scmd->result = (DID_ERROR << 16) | ext_status;
 		break;
 
 	case MFI_STAT_SCSI_DONE_WITH_ERROR:
-- 
2.39.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-04-03 15:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-02 19:37 [PATCH 1/2] megaraid_sas: Block zero-length ATA VPD inquiry due to firmware bug Chandrakanth Patil
2025-04-02 19:37 ` [PATCH 2/2] megaraid_sas: Driver version update to 07.734.00.00-rc1 Chandrakanth Patil
2025-04-03 15:23 ` [PATCH 1/2] megaraid_sas: Block zero-length ATA VPD inquiry due to firmware bug Martin K. Petersen

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.