Date: Wed, 25 Mar 2026 04:46:55 +0000 From: Jaeyoon Choi <jaeyoon@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 085028463fa9 - main - ufshci: add uic powermode parameter to sysctl Message-ID: <69c368bf.38353.5dd1f67c@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by jaeyoon: URL: https://cgit.FreeBSD.org/src/commit/?id=085028463fa92b28939c87d0a14337fc14f394a0 commit 085028463fa92b28939c87d0a14337fc14f394a0 Author: Jaeyoon Choi <jaeyoon@FreeBSD.org> AuthorDate: 2026-03-24 05:14:04 +0000 Commit: Jaeyoon Choi <jaeyoon@FreeBSD.org> CommitDate: 2026-03-24 16:45:31 +0000 ufshci: add uic powermode parameter to sysctl Adds parameters related to the performance of the UFS device. Also update man page for the missing sysctl entries. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D55985 --- share/man/man4/ufshci.4 | 34 +++++++++++++++++++++++++++++++++- sys/dev/ufshci/ufshci_dev.c | 12 +++++++----- sys/dev/ufshci/ufshci_pci.c | 3 +-- sys/dev/ufshci/ufshci_private.h | 3 ++- sys/dev/ufshci/ufshci_sysctl.c | 35 ++++++++++++++++++++++++++++++----- 5 files changed, 73 insertions(+), 14 deletions(-) diff --git a/share/man/man4/ufshci.4 b/share/man/man4/ufshci.4 index d722c9902b98..f9de9b39a449 100644 --- a/share/man/man4/ufshci.4 +++ b/share/man/man4/ufshci.4 @@ -124,9 +124,41 @@ nodes are currently implemented: (R) Host controller minor version. .It Va dev.ufshci.0.major_version (R) Host controller major version. +.It Va dev.ufshci.0.wb_enabled +(R) WriteBooster enable/disable. +.It Va dev.ufshci.0.wb_flush_enabled +(R) WriteBooster flush enable/disable. +.It Va dev.ufshci.0.wb_buffer_type +(R) WriteBooster type. +.It Va dev.ufshci.0.wb_buffer_size_mb +(R) WriteBooster buffer size in MB. +.It Va dev.ufshci.0.wb_user_space_config_option +(R) WriteBooster preserve user space mode. +.It Va dev.ufshci.0.auto_hibernation_supported +(R) Device auto hibernation support. +.It Va dev.ufshci.0.auto_hibernate_idle_timer_value +(R) Auto-Hibernate Idle Timer Value (in microseconds). +.It Va dev.ufshci.0.power_mode_supported +(R) Device power mode support. +.It Va dev.ufshci.0.power_mode +(R) Current device power mode. +.It Va dev.ufshci.0.tx_rx_power_mode +(R) Current TX/RX PA_PWRMode value. +.It Va dev.ufshci.0.max_tx_lanes +(R) Maximum available TX data lanes. +.It Va dev.ufshci.0.max_rx_lanes +(R) Maximum available RX data lanes. +.It Va dev.ufshci.0.tx_lanes +(R) Active TX data lanes. +.It Va dev.ufshci.0.rx_lanes +(R) Active RX data lanes. +.It Va dev.ufshci.0.max_rx_hs_gear +(R) Maximum available RX HS gear. +.It Va dev.ufshci.0.hs_gear +(R) Active HS gear. .It Va dev.ufshci.0.utmrq.num_failures (R) Number of failed UTP task-management requests. -.It Va dev.ufshci.0.utmrq.ioq.num_retries +.It Va dev.ufshci.0.utmrq.num_retries (R) Number of retried UTP task-management requests. .It Va dev.ufshci.0.utmrq.num_intr_handler_calls (R) Number of interrupt handler calls caused by UTP task-management requests. diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c index 3167945b53b6..0fedbca9a90e 100644 --- a/sys/dev/ufshci/ufshci_dev.c +++ b/sys/dev/ufshci/ufshci_dev.c @@ -325,7 +325,7 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr) */ const uint32_t fast_mode = 1; const uint32_t rx_bit_shift = 4; - uint32_t power_mode, peer_granularity; + uint32_t peer_granularity; /* Update lanes with available TX/RX lanes */ if (ufshci_uic_send_dme_get(ctrlr, PA_AvailTxDataLanes, @@ -352,9 +352,11 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr) if (ctrlr->quirks & UFSHCI_QUIRK_CHANGE_LANE_AND_GEAR_SEPARATELY) { /* Before changing gears, first change the number of lanes. */ - if (ufshci_uic_send_dme_get(ctrlr, PA_PWRMode, &power_mode)) + if (ufshci_uic_send_dme_get(ctrlr, PA_PWRMode, + &ctrlr->tx_rx_power_mode)) return (ENXIO); - if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode, power_mode)) + if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode, + ctrlr->tx_rx_power_mode)) return (ENXIO); /* Wait for power mode changed. */ @@ -415,8 +417,8 @@ ufshci_dev_init_uic_power_mode(struct ufshci_controller *ctrlr) return (ENXIO); /* Set TX/RX PWRMode */ - power_mode = (fast_mode << rx_bit_shift) | fast_mode; - if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode, power_mode)) + ctrlr->tx_rx_power_mode = (fast_mode << rx_bit_shift) | fast_mode; + if (ufshci_uic_send_dme_set(ctrlr, PA_PWRMode, ctrlr->tx_rx_power_mode)) return (ENXIO); /* Wait for power mode changed. */ diff --git a/sys/dev/ufshci/ufshci_pci.c b/sys/dev/ufshci/ufshci_pci.c index 606f2a095576..b6b8124bc3a6 100644 --- a/sys/dev/ufshci/ufshci_pci.c +++ b/sys/dev/ufshci/ufshci_pci.c @@ -34,8 +34,7 @@ static device_method_t ufshci_pci_methods[] = { DEVMETHOD(device_attach, ufshci_pci_attach), DEVMETHOD(device_detach, ufshci_pci_detach), DEVMETHOD(device_suspend, ufshci_pci_suspend), - DEVMETHOD(device_resume, ufshci_pci_resume), - DEVMETHOD_END + DEVMETHOD(device_resume, ufshci_pci_resume), DEVMETHOD_END }; static driver_t ufshci_pci_driver = { diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h index 1634cf51c9fb..b25df45d6b75 100644 --- a/sys/dev/ufshci/ufshci_private.h +++ b/sys/dev/ufshci/ufshci_private.h @@ -396,7 +396,8 @@ struct ufshci_controller { /* UFS Interconnect Layer (UIC) */ struct mtx uic_cmd_lock; - uint8_t hs_gear; + uint32_t tx_rx_power_mode; + uint32_t hs_gear; uint32_t tx_lanes; uint32_t rx_lanes; uint32_t max_rx_hs_gear; diff --git a/sys/dev/ufshci/ufshci_sysctl.c b/sys/dev/ufshci/ufshci_sysctl.c index 495f087f3c50..a113e951798e 100644 --- a/sys/dev/ufshci/ufshci_sysctl.c +++ b/sys/dev/ufshci/ufshci_sysctl.c @@ -193,7 +193,7 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr) CTLFLAG_RD, &ctrlr->num_io_queues, 0, "Number of I/O queue pairs"); SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "cap", CTLFLAG_RD, - &ctrlr->cap, 0, "Number of I/O queue pairs"); + &ctrlr->cap, 0, "Host controller capabilities register value"); SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "wb_enabled", CTLFLAG_RD, &dev->is_wb_enabled, 0, "WriteBooster enable/disable"); @@ -214,10 +214,6 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr) &dev->wb_user_space_config_option, 0, "WriteBooster preserve user space mode"); - SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode_supported", - CTLFLAG_RD, &dev->power_mode_supported, 0, - "Device power mode support"); - SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "auto_hibernation_supported", CTLFLAG_RD, &dev->auto_hibernation_supported, 0, @@ -229,9 +225,38 @@ ufshci_sysctl_initialize_ctrlr(struct ufshci_controller *ctrlr) ufshci_sysctl_ahit, "IU", "Auto-Hibernate Idle Timer Value (in microseconds)"); + SYSCTL_ADD_BOOL(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode_supported", + CTLFLAG_RD, &dev->power_mode_supported, 0, + "Device power mode support"); + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "power_mode", CTLFLAG_RD, &dev->power_mode, 0, "Current device power mode"); + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "tx_rx_power_mode", + CTLFLAG_RD, &ctrlr->tx_rx_power_mode, 0, + "Current TX/RX PA_PWRMode value"); + + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "max_tx_lanes", + CTLFLAG_RD, &ctrlr->max_tx_lanes, 0, + "Maximum available TX data lanes"); + + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "max_rx_lanes", + CTLFLAG_RD, &ctrlr->max_rx_lanes, 0, + "Maximum available RX data lanes"); + + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "tx_lanes", CTLFLAG_RD, + &ctrlr->tx_lanes, 0, "Active TX data lanes"); + + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "rx_lanes", CTLFLAG_RD, + &ctrlr->rx_lanes, 0, "Active RX data lanes"); + + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "max_rx_hs_gear", + CTLFLAG_RD, &ctrlr->max_rx_hs_gear, 0, + "Maximum available RX HS gear"); + + SYSCTL_ADD_UINT(ctrlr_ctx, ctrlr_list, OID_AUTO, "hs_gear", CTLFLAG_RD, + &ctrlr->hs_gear, 0, "Active HS gear"); + SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO, "timeout_period", CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, &ctrlr->timeout_period, 0, ufshci_sysctl_timeout_period, "IU",home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69c368bf.38353.5dd1f67c>
