git: e1aa173f8120 - main - ufshci: consolidate the device query submit/poll pattern
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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