drivers/ufs/core/ufshcd.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
This patch adds functionality to allow user-level applications to send
the Hibern8 Enter command via the BSG framework. With this feature,
applications can perform H8 stress tests. Also can be used as one
of the triggers for the Eye monitor measurement feature added to the
M-PHY v5 specification.
For completion, allow the sibling functionality of hibern8 exit as well.
Signed-off-by: Arthur Simchaev <arthur.simchaev@sandisk.com>
---
Changed since v1:
- elaborate commit log
---
drivers/ufs/core/ufshcd.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index be65fc4b5ccd..536b54ccc860 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -4363,6 +4363,16 @@ int ufshcd_send_bsg_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
goto out;
}
+ if (uic_cmd->command == UIC_CMD_DME_HIBER_ENTER) {
+ ret = ufshcd_uic_hibern8_enter(hba);
+ goto out;
+ }
+
+ if (uic_cmd->command == UIC_CMD_DME_HIBER_EXIT) {
+ ret = ufshcd_uic_hibern8_exit(hba, uic_cmd);
+ goto out;
+ }
+
mutex_lock(&hba->uic_cmd_mutex);
ufshcd_add_delay_before_dme_cmd(hba);
--
2.49.0
Hi Arthur,
kernel test robot noticed the following build errors:
[auto build test ERROR on jejb-scsi/for-next]
[also build test ERROR on mkp-scsi/for-next linus/master v6.15-rc2 next-20250415]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Arthur-Simchaev/ufs-bsg-Add-hibern8-enter-exit-to-ufshcd_send_bsg_uic_cmd/20250414-200404
base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link: https://lore.kernel.org/r/20250414120257.247858-1-arthur.simchaev%40sandisk.com
patch subject: [PATCH v2] ufs: bsg: Add hibern8 enter/exit to ufshcd_send_bsg_uic_cmd
config: s390-randconfig-002-20250415 (https://download.01.org/0day-ci/archive/20250415/202504152111.1Huykiqb-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 7.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250415/202504152111.1Huykiqb-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504152111.1Huykiqb-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/ufs/core/ufshcd.c: In function 'ufshcd_send_bsg_uic_cmd':
>> drivers/ufs/core/ufshcd.c:4360:9: error: too many arguments to function 'ufshcd_uic_hibern8_exit'
ret = ufshcd_uic_hibern8_exit(hba, uic_cmd);
^~~~~~~~~~~~~~~~~~~~~~~
In file included from drivers/ufs/core/ufshcd-priv.h:7:0,
from drivers/ufs/core/ufshcd.c:31:
include/ufs/ufshcd.h:1331:5: note: declared here
int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
^~~~~~~~~~~~~~~~~~~~~~~
vim +/ufshcd_uic_hibern8_exit +4360 drivers/ufs/core/ufshcd.c
4331
4332 /**
4333 * ufshcd_send_bsg_uic_cmd - Send UIC commands requested via BSG layer and retrieve the result
4334 * @hba: per adapter instance
4335 * @uic_cmd: UIC command
4336 *
4337 * Return: 0 only if success.
4338 */
4339 int ufshcd_send_bsg_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
4340 {
4341 int ret;
4342
4343 if (hba->quirks & UFSHCD_QUIRK_BROKEN_UIC_CMD)
4344 return 0;
4345
4346 ufshcd_hold(hba);
4347
4348 if (uic_cmd->argument1 == UIC_ARG_MIB(PA_PWRMODE) &&
4349 uic_cmd->command == UIC_CMD_DME_SET) {
4350 ret = ufshcd_uic_pwr_ctrl(hba, uic_cmd);
4351 goto out;
4352 }
4353
4354 if (uic_cmd->command == UIC_CMD_DME_HIBER_ENTER) {
4355 ret = ufshcd_uic_hibern8_enter(hba);
4356 goto out;
4357 }
4358
4359 if (uic_cmd->command == UIC_CMD_DME_HIBER_EXIT) {
> 4360 ret = ufshcd_uic_hibern8_exit(hba, uic_cmd);
4361 goto out;
4362 }
4363
4364 mutex_lock(&hba->uic_cmd_mutex);
4365 ufshcd_add_delay_before_dme_cmd(hba);
4366
4367 ret = __ufshcd_send_uic_cmd(hba, uic_cmd);
4368 if (!ret)
4369 ret = ufshcd_wait_for_uic_cmd(hba, uic_cmd);
4370
4371 mutex_unlock(&hba->uic_cmd_mutex);
4372
4373 out:
4374 ufshcd_release(hba);
4375 return ret;
4376 }
4377
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Arthur,
kernel test robot noticed the following build errors:
[auto build test ERROR on jejb-scsi/for-next]
[also build test ERROR on mkp-scsi/for-next linus/master v6.15-rc2 next-20250415]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Arthur-Simchaev/ufs-bsg-Add-hibern8-enter-exit-to-ufshcd_send_bsg_uic_cmd/20250414-200404
base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
patch link: https://lore.kernel.org/r/20250414120257.247858-1-arthur.simchaev%40sandisk.com
patch subject: [PATCH v2] ufs: bsg: Add hibern8 enter/exit to ufshcd_send_bsg_uic_cmd
config: i386-buildonly-randconfig-004-20250415 (https://download.01.org/0day-ci/archive/20250415/202504152109.JOmreWGE-lkp@intel.com/config)
compiler: clang version 20.1.2 (https://github.com/llvm/llvm-project 58df0ef89dd64126512e4ee27b4ac3fd8ddf6247)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250415/202504152109.JOmreWGE-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504152109.JOmreWGE-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/ufs/core/ufshcd.c:4360:38: error: too many arguments to function call, expected single argument 'hba', have 2 arguments
4360 | ret = ufshcd_uic_hibern8_exit(hba, uic_cmd);
| ~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~
include/ufs/ufshcd.h:1331:5: note: 'ufshcd_uic_hibern8_exit' declared here
1331 | int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
| ^ ~~~~~~~~~~~~~~~~~~~
drivers/ufs/core/ufshcd.c:10342:44: warning: shift count >= width of type [-Wshift-count-overflow]
10342 | if (!dma_set_mask_and_coherent(hba->dev, DMA_BIT_MASK(64)))
| ^~~~~~~~~~~~~~~~
include/linux/dma-mapping.h:73:54: note: expanded from macro 'DMA_BIT_MASK'
73 | #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
| ^ ~~~
1 warning and 1 error generated.
vim +/hba +4360 drivers/ufs/core/ufshcd.c
4331
4332 /**
4333 * ufshcd_send_bsg_uic_cmd - Send UIC commands requested via BSG layer and retrieve the result
4334 * @hba: per adapter instance
4335 * @uic_cmd: UIC command
4336 *
4337 * Return: 0 only if success.
4338 */
4339 int ufshcd_send_bsg_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
4340 {
4341 int ret;
4342
4343 if (hba->quirks & UFSHCD_QUIRK_BROKEN_UIC_CMD)
4344 return 0;
4345
4346 ufshcd_hold(hba);
4347
4348 if (uic_cmd->argument1 == UIC_ARG_MIB(PA_PWRMODE) &&
4349 uic_cmd->command == UIC_CMD_DME_SET) {
4350 ret = ufshcd_uic_pwr_ctrl(hba, uic_cmd);
4351 goto out;
4352 }
4353
4354 if (uic_cmd->command == UIC_CMD_DME_HIBER_ENTER) {
4355 ret = ufshcd_uic_hibern8_enter(hba);
4356 goto out;
4357 }
4358
4359 if (uic_cmd->command == UIC_CMD_DME_HIBER_EXIT) {
> 4360 ret = ufshcd_uic_hibern8_exit(hba, uic_cmd);
4361 goto out;
4362 }
4363
4364 mutex_lock(&hba->uic_cmd_mutex);
4365 ufshcd_add_delay_before_dme_cmd(hba);
4366
4367 ret = __ufshcd_send_uic_cmd(hba, uic_cmd);
4368 if (!ret)
4369 ret = ufshcd_wait_for_uic_cmd(hba, uic_cmd);
4370
4371 mutex_unlock(&hba->uic_cmd_mutex);
4372
4373 out:
4374 ufshcd_release(hba);
4375 return ret;
4376 }
4377
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On 4/14/25 5:02 AM, Arthur Simchaev wrote:
> This patch adds functionality to allow user-level applications to send
> the Hibern8 Enter command via the BSG framework. With this feature,
> applications can perform H8 stress tests. Also can be used as one
> of the triggers for the Eye monitor measurement feature added to the
> M-PHY v5 specification.
> For completion, allow the sibling functionality of hibern8 exit as well.
>
> Signed-off-by: Arthur Simchaev <arthur.simchaev@sandisk.com>
>
> ---
> Changed since v1:
> - elaborate commit log
> ---
> drivers/ufs/core/ufshcd.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index be65fc4b5ccd..536b54ccc860 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -4363,6 +4363,16 @@ int ufshcd_send_bsg_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
> goto out;
> }
>
> + if (uic_cmd->command == UIC_CMD_DME_HIBER_ENTER) {
> + ret = ufshcd_uic_hibern8_enter(hba);
> + goto out;
> + }
> +
> + if (uic_cmd->command == UIC_CMD_DME_HIBER_EXIT) {
> + ret = ufshcd_uic_hibern8_exit(hba, uic_cmd);
> + goto out;
> + }
> +
> mutex_lock(&hba->uic_cmd_mutex);
> ufshcd_add_delay_before_dme_cmd(hba);
This is wrong. The BSG interface shouldn't alter the power state without
informing the SCSI core about these power state changes. Please use
existing sysfs attributes to modify the power state or add new sysfs
attributes if necessary.
Bart.
© 2016 - 2026 Red Hat, Inc.