git: e1aa173f8120 - main - ufshci: consolidate the device query submit/poll pattern

From: Jaeyoon Choi <jaeyoon_at_FreeBSD.org>
Date: Tue, 18 Aug 2026 05:26:13 UTC
The branch main has been updated by jaeyoon:

URL: https://cgit.FreeBSD.org/src/commit/?id=e1aa173f812010675005e2917d7b2b44ee4a226e

commit e1aa173f812010675005e2917d7b2b44ee4a226e
Author:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
AuthorDate: 2026-08-18 04:52:54 +0000
Commit:     Jaeyoon Choi <jaeyoon@FreeBSD.org>
CommitDate: 2026-08-18 04:52:54 +0000

    ufshci: consolidate the device query submit/poll pattern
    
    The six query helpers duplicated the same submit, error check, poll,
    and status check sequence. Move it into ufshci_dev_send_query() so
    future changes to the query flow are made in one place. This also
    unifies the failure log message format.
    
    Reviewed by:            imp (mentor)
    Sponsored by:           Samsung Electronics
    Differential Revision:  https://reviews.freebsd.org/D58818
---
 sys/dev/ufshci/ufshci_dev.c | 98 +++++++++++++--------------------------------
 1 file changed, 28 insertions(+), 70 deletions(-)

diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
index 18546d7120c0..063b65aaf579 100644
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -12,6 +12,28 @@
 #include "ufshci_private.h"
 #include "ufshci_reg.h"
 
+static int
+ufshci_dev_send_query(struct ufshci_controller *ctrlr,
+    struct ufshci_query_param param,
+    struct ufshci_completion_poll_status *status, const char *fail_msg)
+{
+	int error;
+
+	status->done = 0;
+	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
+	    ufshci_completion_poll_cb, status, param);
+	if (error)
+		return (error);
+
+	ufshci_completion_poll(status);
+	if (status->error) {
+		ufshci_printf(ctrlr, "%s failed!\n", fail_msg);
+		return (ENXIO);
+	}
+
+	return (0);
+}
+
 static int
 ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr,
     enum ufshci_descriptor_type desc_type, uint8_t index, uint8_t selector,
@@ -29,19 +51,10 @@ ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = desc_size;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
+	error = ufshci_dev_send_query(ctrlr, param, &status, __func__);
 	if (error)
 		return (error);
 
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr,
-		    "Failed to send Read Descriptor query request!\n");
-		return (ENXIO);
-	}
-
 	memcpy(desc, status.cpl.response_upiu.query_response_upiu.command_data,
 	    desc_size);
 
@@ -88,18 +101,10 @@ ufshci_dev_read_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
+	error = ufshci_dev_send_query(ctrlr, param, &status, __func__);
 	if (error)
 		return (error);
 
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_read_flag failed!\n");
-		return (ENXIO);
-	}
-
 	*flag = status.cpl.response_upiu.query_response_upiu.flag_value;
 
 	return (0);
@@ -111,7 +116,6 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
-	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_SET_FLAG;
@@ -121,19 +125,7 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
-	if (error)
-		return (error);
-
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_set_flag failed!\n");
-		return (ENXIO);
-	}
-
-	return (0);
+	return (ufshci_dev_send_query(ctrlr, param, &status, __func__));
 }
 
 static int
@@ -142,7 +134,6 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
-	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_CLEAR_FLAG;
@@ -152,19 +143,7 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
-	if (error)
-		return (error);
-
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_clear_flag failed!\n");
-		return (ENXIO);
-	}
-
-	return (0);
+	return (ufshci_dev_send_query(ctrlr, param, &status, __func__));
 }
 
 static int
@@ -184,18 +163,10 @@ ufshci_dev_read_attribute(struct ufshci_controller *ctrlr,
 	param.value = 0;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
+	error = ufshci_dev_send_query(ctrlr, param, &status, __func__);
 	if (error)
 		return (error);
 
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_read_attribute failed!\n");
-		return (ENXIO);
-	}
-
 	*value = be64toh(status.cpl.response_upiu.query_response_upiu.value_64);
 
 	return (0);
@@ -208,7 +179,6 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr,
 {
 	struct ufshci_completion_poll_status status;
 	struct ufshci_query_param param;
-	int error;
 
 	param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST;
 	param.opcode = UFSHCI_QUERY_OPCODE_WRITE_ATTRIBUTE;
@@ -218,19 +188,7 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr,
 	param.value = value;
 	param.desc_size = 0;
 
-	status.done = 0;
-	error = ufshci_ctrlr_cmd_send_query_request(ctrlr,
-	    ufshci_completion_poll_cb, &status, param);
-	if (error)
-		return (error);
-
-	ufshci_completion_poll(&status);
-	if (status.error) {
-		ufshci_printf(ctrlr, "ufshci_dev_write_attribute failed!\n");
-		return (ENXIO);
-	}
-
-	return (0);
+	return (ufshci_dev_send_query(ctrlr, param, &status, __func__));
 }
 
 int