Lines Matching full:hba
20 static void ufshcd_program_key(struct ufs_hba *hba, in ufshcd_program_key() argument
24 u32 slot_offset = hba->crypto_cfg_register + slot * sizeof(*cfg); in ufshcd_program_key()
26 ufshcd_hold(hba); in ufshcd_program_key()
29 ufshcd_writel(hba, 0, slot_offset + 16 * sizeof(cfg->reg_val[0])); in ufshcd_program_key()
31 ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[i]), in ufshcd_program_key()
35 ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[17]), in ufshcd_program_key()
38 ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[16]), in ufshcd_program_key()
40 ufshcd_release(hba); in ufshcd_program_key()
47 struct ufs_hba *hba = ufs_hba_from_crypto_profile(profile); in ufshcd_crypto_keyslot_program() local
48 const union ufs_crypto_cap_entry *ccap_array = hba->crypto_cap_array; in ufshcd_crypto_keyslot_program()
57 for (i = 0; i < hba->crypto_capabilities.num_crypto_cap; i++) { in ufshcd_crypto_keyslot_program()
82 ufshcd_program_key(hba, &cfg, slot); in ufshcd_crypto_keyslot_program()
92 struct ufs_hba *hba = ufs_hba_from_crypto_profile(profile); in ufshcd_crypto_keyslot_evict() local
99 ufshcd_program_key(hba, &cfg, slot); in ufshcd_crypto_keyslot_evict()
107 bool ufshcd_crypto_enable(struct ufs_hba *hba) in ufshcd_crypto_enable() argument
109 if (!(hba->caps & UFSHCD_CAP_CRYPTO)) in ufshcd_crypto_enable()
113 blk_crypto_reprogram_all_keys(&hba->crypto_profile); in ufshcd_crypto_enable()
115 if (hba->quirks & UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE) in ufshcd_crypto_enable()
143 * fields in hba
144 * @hba: Per adapter instance
148 int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba) in ufshcd_hba_init_crypto_capabilities() argument
154 if (hba->quirks & UFSHCD_QUIRK_CUSTOM_CRYPTO_PROFILE) in ufshcd_hba_init_crypto_capabilities()
162 if (!(hba->capabilities & MASK_CRYPTO_SUPPORT) || in ufshcd_hba_init_crypto_capabilities()
163 !(hba->caps & UFSHCD_CAP_CRYPTO)) in ufshcd_hba_init_crypto_capabilities()
166 hba->crypto_capabilities.reg_val = in ufshcd_hba_init_crypto_capabilities()
167 cpu_to_le32(ufshcd_readl(hba, REG_UFS_CCAP)); in ufshcd_hba_init_crypto_capabilities()
168 hba->crypto_cfg_register = in ufshcd_hba_init_crypto_capabilities()
169 (u32)hba->crypto_capabilities.config_array_ptr * 0x100; in ufshcd_hba_init_crypto_capabilities()
170 hba->crypto_cap_array = in ufshcd_hba_init_crypto_capabilities()
171 devm_kcalloc(hba->dev, hba->crypto_capabilities.num_crypto_cap, in ufshcd_hba_init_crypto_capabilities()
172 sizeof(hba->crypto_cap_array[0]), GFP_KERNEL); in ufshcd_hba_init_crypto_capabilities()
173 if (!hba->crypto_cap_array) { in ufshcd_hba_init_crypto_capabilities()
180 hba->dev, &hba->crypto_profile, in ufshcd_hba_init_crypto_capabilities()
181 hba->crypto_capabilities.config_count + 1); in ufshcd_hba_init_crypto_capabilities()
185 hba->crypto_profile.ll_ops = ufshcd_crypto_ops; in ufshcd_hba_init_crypto_capabilities()
187 hba->crypto_profile.max_dun_bytes_supported = 8; in ufshcd_hba_init_crypto_capabilities()
188 hba->crypto_profile.key_types_supported = BLK_CRYPTO_KEY_TYPE_RAW; in ufshcd_hba_init_crypto_capabilities()
189 hba->crypto_profile.dev = hba->dev; in ufshcd_hba_init_crypto_capabilities()
195 for (cap_idx = 0; cap_idx < hba->crypto_capabilities.num_crypto_cap; in ufshcd_hba_init_crypto_capabilities()
197 hba->crypto_cap_array[cap_idx].reg_val = in ufshcd_hba_init_crypto_capabilities()
198 cpu_to_le32(ufshcd_readl(hba, in ufshcd_hba_init_crypto_capabilities()
202 hba->crypto_cap_array[cap_idx]); in ufshcd_hba_init_crypto_capabilities()
204 hba->crypto_profile.modes_supported[blk_mode_num] |= in ufshcd_hba_init_crypto_capabilities()
205 hba->crypto_cap_array[cap_idx].sdus_mask * 512; in ufshcd_hba_init_crypto_capabilities()
212 hba->caps &= ~UFSHCD_CAP_CRYPTO; in ufshcd_hba_init_crypto_capabilities()
218 * @hba: Per adapter instance
220 void ufshcd_init_crypto(struct ufs_hba *hba) in ufshcd_init_crypto() argument
224 if (!(hba->caps & UFSHCD_CAP_CRYPTO)) in ufshcd_init_crypto()
228 for (slot = 0; slot < hba->crypto_profile.num_slots; slot++) in ufshcd_init_crypto()
229 hba->crypto_profile.ll_ops.keyslot_evict(&hba->crypto_profile, in ufshcd_init_crypto()
233 void ufshcd_crypto_register(struct ufs_hba *hba, struct request_queue *q) in ufshcd_crypto_register() argument
235 if (hba->caps & UFSHCD_CAP_CRYPTO) in ufshcd_crypto_register()
236 blk_crypto_register(&hba->crypto_profile, q); in ufshcd_crypto_register()