RE: [PATCH v3 3/6] scsi: ufs: core: Add UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Eric Biggers <ebiggers@xxxxxxxxxx>
> Sent: Tuesday, July 9, 2024 5:23 AM
> To: linux-scsi@xxxxxxxxxxxxxxx
> Cc: linux-samsung-soc@xxxxxxxxxxxxxxx; linux-fscrypt@xxxxxxxxxxxxxxx; Alim
> Akhtar <alim.akhtar@xxxxxxxxxxx>; Avri Altman <avri.altman@xxxxxxx>;
> Bart Van Assche <bvanassche@xxxxxxx>; Martin K . Petersen
> <martin.petersen@xxxxxxxxxx>; Peter Griffin <peter.griffin@xxxxxxxxxx>;
> André Draszik <andre.draszik@xxxxxxxxxx>; William McVicker
> <willmcvicker@xxxxxxxxxx>
> Subject: [PATCH v3 3/6] scsi: ufs: core: Add
> UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE
> 
> From: Eric Biggers <ebiggers@xxxxxxxxxx>
> 
> Add UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE which tells the UFS core to
> not use the crypto enable bit defined by the UFS specification.  This is
> needed to support inline encryption on the "Exynos" UFS controller.
> 
> Reviewed-by: Bart Van Assche <bvanassche@xxxxxxx>
> Reviewed-by: Peter Griffin <peter.griffin@xxxxxxxxxx>
> Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx>
> ---
Reviewed-by: Alim Akhtar <alim.akhtar@xxxxxxxxxxx>

>  drivers/ufs/core/ufshcd-crypto.c | 8 ++++++++
>  include/ufs/ufshcd.h             | 7 +++++++
>  2 files changed, 15 insertions(+)
> 
> diff --git a/drivers/ufs/core/ufshcd-crypto.c b/drivers/ufs/core/ufshcd-
> crypto.c
> index b4980fd91cee..a714dad82cd1 100644
> --- a/drivers/ufs/core/ufshcd-crypto.c
> +++ b/drivers/ufs/core/ufshcd-crypto.c
> @@ -108,17 +108,25 @@ static int ufshcd_crypto_keyslot_evict(struct
> blk_crypto_profile *profile,
>  	union ufs_crypto_cfg_entry cfg = {};
> 
>  	return ufshcd_program_key(hba, &cfg, slot);  }
> 
> +/*
> + * Reprogram the keyslots if needed, and return true if
> +CRYPTO_GENERAL_ENABLE
> + * should be used in the host controller initialization sequence.
> + */
>  bool ufshcd_crypto_enable(struct ufs_hba *hba)  {
>  	if (!(hba->caps & UFSHCD_CAP_CRYPTO))
>  		return false;
> 
>  	/* Reset might clear all keys, so reprogram all the keys. */
>  	blk_crypto_reprogram_all_keys(&hba->crypto_profile);
> +
> +	if (hba->quirks & UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE)
> +		return false;
> +
>  	return true;
>  }
> 
>  static const struct blk_crypto_ll_ops ufshcd_crypto_ops = {
>  	.keyslot_program	= ufshcd_crypto_keyslot_program,
> diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h index
> b354a7eee478..4b7ad23a4420 100644
> --- a/include/ufs/ufshcd.h
> +++ b/include/ufs/ufshcd.h
> @@ -650,10 +650,17 @@ enum ufshcd_quirks {
>  	 * nonstandard way and/or needs to override blk_crypto_ll_ops.  If
>  	 * enabled, the standard code won't initialize the blk_crypto_profile;
>  	 * ufs_hba_variant_ops::init() must do it instead.
>  	 */
>  	UFSHCD_QUIRK_CUSTOM_CRYPTO_PROFILE		= 1 << 22,
> +
> +	/*
> +	 * This quirk needs to be enabled if the host controller supports inline
> +	 * encryption but does not support the CRYPTO_GENERAL_ENABLE
> bit, i.e.
> +	 * host controller initialization fails if that bit is set.
> +	 */
> +	UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE		= 1 << 23,
>  };
> 
>  enum ufshcd_caps {
>  	/* Allow dynamic clk gating */
>  	UFSHCD_CAP_CLK_GATING				= 1 << 0,
> --
> 2.45.2








[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux for Synopsys ARC Processors]    
  • [Linux on Unisoc (RDA Micro) SoCs]     [Linux Actions SoC]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  •   Powered by Linux