[PATCH] ufs: Fix wrong bitfield usage for Data Direction in Transfer Request
    Neil Armstrong 
    neil.armstrong at linaro.org
       
    Fri Oct 10 16:38:47 CEST 2025
    
    
  
On 10/10/25 04:45, Kunihiko Hayashi wrote:
> Commit d232d7fdbf6f ("ufs: core: sync ufshci.h with Linux v6.12") updated
> the Data Direction values from bitmask values to simple enumerations.
> 
> Before:
>      enum {
>          UTP_NO_DATA_TRANSFER    = 0x00000000,
>          UTP_HOST_TO_DEVICE      = 0x02000000,
>          UTP_DEVICE_TO_HOST      = 0x04000000,
>      };
> 
> Updated:
>      enum utp_data_direction {
>          UTP_NO_DATA_TRANSFER    = 0,
>          UTP_HOST_TO_DEVICE      = 1,
>          UTP_DEVICE_TO_HOST      = 2,
>      };
> 
> However, the U-Boot code still uses these values directly without shifting,
> and resulting in wrong bitfield placement in the Transfer Request
> Descriptor.
> 
> This fixes the issue by applying the necessary shift to align the value.
> 
> Fixes: d232d7fdbf6f ("ufs: core: sync ufshci.h with Linux v6.12")
> Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko at socionext.com>
> ---
>   drivers/ufs/ufs.c | 3 ++-
>   drivers/ufs/ufs.h | 3 +++
>   2 files changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/ufs/ufs.c b/drivers/ufs/ufs.c
> index 91f6ad3bfef9..b224388229a4 100644
> --- a/drivers/ufs/ufs.c
> +++ b/drivers/ufs/ufs.c
> @@ -746,7 +746,8 @@ static void ufshcd_prepare_req_desc_hdr(struct ufs_hba *hba,
>   		*upiu_flags = UPIU_CMD_FLAGS_NONE;
>   	}
>   
> -	dword_0 = data_direction | (0x1 << UPIU_COMMAND_TYPE_OFFSET);
> +	dword_0 = (data_direction << UPIU_DATA_DIRECTION_OFFSET)
> +		| (0x1 << UPIU_COMMAND_TYPE_OFFSET);
>   
>   	/* Enable Interrupt for command */
>   	dword_0 |= UTP_REQ_DESC_INT_CMD;
> diff --git a/drivers/ufs/ufs.h b/drivers/ufs/ufs.h
> index 53137fae3a81..cf11be3e0b46 100644
> --- a/drivers/ufs/ufs.h
> +++ b/drivers/ufs/ufs.h
> @@ -77,6 +77,9 @@ enum {
>   /* UTP Transfer Request Command Offset */
>   #define UPIU_COMMAND_TYPE_OFFSET	28
>   
> +/* UTP Transfer Request Data Direction Offset */
> +#define UPIU_DATA_DIRECTION_OFFSET	25
> +
>   /* Offset of the response code in the UPIU header */
>   #define UPIU_RSP_CODE_OFFSET		8
>   
Reviewed-by: Neil Armstrong <neil.armstrong at linaro.org>
    
    
More information about the U-Boot
mailing list