[PATCH] ufs: core: bsg: Add hibern8 enter/exit to ufshcd_send_bsg_uic_cmd

Arthur Simchaev posted 1 patch 11 months, 1 week ago
drivers/ufs/core/ufshcd.c | 10 ++++++++++
1 file changed, 10 insertions(+)
[PATCH] ufs: core: bsg: Add hibern8 enter/exit to ufshcd_send_bsg_uic_cmd
Posted by Arthur Simchaev 11 months, 1 week ago
Eye monitor measurement functionality was added to the M-PHY v5
specification. The measurement of the eye monitor signal for the UFS
device begins when the link enters the hibernate state.
Hence, allow user-layer applications the capability to send the hibern8
enter command through the BSG framework. For completion, allow the
sibling functionality of hibern8 exit as well.

Signed-off-by: Arthur Simchaev <arthur.simchaev@sandisk.com>
---
 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 4e1e214fc5a2..546ab557a77c 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -4366,6 +4366,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);
+		goto out;
+	}
+
 	mutex_lock(&hba->uic_cmd_mutex);
 	ufshcd_add_delay_before_dme_cmd(hba);
 
-- 
2.34.1
Re: [PATCH] ufs: core: bsg: Add hibern8 enter/exit to ufshcd_send_bsg_uic_cmd
Posted by Bean Huo 11 months, 1 week ago
Arthur, 

At present, we lack a user-space tool to initiate eye monitor
measurements. Additionally, opening a channel for users in user land to
send MP commands seems unsafe.


Kind regards,
Bean

On Tue, 2025-03-04 at 13:46 +0200, Arthur Simchaev wrote:
> Eye monitor measurement functionality was added to the M-PHY v5
> specification. The measurement of the eye monitor signal for the UFS
> device begins when the link enters the hibernate state.
> Hence, allow user-layer applications the capability to send the
> hibern8
> enter command through the BSG framework. For completion, allow the
> sibling functionality of hibern8 exit as well.
> 
> Signed-off-by: Arthur Simchaev <arthur.simchaev@sandisk.com>
> ---
>  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 4e1e214fc5a2..546ab557a77c 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -4366,6 +4366,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);
> +               goto out;
> +       }
> +
>         mutex_lock(&hba->uic_cmd_mutex);
>         ufshcd_add_delay_before_dme_cmd(hba);
>  
> --
> 2.34.1
Re: [PATCH] ufs: core: bsg: Add hibern8 enter/exit to ufshcd_send_bsg_uic_cmd
Posted by Can Guo 11 months, 1 week ago
Hi Arthur,

On 3/6/2025 8:50 PM, Bean Huo wrote:
> Arthur,
>
> At present, we lack a user-space tool to initiate eye monitor
> measurements. Additionally, opening a channel for users in user land to
> send MP commands seems unsafe.
>
>
> Kind regards,
> Bean
>
> On Tue, 2025-03-04 at 13:46 +0200, Arthur Simchaev wrote:
>> Eye monitor measurement functionality was added to the M-PHY v5
>> specification. The measurement of the eye monitor signal for the UFS
>> device begins when the link enters the hibernate state.
>> Hence, allow user-layer applications the capability to send the
>> hibern8
>> enter command through the BSG framework. For completion, allow the
>> sibling functionality of hibern8 exit as well.
>>
>> Signed-off-by: Arthur Simchaev <arthur.simchaev@sandisk.com>
>> ---
>>   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 4e1e214fc5a2..546ab557a77c 100644
>> --- a/drivers/ufs/core/ufshcd.c
>> +++ b/drivers/ufs/core/ufshcd.c
>> @@ -4366,6 +4366,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);
>> +               goto out;
>> +       }
>> +
>>          mutex_lock(&hba->uic_cmd_mutex);
>>          ufshcd_add_delay_before_dme_cmd(hba);
>>   
>> --
>> 2.34.1
I can understand that you want to use hibern8 enter&exit to trigger a 
RCT to kick start the EOM,
however there is a better/simpler way to do so: you can trigger a power 
mode change to the
same power mode (e.g., from HS-G5 to HS-G5) to trigger a RCT (without 
invoking hibern8 enter&exit)
from user layer by dme_set(PA_PWRMODE).

FYI, we have open-sourced Qcom's EOM tool in GitHub and validated the 
EOM function on most
UFS4.x devices from UFS vendors, you can find the code for your reference:
https://github.com/quic/ufs-tools/blob/main/ufs-cli/ufs_eom.c#L266

The recent change from Ziqi Chen is to serve the power mode change 
purpose I mentioned above:
https://lore.kernel.org/all/20241212144248.990103107@linuxfoudation.org/

Hope above info can help you.

Thanks,
Can Guo.