RE: [PATCH v4 2/3] scsi: ufs: UFS crypto API

Avri Altman
2020-07-08T07:44:33Z

> +
> +static enum blk_crypto_mode_num
> +ufshcd_find_blk_crypto_mode(union ufs_crypto_cap_entry cap)
> +{
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(ufs_crypto_algs); i++) {
> + BUILD_BUG_ON(UFS_CRYPTO_KEY_SIZE_INVALID != 0);
> + if (ufs_crypto_algs[i].ufs_alg == cap.algorithm_id &&
> + ufs_crypto_algs[i].ufs_key_size == cap.key_size) {
> + return i;
> + }
> + }
> + return BLK_ENCRYPTION_MODE_INVALID;
BLK_ENCRYPTION_MODE_INVALID is 0, but 0 is a valid mode num?

> +}
> +
> +/**
> + * ufshcd_hba_init_crypto_capabilities - Read crypto capabilities, init crypto
> + * fields in hba
> + * @hba: Per adapter instance
> + *
> + * Return: 0 if crypto was initialized or is not supported, else a -errno value.
> + */
> +int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
> +{
> + int cap_idx;
> + int err = 0;
> + enum blk_crypto_mode_num blk_mode_num;
> +
> + /*
> + * Don't use crypto if either the hardware doesn't advertise the
> + * standard crypto capability bit *or* if the vendor specific driver
> + * hasn't advertised that crypto is supported.
> + */
> + if (!(hba->capabilities & MASK_CRYPTO_SUPPORT) ||
> + !(hba->caps & UFSHCD_CAP_CRYPTO))
> + goto out;
> +
> + hba->crypto_capabilities.reg_val =
> + cpu_to_le32(ufshcd_readl(hba, REG_UFS_CCAP));
> + hba->crypto_cfg_register =
> + (u32)hba->crypto_capabilities.config_array_ptr * 0x100;
This deserve a comment, e.g.
UFSHCI says:
The address for entry x of the x-CRYPTOCFG array is calculated as follows:
ADDR (x-CRYPTOCFG) = UFS_HCI_BASE + CFGPTR*100h + x*80h