summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMadhu M <madhu.m@intel.com>2026-06-30 18:54:35 +0530
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-07-08 14:10:44 +0200
commitd9dc19910321957d81fb9d8af4cc67ddbfb258bf (patch)
tree731c5aeaab8793f1eb0d800e0a8c0fc1765e784a
parent227db98088756740645491fe29f8701c164badf6 (diff)
downloadlinux-d9dc19910321957d81fb9d8af4cc67ddbfb258bf.tar.gz
linux-d9dc19910321957d81fb9d8af4cc67ddbfb258bf.zip
usb: typec: ucsi: Fix debugfs response truncation beyond 16 bytes
The current ucsi_data structure inside ucsi_debugfs_entry caps the response payload layout to exactly 16 bytes via low and high 64-bit fields. However, standard UCSI specifications define core data structures that require messages larger than this 16-byte boundary. Without this expansion, vital telemetry metrics cannot be captured. For example, the GET_CONNECTOR_STATUS -> Voltage Reading fields, and the GET_LPM_PPM_INFO -> HW Version fields reside starting at or beyond byte offset 16. Under the current implementation, reading the debugfs 'response' attribute truncates this extra data, rendering these extended operational metrics unreadable. Fix this by expanding the ucsi_data structure with an 'ext' field to provide structural capacity for payloads extending beyond 16 bytes. Update ucsi_resp_show() to print the extended field block directly prepended to the high/low data stream to ensure readability while maintaining structural continuity. Signed-off-by: Madhu M <madhu.m@intel.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://patch.msgid.link/20260630132435.458563-1-madhu.m@intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/typec/ucsi/debugfs.c4
-rw-r--r--drivers/usb/typec/ucsi/ucsi.h1
2 files changed, 3 insertions, 2 deletions
diff --git a/drivers/usb/typec/ucsi/debugfs.c b/drivers/usb/typec/ucsi/debugfs.c
index a124105b6226..77a0dd75edd3 100644
--- a/drivers/usb/typec/ucsi/debugfs.c
+++ b/drivers/usb/typec/ucsi/debugfs.c
@@ -82,8 +82,8 @@ static int ucsi_resp_show(struct seq_file *s, void *not_used)
if (ucsi->debugfs->status)
return ucsi->debugfs->status;
- seq_printf(s, "0x%016llx%016llx\n", ucsi->debugfs->response.high,
- ucsi->debugfs->response.low);
+ seq_printf(s, "0x%016llx%016llx%016llx\n", ucsi->debugfs->response.ext,
+ ucsi->debugfs->response.high, ucsi->debugfs->response.low);
return 0;
}
DEFINE_SHOW_ATTRIBUTE(ucsi_resp);
diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
index 325ed1e5ca80..97bb8892e489 100644
--- a/drivers/usb/typec/ucsi/ucsi.h
+++ b/drivers/usb/typec/ucsi/ucsi.h
@@ -466,6 +466,7 @@ struct ucsi_debugfs_entry {
struct ucsi_data {
u64 low;
u64 high;
+ u64 ext;
} response;
int status;
u8 message_out[MESSAGE_OUT_MAX_LEN];